Architecture: 2-agent loop with turn alternation A→B→A→B. Agent A and B can use same or different models.
RAW (A): next input and history use exact output bytes. SANITIZED (B): parse + canonicalize {"step":N} only.
History accumulation: prompts include rolling conversation history (bounded by max history turns).
Contract: expected canonical bytes each turn are {"step":expected_step}; Cv compares output bytes to this literal.
Early sentinel: suffixLen > 0 (newline/trailing expansion) is tracked as first structural drift artifact.
Drift separation criterion: reinforcementDelta(raw) > 0.00 and driftP95(raw)/driftP95(sanitized) ≥ 2.00 while ParseOK/StateOK ≥95%.