50 lines
3.2 KiB
Markdown
50 lines
3.2 KiB
Markdown
# 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.
|