The release report, in S7 form. Three premises deviated from the order and each is stated before the work rather than after: the push list has THREE lines (main, `v0.8.0`, `v0.8.1`) because the remote carries no `v0.8.x` at all; the XML folder holds 110 files, not one, of which 109 are images coded `extractor_unknown`; and the downside the changelog had to publish was recorded in NO tracked file, so it was reproduced here before publication -- rank 1 -> 2 on one constructed known-negative, the other seven delivered places unmoved. The acceptance gate is installation from the tag in an isolated export, run entirely from that export's own venv. The operator's PATH was measured and not touched: `which okf` reports not found both before and after, so this round neither installed nor removed anything there. Honesty limits are their own section: one machine and one interpreter, one five-document corpus, one publisher's files for both large rows, a grep criterion that deliberately leaves two `v0.8.0` history lines standing, and the plain statement that "the tag installs" is not "the tag is correct" -- no row here re-measures hit@1. Co-Authored-By: Claude Opus 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 vegnormal-okf can re-measure the
R761 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 | proposed 828 plan(s); 0 with no boundary; 0 unreadable, 828 of 828, 6 015 md |
| R761 XML | 2 761 concepts of 2 761 declared 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
~/repos/vegnormal-okf 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.- 828 of 828 and 2 761 of 2 761 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.