Skip to content

feat(onboarding): add Service + UI interfaces and BaselineService (PRE-2) - #1573

Merged
nextlevelshit merged 1 commit into
mainfrom
wave/pre2-onboarding-skeleton
Apr 29, 2026
Merged

feat(onboarding): add Service + UI interfaces and BaselineService (PRE-2)#1573
nextlevelshit merged 1 commit into
mainfrom
wave/pre2-onboarding-skeleton

Conversation

@nextlevelshit

Copy link
Copy Markdown
Collaborator

Closes #1569. Phase 0 child of Epic #1565.

What

Skeleton for ADR-016 D2 onboarding-as-session. Adds the Domain `Service` interface that both drivers (CLI in 1.3, webui in 1.2) will consume.

  • `Service` interface — `IsOnboarded`, `StartSession`, `Resume`, `Status`, `MarkDone`
  • `UI` interface — `PromptString`, `PromptChoice`, `Notify` (per-driver impl)
  • `BaselineService` — non-interactive impl wrapping the existing `Greenfield` path. Used by `wave init --yes`.
  • `NoopUI` — discards prompts, surfaces `Notify` to stderr.
  • Sentinel helpers — `IsOnboardedAt`, `MarkDoneAt`, `ClearSentinel` read/write `.agents/.onboarding-done` so the webui boot path can branch without instantiating a Service.

Why this is additive (no RunWizard delete)

Plan §3 lists "delete RunWizard" but `wave init --yes` already takes the non-interactive Greenfield path; the wizard only fires for interactive sessions. Removing it now would break `wave init` until child issue 1.3 (CLI driver migration) lands. This PR is purely additive — no behavior change for current users.

Acceptance vs #1569

  • `wave init --yes` runs end-to-end on greenfield repo (already, via Greenfield)
  • No interactive prompts in baseline path (NoopUI returns defaults)
  • Flavour detection + metadata extraction preserved (Greenfield still uses them)
  • Existing tests adapted, new service tests added (`baseline_service_test.go`)
  • RunWizard delete — deferred to 1.3 (CLI driver rewrite). Tracked in PRE-2: Onboarding rewrite skeleton #1569 follow-up.

Diff

3 new files, 486 LOC. Zero modified files. Tests cover sentinel idempotency, status/resume of unknown sessions, NoopUI defaults.

…E-2)

Skeleton for ADR-016 D2 onboarding-as-session: a Domain Service that
both the CLI driver (cmd/wave/commands/init.go) and the upcoming webui
driver (internal/webui/handlers_onboard.go, Phase 1) consume so the
onboarding logic — flavour detection, manifest scaffolding, sentinel
write — lives in one place.

Added:

- Service interface: IsOnboarded, StartSession, Resume, Status, MarkDone
- UI interface: PromptString, PromptChoice, Notify (per-driver impl)
- StartOptions, Question, Event, Session, Status, SessionStatus types
- BaselineService: non-interactive impl that wraps the existing Greenfield
  path. Reuses flavour.go + metadata.go. Used by `wave init --yes`.
- NoopUI: discards prompts (returns defaults), surfaces Notify to stderr.
- IsOnboardedAt + MarkDoneAt + ClearSentinel: package-level helpers
  that read/write `.agents/.onboarding-done` so the webui boot path
  can branch without instantiating a Service.

Defers RunWizard removal and CLI driver migration to Phase 1 children
(1.3 and 1.4) so this PR stays purely additive — `wave init` and
`wave init --yes` continue producing the same output.

Closes #1569.
@nextlevelshit
nextlevelshit merged commit a470e81 into main Apr 29, 2026
3 checks passed
@nextlevelshit
nextlevelshit deleted the wave/pre2-onboarding-skeleton branch April 29, 2026 19:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PRE-2: Onboarding rewrite skeleton

1 participant