3.2 KiB
3.2 KiB
id, title, status, wave, depends_on, plan, spec
| id | title | status | wave | depends_on | plan | spec |
|---|---|---|---|---|---|---|
| 01-atomic-session-handoff | Make shared-environment session handoff atomic | done | 1 | plan.md | ../../specs/ui/requirements/task-layout-profiles.md |
Task 01: Make Shared-Environment Session Handoff Atomic
Acceptance
- Switching between tasks in the same environment adds the incoming task's session panel to the outgoing session panel's group and tab index before closing the outgoing panel.
- Closing the outgoing task's final session panel cannot destroy the center group or change the Dockview root orientation.
- The existing active-panel policy is preserved when Files, Changes, or another non-session panel is active.
- Stale session panels are removed, the incoming session panel is unique, and existing cross-environment restoration behavior remains unchanged.
- Reloading after the task switch restores the same healthy horizontal-root layout and right-column vertical split.
TDD Sequence
- RED: add a session-tabs unit regression whose fake Dockview destroys a group when its final panel closes; prove the current close-before-add ordering loses the group.
- RED: add a desktop Playwright regression that switches between two tasks sharing an environment and asserts the live and reloaded Dockview tree semantics.
- GREEN: anchor the incoming session panel in the first stale session panel's live group and tab index before stale cleanup.
- REFACTOR: remove any duplication that can be shared safely with cross-environment stale-session replacement, while preserving focused tests.
Verification
cd apps && pnpm --filter @kandev/web test -- components/task/dockview-session-tabs.test.ts
cd apps && pnpm --filter @kandev/web test -- components/task/dockview-session-tabs.test.ts lib/state/dockview-env-switch-action.test.ts
cd apps/web && pnpm run typecheck
cd apps/web && pnpm e2e:run tests/layout/saved-layout-session-isolation.spec.ts
Files likely touched
apps/web/components/task/dockview-session-tabs.tsapps/web/components/task/dockview-session-tabs.test.tsapps/web/e2e/tests/layout/saved-layout-session-isolation.spec.tsapps/web/e2e/pages/session-page.tsif the tree assertion belongs in the shared page object
Dependencies
None.
Inputs
docs/specs/ui/requirements/task-layout-profiles.md, especiallyPersistence guaranteesand the shared-environment task-switch scenario.- The atomic stale-session replacement in
apps/web/lib/state/dockview-env-switch.ts. - The existing same-environment early return in
apps/web/lib/state/dockview-store.ts.
Output contract
Report the exact failing regression, the panel event order before and after the repair, files changed, unit/typecheck/E2E command results, and any remaining ambiguity for layouts contaminated with stale sessions in multiple groups.
Result
- RED proved that the prior handoff emitted only
close:session:outgoing, removedgroup-center, and left no incoming session panel. - GREEN emits
add:session:incomingbefore the outgoing close, preservesgroup-center, and retains the right-side Files or Changes above Terminal split. - Focused unit tests, TypeScript typecheck, and the production-build Chromium regression passed on 2026-07-27.