Section totals, a page count and build sizes identified one reference document and one generated HTML corpus to anyone who knows them. They are written as N, M, an offset of N or a share in docstrings, comments, help text, reports, README, CLAUDE.md and the changelog; no measured relation changes. Sums that let N be worked back are written in words. The `okf quality --fasit` bar is 999/1000 (99.9 %), just under the known-good arm's measured share, and every build measured keeps its verdict. Red with the local list widened to those numbers: 52 tracked files. Green: 0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7.3 KiB
R3: release v0.8.1
A patch release and nothing else. It carries round 16's ranking rule
(--title-covered) to a reproducible ref so a downstream consumer can re-measure
its product (R2b) against a tag rather than against a branch tip. No new
functionality, no behaviour change in src/, no push.
Tag: v0.8.1, local and annotated, on 3daf983 (chore(release): 0.8.1).
v0.8.0 stays on 4d1f9d3 and v0.7.0 on 1260fac -- verified, both still
resolve there.
1 What this round did, and what it did not
Did: the version on both lines it lives on (pyproject.toml and
src/llm_ingestion_okf/__init__.py), round 16's changelog entry closed as
[0.8.1] with one bullet added for the rule's measured downside, five install
lines to @v0.8.1, the tag-history list given a current row and the previous
one demoted, two prose lines and one test-count history sentence corrected
where the tag would otherwise make them false, one commit, four gates, one tag.
Did not: no extractor, no arm, no flag moved. --pdf-outline and --bold-title
stay OFF and --title-covered stays ON exactly as round 16 shipped it -- a
release does not re-verify a default. No uv lock, no new dependency, docs/
history not rewritten, K3-15 not started, nothing pushed.
2 Premises, re-measured before building on them
Every premise the order carried reproduced, except one (SS 3).
| premise | re-measured |
|---|---|
base is 4d1b522, tree clean |
4d1b522, git status --short empty |
v0.8.0 on 4d1f9d3, v0.7.0 on 1260fac |
both confirmed |
git ls-remote origin refs/heads/main |
078b7df -- everything since is unpushed |
remote carries no v0.8.0 |
confirmed: newest remote tag is v0.7.0 |
install lines: README 4, llms.txt 1 |
confirmed on HEAD before editing |
| suite in the worktree | 1582 passed, 1 skipped; 1583 collected |
| suite in a frozen export | 1573 passed, 1 failed, 9 skipped -- the failure is test_the_four_existing_goldens_are_untouched, the export artefact (it runs git status against a repo root an export does not have) |
| ruff | 0.16.6 |
okf check rule count |
15, so K3-15 has not landed |
okf --version |
still not a flag; version read with importlib.metadata |
3 The deviations, stated before the work rather than after
The push list has three lines, not two. git ls-remote origin refs/heads/main is 078b7df and the remote carries no v0.8.0 at all, so the
operator has to push main, v0.8.0 and v0.8.1. Measured with ls-remote
against the remote, never against the local origin/main ref.
The downside the changelog had to state was in no tracked file. grep -rn 'RITB\|NS3935' over docs/ skills/ tests/ src/ returns nothing that records
it (the control: the same grep finds NS3935 elsewhere, so it can find). It
arrived from the order alone, so it was reproduced here before being published:
on the five-document folder, built to scratch, the same question delivers the
answering section at rank 1 with --no-title-covered and at rank 2 at the
shipped default, with the other seven delivered places unchanged. The changelog
states that at form level. The order's further claim -- that three other probe
questions on the same folder improved -- was NOT reproduced here and is NOT
published; leaving out a favourable number that was not measured in this round
is the conservative cut, not a contradiction of it.
The XML folder is not one file. The order said it holds exactly one file.
It holds 110: the one NISO-STS xml, and 109 images under graphics/
(43 png, 41 jpg, 25 bmp) which door B reaches because it walks recursively. The
run reports them as extractor_unknown 109/110 -- coded, never silent -- and
the concept count is unaffected. This is the repository's own recorded shape for
that product, not a new defect.
The changelog's own row differs slightly from the order's summary. The order
compressed hit@50 to "5/6 -> 6/6"; round 16's entry, which measured it, records
5/6 at default k and 6/6 at --k 50 before the rule. The entry's number
governs and was not rewritten.
4 The four gates, after git add and after commit
ruff 0.16.6. ruff check src tests tools -- All checks passed.
ruff format --check . -- 118 files already formatted. mypy src -- no issues
in 21 source files. pytest -q -- 1582 passed, 1 skipped, 1583 collected,
which is the figure the README publishes, re-measured on the release commit
itself. uv sync --frozen --extra extract is the install that makes mypy src
pass; plain --frozen drops the extra and mypy falls on pdfplumber.
5 The acceptance gate: installation FROM THE TAG
No uv tool install, no uv tool uninstall, no --force. The operator's PATH
was measured and not touched: which okf reports not found both before and
after this round -- it was already empty when the round started. Everything ran
from the export's own venv.
git archive v0.8.1 | tar -x -C /tmp/r3-release-v081/r3-install/export
cd <export> && uv sync --frozen --extra extract
| row | measured |
|---|---|
| version from the tag's bytes | 0.8.1 (importlib.metadata) |
| suite in the export | 1573 passed, 1 failed, 9 skipped -- the export artefact |
okf project on the five-document folder |
26 concepts of 5 documents, 52 md, 0 of 5 rejected |
| HTML corpus (M files) | proposed M plan(s); 0 with no boundary; 0 unreadable, M of M |
| reference standard, XML | N concepts of its N declared titled sections at shipped defaults, no arm flag; 109 of 110 files are images and are coded extractor_unknown |
okf check --skill ... --payload ... |
conformant, 15 rules, 0 findings |
Bundles were built to scratch. ~/okf-test/dokumenter and
a downstream consumer repository were read and never written.
6 Honesty limits
- One machine, one interpreter. The installation is measured on this Intel
Mac with the interpreter
uvresolved here. It is not a portability claim. okf project's 26 is ONE corpus of five documents. It is the same five every previous round used, so it is a regression control, not a sample.- M of M and N of N are ONE publisher's files from ONE product. Both numbers say the reader did not lose anything against its own denominator; neither says anything about a document nobody in that pipeline wrote.
- The grep criterion is deliberately NOT "0 hits on
v0.8.0". Two bare occurrences remain and must: the tag-history row, which exists to tell a reader what an older tag was, and the test-count history, which records what the figure was through each release. A criterion that drove them to zero would be deleting history to satisfy a query. Both greps ran with a known-positive control (@v0.8.1= 5) so the zero is a measurement rather than a query that could never match. - "The tag installs" is not "the tag is correct". Nothing here re-measures hit@1. Every retrieval number in the changelog and in the tag-history row is round 16's, re-measured by PM and not by this round. The four rows above prove the exported bytes run and produce the counts the repository already published -- no more than that.
- The downside is measured on one folder. Rank 1 -> 2 on one constructed known-negative question over 26 concepts. It names a mechanism (a short generic title is covered in full by more questions than a long one is); it does not size how often that mechanism fires.