feat(mosaic): IUV-M02 — CORS/FQDN UX polish + skill installer rework #444
Reference in New Issue
Block a user
Delete Branch "feat/install-ux-polish"
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?
Summary
Closes #437
IUV-02-01: Replace CORS origin prompt with FQDN/hostname input
Problem: The installer prompted users for a raw CORS origin string (
http://localhost:3000). Users don't know what CORS is.Fix:
deriveCorsOrigin(hostname, webUiPort, useHttps?)pure functionlocalhost)localhost/127.0.0.1always http; remote hosts default to httpsMOSAIC_HOSTNAMEenv var as a friendly alternative toMOSAIC_CORS_ORIGINGatewayStategains optionalhostnamefield to track the raw user inputGATEWAY_CORS_ORIGINfrom existing .env instead of hardcodingIUV-02-02: Skill installer failure modes diagnosed
syncSkills()infinalize.tscompletely ignoredstate.selectedSkills. The multiselect UI was a no-op — ALL skills were synced regardless of what the user picked.catch {}. If the script was missing, nothing happened with no message to the user.mosaic-sync-skillswas all-or-nothing rsync with no whitelist concept. There was no mechanism to link only a subset of skills.IUV-02-03: Skill installer rework
syncSkills()now acceptsselectedSkills[]and passesMOSAIC_INSTALL_SKILLS(colon-separated) to the bash scriptmosaic-sync-skillsfilters the linking phase to only the whitelisted skills whenMOSAIC_INSTALL_SKILLSis set (empty/unset = all skills, preserving legacymosaic syncbehavior)IUV-02-04: Tests + gates
deriveCorsOrigin(localhost, loopback, remote, https override)pnpm typecheck && pnpm lint && pnpm format:checkall greenTest plan
pnpm --filter @mosaicstack/mosaic testpnpm typecheckpnpm lintpnpm format:check🤖 Generated with Claude Code