Skip to content

feat!: adopt atelier's single central-tabs primitive#276

Merged
samuelstroschein merged 10 commits into
mainfrom
claude/central-tabs-adoption
Jul 21, 2026
Merged

feat!: adopt atelier's single central-tabs primitive#276
samuelstroschein merged 10 commits into
mainfrom
claude/central-tabs-adoption

Conversation

@samuelstroschein

@samuelstroschein samuelstroschein commented Jul 21, 2026

Copy link
Copy Markdown
Member

Adopts atelier's new single central-panel primitive (opral/atelier#60): the central panel is now always browser-style tabs. Per the final API shape, hosts that configure no centralPanel.home — FlashType — keep the Files view in the left sidebar (open by default on fresh state): documents open as central tabs, there is no pinned center tab, and closing the last tab shows the central empty state ("Start writing").

Important

BLOCKED on opral/atelier#60 merging. The submodule/atelier pointer targets commit 207d18e8d84f4e1bf6c0ad8fdf5259840527a3c5 on the central-panel-embedding branch. The CI step "Validate submodule branches" requires the pinned sha to be reachable from atelier origin/main, so it will fail until atelier#60 merges. After the merge, bump the pointer to the merge commit and this PR becomes mergeable.

The branch is based on the current main (aba390a) — main has not moved since, so no rebase was needed; the file-picker/strip UX parity work came in atelier-side via the submodule bumps.

Behavior changes (UI-visible)

  • Documents now open as browser-style tabs in the central panel (previously a single document slot). The Files sidebar, central empty state, and draft flow stay as they were.
  • The Files tree is now atelier's bundled view (colored file-type glyphs, virtualized tree, active-document auto-reveal) instead of FlashType's fork — see "Files tree consolidation" below.
  • The checkpoint feature is removed entirely, mirroring upstream atelier's removal (Remove checkpoint implementation atelier#59, pulled in by this submodule bump): the History panel (checkpoint list, create/rename/switch/delete), agent-generated checkpoint names, checkpoint-diff viewing, and checkpoint file markings are all gone. The shared lix branch plumbing (createBranch/switchBranch/syncDiskToLix client APIs, the lix_workspace_branch_id active-branch key used by agent review and editors) stays.

What changed

Central tabs adoption

  • submodule/atelier: c5d8a35207d18e (central-panel-embedding tip: always-tabs central panel; pinned home only when configured; Files sidebar-only; strip UX parity; host watched-files data source).
  • src/main.tsx: dropped filesViewMode: "sidebar" — the option is fully derived by atelier now.
  • pnpm-lock.yaml: additive update for the new atelier deps (excalidraw, mermaid, etc.).

Files tree consolidation

  • Deleted the ~5,450-line files-extension fork (src/extensions/files/: view, file tree, tree builder, host extension, tests) plus the now-dead src/queries.ts and the fork-only ExtensionContext/WorkspaceContext/PanelSide types. Atelier's bundled Files extension takes over (hosts that register no replacement get it by default). Net delta of the consolidation commit: +110 / −5,679 lines.
  • Review overlays are native: the bundled view computes pending external-write-review paths itself (agent-review e2e passes unchanged). FlashType doesn't tag review ranges with session ids, so no reviewRangeSessionId wiring was needed.
  • Deletion-closes-tab is native: the bundled view wires closeFileViews → documents.close(path) itself, superseding the host-side fix from earlier in this PR.
  • Transient-workspace watched files relocated host-side to src/lib/atelier-files-view.ts via atelier's new createAtelier({ filesView }) options (207d18e): watchEntries bridges workspace.setEphemeralWatchedDirectories({ownerId, paths: expandedDirectories}) + the onEphemeralWatchedFileTreeChanged subscription, and resolveFileForInteraction does the lix lookup → importFilesystemPaths → canonical-id import on first open/rename. Only ephemeral workspaces pass filesView.
  • e2e: one adjustment — the bundled tree auto-reveals (expands) the active document's directory, so the grouped-transient-workspace test no longer clicks that directory (the click would collapse it); all other selectors held (data-item-* attributes are a superset of the fork's).

Checkpoint removal (mirrors atelier#59)

  • Deleted: src/extensions/history/ (the checkpoint UI), electron/checkpoint-name.mjs (+test, IPC handler, preload method, types), src/shell/checkpoint-diff.ts (+test), src/extension-runtime/checkpoint-diff.ts, e2e/branch-switcher.spec.ts (all four tests exercised checkpoint UI/diffs) and the history e2e helper.
  • Stripped checkpoint branches from: the legacy MarkdownView/CsvView (checkpoint-diff rendering; commit-snapshot/diff modes stay — they back agent-review rendering), the top bar (isReviewingCheckpoint badge), editor-revision-state (checkpoint state keys).
  • Kept deliberately: lix branch plumbing (createBranch/switchBranch/syncDiskToLix, the lix_workspace_branch_id active-branch key) — agent review, the tip-tap editor, and workspace machinery read them; agent-review machinery (external-write-review*, agent-turn-review-range) is a separate feature and untouched.

Verification

  • pnpm run typecheck — clean
  • pnpm run test — 461 passed, 1 skipped (fork + checkpoint tests deleted)
  • pnpm run build (incl. atelier submodule build) — clean
  • pnpm run lint / prettier — only pre-existing findings
  • Electron e2e run locally headless at the final shape: agent-review (review overlay renders on the bundled tree), files-click-tour 2/2, workspace-switch, headless-launch, workspace-windows 16/16 — including the transient-workspace tests that surface watched disk files through the new filesView bridge

After atelier#60 merges

cd submodule/atelier && git fetch origin main && git checkout <merge-commit>, commit the pointer bump; the submodule-branch validation then passes.

🤖 Generated with Claude Code

Bumps submodule/atelier to 4396919 (central-panel-embedding): the
central panel is now always browser-style tabs with a pinned home.
FlashType configures no custom home, so the Files view becomes the
pinned home tab — documents open as content tabs beside it and closing
the last content tab lands back on Files.

- drop filesViewMode: "sidebar" (derived by atelier now; a no-op)
- closeFileViews closes by path via the new documents.close(path) so
  deleting a file also closes its background tab (the tree lives in the
  pinned home tab, so the doc view is rarely active during deletion)
- drop the revisions wiring deleted upstream by atelier#59 (checkpoint
  removal): history view props, checkpointBranchId, atelier_history
  builtin id; local types keep the optional diff-viewer props compilable
- e2e: ensureFilesViewOpenInLeftPanel -> ensureFilesHomeTabActive; the
  single-central-document invariant becomes "pinned Files home first,
  one active document content tab beside it"; tree interactions
  re-activate the home tab; the central empty state is gone (landing on
  the Files home instead); the two checkpoint-diff tests are skipped
  with pointers to atelier#59
- unit mocks: documents.close added, revisions removed, closeFileViews
  assertions carry filePath
- pnpm-lock: additive update for new atelier deps

BLOCKED on opral/atelier#60 — the submodule pointer targets the
central-panel-embedding branch, so the submodule-branch validation in CI
fails until it merges; bump to the merge commit afterwards.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 21, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
flashtype-website fd05f72 Commit Preview URL

Branch Preview URL
Jul 21 2026, 09:39 PM

@blacksmith-sh

blacksmith-sh Bot commented Jul 21, 2026

Copy link
Copy Markdown

Found 1 test failure on Blacksmith runners:

Failure

Test View Logs
e2e/
packaged-macos.spec.ts:101:1 › packaged app launches, seeds, and opens files without Vi
te ─
View Logs

Fix in Cursor

samuelstroschein and others added 9 commits July 21, 2026 15:03
Atelier removed its checkpoint implementation upstream (opral/atelier#59,
pulled in by the central-tabs submodule bump); FlashType mirrors that
removal instead of keeping a dormant, half-working feature.

Deleted:
- src/extensions/history/ — the checkpoint UI (list, create, rename,
  switch, delete) and its registration
- electron/checkpoint-name.mjs (+test), the
  terminal:generateCheckpointName IPC handler, preload method, and
  DesktopGenerateCheckpointName* types
- src/shell/checkpoint-diff.ts (+test) and
  src/extension-runtime/checkpoint-diff.ts
- e2e/branch-switcher.spec.ts — all four tests exercised checkpoint
  UI or checkpoint diffs (incl. the two previously skipped)

Stripped checkpoint branches from the Files view (checkpoint-diff
virtual tree, checkpointBranchId/checkpointDiff context, the
"checkpoint-diff" entry source), the file tree (reviewStatuses map,
"recreated" status styling), the legacy MarkdownView/CsvView
(checkpoint-diff rendering; commit-snapshot/diff modes stay), the top
bar (isReviewingCheckpoint badge), and editor-revision-state
(checkpoint state keys).

Kept: shared lix branch plumbing (createBranch/switchBranch/
syncDiskToLix, the lix_workspace_branch_id active-branch key) and the
agent-review machinery — separate features that read them.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Picks up the built-in strip UX parity (file-type glyphs, no active
ring) and the central + removal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Bumps submodule/atelier to c8c9a58 (central-panel-embedding tip):
pinned home only when configured. FlashType passes no centralPanel.home,
so the Files view lives in the left sidebar (open by default on fresh
state), the central panel is tabs of documents only, and closing the
last tab shows the central empty state again.

Restores the e2e specs to their origin/main shape — the sidebar-Files
assumptions (tree visible beside documents, "Start writing" empty
state, in-place tab navigation) hold again under the tab model — minus
the deleted checkpoint helper. The documents.close(path) deletion fix
stays.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…les view

Bumps submodule/atelier to 207d18e, which adds the host watched-files
data source (createAtelier filesView options), and deletes FlashType's
~5,450-line files-extension fork — it existed to surface watcher-backed
disk files for transient workspaces, which the bundled view now covers.

- src/lib/atelier-files-view.ts relocates the transient-workspace
  machinery: watchEntries bridges setEphemeralWatchedDirectories
  (keyed to the tree's expanded directories) plus the
  onEphemeralWatchedFileTreeChanged subscription, and
  resolveFileForInteraction imports a watched path into lix before
  open/rename. Only ephemeral workspaces pass filesView.
- Review overlays and deletion-closes-tab are native to the bundled
  view (it computes pending review paths itself and closes by path),
  so no host wiring remains.
- Deletes src/extensions/files/*, the fork-only ExtensionContext/
  WorkspaceContext/PanelSide types, and the dead src/queries.ts.
- e2e: the bundled tree auto-reveals the active document's directory,
  so the grouped-transient-workspace test no longer clicks it (the
  click would collapse it); all other selectors held.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adding Files from a side panel focuses the left sidebar; closing the
last removable side view leaves the empty state instead of collapsing
the island.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The right panel's add-view menu no longer offers Files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
atelier#60 merged; the pointer moves to the squash commit on main.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@samuelstroschein
samuelstroschein marked this pull request as ready for review July 21, 2026 21:38
@samuelstroschein
samuelstroschein merged commit 5a0a544 into main Jul 21, 2026
3 of 4 checks passed
@samuelstroschein
samuelstroschein deleted the claude/central-tabs-adoption branch July 21, 2026 21:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant