# Prompt Track — B3 Acting Coach + B5 Embodiment/Narrative Separation

**Status:** B3 Acting Coach SHIPPED (PR #165). B5 Embodiment/Narrative separation: shell design, not started.
**Scope:** ~450 LOC across two phases
**Target version:** 0.5 (formerly 0.4)
**Gates:** null (B4 gates 1.0, not B3/B5)
**Depends on:** B1 (SHIPPED — prompt composition + PromptAssembler)
**Blocks:** nothing directly (B4 is independent)
**Parent:** [substrate_binding_persistence.md](archive/substrate_binding_persistence.md)

## B3 — Acting Coach Layer

### Goal

Meta-prompt scaffold for NPCs: role values, speech register, failure modes, continuity contract. Optional per-character via `AgentConfig.personality`.

### Hypothesis

An NPC with Acting Coach scaffolding produces measurably more consistent behavior in a blind A/B test compared to the same NPC without it.

### Minimum implementation (~300 LOC)

- `prompts/acting_coach.py`: Acting Coach meta-prompt builder
  - Role values (what the character cares about)
  - Speech register (formal/casual/archaic/etc.)
  - Failure modes (what the character does under stress)
  - Continuity contract (what the character remembers between turns)
- Integration with `PromptAssembler` as an optional layer
- `AgentConfig.acting_coach: ActingCoachConfig | None` field
- AgentFactory wiring when `personality` is set

### Pass criteria

- Blind A/B test: acting-coach NPC measurably more consistent (rated by LLM judge on voice consistency across 10 turns)
- No regression on existing NPC behavior when acting coach is disabled

---

## B5 — Embodiment/Narrative Separation

### Goal

Formalize the boundary between SEM (embodiment layer) and DM (narrative layer). Ensure `PromptAssembler` cleanly composes both without bleed.

### Minimum implementation (~150 LOC)

- Lint-style contract test: verify no SEM-specific tokens appear in narrative prompts and vice versa
- Clear docstring contracts on `PromptAssembler.build()` sections
- Separation audit of existing prompt templates

### Pass criteria

- Contract test passes
- No SEM tokens in narrative output
- No narrative tokens in embodiment output

## DisplayExtension implementations (wired by 0.3.1, built here)

The [interactive_experience_031.md](interactive_experience_031.md) plan (0.3.1) wired `MaximDisplay` into `sim_logger` with thread-safe routing, atexit cleanup, and the `DisplayExtension` protocol ready. `RequestInteractionTool` now uses `set_prompt()` / `clear_prompt()` for the input panel. **B3 is where `DisplayExtension` implementations live:**

- **`CampaignDisplay`** — DM campaign panels: character sheet, inventory, encounter info, NPC relationships. Auto-created when `DMRuntime` starts. Designed in [foundational_buildout_plan.md:1020-1047](archive/foundational_buildout_plan.md#L1020). ~150 LOC.
- **`AgentStateDisplay`** — Acting Coach panel: current role values, speech register, active failure mode, continuity state. Shows the "acting coach" metadata alongside the agent log. ~80 LOC.
- **`BioStateDisplay`** — condensed bio-system readout panel: NAc top links, hippocampus tier counts, active pain triggers. Surfaces the same data as the Stage 8 introspection tools but as a persistent side panel. ~100 LOC.

These extensions register via `display.add_extension(ext)` and render in the right column of the two-column layout (`MaximDisplay._build_layout()` already handles the extension layout path).

## Deferred follow-ups

- Per-NPC voice tuning (practice doc territory — behavioral_convergence_practice)
- Dynamic personality evolution (substrate-driven personality shifts)

## Load-bearing invariants (filled in AFTER shipping)
