Docs

Vertical Right-Dock Tabs — Delivery Notes

Delivery summary for replacing ADR-0008 (tree-view↔tab sync) with a simpler, browser-native vertical tab-list panel in the right dock that mirrors the main (center) view’s open tabs. For the decision record, read ADR-0012; this note says what changed and where.

Status

Implemented. Two parts: a full removal of ADR-0008, and a new opt-in panel.

PieceState
Remove tree-view sync + .url reverse-map + toggle (tranquil-config)✅ done
Remove center-cycle commands (tranquil-automations)✅ done
Revert ctrl-tabpane:show-next-item in the 3 client keymaps✅ done
Remove ⌥⌘W close-and-trash, reopen-restore, command + keymaps (tranquil-browser)✅ done
Remove browser-tab drop-to-.url path (tranquil-drag-drop)✅ done
VerticalTabsView right-dock panel + config/command wiring (tranquil-automations)✅ built
Row icons: favicon (browser) + tree-view file octicon (atom.file-icons service)✅ built
Labels: live page <title> + per-URI cache; title/favIcon persisted on the browser model✅ built
Draggable to any dock/center; toggle always reveals the pane✅ built
Default the Settings pane to the Tranquil tab + pin it to the top (tranquil-config)✅ built
Panel styling via ui-variables (styles/tranquil-automations.less)✅ built

Note. A first pass styled the right dock’s own native tab bar vertically (a config-toggled body class + CSS). That was the wrong reading — it makes the dock’s tabs vertical, not a navigator for the center. It was reverted and replaced with the mirror-view panel below.

Not yet verified in-app. All of this is compile-/parse-checked only; a live GUI pass is pending (the dev launcher couldn’t be driven this session — see the background app launch blocker).

Why this shape

ADR-0008 spread one idea — “the tree acts like a tab list” — across five packages and leaned on tree-view internals. The real want is the browser one: see the main view’s open tabs in a vertical list down the side, content staying center. So the panel is a navigator, not a second editor.

It’s a plain workspace item with getDefaultLocation() === 'right', so it drops into the dock and the reload/restore machinery for free — no third-party (tabs) code touched.

What was removed (ADR-0008)

  • tranquil-config.url reverse-map (buildUrlIndex/resolveUrlFile), patchTreeViewKeepSelection, the autoReveal/focusOnReveal defaults, the tranquil-config:toggle-tree-view-sync command, and menus/tranquil-config.json. Kept the unrelated patchTreeViewNoHorizontalScroll.
  • tranquil-automations — the cycle-{next,previous}-center-tab commands.
  • tranquil-client — reverted ctrl-tab/ctrl-shift-tab to pane:show-next-item / pane:show-previous-item (ADR-0006) in keymaps/{darwin,linux,win32}.cson.
  • tranquil-browser_trashedUrlFiles, closeTabAndTrashUrl, the reopen-restore onDidAddPaneItem observer, the close-tab-and-delete-url command, the ⌥⌘W keyHandler branch, and the two alt-cmd-w/ctrl-alt-w keymaps. Kept the filePath plumbing — the core .url open/save system depends on it.
  • tranquil-drag-drop — the browser-tab saveUrlToTree path and its now-dead helpers. Kept file-tab drop-to-copy and entry copy/move + undo, none of which were ADR-0008.

What shipped & where

  • tranquil-automations/lib/vertical-tabs-view.jsVerticalTabsView, a workspace item (URI = 'tranquil-automations://vertical-tabs'). Renders the center’s active pane’s items as <li class="tranquil-vertical-tab"> rows (title · unsaved dot · hover close). Row click → pane.activateItem(item) + pane.activate(); close → pane.destroyItem(item). Re-renders off the pane’s onDidAddItem/onDidRemoveItem/onDidMoveItem/onDidChangeActiveItem and each item’s onDidChangeTitle/onDidChangeModified; re-watches on center.observeActivePane.
  • tranquil-automations/lib/tranquil-automations.js — registers the deserializer + an addOpener for the URI, a showVerticalTabs boolean config (default off), a config.observe that opens/closes the panel to match, and a tranquil-automations:toggle-vertical-tabs command that flips the config.
  • tranquil-automations/styles/tranquil-automations.less.tranquil-vertical-tabs list styling using inherit + neutral rgba(127,127,127,…) overlays (the business themes don’t export ui-variables), with background: transparent !important on the close button to beat the theme’s button rule.

How to use

  • Toggle Show Vertical Tab List (Right Dock) in Settings → Packages → tranquil-automations, or run Tabs: Toggle Vertical Tab List from the command palette. Both flip the same persisted config, and the panel restores on reload.

Constraints & caveats

  • Active pane only. The list reflects the center’s active pane, so under a split it follows the focused side rather than showing every pane at once. Extendable later.
  • No drag-reorder yet. Click-to-activate and close only for v1; the list is owned code, so reordering can be added without third-party constraints.

Verify

Reload, enable the setting (or run the command) → a Tabs panel appears in the right dock listing the main view’s open tabs. Clicking a row activates that tab in the center; the close button removes it; opening/closing/renaming center tabs updates the list live. Also confirm the ADR-0008 removals: ctrl-tab cycles positionally with no MRU popup, and no “Tree View: Toggle File Sync” / “…center tab” commands remain.