v3.12.6 - The Tray Learns to Project Its Debate
A documentation-and-housekeeping release: the debate protocol learns to describe the Task Tray as a bounded projection surface rather than a raw transcript, while CI and the lazy-enrichment tests are tuned to age gracefully. No runtime or library code changed.
Highlights
- Docs — Task Tray operator dashboard defined (
docs/DEBATE_PROTOCOL.md, +91 lines). A new section establishes the Task Tray window as a human/CONDUCTORcontrol surface over projections of the debate, not a replay ofdebate_messages. The immutable raw log stays the ledger; the tray presents bounded, drill-back-capable views to turn read cost fromO(everything × agents)intoO(changes × interested actor).- Specifies the required projections:
HUMAN_BRIEF,CONDUCTOR_INBOX,LANE_STATE,ADVOCATE_QUEUE,EXECUTOR_QUEUE,STALE_OR_OVERCOORDINATION, andSYNC_HEALTH. - Requires every projection row to carry provenance (
raw_event_ids/payload_ref/artifact_ref) so drill-back stays possible and summaries don't become a new stale-read source. - Codifies backpressure exemptions (high severity, operator/
CONDUCTOR-addressed,decision_needed, failing sync, security/legal/reputation flags, user overrides) and theCONDUCTORstop reasons (STOP_PASS,STOP_STANDBY,STOP_HANDOFF,STOP_BLOCKED,STOP_COST,STOP_USER_DECISION). Reaffirms thatSTOP_SYNC_PROTECTIONis not valid — bridge sync must never halt over a dirty generated/render-only artifact.
- Specifies the required projections:
- CI — actions bumped to Node 24-ready majors (
.github/workflows/ci.yml).actions/checkoutv4 → v6 andactions/setup-pythonv5 → v6. - Tests — stale-entity dates made relative (
tests/test_lazy_enrichment.py).TestStaleEntitiesnow derivesupdated_atfromdatetime.now(UTC) - timedelta(days=...)instead of hard-coded 2025/2026 timestamps, so the staleness assertions don't rot as the calendar advances.
Notes
- Documentation, CI, and test-only changes — no behavioral or schema changes and no migration required.