Skip to content

(workspace-morph) File queue as a companion tab behind the image viewer in Review#243

Merged
krissen merged 6 commits into
devfrom
feature/queue-as-main-tab
Jul 17, 2026
Merged

(workspace-morph) File queue as a companion tab behind the image viewer in Review#243
krissen merged 6 commits into
devfrom
feature/queue-as-main-tab

Conversation

@krissen

@krissen krissen commented Jul 17, 2026

Copy link
Copy Markdown
Owner

Summary

Owner decision from the visual pass: the Review step should not devote a permanent column to the file queue.

  • The Review step is now review-module (15) | main tabset (85) where the main tabset holds Bildvisare (active) and Filkö as tabs. The queue is out of sight by default but one click/Cmd+Shift+U away.
  • Spec/morph/step-memory support for tab groups (a pane can be {tabs, active, weight}) — built minimally for exactly this shape, not general 2D nesting. Idempotent fast-path recognizes the group form (the queue triggers enterStep('review') on every file load, so no churn).
  • Hidden-mount invariant: keepMounted modules get enableRenderOnDemand:false even as a hidden group tab; a headless mount test proves the queue stays mounted, keeps state, and keeps reacting to events behind the viewer.
  • n/p shortcuts re-gated from visible to mounted-and-not-parked, so next/prev file keep working while the viewer tab is on top (inert when another step parks the queue). Resolves the long-standing ROADMAP companion-model item. Loading an image auto-raises the viewer tab if hidden.
  • One-time migration reshapes an existing saved three-column Review memory into the companion form (preserves review-module tweaks).

Testing

krissen added 5 commits July 18, 2026 00:02
Extend the pane-spec format so a step column can be a tab GROUP
({ tabs, active, weight }) rather than only a single module, and teach the
morph engine to build/diff grouped columns non-destructively (preserved node
ids, idempotent fast path, keepMounted tabs pinned to enableRenderOnDemand:false
so a hidden companion stays mounted). Per-step memory snapshots and restores
grouped tabs incl. the active tab, and a one-time migrateReviewMemoryShape folds
an old three-column review memory into the new companion-tab form.
…ace viewer on load

Wire migrateReviewMemoryShape into workspace init so existing installs adopt the
new review default, and surface the Image Viewer tab on image-loaded when it is
hidden behind the File Queue companion tab (programmatic selectTab, no DOM-focus
steal) so a queue-driven load is always shown.
…es being the hidden companion tab

The queue's n/p (next/previous file) were gated on tab visibility, which breaks
the owner's primary review gesture the moment the Image Viewer tab is raised over
the hidden File Queue companion. Gate n/p on mounted-and-not-parked (parent is a
tabset, not a background border) instead; a queue parked under a different step
stays inert. Focus-dependent keys (Cmd+F, Cmd+A, /) remain visibility-gated.
…p gate, memory migration

Update the review-shape assertions to the new review-module | [image-viewer,
file-queue] form, and add coverage for the pane-shape helpers, grouped-column
build/idempotence, the hidden File-Queue staying mounted (React mount level), the
mounted-not-parked n/p gate, grouped-tab snapshot/restore and
migrateReviewMemoryShape.
…mpanion invariant

CHANGELOG Changed entry; ROADMAP marks the n/p companion-gate item done;
ux-principles gains navigation rule 9 (companion drivers stay mounted, keys gate
on mounted-not-parked, surface the partner on load) and a grouped-tabs memory
note; workspace-guide describes the new Granska layout, Cmd+Shift+U and n/p.
@krissen krissen added the enhancement New feature or request label Jul 17, 2026
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

Extract the inline image-loaded effect body into a behavior-neutral pure helper
revealHiddenModuleTab(model, moduleId) in workspaceMorph.js (selects a module's
tab only when it is hidden behind another tab in a real tabset) and call it from
the workspace effect, so the behavior is unit-testable. Add two rendered-Layout
tests: (a) viewer hidden behind the File Queue tab is surfaced on image-loaded;
(b) an already-visible viewer is a no-op (no extra selectTab).
@krissen
krissen merged commit 4f262cf into dev Jul 17, 2026
2 checks passed
@krissen
krissen deleted the feature/queue-as-main-tab branch July 17, 2026 22:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant