Files
management/analysis/findings/F-017-prose-asserts-states-already-resolved.md
T
Thore Cimbal e68b295249 analysis: complete the systematic claim verification; add F-017 and ADR-0010 draft
verify_claims.py gives all 813 claim rows a mechanical disposition;
the 28 flags were adjudicated by hand (REPORT.md appendix). Two survived
as genuine drift (F-017): a closed issue still described as open in
shared/lab-netzwerk.md, and a 'pending' decision block in hosts/cfgmon.md
whose premise the same file records as executed.

Also: narrow the vendored-path filter (it silently dropped 7 tracked
icon files and produced false path-miss flags), record the confirmed
canonical author identity in F-003, verify the Gitea#48->GitLab#46
numbering shift by title in F-005, and add the ADR-0010 draft under
analysis/drafts/ for the human to git-mv into decisions/.

Branch renamed to Neckbeard-v0.1.1-analyse-1 per the human.
2026-08-10 12:00:00 +00:00

56 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# F-017: Prose still asserts work-item states the tracker has already resolved
category: doc-drift
confidence: high
Found by the systematic claim-verification pass (`analysis/scripts/verify_claims.py`
-> `analysis/data/claims_verification.tsv`), which gave all 813 extracted claim rows a
mechanical disposition; the 28 flagged rows were adjudicated by hand (REPORT.md appendix).
Two survived as genuine drift; a third observation rides along.
evidence:
1. **A closed issue described as open.** `shared/lab-netzwerk.md:118-120`: "Zwei Punkte
… bleiben offen: [#13] … und [#15]". management#13 (LABNET-03) is **closed**,
`closed_at` 2026-08-02T13:43Z (`analysis/data/gitlab_issues.json`); #15 is indeed open.
The doc's last commit is dated 2026-08-02 12:00 UTC — but that timestamp is the
*anonymised* one (`CLAUDE.md:122-128`), so whether the sentence was already false when
written or became false minutes later is **undecidable from the repository**: the
anonymisation rule destroys exactly the evidence a freshness analysis needs. What is
decidable: seven days later it still says "offen".
2. **An open decision whose premise was already executed — in the same file.**
`hosts/cfgmon.md:119-124` ("### Entscheidungsabhängig") makes removing the
`thread-net-git` runner dependent on "ob das gitops-Repo seinen leichten
`deploy-on-push.yml` … behält". `hosts/cfgmon.md:61` records that gitops removed
`.gitea/workflows/` entirely (commit `5e46a24`; verified: the commit deletes exactly
`deploy-on-push.yml` + `milestone-release.yml`, and `tree_axion1337.chat-gitops.txt`
contains no `.gitea/` today), and `hosts/cfgmon.md:70-75` records the runner removal
as done. The "pending" decision block outlived its own answer by 60 lines.
3. **Bare issue references default to the wrong project.** `hosts/cfgmon.md:63` "siehe
#33" and `verfahren/aar/2026-08-09-refinement-und-betrieb.md:60` "#60" carry no
project. Under `README.md:47` ("Alle offenen Punkte sind Issues **in diesem
Projekt**") a reader resolves them as management#33/#60**neither exists**. Both
resolve by content to gitops issues (gitops#33 "Gitea Actions Workflows existieren,
laufen aber nie…" matches the dead-workflow context; gitops#60 "Blueprint
matrix-recovery-flow … Passwort-…" matches the password-recovery diagnosis). Content
correct, address ambiguous.
impact: Small per instance, but these are precisely the rows a systematic sweep exists to
find: each is a sentence a reader would act on (reopen a closed question, wait on a dead
decision, search the wrong tracker). Instance 1 also shows a structural side effect worth
naming for Session 2: **the timestamp anonymisation makes "was this claim true when
written" an unanswerable question** for every doc-vs-tracker discrepancy on the same day.
root-cause pattern: **Decision executed in the tool, documentation not carried along**
(pattern A) — here at sentence granularity rather than document granularity.
neckbeard mechanism: Partly covered, partly gap. Under ADR-0002
(`docs/adr/0002-in-repo-issues.md`) an issue reference is a relative link to
`docs/issues/NNNN-slug.md` — instance 3's ambiguity cannot exist, because
`scripts/validate.py` `check_body_links` fails on a target that is not there. For
instances 12 the framework has the *rule* (`WORKFLOW.md:136-138`, contradictions never
left silently coexisting) and the *ritual* (`WORKFLOW.md:126`, wiki lint for "claims
superseded by newer sources"), but no deterministic check compares a prose assertion
("open", "pending") against the frontmatter status of the artifact it points at —
**that specific check is a neckbeard gap**, and `verify_claims.py`'s expectation-word
logic is a working sketch of it.