Minimal New project creation wizard
## Original requirement (verbatim, epic body)
> "Break long pages into subtabs across the entire system."
> "Important and first hand stuff needs to be on the first page(s), then less important, logs, runs, etc"
Operator decisions: D3 "When creating, make a wizard-like". D5 "Only long create forms". Architect interview I2 (operator, verbatim): "Wizard should only have absolutely minimum necessary fields — name, repo if exists, nodes if exist. Absolutely zero advanced stuff."
## Scope (Architecture K4, §4.2)
- `/projects/new` (7 sections across 4 tabs today) becomes a minimal wizard via a new `pages/ProjectCreateWizard.tsx` rendered for `mode === 'create'`; edit mode keeps today's tabs unchanged.
- Steps: `name` Name (Name; Org for an operator seat, as today) → `repo` Repository (repo URL + forge; skippable — "No repo" is a valid choice) → `nodes` Nodes (placement — shown ONLY when `canPlace` and placement nodes exist, same predicate as today) → `review` Review → Create.
- Every other field (integration branch `develop`, stack up/down `./dc up`/`./dc down`, gates, governance, slots, advanced, Jira, humans, tech stack, notes, agent instructions) is sent with today's form defaults (`ProjectEditPage.tsx:117–120` initial state) — NOT shown. The API already defaults them (`routes/projects.py:419–425`).
- Reuse the existing field components/handlers for name, org, repo/forge and placement and the existing create mutation; use the wizard primitive (`components/wizard/`) from the dependency child. Remove the old create-mode branches (`creating &&` blocks) in `ProjectEditPage` once the wizard owns create.
- In-repo deep links to `/projects/new` with params (e.g. `lib/companySetup.ts`) must keep working — grep `/projects/new` and carry any prefill params into the wizard's initial draft.
- Leaving with entered data: `useUnsavedLeave` + `UnsavedChangesDialog`. After Create: replace-navigate to `/projects/:id` → General tab.
## Acceptance criteria (verbatim, PRD R5 — project)
- **AC5.2** Other create forms that meet §4 "long create form" get the same wizard shape, with one step per section plus Review. The Architect lists which ones qualify, with the measurement. Short create forms are unchanged. (Architect's list: only `/automations/new` and `/projects/new` qualify; project is minimal per I2.)
- **AC5.1 mechanics** apply: step indicator with every step name; Back/Next; Next blocked while invalid with the field named; revisit done steps; nothing saved until Create; Review read-only with Edit per step.
- **AC5.3** Leaving a wizard with entered data raises the existing unsaved-changes dialog. After Create, the operator lands on the new record's tab 1.
- **AC5.4 (quality)** At 390 px the step indicator stays legible and never truncates a step name to fragments.
- **AC6.1** ON by default on dev, no feature flag.
- Quality: zero advanced/governance fields visible anywhere in the wizard; a project created with "No repo" and no nodes succeeds and opens on General.
Credentials & reach: `gmind/skynet/dev-orgb` — tenant org admin on `https://app.dev.jaah.ai` — **verified**. `jaah/debug/main/operator-login` — **verified** (MFA risk: ask once if it reappears, else defer with reason; needed only to check the operator-seat Org field). Dev console `https://app.dev.jaah.ai/` — **verified**. Do NOT use `gmind/skynet/dev`. Local oracles: none beyond the worktree.
Out of scope: Do NOT change the project EDIT tabs, their order or tab ids. Do NOT touch `apps/api` (`routes/projects.py` defaults are relied on, not changed), `apps/jaahd`, migrations. Do NOT remove or rename any project field from the edit page. No copy rewrites beyond step labels. Do NOT fork the wizard primitive. No feature flag. Delete any project you create on dev after verifying it.
Done means:
- AC5.2/AC5.1 — on dev create a project through Name → Repository → (Nodes) → Review → Create; it appears in the list and opens on General. Component tests: blocked Next on empty Name names "Name"; Nodes step omitted when the predicate is false; Review shows every value; no POST before Create; payload carries today's defaults for every hidden field.
- Deep links — test: each in-repo `/projects/new?...` literal prefills the wizard draft.
- AC5.3 — test: unsaved dialog on exit with data; post-Create URL `/projects/<id>` with no `?tab=`.
- AC5.4 — Playwright screenshots at 390 px and 1440 px, labels legible in full.
- AC6.1 — after the PR's Jaah Deploy succeeds, walk it on app.dev.jaah.ai.
- `./dc check quick` green; PR merged to develop.
Outcome
/projects/new is a minimal wizard (Name→Repository→Nodes?→Review); PR #5099 merged, gate + Jaah Deploy green. Verified 390/1440 on local stack; app.dev.jaah.ai unreachable from node (walk unverified). 5 UX follow-ups in report.
Artifacts
Activity
- Draft
- Ready
- Runner started
- Runner ended (done)