blue/.blue/docs/rfcs/0033-round-scoped-dialogue-files.impl.md
Eric Garcia 02901dfec7 chore: batch commit - ADRs, RFCs, dialogues, spikes, and code updates
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>
2026-01-30 16:28:31 -05:00

5.8 KiB
Raw Blame History

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

  1. Update build_judge_protocol: Judge reads only scoreboard + tensions + prior summary
  2. Remove perspectives.md: No assembled perspectives file
  3. Add agent return requirement: Agents must return summary to Judge after writing
  4. 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