Files
management/analysis/findings/F-010-stand-labels-lag-their-own-commits.md
T
Thore Cimbal eaa00f0ed2 analysis: add 16 evidence-backed drift findings
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.
2026-08-10 12:00:00 +00:00

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: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:79STATUS.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".