ADR-053: The backlog view does not carry the archive
| Status | Accepted (2026-08-19) |
| Date | 2026-08-19 |
| Author | Ćukasz Bodurka |
| Tags | backlog, dashboard, methodology |
Context
ADR-051 made one clause of its dashboard section binding: "Closed rows stay reachable in the view, and that requirement is the part of this section that binds. Work that has been relocated has not been hidden." It named the "show finished" chip as the surface. The chip was removed in 1.1.13 for an unrelated defect - it made the count under the pool mean two different things depending on a button nobody remembers pressing - which left the requirement standing with nothing carrying it, tracked as ARCHIVE-VIEW-1.
Two things are true of the code as it stands, and neither was checked when the requirement was written:
- No surface reads the archive.
standard/scripts/generate-dashboard/index.mjscontains no reference tobacklog-archive.mdin any form. - Timeline, the candidate the row named first, could not have carried it. It reads
docs/sprints/TIMELINE.md- sprint throughput, forecast and verdict against target. Closed backlog rows are not among its inputs, and giving it them means a second, unrelated input for a tab that answers a period question.
Nothing is broken yet only because no archive exists: not in this repository, not in any adopted one. So the requirement has bound nothing for six days while blocking the first cut that would make it matter.
The question it exists to answer - what happened to <id> - is a lookup by id against a file holding one row per closed item and a pointer to where its content went. Opening the file answers it. So does git log -p backlog.md, for anyone who has the repository at all.
Options considered
- A. Build a control on the Backlog tab. Rejected: it reinstates the defect that removed the chip, for a reader who has not appeared. The pool's count would again mean two things depending on a control's state.
- B. Give Timeline a second input. Rejected: it makes one tab answer two unrelated questions, and couples a core-profile file to a scale-profile projection.
- C. No surface at all. Chosen.
Decision
The archive is read as a file, not through the backlog view. No tab, no control, no generator input, at either profile.
ADR-051's reachability clause is narrowed to nothing rather than reassigned. It was written against hiding closed rows inside the pool view - a mask over a live list, which is what hideDone was. A separate file is not a mask, and "not hidden" is satisfied by the row being in a file with its own name.
Where closed work does surface as history - what a period finished, how much moved - it is built from the changelog and the sprint records, which are the artifacts shaped by period already.
Consequences
- Positive: the first archive cut is unblocked, and
ARCHIVE-VIEW-1closes without building anything. The requirement had made every future release cut wait on a design nobody needed yet. - Positive: each dashboard tab keeps one input.
- Negative: a reader who only ever sees the generated dashboard cannot see a closed row. Taken deliberately: period questions are answered by Timeline and Reports, and the id lookup is one file open away for anyone with the repository.
- Negative: this narrows a clause of a record accepted six days earlier, on measurement rather than on use. If it is wrong it is wrong cheaply - a surface is additive, and nothing here removes data.
Revisit when
- Someone asks what happened to
<id>and neitherbacklog-archive.mdnorgit log -p backlog.mdanswers it. That is the concrete signal, and it is a sentence somebody says rather than a threshold to invent. - Or an archive grows past the point where opening the file is a search - the same size at which ADR-051 already says the release headings become the split.
