Issue #62 delivered the multi-tab workspace hardening, persistence, preview/runtime stability, and full validation, but one acceptance item remains outstanding: tab reordering.
This issue tracks implementing reordering as a focused follow-up without broad UX redesign.
Summary
Add deterministic tab reordering for workspace tabs in @knighted/develop, with local persistence and safe interaction behavior across component/styles/entry tabs.
Why
Current tab operations support add/rename/remove/switch, but users cannot reorder tabs. Reordering improves navigation for larger workspaces and fully aligns behavior with the original #62 acceptance criteria.
In Scope
-
Reorder interactions in tab strip:
-
Pointer-based drag/drop or equivalent reorder gesture.
-
Keyboard-accessible reorder flow (for example move left/right).
-
Clear visual affordance while reordering.
-
State and persistence:
-
Update internal tab ordering source-of-truth in workspaceTabsState.
-
Persist reordered tab order in workspace storage.
-
Preserve active tab id and editor visibility semantics during/after reorder.
-
Constraints/guards:
-
Entry tab remains non-removable (existing contract unchanged).
-
Reordering must not mutate tab content/path/name.
-
Reordering must not break add/rename/remove flows.
-
Startup/restore:
-
Reordered tab order restores across reload.
-
Active tab restore remains stable after reorder.
-
Testing:
-
Add focused Playwright coverage for reorder behavior.
-
Validate persistence round-trip with reload.
-
Validate no regressions in existing workspace tab tests.
Out of Scope
- Broad redesign of tab strip visual language.
- New dependencies.
- Changes to preview/runtime architecture unrelated to reorder operations.
Acceptance Criteria
- User can reorder tabs in the workspace strip.
- Reordered tab order persists across reload.
- Active tab id and visible editor lane remain correct after reorder.
- Entry tab guard behavior remains unchanged.
- No regressions in add/rename/remove/switch behavior.
- Lint/build/tests pass with new reorder coverage.
Suggested Files
- workspace-tabs-state.js
- app.js
- workspace-tabs.spec.ts
- app-test-helpers.ts
Validation
npm run lint
npm run build
npx playwright test playwright/workspace-tabs.spec.ts
npm run test:e2e (final gate)
Notes
Keep changes modular and localized; reuse existing workspace tab state and persistence boundaries from #62 hardening work.
Issue #62 delivered the multi-tab workspace hardening, persistence, preview/runtime stability, and full validation, but one acceptance item remains outstanding: tab reordering.
This issue tracks implementing reordering as a focused follow-up without broad UX redesign.
Summary
Add deterministic tab reordering for workspace tabs in
@knighted/develop, with local persistence and safe interaction behavior across component/styles/entry tabs.Why
Current tab operations support add/rename/remove/switch, but users cannot reorder tabs. Reordering improves navigation for larger workspaces and fully aligns behavior with the original #62 acceptance criteria.
In Scope
Reorder interactions in tab strip:
Pointer-based drag/drop or equivalent reorder gesture.
Keyboard-accessible reorder flow (for example move left/right).
Clear visual affordance while reordering.
State and persistence:
Update internal tab ordering source-of-truth in
workspaceTabsState.Persist reordered tab order in workspace storage.
Preserve active tab id and editor visibility semantics during/after reorder.
Constraints/guards:
Entry tab remains non-removable (existing contract unchanged).
Reordering must not mutate tab content/path/name.
Reordering must not break add/rename/remove flows.
Startup/restore:
Reordered tab order restores across reload.
Active tab restore remains stable after reorder.
Testing:
Add focused Playwright coverage for reorder behavior.
Validate persistence round-trip with reload.
Validate no regressions in existing workspace tab tests.
Out of Scope
Acceptance Criteria
Suggested Files
Validation
npm run lintnpm run buildnpx playwright test playwright/workspace-tabs.spec.tsnpm run test:e2e(final gate)Notes
Keep changes modular and localized; reuse existing workspace tab state and persistence boundaries from #62 hardening work.