drop §5.4's default-layout collapse, and say why

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-07 10:15:58 +00:00
co-authored by Claude Opus 5
parent cd1f1616c4
commit 49b635a489
+31 -2
View File
@@ -413,8 +413,31 @@ the whole table:
that passes and reaches `PanelSlot.tsx:311-317`, which on a `locked` screen renders an empty
teal-bordered box with no picker and no way for the user to recover. - `screens/QrTransferScreen.tsx:19-39` has the guard but no persist-back, so it re-normalises on
every mount forever and never heals the row.
- [ ] **Then collapse the three default-layout mechanisms**: per-screen `defaultLayout.ts` (×20),
`createDefaultLayout()` in the core, and the 6-entry template array at `DashboardPreview.tsx:33-142`.
- [x] **~~Then collapse the three default-layout mechanisms~~ — inventoried and dropped.** Per-screen
`defaultLayout.ts` (21, not 20 — `Home/defaultLayout.tsx` is misnamed), `createDefaultLayout()`
in the core, and the 6-entry template array at `DashboardPreview.tsx:33-142`.
They are not three copies of one mechanism. `createDefaultLayout()` is a one-liner meaning "the
empty state of a workspace" and the templates are the picker for a *user-created* dashboard,
where the user chooses the apps afterwards. The 21 files are *built-in locked screens*, where
the apps are fixed. Collapsing across that line would merge two different questions.
Nor are the 21 duplication. Fourteen share a shape — flat horizontal split, nav on the left —
but across seven different size pairs, with panel ids that other code hardcodes (`components`
maps, `mobilePanelId`, `ChatPanelWrapper panelId=…`, and now the `appTypes` allow-lists). A
`splitH(...)` helper would turn 11 lines into 1 without removing a single decision: still 14
call sites, still 14 argument sets, plus a layer between "what does /music look like" and the
answer. That is compression, not deduplication.
What the inventory did turn up, none of which is an abstraction:
- **`DashboardPreview`'s edit path reset the layout on every submit** — renaming a dashboard or
editing its description threw away the panel arrangement, and dropped the terminal maps on a
rename. Fixed and verified against the running server (`cd1f161`).
- `Home/defaultLayout.tsx` is a `vertical` group with one child at `size: 100` — a bare panel
with a wrapper that does nothing, unlike Files/Terminal/Desktop next to it. Cosmetic: the
persisted `screens/home` row is what actually renders, so changing it changes nothing today.
- Browser and Email are the one genuine copy-paste pair (same nesting, same 25/75 and 60/40,
same trailing chat panel). One duplicate, and the two screens are diverging anyway.
### 5.5 Persistence hygiene
@@ -654,6 +677,12 @@ Cheap to fix, and prerequisites for the 5.8 migration rather than alternatives t
_(move items here with the commit and a one-line resolution)_
- [x] **Editing a dashboard no longer resets it.** _(`cd1f161`, branch `agent-coordination-mvp`)_ —
the edit form rebuilt the layout from the template on every submit, so a rename or a typo fix in
the description silently discarded the panel arrangement; a rename additionally dropped
`ws-terminals-<id>`/`ws-host-terminals-<id>` instead of carrying them, abandoning every shell the
dashboard held. Found while inventorying §5.4's second item, which was itself dropped.
- [x] **The appType allow-list is a prop, not a convention.** _(`1de1d92`, branch
`agent-coordination-mvp`)_ — closes the first item of §5.4. Fourteen character-identical
normalisers, each with its `useMemo` and persist-back `useEffect`, collapse to