IUH-M02: Wizard remediation — hooks visibility, password masking, headless path #426
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-hardening-20260405
Milestone: IUH-M02
Branch: feat/wizard-remediation
Agent tier: sonnet
Depends on: IUH-M01
Problem
Post-cli-unification audit surfaced three wizard UX gaps that are all small, surgical fixes:
bootstrapFirstUserinpackages/mosaic/src/commands/gateway/install.ts:503prompts for admin password viarl.question()which echoes plaintext — not masked, no confirmation.framework/runtime/claude/hooks-config.jsonandframework/runtime/claude/settings.jsonare copied into ~/.claude/ silently bymosaic-link-runtime-assetsduring framework install. User has no visibility, no confirmation, no management surface.runConfigWizardandbootstrapFirstUserboth use directrl.questionwith no headless/env-var path.tools/install.sh --yesdoes NOT propagate through these — CI/Docker installs hang.Scope
rl.question('Admin password...')with a masked TTY reader (echo * or nothing) + a confirmation promptruntimeSetupStage, beforeskillsSelectStage): parseframework/runtime/claude/hooks-config.json, show each hook name + description + trigger, prompt for confirmation, record acceptancemosaic config hooks list,mosaic config hooks enable <name>,mosaic config hooks disable <name>subcommandsrunConfigWizard(MOSAIC_ASSUME_YES,MOSAIC_GATEWAY_PORT,MOSAIC_STORAGE_TIER,MOSAIC_DATABASE_URL,MOSAIC_VALKEY_URL,MOSAIC_CORS_ORIGIN,MOSAIC_ANTHROPIC_API_KEY) andbootstrapFirstUser(MOSAIC_ADMIN_NAME,MOSAIC_ADMIN_EMAIL,MOSAIC_ADMIN_PASSWORD)MOSAIC_ASSUME_YES=1and stdin is not a TTY, skip all interactive prompts and use env vars or defaults; fail clearly if required env vars are missingSuccess Criteria
mosaic config hooks listshows currently active hooksMOSAIC_ASSUME_YES=1 MOSAIC_ADMIN_NAME=test MOSAIC_ADMIN_EMAIL=test@local MOSAIC_ADMIN_PASSWORD=xxx mosaic gateway installcompletes without any promptsFiles to touch
packages/mosaic/src/commands/gateway/install.ts— password masking + headless pathpackages/mosaic/src/stages/hooks-preview.ts(new) — wizard stagepackages/mosaic/src/wizard.ts— wire new stagepackages/mosaic/src/commands/config.ts— add hooks subcommandspackages/mosaic/src/prompter/*— masked password helper