# Calliope Commentator Personas

V2 launch commentators are authored as `@calliope/persona-live` AI artists in
`V2/ue/Content/V2/Audio/Commentary/commentator-personas.json` and validated by
`@v2/calliope-commentator-personas`.

Each persona must carry:

- cleared `@iris/voice` voice clone metadata with watermarking and abuse
  monitoring;
- Calliope brand metadata: booth role, tone pillars, ruleset expertise, approved
  catchphrases, prohibited claims, sponsor boundaries, and AI disclosure label;
- talent signoff covering V2 commentary, voice clone, brand metadata, likeness,
  and fallback-bank scopes;
- deterministic fallback bank metadata keyed by
  `(cueKind,ruleset,commentatorId,seed)`;
- `gameplayInert: true` and output channels limited to audio and subtitle.

`V2Audio` consumes the same launch roster through
`BuildDefaultCommentaryPersonas()` and rejects personas whose voice clone, brand
metadata, talent signoff, or fallback bank metadata are incomplete. `V2Services`
registers the `calliope-persona-live` adapter as a Calliope domain service that
stays outside rollback and does not run on dedicated servers.

The four launch banks are source-controlled under
`V2/ue/Content/V2/Audio/Commentary/FallbackBanks/`, with 24 authored lines per
persona and at least two choices for every supported cue kind. The TypeScript
cook boundary and Python CI checker recompute SHA-256 over exact file bytes,
reject repeated-character placeholders, verify bank identity and coverage, and
require the manifest and Unreal defaults to carry the same hash and line count.
Runtime fallback choice is a deterministic SHA-256 selection over the full
`(cueKind,ruleset,commentatorId,seed)` identity. These banks are
presentation-only and are not rollback simulation state.

CI runs `V2/ue/Tools/check-v2-calliope-commentator-personas.py` to verify the
Calliope schema, V2 manifest, TypeScript package, Unreal audio consumer, service
adapter, docs, and checklist state.
