Skip to content

📦 WP-175 — docs: the record describes the repository that exists

Engineering log · Phase 15 — Audit remediation, v0.8.0

🔗 Depends on WP-166, WP-168, WP-169, WP-170, WP-171, WP-172, WP-173, WP-174 · Needed by WP-176

⬅️ WP-174 · Roadmap · WP-176 ➡️

WP-175 — the record describes the repository that exists

Two checks first, then the wording. The order is the point. A sweep that only edits prose leaves the next drift undetected, and every claim this row corrects had been wrong for at least one release precisely because nothing failed on it. audit_version_single_source.py gained check_readme_names_the_current_version, which compares the README's Current release: **X** line against lucid_yolo.__version__ and also fails when that line is absent, so deleting the sentence cannot silence the guard; it caught the live 0.4.0 against 0.7.0 drift on its first run. audit_license_headers.py gained the YOLO26 paper as a required fragment of both NOTICE and the README. A positive fragment suffices rather than a ban on the vendor-bound form, because the leading article discriminates — the YOLO26 paper is not a substring of the Ultralytics YOLO26 paper — and a repo-wide ban would have to carve out R1's own literal title in PROVENANCE.md.

Three of the row's own premises were wrong, and are corrected here rather than transcribed. The row says the blueprint is the source of 49 in-code citations; measured on this tree it is 133 blueprint lines across 36 files under src/, 107 of them in blueprint sec. N form, and R37 records the measured figure. The row says the README "offers an install line that resolves to nothing" — true, but understated: PyPI's JSON API shows lucid-yolo with 26 releases, every one a .devN pre-release, latest 0.5.0.dev2, so a bare pip install resolves to nothing because pip skips pre-releases, --pre resolves to a snapshot two minors behind this tree, and the README's own explanation ("every distribution published before 0.4.0 is a .devN") was wrong twice over — there is no non-dev release at all and no 0.4.x of any kind. The install line is gone, replaced by the evidenced explanation and D20's consequence: the runtime git pin makes 0.7.0 unpublishable until a fuse-augmentations 0.12 exists on PyPI.

A seventh site, and a claim the row did not know was stale. The vendor-bound phrase was enumerated in NOTICE, docs/index.md and four model cards; it also sat in docs/REPRODUCTION_REPORT.md's preamble. That document is append-only under D10 — but the rule is scoped to its dated sections ("a later release corrects an earlier claim by adding to it"), and the preamble is the document's standing self-description rather than a record of anything, so correcting it edits no claim away. The non-affiliation sentence keeps the vendor's name, on WP-161's reasoning that a disclaimer not naming the party it disclaims is a sentence about nobody. Separately, README:62 asserted the paper "addresses no keypoint task at all"; the R1 abstract, fetched during link verification, lists pose estimation among the family's tasks. The absolute claim is replaced by the checkable one — no allowlisted paper publishes a keypoint architecture or parameter table, which is what A65/A66 actually support.

The task count, in six documents and one coupled pair. The README banner, docs/index.md, docs/TRAINING.md, docs/DATASETS.md, NOTICE and lucid_yolo.__init__'s package docstring all counted three tasks against four shipped tiers, the keypoint tier having released at 0.5.0. pyproject.toml's description and mkdocs.yml's site_description counted three as well, and those two are not independent — audit_docs_site.py requires them byte-identical, so editing one alone fails the gate. It did, which is how the coupling was confirmed rather than assumed.

Two register rows. docs/PROVENANCE.md gains a Project-internal governing documents section with R37 for the blueprint — authorship as NOTICE's copyright holder, unpublished and non-public, no licence grant and not redistributable, every method claim downstream of R1–R36 — and a second audit row covering 975ff50..f6ec3e1. That audit walked 193 commits and found 27 whose trailers are refused by check_commit_trailers.py; all 27 predate b4f3e03, and the enforced window b4f3e03..f6ec3e1 is clean at 15 of 15. The 27 are recorded as unexamined rather than characterised, because sampling found at least one that is a citation failure ('Provenance:' trailer lists no source id) rather than a shape failure, and a register row asserting a category it did not check is the defect this row exists to remove.

One stale claim left standing, deliberately. docs/DECISIONS.md's D1 still reads "Pose and classification remain future 0.x work" against a keypoint tier that shipped at 0.5.0. D1 is a recorded decision rather than a description, and rewriting one to match what later happened is how a decision log stops being evidence of anything. It wants a superseding entry, which is a [PRINCIPAL] act and not this row's.