T-4JGE-appframe-scaffold-move
Status: closed/done · Impact: high · Complexity: large
Extract the (roughly 90%-generic) app-frame out of @determined/shell into a new neutral Nuxt-layer
package, so a second host (the SDLC dashboard) can consume it. The seam analysis found the
determined coupling is only five narrow points; this task moves everything generic out unchanged and
keeps determined green, setting up the contract work.
| Location | Role today |
|---|---|
packages/ts/shell/app/ | @determined/shell — a Nuxt layer bundling the generic frame (palette, keybindings, context-menu, deep-links, notifications, settings, chords, Shell* components, layout, boot plugins) together with the five determined-specific seams. |
packages/ts/shell/nuxt.config.ts | extends ['../ui'], @nuxt/ui, ssr:false, /api devProxy. |
Proposed
Section titled “Proposed”A new neutral package (@sksizer/shell; @sksizer/app-frame avoids two “shells”) holds the generic
pieces moved verbatim: the registry composables (usePlatform → useContributions, useNav,
useContextMenu, useSettings, useDeepLinks, useNotifications, useKeybindings),
utils/chords, utils/deepLinks, utils/zodFields, the Shell* components,
layouts/default.vue, and the boot plugins. @determined/shell extends the new frame; the five
determined seams stay in place for now (addressed in T-D2SL-appframe-contracts and
T-7BIN-appframe-determined-adapter). No behavior change.
Approach
Section titled “Approach”- Decide the package name and scaffold it as a Nuxt layer (
main: ./nuxt.config.ts,extendsa design-system layer,@nuxt/ui). - Move the generic composables/utils/components/plugins/layout from
packages/ts/shell/app/into the new package unchanged. - Make
@determined/shellextend the new frame; leave the five seams in place (transport import, platform types,/apps/<id>regex,determined://, token dependency). - Verify a determined product (e.g.
blank) builds and runs with no behavior change.
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
packages/ts/app-frame/ | new | new neutral Nuxt-layer package holding the generic frame |
packages/ts/shell/ | modify | move generic pieces out; extend the frame |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: The generic composables/utils/components/plugins/layout live in the new frame package,
and
@determined/shellextends it. - AC-2: A determined product builds and runs with no visible or behavioral change.
- AC-3: The moved generic code carries no
@determined/*dependency except the five known seams, which are handled downstream.
Out of scope
Section titled “Out of scope”- The injection contracts and removing the five seams — T-D2SL-appframe-contracts.
- Token neutralization — T-21FI-appframe-neutralize-tokens.
- Dashboard adoption — Phase B (see the milestone).