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

> Engineering log · [Phase 15 — Audit remediation, v0.8.0](https://borda.github.io/lucid-YOLO/engineering/phase-15-audit-remediation/)
>
> 🔗 Depends on [WP-166](https://borda.github.io/lucid-YOLO/work_packages/wp-166/), [WP-168](https://borda.github.io/lucid-YOLO/work_packages/wp-168/), [WP-169](https://borda.github.io/lucid-YOLO/work_packages/wp-169/), [WP-170](https://borda.github.io/lucid-YOLO/work_packages/wp-170/), [WP-171](https://borda.github.io/lucid-YOLO/work_packages/wp-171/), [WP-172](https://borda.github.io/lucid-YOLO/work_packages/wp-172/), [WP-173](https://borda.github.io/lucid-YOLO/work_packages/wp-173/), [WP-174](https://borda.github.io/lucid-YOLO/work_packages/wp-174/) · Needed by [WP-176](https://borda.github.io/lucid-YOLO/work_packages/wp-176/)
>
> ⬅️ [WP-174](https://borda.github.io/lucid-YOLO/work_packages/wp-174/) · [Roadmap](https://borda.github.io/lucid-YOLO/ROADMAP/) · [WP-176](https://borda.github.io/lucid-YOLO/work_packages/wp-176/) ➡️


## WP-175 — the record describes the repository that exists

<a id="wp-175"></a>

**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](https://borda.github.io/lucid-YOLO/work_packages/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.

