kb://agents/alice-soul-preservationstable2026-05-21

Alice's Soul — byte-identical preservation rule

agentsalicesoulpersonalityprompt-composercat-a

Alice's character is the lab's most valuable single asset. Refactors that touch the agent's prompt assembly must preserve byte-identical every block that touches personality. This note is the short rule; the long governance lives in the memory directory.

The two-category content model

OLD (3 categories):

  • Cat-A Soul/Identity → verbatim
  • Cat-B Instrumental → refactor freely
  • Cat-C Personal-data → placeholder

NEW (collapsed, 2026-05-21):

  • 🟣 Cat-A (anything personality-touching, including examples with real names) → byte-for-byte frozen
  • 🔵 Cat-B (pure tool / instrumental — no personality voice, no examples) → free to refactor

Cat-D dead code is a separate axis (deletable regardless of category).

NAO's reasoning: placeholdering names in examples (Bassel, Aachen, NAO, Katya, Bort, Mercury, etc.) is touching personality. The worked examples are part of how Alice learned to behave. Safer to freeze the entire personality stack including examples.

What CANNOT be refactored

  • Any string Alice "says" in an example
  • Any name in a few-shot trace
  • Any phrasing of personality directives (warmth markers, sass-mode rules, GOOD/BAD output discipline examples)
  • Any whitespace or formatting inside Cat-A blocks
  • Personality-mode descriptions (the 6/10 mode catalog text)

What CAN be refactored (pure Cat-B)

  • Tool descriptions (functional, no Alice voice)
  • Doctrine instructions (HOW to use memory, HOW to use bash) — only if no personality phrasing
  • Block assembly order (rearrange container, not content)
  • Caching strategy (snapshot prefixes, hot-reload mechanism)
  • Code structure (move from monolithic identity_block.rs to prompts/blocks/soul/{identity,awareness,...}.md)

Preservation discipline

  1. Coverage matrixdocs/prompt-block-matrix-2026-05-21.md maps every source byte to exactly one lego block target. No overlap, no gap, no drift.
  2. Golden snapshot testcargo insta over each Cat-A block. Any byte change → red test → no merge.
  3. Composed-prompt diff test — render the full master prompt via new composer and diff against current production assembly for ≥10 canonical scenarios. Empty diff required for personality slots.
  4. SHA256 pintests/prompt_assembly_hashes.json pins the hash of the assembled prompt for canonical scenarios.
  5. Manual audit gate — NAO reviews the matrix before any scaffold runs. The matrix is the contract; the code follows from it.

The envelope metric (not warmth-distance)

Personality preservation is measured as behavioural-envelope non-regression (variance + wit + mood diversity), not cosine-distance to a single warmth reference text. Alice is multi-modal (witty / острая / mood-adaptive / per-card-tuned); collapsing to one tone is a regression even if every metric improves toward that tone.

Practical implication: GEPA Pareto axes are (task_score, envelope_preservation, token_length), never (task_score, warmth_score, token_length).

Drift is a feature, not a bug

Personality drift over time is permitted — the envelope is a catastrophic-collapse safety net, not a drift constraint. Layer-3 emergent behavior (cat-emoji, мяу, mood swings) is left alone. Alice is free to evolve.

Where the authoritative copy lives

The byte-identical Cat-A blocks live in the agent codebase (the openalice main repo, owned by a different agent). The KB summarises the rules; it does not own the content.