why — verbatim body, runs/commits footer, fragment scopingThe colour why: view bakes attribution into hidden O tokens (#rrggbb commit ?<hashlet>, WHY-001); --plain (view/bro.js whyPlain) strips U/O and emits bare file bytes, so a pipe consumer (LLM agent, grep, CI) gets NO attribution at all. Agents read byte streams only — the alt-screen TUI is invisible to them (BRO-027).
Plain why output an agent reads in one pass — self-contained, greppable, three parts:
why <uri> (verb form); body = file bytes behind a cat -n-style gutter (6 right-aligned + 2 spaces), ABSOLUTE file line numbers even for a scoped fragment.why-runs footer: one line per origin commit, 8-char hashlet, line.col-line.col spans, * marks a run crossing a line boundary, wt...... = the unattributed working-tree layer.why-commits legend: hashlet date5 author title per contributing commit; date5 is the 5-char DDMon / current-week DowDD form jab log prints.why <path>#L41 (line anchor) and why <path>#authorIdent / #authorIdent:L41 (symbol anchor, the HUNKu8sMakeURI convention) narrow the hunk; WITH a fragment the body defaults to ONE PAGE, without — the full file. Locator resolution is /todo/SPOT/SPOT-001's shared/spot.js, not why-local code.?a..b range mode keeps the same shape; surfaced deleted runs carry a - mark in why-runs.L/:L forms are locators.[visible][O] pairs with byte offsets in hand; line.col comes from counting newlines in that SAME walk — no second scan, no new engine.why-runs, why-commits): one pass splits the hunk, grep <hashlet> pulls both spans and legend.cat:/diff: can adopt the same fragments later (file a separate ticket if pursued).- marks on deleted runs in why-runs(none yet)
(pending)