Files
management/analysis/findings/F-014-issue-hygiene-is-real.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.2 KiB

F-014: The issue discipline the docs describe is actually lived — measurably

category: works-well confidence: high

evidence: all measured against analysis/data/gitlab_issues.json (111 issues, 71 open).

  • Milestone duty (CLAUDE.md:98-103, "Jedes Issue gehört zu genau einem Meilenstein"): 0 of 71 open issues lack a milestone. Across all four active projects, in every one.
  • Exactly one status label (CLAUDE.md:76-78, README.md:60): 0 issues carry more than one status: label.
  • WIP limit 2 (CLAUDE.md:77, "WIP-Limit 2 — auch sessionübergreifend zu verteidigen"): status:doing = 0. The limit is not merely respected, there is no work parked as in-progress at all.
  • No priority in titles (CLAUDE.md:90-97, cleaned up 2026-08-06 after 34 migrated issues carried prefixes and two contradicted their own label): 0 open issues carry a [HIGH]/[MEDIUM]/[LOW] prefix. Priority lives only in priority:* labels (48 medium, 37 low, 12 high, 4 critical).
  • Legacy IDs preserved and never reused (README.md:64-66, "IDs … werden nie wiederverwendet; sie leben in Issue-Titeln weiter"): 23 issues carry a leading legacy ID (^ID:), across 23 distinct IDs — no ID identifies two issues. Three further titles mention an ID belonging to another issue (LABNET-02 in management#15, #26 and #27), which is the scheme used as intended: per CLAUDE.md:92-93 the IDs "benennen den Gegenstand", so referring to one from another issue is a cross-reference, not a collision.
  • Closed, not deleted (README.md:72-74): 40 closed issues are present and readable alongside the 71 open ones.
  • Link hygiene in the management repo is likewise clean: of 161 links in its documents, 0 broken (analysis/data/links.tsv); the two broken links in the whole corpus are malformed upstream Element changelog entries in ThreadNet-Web.

impact: The rule set is not aspirational. Where a rule is mechanically checkable and the tracker enforces it — a milestone field, a label — compliance is total. That is the strongest single argument for the migration: this project already works the way neckbeard assumes, and the failures found elsewhere in this report are concentrated exactly where no mechanism enforces anything (prose, branches, commit metadata, cross-document consistency).

root-cause pattern: Where the tool can hold the rule, the rule holds. The inverse of the pattern behind F-001, F-004, F-005 and F-010.

neckbeard mechanism: Preserved and extended by ADR-0002 (docs/adr/0002-in-repo-issues.md) plus schema.yaml:76-84, which makes status an enum ([open, in-progress, done, rejected]) that scripts/validate.py enforces via check_fields — the file-level equivalent of "exactly one status label", but checkable in CI rather than by convention. Note the direction of loss to plan for: neckbeard's issue schema has no milestone and no priority field, and docs/aar/2026-08-09-neckbeard-v1-creation.md lists "priority field on issues (YAGNI, revisit via refinement)" among the ideas deliberately not adopted. This project uses both, on 100% and 101 of 111 issues respectively. Recorded here as field-test evidence, not as a proposal — see REPORT.md's gap list.