IUV-M01: Install UX v2 hotfix — bootstrap DTO, wizard failure propagation, port prefill, Pi SDK copy #436
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Mission: install-ux-v2-20260405
Milestone: IUV-M01 (hotfix)
Tier: sonnet
Target release:
mosaic-v0.0.26Real-run testing of
@mosaicstack/mosaic@0.0.25surfaced a critical regression and several discrete bugs. Ship these as a single hotfix.Bugs
1. [CRITICAL] Admin bootstrap fails with HTTP 400
Root cause:
apps/gateway/src/admin/bootstrap.controller.ts:16usesimport type { BootstrapSetupDto, ... }.import typeerases the class at runtime.@Body() dto: BootstrapSetupDtohas no runtime metatype; Nest'sValidationPipe(withwhitelist: true+forbidNonWhitelisted: true) falls back to plainObject, treats every incoming property as non-whitelisted, and 400s.Fix: drop
typefrom theBootstrapSetupDtoimport (value import).BootstrapStatusDtoandBootstrapResultDtocan remain as type-only imports — they're only used in return-type positions.Test requirement: must add an integration/e2e test that hits
/api/bootstrap/setupagainst a real Nest app (via@nestjs/testing+supertest) with a plain{name, email, password}body. A controller unit test that constructsValidationPipemanually will NOT catch this regression.2. Wizard reports success after bootstrap 400
packages/mosaic/src/wizard.ts:147only propagates!bootstrapResult.completedas a failure whenheadlessRun === true. In interactive mode the failure is silently swallowed and the wizard still logs✔ Wizard completeand✔ Done.Fix: propagate failure in both modes. Non-zero exit, no success lines after a bootstrap failure.
3. Gateway port prompt does not prefill
14242packages/mosaic/src/stages/gateway-config.ts:77-88passesdefaultValue: defaultPort.toString()top.text(...). The user should see14242in the input buffer and be able to press Enter to accept, but currently it does not prefill.Investigate:
WizardPrompter.textadapter, or adefaultValuevsinitialValuemismatch with the underlying@clack/promptsAPI. Fix so the port is actually prefilled.4.
"What is Mosaic?"intro copy missing Pi SDKCurrent copy enumerates Claude Code, Codex, and OpenCode but never mentions Pi SDK — the actual agent runtime behind those frontends. Add Pi SDK to the intro.
Acceptance
14242packages/mosaic/package.jsonbumped to0.0.26mosaic-v0.0.26pushed + Gitea release published + confirmed in Gitea npm registry