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>
17 KiB
Executable File
17 KiB
Executable File