blue/.blue/docs/spikes/2026-01-26-consistent-table-headers-in-generated-docs.md
Eric Garcia 16d45d9a11 feat: alignment dialogue subagents, MCP instructions, and document batch
Alignment dialogues now use custom `alignment-expert` subagents with
max_turns: 10, tool restrictions (Read/Grep/Glob), and hard 400-word
output limits. Judge protocol injects as prose via RFC 0023. Moved
Blue voice patterns from CLAUDE.md to MCP server instructions field
for cross-repo portability.

Includes RFCs 0017-0026, spikes, and alignment dialogues from
2026-01-25/26 sessions.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-26 07:09:39 -05:00

3.1 KiB

Spike: Consistent Table Headers In Generated Docs

Status In Progress
Date 2026-01-26
Time Box 1 hour

Question

How can we ensure all Blue-generated documents use consistent table header formatting? Currently two patterns exist: (1) headerless metadata tables | | |\n|---|---| used by most doc types, and (2) inline bold metadata like **Date**: value used by Decision and Alignment Dialogue. We need to catalog all inconsistencies, decide on a single standard, and identify the code changes needed.


Findings

Current State: 10 Document Types, 3 Metadata Patterns

Pattern A — Headerless metadata table (the standard):

| | |
|---|---|
| **Status** | Draft |
| **Date** | 2026-01-26 |

Used by: RFC, Spike, ADR, Audit, Postmortem, Runbook, PRD, Dialogue — 8 of 10 types.

Pattern B — Inline bold with colon:

**Date:** 2026-01-26

Used by: Decision only (crates/blue-core/src/documents.rs:413).

Pattern C — Inline bold with colon (multiline):

**Draft**: Dialogue 0001
**Date**: 2026-01-26 14:30
**Status**: In Progress
**Participants**: 💙 Judge, 🧁 Croissant, 🧁 Brioche

Used by: Alignment Dialogue only (crates/blue-mcp/src/handlers/dialogue.rs:781-794).

Named-Column Data Tables (Already Consistent)

All data tables across doc types use proper column headers with separator rows. No inconsistency here:

Document Table Columns
Postmortem Timeline Time, Event
Postmortem Action Items Item, Owner, Due, Status, RFC
Runbook Escalation Level, Contact, When
Dialogue Rounds Round, Topic, Outcome
Alignment Expert Panel Agent, Role, Emoji
Alignment Scoreboard Agent, Wisdom, Consistency, Truth, Relationships, Total
Alignment Perspectives ID, Agent, Perspective, Round
Alignment Tensions ID, Tension, Status, Raised, Resolved
PRD Success Metrics Metric, Current, Target

Files Requiring Changes

Only 2 functions need updating:

  1. crates/blue-core/src/documents.rsDecision::to_markdown() (line 413)

    • Change: **Date:** {} inline format → headerless metadata table
    • Add | | |\n|---|---| block with Date row
  2. crates/blue-mcp/src/handlers/dialogue.rsgenerate_alignment_dialogue_markdown() (lines 781-794)

    • Change: inline bold metadata block → headerless metadata table
    • Move Draft, Date, Status, Participants, RFC into table rows

Validation Approach

The codebase already has validate_rfc_header() and convert_inline_to_table_header() in documents.rs (lines 585-688) that detect and convert inline headers to table format. These could be extended as a lint/migration tool for existing docs, but the primary fix is in the generation code itself.

Recommendation

Standardize on Pattern A (headerless metadata table | | |\n|---|---|) for all document metadata. This is a 2-file, ~20-line change. Named-column data tables are already consistent and need no changes.


Investigation notes by Blue