Parent mission install-ux-hardening-20260405 shipped at mosaic-v0.0.25 but a real-run test uncovered a critical bootstrap regression plus a cluster of first-run UX failings. New mission install-ux-v2-20260405 closes the regression as a hotfix (M01 → mosaic-v0.0.26), polishes CORS/skill installer UX (M02), then rethinks the flow around a drill-down main menu with a provider-first intent intake and real quick-start (M03 → mosaic-v0.0.27). Linked issues: #436 (M01), #437 (M02), #438 (M03) Archives install-ux-hardening-20260405 under docs/archive/missions/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6.5 KiB
6.5 KiB
Tasks — Install UX Hardening
Single-writer: orchestrator only. Workers read but never modify.
Mission: install-ux-hardening-20260405 Schema:
| id | status | description | issue | agent | branch | depends_on | estimate | notes |Status values:not-started|in-progress|done|blocked|failed|needs-qaAgent values:codex|sonnet|haiku|opus|—(auto)
Milestone 1 — mosaic uninstall (IUH-M01)
| id | status | description | issue | agent | branch | depends_on | estimate | notes |
|---|---|---|---|---|---|---|---|---|
| IUH-01-01 | done | Design install manifest schema (~/.config/mosaic/.install-manifest.json) — what install writes on first success |
#425 | sonnet | feat/mosaic-uninstall | — | 8K | v1 schema in install-manifest.ts |
| IUH-01-02 | done | mosaic uninstall TS command: --framework, --cli, --gateway, --all, --keep-data, --yes, --dry-run |
#425 | sonnet | feat/mosaic-uninstall | IUH-01-01 | 25K | uninstall.ts |
| IUH-01-03 | done | Reverse runtime asset linking in ~/.claude/ — restore .mosaic-bak-* if present, remove managed copies otherwise |
#425 | sonnet | feat/mosaic-uninstall | IUH-01-02 | 12K | file list hardcoded from mosaic-link-runtime-assets |
| IUH-01-04 | done | Reverse npmrc scope mapping and PATH edits made by tools/install.sh |
#425 | sonnet | feat/mosaic-uninstall | IUH-01-02 | 8K | npmrc reversed; no PATH edits found in v0.0.24 install |
| IUH-01-05 | done | Shell fallback: tools/install.sh --uninstall path for users without a working CLI |
#425 | sonnet | feat/mosaic-uninstall | IUH-01-02 | 10K | |
| IUH-01-06 | done | Vitest coverage: dry-run output, --all, --keep-data, partial state, missing manifest |
#425 | sonnet | feat/mosaic-uninstall | IUH-01-05 | 15K | 14 new tests, 170 total |
| IUH-01-07 | done | Code review (independent) + remediation | #425 | sonnet | feat/mosaic-uninstall | IUH-01-06 | 5K | |
| IUH-01-08 | done | PR open, CI green, review, merge to main, close issue |
#425 | sonnet | feat/mosaic-uninstall | IUH-01-07 | 3K | PR #429, merge 25cada77 |
Milestone 2 — Wizard Remediation (IUH-M02)
| id | status | description | issue | agent | branch | depends_on | estimate | notes |
|---|---|---|---|---|---|---|---|---|
| IUH-02-01 | done | Password masking: replace plaintext rl.question in bootstrapFirstUser with masked TTY read + confirmation |
#426 | sonnet | feat/wizard-remediation | IUH-01-08 | 8K | prompter/masked-prompt.ts |
| IUH-02-02 | done | Hooks preview stage in wizard: show framework/runtime/claude/hooks-config.json entries + confirm prompt |
#426 | sonnet | feat/wizard-remediation | IUH-02-01 | 12K | stages/hooks-preview.ts; finalize gating TODO |
| IUH-02-03 | done | mosaic config hooks list|enable|disable subcommands |
#426 | sonnet | feat/wizard-remediation | IUH-02-02 | 15K | commands/config.ts |
| IUH-02-04 | done | Headless path: env-var driven runConfigWizard + bootstrapFirstUser (MOSAIC_ASSUME_YES, MOSAIC_ADMIN_*) |
#426 | sonnet | feat/wizard-remediation | IUH-02-03 | 12K | |
| IUH-02-05 | done | Tests + code review + PR merge | #426 | sonnet | feat/wizard-remediation | IUH-02-04 | 10K | PR #431, merge cd8b1f66 |
Milestone 3 — Unified First-Run Wizard (IUH-M03)
| id | status | description | issue | agent | branch | depends_on | estimate | notes |
|---|---|---|---|---|---|---|---|---|
| IUH-03-01 | done | Design doc: unified state machine; decide whether mosaic gateway install becomes an internal wizard stage |
#427 | opus | feat/unified-first-run | IUH-02-05 | 10K | scratchpad Session 5 |
| IUH-03-02 | done | Refactor runWizard to invoke gateway install as a stage; drop the 10-minute session-file bridge |
#427 | opus | feat/unified-first-run | IUH-03-01 | 25K | stages 11 & 12; bridge removed |
| IUH-03-03 | done | Preserve backward-compat: mosaic gateway install still works as a standalone entry point |
#427 | opus | feat/unified-first-run | IUH-03-02 | 10K | thin wrapper over stages |
| IUH-03-04 | done | Tests + code review + PR merge | #427 | opus | feat/unified-first-run | IUH-03-03 | 12K | PR #433, merge 732f8a49; +15 tests |
| IUH-03-05 | done | Bonus: honor state.hooks.accepted in finalize stage (closes M02 follow-up) |
#427 | opus | feat/unified-first-run | IUH-03-04 | 5K | MOSAIC_SKIP_CLAUDE_HOOKS env flag |