T-XC1D-sdf-adopt-shell-gating
State: planning/draft · Impact: medium · Complexity: large
Land the adopt flow’s skeleton: the gating composable and middleware, the /adopt page, the stepper
and the section registry with all ten sections stubbed, so every later section task only fills a
file.
No adopt flow exists. ProjectSetupPanel.vue is presentational with its own story and test,
useSetupPrompt.ts holds dismissal state, and actionSetupProject is reachable only through
useProjectSetup. The strategy lives in N-HETB-adopting-a-project and a throwaway HTML mock.
Proposed
Section titled “Proposed”/adopt shows a stepper over ten section stubs. useAdoption() is the only writer of per-section
drafts, persisted per project id in localStorage, and answers adopted, completed and
unlocked(feature). A global middleware redirects to /adopt only when nothing is adopted (no
sdlc.yaml); a dev flag skips the wizard. ProjectSetupPrompt.vue deep-links to /adopt, and the
nav gains an adopt item.
Approach
Section titled “Approach”- Add
app/types/adopt.tswith the draft and section types, marked temporary (deleted as generated counterparts land). - Add
app/composables/useAdoption.ts: a singleton likeuseSetupPrompt.tsexposingadopted, a draft per section,completed,unlocked(feature)andstatuswrappinguseProjectSetup; draft persisted per project id in localStorage; with a unit test. - Add
app/middleware/adopt.global.ts: redirect only when unadopted, loop guard for/and/adopt, dev skip flag. Gotcha: preserveuseSetupPromptdismissal semantics. - Add
app/pages/adopt.vueandapp/components/adopt/{AdoptStepper,AdoptSectionFrame,AdoptPreviewPane}.vue; build the stepper fromDTabStrip+DListRow+DStatusDot(no stepper or split pane exists) and lay out with CSS grid or@sksizer/panes. - Add the section registry with all ten sections stubbed and the
SECTION_FEEDSmap (which screens each section unlocks). - Link
ProjectSetupPrompt.vueto/adoptand add the nav item inProjectScopePane. Gotcha:ProjectScopePane.test.tssnapshots must be updated deliberately. - Add stories
Adopt/Shell: Fresh, HalfDone, AdoptedDriftReport.
| Area | Note |
|---|---|
solutions/ontological/desktop/src-nuxt/app/composables/useAdoption.ts | new singleton, sole writer of drafts |
solutions/ontological/desktop/src-nuxt/app/middleware/adopt.global.ts | new global redirect |
solutions/ontological/desktop/src-nuxt/app/pages/adopt.vue | new page |
solutions/ontological/desktop/src-nuxt/app/components/adopt/ | stepper, frame, preview pane, section registry and ten stubs |
solutions/ontological/desktop/src-nuxt/app/types/adopt.ts | temporary prototype types |
solutions/ontological/desktop/src-nuxt/app/components/ProjectSetupPrompt.vue | deep-link to /adopt |
solutions/ontological/desktop/src-nuxt/app/components/ProjectScopePane.vue | nav item; later touched by the nav-unlock task, serialize |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: An unadopted project is redirected to
/adopt; an adopted one is never redirected, and/and/adoptcannot loop. - AC-2: Completing a section persists its draft per project id and survives reload (vitest).
- AC-3:
unlocked(feature)reflectsSECTION_FEEDSand completed sections. - AC-4:
useSetupPromptdismissal behavior is unchanged andProjectScopePane.test.tspasses. - AC-5: Stories
Adopt/ShellFresh, HalfDone and AdoptedDriftReport exist. - AC-6:
moon run sdf:checkandmoon run sdf:testpass, run detached one at a time;nuxi typecheckand vue-tsc are never run locally (CI typechecks). - AC-7: Every new story renders at the
tauriMediumviewport in light and dark, and a screenshot pair is committed underdocs/screenshots/sdf-adopt-shell-gating/{light,dark}.pngand embedded in the PR body. - AC-8: Only
--d-*tokens, no raw colors; D* components come from@determined/ui;app/generated/*,app.vue,nuxt.config.tsandpackage.jsonare untouched unless this task says so. - AC-9: Fixture timestamps are constants; any force layout has a deterministic seed and a cooldown.
Out of scope
Section titled “Out of scope”- Section contents (later tasks), Apply and the drift report (the apply task), lock banners (the nav-unlock task).
Dependencies
Section titled “Dependencies”- Depends on
T-GTKMfor fixture mode.
Discovery context
Section titled “Discovery context”- Plan:
/Users/sksizer/.claude/plans/toasty-soaring-ullman.md(the adoption wizard and operator screens, built in SDF) andN-6DUQ. - Control spec:
docs/planning/strategy/wizard-prototype.html; strategy: N-HETB-adopting-a-project. - Rules every agent follows are in the plan and the shared acceptance criteria above; the derive step later replaces fixtures with generated transport.
Depends on
Section titled “Depends on”T-GTKM