ID

R601

Status

Backlog

Bucket

structural

Priority

3

Theme

diagnostics

Created

2026-08-06

Updated

2026-08-07

The diagnostic stream unifies

Graphitron’s build findings reach consumers through three parallel channels that were meant to collapse into one and never did. ValidationReport carries errors: List<ValidationError> and warnings: List<BuildWarning> as separate slots (ValidationReport.java:24-28); the LSP-aligned Diagnostic record shipped with the walker foundation slice but the planned walkerDiagnostics slot next to them was never added (zero hits in the tree), and Diagnostic still carries no tags component (Diagnostic.java:23-30). Every producer that wants to say something must pick a channel, every reader that wants the whole picture must drain three, and BuildWarning is a shape whose only reason to exist is that the unification never landed.

The deliverable is one located-violation stream: the three slots collapse, BuildWarning retires, Diagnostic gains tags, and the lsp4j projection boundary stays where it is (no code below the LSP module sees the lsp4j types; the LSP-side projector maps at the wire). Severity is a column, not a channel.

This item is cut from the retired dimensional-model umbrella, which owned "the unified diagnostic surface" without a delivery vehicle. It is deliberately independent of the fact-base migration: R589 mints violations into the existing diagnostics channel and fixes only their ordering, and the model store leaves diagnostics out of its first iteration by design, so unifying the report surface neither waits for nor blocks that work. mcp-aggregated-diagnostics (R569) is the waiting consumer, in its bridge loader rather than its aggregate now that the aggregate is a store query: loading one stream into the store’s diagnostic bridge is one load, loading three channels is three loads kept honest by hand.