- Status: Accepted
- Date: 2026-08-12
A red lane carries two very different meanings: "the thing under test regressed" or "the lane itself has never been shown to work". The lab produced two false bug reports against snosi in one week (snosi#504, #505, both closed invalid) by reading a never-green lane's red as evidence about the image, when the defects were in the lane — a SIGPIPE/pipefail inversion and a wrong image tier (docs/roadmap.md, Phase A). The dashboard is the surface other people act on, so it must not present an unproven lane's failure as a finding.
unproven is a first-class lane state, distinct from Failed, computed
and rendered end to end:
- The collector (scripts/collect_runs.py)
computes
everGreenper lane — whether any run in the retention window ever reachedSucceeded— and writes it intoruns.json. - The dashboard (site/src/dashboard.mjs)
maps a failing latest run with
everGreen === falsetounproven; site/src/pages/index.astro renders it deliberately muted rather than alarming, with the note "This lane has never passed. Treat its red as a question about the lane, not a finding about the image." - A lane that has succeeded at least once and now fails renders as a real failure.
- A brand-new lane cannot generate a false regression report; it renders as a question about itself until its first green.
everGreenis computed over the runs the cluster still retains (failed workflows kept 30 days, successful 7 — seeworkflow-controller-configmap), so a lane whose only green aged out of retention can regress tounproven. That is accepted: absence of retained evidence is absence of evidence.- Enforced by unit tests
(site/test/dashboard.test.mjs:
"never-green failures are shown as unproven"; a green-then-failed lane
stays
Failed) and exercised end to end by e2e/dashboard.spec.ts.
- Render never-green lanes red like any failure: the status quo that produced both false reports; rejected on that evidence.
- Hide never-green lanes entirely: hides the work item; an unproven lane still needs to be visible so someone makes it pass.
- A manual allowlist of "trusted" lanes: decays instantly;
everGreenis computed from the same run data the page already shows.
- Shapes: docs/roadmap.md (Phase A, item A4), README.md — Reporting
- Implemented by: scripts/collect_runs.py, site/src/dashboard.mjs, site/src/pages/index.astro
- Enforced by: site/test/dashboard.test.mjs, tests/test_collect_runs.py
- Builds on: ADR-0004 (the pipeline that carries the state), ADR-0010 (the same "green must mean something" principle at submission time)