ADRs: - Update 0008-honor, 0009-courage, 0013-overflow, 0015-plausibility - Add 0017-hosted-coding-assistant-architecture RFCs: - 0032: per-repo AWS profile configuration (draft) - 0033: round-scoped dialogue files (impl + plan) - 0034: comprehensive config architecture (accepted) - 0036: expert output discipline (impl) - 0037: single source protocol authority (draft) - 0038: SDLC workflow discipline (draft) - 0039: ADR architecture greenfield clarifications (impl) - 0040: divorce financial analysis (draft) - 0042: alignment dialogue defensive publication (draft) Spikes: - Read tool token limit on assembled dialogues - RFC ID collision root cause - Expert agent output too long - Judge writes expert outputs - Blue MCP server on superviber infrastructure - Playwright MCP multiple window isolation Dialogues: 16 alignment dialogue records Code: - blue-core: forge module enhancements - blue-mcp: env handlers and server updates - alignment-expert agent improvements - alignment-play skill refinements - install.sh script Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
5.8 KiB
RFC 0033: Round Scoped Dialogue Files
| Status | Implemented |
| Date | 2026-01-26 |
| Source Spike | Read tool token limit on assembled dialogue documents |
| Alignment Dialogues | Round-scoped file architecture, Separated document architecture |
Summary
Judge agent reads assembled dialogue documents that accumulate to 31K+ tokens, exceeding Read tool's 25K limit. This RFC implements a round-scoped file architecture where each round writes to separate files, keeping all reads under limits while minimizing Opus (Judge) usage.
Problem
The current alignment dialogue implementation accumulates all expert perspectives and synthesis into a single document. With 3-6 experts, 2-4 rounds, and ~400 words per perspective:
- 4 rounds × 5 experts × 400 words = ~8,000 words
- Plus synthesis, tensions, metadata = ~10KB per round
- Total: 40KB+, or ~31K+ tokens
The Read tool's 25K token limit causes dialogue failure when the Judge attempts to read the assembled document.
Solution
Replace single-document accumulation with round-scoped files. No perspectives.md — agents read peer files directly.
/tmp/blue-dialogue/{slug}/
├─ scoreboard.md ← Judge writes + reads (~500 bytes)
├─ tensions.md ← Judge writes, both read (~1-2KB)
├─ round-0/
│ ├─ muffin.md ← Agents write, agents read (~2-3KB each)
│ ├─ cupcake.md
│ └─ scone.md
├─ round-0.summary.md ← Judge writes, agents read (~1-2KB)
├─ round-1/
│ └─ {agent}.md
└─ round-1.summary.md
Every file has exactly one writer and at least one reader.
Cost Optimization
| Actor | Model | Reads | Writes |
|---|---|---|---|
| Judge | Opus | scoreboard + tensions + prior summary | scoreboard, tensions, summary |
| Agents | Sonnet | tensions + peer files + prior summary | own perspective file |
Opus reads per round: ~5KB (scoreboard + tensions + prior summary) Sonnet reads per round: ~15KB (tensions + peer files + prior summary)
Key Design Decisions
Resolved through alignment dialogue with 100% expert convergence:
| Decision | Resolution |
|---|---|
| perspectives.md purpose | Removed — write-only artifact with no consumer |
| Agent coordination | Peer-to-peer — agents read each other's raw outputs directly |
| Token growth | Sonnet reads acceptable — 25K is Read tool limit, not cost constraint |
| Cross-round references | Global namespace — T01, T02, T03... never reused across rounds |
| Final assembly | Post-dialogue tooling — concatenate files after completion if needed |
Token Budget
Judge (Opus) per-round reads:
| Read Operation | Size |
|---|---|
| scoreboard.md | ~500 bytes |
| tensions.md | ~1-2KB |
| Prior round summary | ~1-2KB |
| Total | ~3-5KB |
Agents (Sonnet) per-round reads:
| Read Operation | Size |
|---|---|
| tensions.md | ~1-2KB |
| Peer agent files | ~2-3KB × 2-4 peers = ~6-12KB |
| Prior round summary | ~1-2KB |
| Total | ~10-15KB |
Opus usage minimized. Sonnet reads well under 25K limit.
Agent Return Constraint
Subagents MUST return summary information to the Judge to ensure process continuation:
After writing your perspective to the file, return a brief summary:
- Key perspective(s) raised
- Tension(s) identified
- Concession(s) made
This ensures the Judge receives confirmation that agents completed and has context for synthesis without re-reading files.
Judge Workflow
Pre-round (prompt distribution):
// Read minimal state (~3-5KB Opus)
let scoreboard = read("scoreboard.md");
let tensions = read("tensions.md");
let prior_summary = read(&format!("round-{}.summary.md", round - 1));
// Spawn agents with context
for agent in experts {
spawn_agent(agent, topic, tensions, prior_summary);
}
Post-round (synthesis from agent returns):
// Agents return summaries — no file reads needed
let summaries = collect_agent_returns();
let synthesis = judge_synthesize(summaries);
// Write separated artifacts
update("scoreboard.md", new_scores);
update("tensions.md", resolved, new_tensions);
write(&format!("round-{}.summary.md", round), synthesis);
Implementation
Changes to dialogue.rs
- Update
build_judge_protocol: Judge reads only scoreboard + tensions + prior summary - Remove perspectives.md: No assembled perspectives file
- Add agent return requirement: Agents must return summary to Judge after writing
- Update agent prompts: Agents read peer files directly from
round-N/directories
File Structure
scoreboard.md (~500 bytes):
- Convergence percentages per agent
- Round count
- Overall status
tensions.md (~1-2KB):
- Active tensions with IDs (T01, T02...)
- Resolved tensions (marked, not removed)
round-N.summary.md (~1-2KB):
- Judge synthesis only
- Emerging consensus
- Key decisions this round
round-N/{agent}.md (~2-3KB each):
- Full agent perspective
- Read by peer agents (Sonnet)
- Judge receives summary via agent return, not file read
Test Plan
- Run 3-round alignment dialogue without token limit errors
- Verify scoreboard.md stays under 1KB
- Verify tensions.md stays under 3KB
- Verify round summaries stay under 3KB each
- Verify Judge (Opus) reads under 5KB per round
- Verify agents return summary to Judge after writing
- Verify agents can read peer files from prior rounds
- Verify final dialogue assembly works post-dialogue
"Right then. Let's get to it."
— Blue