Closes#457.
The bash framework installer only seeded AGENTS.md and STANDARDS.md from
defaults/, even though TOOLS.md is listed in PRESERVE_PATHS and AGENTS.md
declares it as mandatory reading at position 5 of the load order. A fresh
bootstrap install therefore left ~/.config/mosaic/TOOLS.md missing and the
agent contract pointing at a non-existent file.
Fixes:
- packages/mosaic/framework/install.sh — extend the explicit defaults-seed
loop from "AGENTS.md STANDARDS.md" to "AGENTS.md STANDARDS.md TOOLS.md".
- packages/mosaic/src/config/file-adapter.ts — replace the greedy
readdirSync loop in syncFramework with an exported DEFAULT_SEED_FILES
whitelist, so the TS wizard no longer silently seeds the Jarvis-flavored
defaults/SOUL.md, placeholder defaults/USER.md, or internal
README.md/AUDIT-*.md into the mosaic home. Also align preservePaths with
the bash PRESERVE_PATHS list (AGENTS.md, STANDARDS.md, sources, and
credentials were previously missing) so both install paths have the
same upgrade-preservation semantics.
- packages/mosaic/framework/templates/TOOLS.md.template — replace stale
~/.config/mosaic/rails/ references with ~/.config/mosaic/tools/. The
rails/ tree was renamed to tools/ in the v1→v2 framework migration.
Tests:
- packages/mosaic/src/config/file-adapter.test.ts (new, 5 tests): pins
the whitelist, asserts SOUL.md/USER.md/README.md/AUDIT-*.md are not
seeded, verifies existing user contract files (including AGENTS.md)
survive a keep-mode sync, and asserts a no-op when defaults/ is absent.
Baselines: mosaic typecheck / lint green. Full mosaic vitest 275/276 —
the one failure (src/commands/uninstall.spec.ts:138) is a pre-existing
EACCES issue on main and is unrelated to this change. Repo-wide
typecheck / lint / format:check green. Live smoke of
`bash framework/install.sh` against a tmp MOSAIC_HOME confirms the
installer now prints "Seeded TOOLS.md from defaults" and the file lands.
Ships in @mosaicstack/mosaic 0.0.30.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
git pull --rebase fails with 'cannot pull with rebase: You have
unstaged changes' when the skills repo has local modifications.
Fix: detect dirty index/worktree, stash before pull, restore after.
Also gracefully handle pull failures (warn and continue with existing
checkout) and stash pop conflicts.
- mosaic-init bash script: detect existing SOUL.md/USER.md/TOOLS.md and
prompt user to keep, import (re-use values as defaults), or overwrite.
Non-interactive mode exits cleanly unless --force is passed.
Overwrite creates timestamped backups before replacing files.
- launch.ts checkSoul(): prefer 'mosaic wizard' over legacy bash script
when SOUL.md is missing, with fallback to mosaic-init.
- detect-install.ts: pre-populate wizard state with existing values when
user chooses 'reconfigure', so they see current settings as defaults.
- soul-setup.ts: show existing agent name and communication style as
defaults during reconfiguration.
- Added tests for reconfigure pre-population and reset non-population.
Completes the bootstrap repo migration with remaining files:
- PowerShell scripts (.ps1) for Windows support (bin/ + tools/)
- Runtime adapters (claude, codex, generic, pi)
- Guides (17 .md files) and profiles (domains, tech-stacks, workflows)
- Wizard test suite (6 test files from bootstrap tests/)
- Memory placeholder, audit history
Bootstrap repo (mosaic/bootstrap) is now fully superseded:
- All 335 files accounted for
- 5 build config files (package.json, tsconfig, etc.) not needed —
monorepo has its own at packages/mosaic/
- skills-local/ superseded by monorepo skills/ with mosaic-* naming
- src/ already lives at packages/mosaic/src/