Skip to content

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.

/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.

  1. Add app/types/adopt.ts with the draft and section types, marked temporary (deleted as generated counterparts land).
  2. Add app/composables/useAdoption.ts: a singleton like useSetupPrompt.ts exposing adopted, a draft per section, completed, unlocked(feature) and status wrapping useProjectSetup; draft persisted per project id in localStorage; with a unit test.
  3. Add app/middleware/adopt.global.ts: redirect only when unadopted, loop guard for / and /adopt, dev skip flag. Gotcha: preserve useSetupPrompt dismissal semantics.
  4. Add app/pages/adopt.vue and app/components/adopt/{AdoptStepper,AdoptSectionFrame,AdoptPreviewPane}.vue; build the stepper from DTabStrip + DListRow + DStatusDot (no stepper or split pane exists) and lay out with CSS grid or @sksizer/panes.
  5. Add the section registry with all ten sections stubbed and the SECTION_FEEDS map (which screens each section unlocks).
  6. Link ProjectSetupPrompt.vue to /adopt and add the nav item in ProjectScopePane. Gotcha: ProjectScopePane.test.ts snapshots must be updated deliberately.
  7. Add stories Adopt/Shell: Fresh, HalfDone, AdoptedDriftReport.
AreaNote
solutions/ontological/desktop/src-nuxt/app/composables/useAdoption.tsnew singleton, sole writer of drafts
solutions/ontological/desktop/src-nuxt/app/middleware/adopt.global.tsnew global redirect
solutions/ontological/desktop/src-nuxt/app/pages/adopt.vuenew 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.tstemporary prototype types
solutions/ontological/desktop/src-nuxt/app/components/ProjectSetupPrompt.vuedeep-link to /adopt
solutions/ontological/desktop/src-nuxt/app/components/ProjectScopePane.vuenav item; later touched by the nav-unlock task, serialize
  • AC-1: An unadopted project is redirected to /adopt; an adopted one is never redirected, and / and /adopt cannot loop.
  • AC-2: Completing a section persists its draft per project id and survives reload (vitest).
  • AC-3: unlocked(feature) reflects SECTION_FEEDS and completed sections.
  • AC-4: useSetupPrompt dismissal behavior is unchanged and ProjectScopePane.test.ts passes.
  • AC-5: Stories Adopt/Shell Fresh, HalfDone and AdoptedDriftReport exist.
  • AC-6: moon run sdf:check and moon run sdf:test pass, run detached one at a time; nuxi typecheck and vue-tsc are never run locally (CI typechecks).
  • AC-7: Every new story renders at the tauriMedium viewport in light and dark, and a screenshot pair is committed under docs/screenshots/sdf-adopt-shell-gating/{light,dark}.png and 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.ts and package.json are untouched unless this task says so.
  • AC-9: Fixture timestamps are constants; any force layout has a deterministic seed and a cooldown.
  • Section contents (later tasks), Apply and the drift report (the apply task), lock banners (the nav-unlock task).
  • Depends on T-GTKM for fixture mode.
  • Plan: /Users/sksizer/.claude/plans/toasty-soaring-ullman.md (the adoption wizard and operator screens, built in SDF) and N-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.

T-GTKM


← Back to Tasks