feat(fleet): update-surviving persona overrides (roles.local layer, resolver, persona CLI) (H4)
Add a PRESERVE-protected persona override layer at <mosaicHome>/fleet/roles.local/ that survives `mosaic update` while baseline fleet/roles/ keeps reseeding. - fleet-personas.ts: shared class-extraction (single source of truth, DRY with fleet-profiles.ts), resolvePersona (override wins, baseline fallback), listPersonaClasses (baseline ⊕ override union), personaStatus (baseline/overridden/custom), and the `fleet persona list|show|customize` CLI. - fleet-profiles.ts: roster validation now uses the override-aware union so a profile can reference a user-customized or user-ADDED persona; the old listPersonaClasses(rolesDir) is kept as a thin delegate to the shared helper. - install.sh: add fleet/roles.local to PRESERVE_PATHS (AC-NS-7 guarantee). - specs: override-wins, custom-add, status classification, AC-NS-7 update-survival simulation, and profile-validation-accepts-custom-persona. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -37,7 +37,14 @@ INSTALL_MODE="${MOSAIC_INSTALL_MODE:-prompt}"
|
||||
# packages/mosaic/src/commands/fleet-backlog.ts). Without these, an update
|
||||
# wipes the operator's fleet AND their backlog. Glob entries are honored by
|
||||
# both the rsync path (`--exclude`) and the glob-aware cp fallback below.
|
||||
PRESERVE_PATHS=("CONSTITUTION.md" "AGENTS.md" "SOUL.md" "USER.md" "TOOLS.md" "STANDARDS.md" "memory" "sources" "credentials" "fleet/*.yaml" "fleet/agents" "fleet/run" "fleet/backlog")
|
||||
#
|
||||
# fleet/roles.local — the persona OVERRIDE layer (H4). Baseline personas in
|
||||
# fleet/roles/ are reseeded normally on every update (delivering new baseline
|
||||
# personas), so any local edit there would be clobbered. User customizations
|
||||
# and user-ADDED personas instead live in fleet/roles.local/ and MUST survive
|
||||
# `mosaic update` — they win over the baseline on merge (AC-NS-7; see
|
||||
# packages/mosaic/src/commands/fleet-personas.ts).
|
||||
PRESERVE_PATHS=("CONSTITUTION.md" "AGENTS.md" "SOUL.md" "USER.md" "TOOLS.md" "STANDARDS.md" "memory" "sources" "credentials" "fleet/*.yaml" "fleet/agents" "fleet/run" "fleet/backlog" "fleet/roles.local")
|
||||
|
||||
# Framework-owned contract files: re-copied from defaults/ on every upgrade (the
|
||||
# user must not edit them; a divergent copy is backed up once before overwrite).
|
||||
|
||||
Reference in New Issue
Block a user