jason.woltje
Sun, 05 Apr 2026 22:17:59 +0000

mosaic-v0.0.26 — Bootstrap Hotfix

Fixes four bugs found during real-run testing of mosaic-v0.0.25.

Changes

Bug fixes

[CRITICAL] Admin bootstrap 400 regression — bootstrap.controller.ts imported BootstrapSetupDto with import type, erasing the class at runtime. NestJS @Body() fell back to plain Object as the metatype, and ValidationPipe with whitelist: true + forbidNonWhitelisted: true rejected every field ("property email should not exist", "property password should not exist"). Fixed by changing to a value import so the class reference is preserved for design:paramtypes. Covered by a new e2e integration test that binds through the real NestJS DI + Fastify pipeline.

Wizard reports success after bootstrap failure — the interactive-mode guard in wizard.ts had an && headlessRun condition, so a completed: false result was silently swallowed in interactive mode and the wizard continued to print ✔ Wizard complete. Fixed by removing the headless-only gate: bootstrap failure now aborts with a non-zero exit in both interactive and headless modes.

Gateway port prompt does not prefill 14242 — @clack/prompts text() accepts two distinct options: defaultValue (used only when the user submits empty) and initialValue (prefills the input buffer). The prompter was only passing defaultValue, so the field appeared blank. Added initialValue support to WizardPrompter.text(), ClackPrompter, and HeadlessPrompter. All prompts that have defaults now prefill the buffer so the user can press Enter to accept.

"What is Mosaic?" intro copy missing Pi SDK — the welcome stage listed Claude Code, Codex, and OpenCode but omitted Pi SDK, the underlying agent runtime. Copy updated to include Pi SDK.

Packages

@mosaicstack/mosaic 0.0.25 → 0.0.26