Truth, observations and actors
The agent boundary is explicit: TruthState → WorldModel → AgentObservation → Decision → TransitionPlan.
prochain-world-model projects engine truth through a profile. prochain-agent-observer combines the result with a bounded candidate shortlist and session/partner context. prochain-agent-core defines provider-independent decisions. prochain-agent-rig makes model calls; prochain-actors manages individual memory and the optional local policy. The B2B orchestrator alone rotates turns and assigns decks.
Truth contains frame positions and internal gain. It is not serialized as an agent prompt. Each observable contains an optional value, source, timestamp and confidence. ClubBaseline exposes a 100 ms quantized position estimate, beat/bar/regular phrase indexes and analyzed library metadata. It masks faders and EQ. SimulatorFull additionally exposes simulated fader state; it is a diagnostic profile, not the default training input. Neither profile fabricates measured master headroom, vocals or semantic sections.
Forecasts sample library energy at +8/+16/+32/+64 bars. Beyond-track windows remain unknown. Regular 32-beat grid groups are not semantic verse/drop detection. These distinctions must survive into prompts and scoring.
Candidates are filtered for reviewed analysis, key/BPM, tempo ratio, the previous two tracks, and whether any structural mix point is feasible at all. Sufficient duration is now implied by that last check: an option only exists when both recordings contain the whole overlap. The former reviewed-phrase_beats divisibility filter was removed when planning moved onto the arrangement's downbeat grid — note that the audition path still enforces it, so two phrase concepts currently coexist. Scores combine tempo, the harmonic heuristic, energy fit, novelty and the structural plan score, which carries the largest single weight: a musically wrong entry is not redeemed by a close tempo. Spectral/vocal/embedding compatibility is not scored until trustworthy features exist. Each candidate supplies feasible transition IDs at 8 to 128 beats, each carrying its own exit position, entry cue and session beat; the model selects an ID rather than inventing timing.
Each actor gets its own last eight memory notes, recent set history and the previous actor's public handoff. Handoffs are musical messages, not private reasoning. Track metadata and handoffs are untrusted data, and model output still passes deterministic shortlist validation.
Future physical profiles need captured evidence per observable and control. ClubBaseline is a conservative simulation policy, not a declaration that any particular CDJ/XDJ supplies every field.