Twelve drift findings and four works-well findings, each citing file paths, line numbers, commit hashes or rows in analysis/data/. Every 'neckbeard mechanism' field names a concrete rule in neckbeard v0.1.1 or states explicitly that none exists.
3.0 KiB
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:182026-08-01 2026-08-09 roadmap.md:32026-08-06 2026-08-09 hosts/overmind.md:142026-07-31 2026-08-09 -
The labels are not merely old, they are contradicted inside their own file:
hosts/overmind.mdcarries the table label "Stand 2026-07-31" at line 14 and the sentence "Stand 2026-08-09 sieben" at line 28. -
CLAUDE.mdis 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, triggerdate-claim). -
The whole document set is young — every management doc is ≤ 8 days old (
docs_inventory.tsv, maxdays_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".