T-E078-layout-host-pane-shell
Status: closed/done · Impact: high · Complexity: large
Make the determined content area a layout-hosted pane group so panes persist across route changes
and pages fill secondary/aux through the registry. Today each experience hand-rolls its own
split inside its page (e.g. backup), so pane state resets on navigation and the registry has no
host.
| Location | Role today |
|---|---|
packages/ts/shell/app/layouts/default.vue | Renders DAppShell (sidebar/navbar/statusbar) with the routed page in the single main slot. No pane group. |
apps/determined/experiences/backup/app/pages/apps/backup/index.vue | Hosts its own PaneGroup (secondary/main) inside the page — page-scoped, so it resets on navigation. |
Proposed
Section titled “Proposed”DAppShell’s main slot hosts a persistent PaneGroup (secondary/main/aux) from
@sksizer/panes, provided once by the layout so it survives navigation. DAppShell’s sidebar stays
the app rail. main holds the routed page; secondary/aux are PaneOutlets fed by the registry
(T-601N-pane-content-registry). Side panes render only when a page has registered content, so
single-column experiences show just main. --pane-* maps onto --d-*. Backup drops its
page-local PaneGroup and fills the regions via PaneContent.
Approach
Section titled “Approach”- In
default.vue, wrap the routed page in aPaneGroupconfigured withsecondary/main/aux; callprovidePaneRegistry(); map--pane-*onto--d-*on the container. - Render
secondary/auxonly when the registry holds content for that region, so unfilled experiences get no empty rails. - Migrate backup: remove its in-page
PaneGroup; register the snapshot list assecondaryand keep the detail inmain, preserving selection and?snap=deep-linking. - Confirm a single-column experience (e.g. search) still renders as one column with no empty panes.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
packages/ts/shell/app/layouts/default.vue | modify | host PaneGroup + registry in the main slot |
apps/determined/experiences/backup/app/pages/apps/backup/index.vue | modify | fill regions via the registry instead of a page-local PaneGroup |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: Backup’s snapshot-list/detail split renders via the layout-hosted pane group; snapshot
selection and
?snap=deep-linking still work. - AC-2: Pane widths and collapsed state survive navigation within an experience (single layout-hosted instance).
- AC-3: A single-column experience renders as one column, with no empty
secondary/auxrails. - AC-4:
secondary/auxinherit determined’s palette and dark mode via--pane-*to--d-*.
Out of scope
Section titled “Out of scope”- Keyboard/command wiring — T-IMOO-pane-toggle-keybindings.
- Persistence across reloads — T-ARPY-persist-pane-state.
- Sharing the shell with the SDLC dashboard (the generic-frame split) — a separate greenfield epic.