Files
management/analysis/findings/F-010-stand-labels-lag-their-own-commits.md
T

54 lines
3.0 KiB
Markdown
Raw Normal View History

# F-010: Hand-written "Stand" labels are older than the commits that touched the same file
category: doc-drift
confidence: medium
evidence:
- Label vs. last commit on `main` (`analysis/data/docs_inventory.tsv`, `git log -1`):
| file | "Stand" label | last commit |
|---|---|---|
| `CLAUDE.md:18` | 2026-08-01 | 2026-08-09 |
| `roadmap.md:3` | 2026-08-06 | 2026-08-09 |
| `hosts/overmind.md:14` | 2026-07-31 | 2026-08-09 |
- The labels are not merely old, they are contradicted inside their own file:
`hosts/overmind.md` carries the table label "**Stand** 2026-07-31" at line 14 and the
sentence "Stand 2026-08-09 **sieben**" at line 28.
- `CLAUDE.md` is labelled "Projektrealitäten (Stand 2026-08-01)" while containing a rule
section headed "Commit-Konventionen (seit 2026-08-07)" — six days newer than the label
above it.
- Scale of the surface: 40 documents, 813 extracted claim lines, of which 68 carry an
explicit date assertion (`analysis/data/claims.tsv`, trigger `date-claim`).
- The whole document set is young — every management doc is ≤ 8 days old
(`docs_inventory.tsv`, max `days_since_change` = 8) — so this is drift accumulating at
high speed, not neglect over time.
impact: The label is what a reader uses to decide whether to trust a section, and here it
systematically under-reports freshness, which trains readers to distrust current content
and, worse, gives no signal at all when a section really is stale. In `roadmap.md` the
combination is actively misleading: "Stand 2026-08-06" over numbers that were already wrong
on 2026-08-09 (F-001).
root-cause pattern: **Hand-maintained metadata about a file, kept inside the file.**
Git already knows the answer; the label is a second source of truth that must be updated by
hand and therefore is not.
neckbeard mechanism: Prevented by `AGENTS.md:79``STATUS.md` is "Generated overview …
do not edit by hand", produced by `scripts/gen_status.py` — combined with
`AGENTS.md:101-103`: "Deterministic jobs (status generation, validation, link checks) are
done by scripts, not by you. If a deterministic job lacks a script, propose one instead of
doing it by inference." A file's freshness is exactly such a deterministic job.
`docs/aar/2026-08-09-neckbeard-v1-creation.md` reinforces it from experience:
"Deterministic jobs belong in scripts, not inference — this rule paid for itself repeatedly",
and "Git is the changelog. No separate log file." (`WORKFLOW.md:140`) is the same principle
applied to history.
Note for Session 2: `schema.yaml` requires a `date` field on adr, design and aar artifacts
(`kind: date`), which is a *creation/decision* date and legitimately hand-set — that is not
the same thing as a freshness label and should not be conflated when migrating.
confidence note: medium — the dates are exact, but a "Stand" label may be intended as
"state of the described system as last verified", not "state of this text". Under that
reading the labels are defensible for `hosts/overmind.md`; they are not for
`roadmap.md`, whose own header says "Zahlen hier veralten, das Board nicht".