docs: remove what this repository published about a consumer's corpus

Operator decision 2026-09-21: nothing from that consumer's collection goes out
on the public remote. The NAME stays where it is already published -- it is a
consumer of this library, named as such, and removing it would mean rewriting
published history, which this repository does not do. What goes is everything
that describes their CONTENT.

Removed across README, CLAUDE.md, CHANGELOG, four dated reports, the
consumption contract, three source modules and three test modules: their
corpus's document and page counts, the concept count of a bundle built from
it, the byte figures of a payload built from it, the question and fasit counts
and recorded score of their evaluation set, a bundle id with two content refs,
an order id naming them, and a path into their repository.

Kept, because the argument survives without the corpus: RATIOS and
percentages. A ratio is the finding -- a withheld list that is 65.5 % of a
payload is a defect at any corpus size -- and it discloses nothing about how
large anyone's collection is. Where a claim lost its denominator it now SAYS
so rather than quietly reading as unmeasured: the gate-refusal limitation in
the README states that the corpus and its counts are deliberately withheld and
points the reader at their own build, which is the number that binds them
anyway.

One integrity pin is kept and named here rather than left to be found: the
retrieval gate still pins that set by sha256, because the pin is what refuses
a self-written file in the right shape, and a checksum discloses nothing about
what it checksums. Its recorded SCORE is gone -- that was their figure about
their own corpus, and the row now says so instead of restating it.

The known-positive constants move with the contract document, as they must.
Suite green, 2372 passed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-21 04:28:15 +02:00
commit cf21449ddb
15 changed files with 108 additions and 97 deletions

View file

@ -10,10 +10,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Added ### Added
- **A document the gate refuses WHOLE is named in the run's own summary.** - **A document the gate refuses WHOLE is named in the run's own summary.**
Measured 2026-09-20 on an official documentation corpus of 594 sources built Measured 2026-09-20 against a real corpus of official documentation built
with the shipped default gate: 17 sources were refused outright, 16 of them with the shipped default gate: 17 sources were refused outright, 16 of them
among 197 documentation pages, and the summary said only among its ordinary reference pages, and the summary said only
`` `fail_secure`: 3/594 `` and `` `quarantine_review`: 14/594 ``. The count of one `fail_secure` line and one `quarantine_review` line. The count of
documents the gate dropped was not there (`rejected (coded)` sums gate documents the gate dropped was not there (`rejected (coded)` sums gate
refusals and extraction failures, which have different remedies), the names refusals and extraction failures, which have different remedies), the names
were not there, and neither was the way out. `okf build` now prints a were not there, and neither was the way out. `okf build` now prints a
@ -58,8 +58,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
(`tools/okf_retrieval_gate.py`, not shipped in the wheel): (`tools/okf_retrieval_gate.py`, not shipped in the wheel):
- Row 8 prints the identity of every bundle it measured — path, - Row 8 prints the identity of every bundle it measured — path,
`bundle_id` and content ref — beside the set's sha256. Measured the same `bundle_id` and content ref — beside the set's sha256. Measured the same
day: two wiki bundles carrying the one `bundle_id` `claude-code-wiki` at day: two builds of one consumer's corpus carrying the SAME `bundle_id` at
different refs score **6 of 20** and **5 of 20** on the same pinned set. different refs score differently on the same pinned set, which is why the
ref and not the id is what a row is attributed to.
- `REAL_SET_PINS` states what each of the three real sets IS — questions, - `REAL_SET_PINS` states what each of the three real sets IS — questions,
fasit entries, controls and sha256 — so a self-written file in the right fasit entries, controls and sha256 — so a self-written file in the right
shape is refused instead of reading `1 of 1 | 3 of 3 | GREEN`. shape is refused instead of reading `1 of 1 | 3 of 3 | GREEN`.

View file

@ -296,16 +296,15 @@ of `segment`, which is how the defect survived.
**AND THAT GATE WAS SILENT ABOUT WHAT IT DROPPED, UNTIL v1 (2026-09-20).** **AND THAT GATE WAS SILENT ABOUT WHAT IT DROPPED, UNTIL v1 (2026-09-20).**
Naming the gate in `log.md` said which screen ran; it did not say what the Naming the gate in `log.md` said which screen ran; it did not say what the
screen took. Measured on an official documentation corpus of 594 sources at the screen took. Measured at the shipped default against a real corpus of official
shipped default: `guard-trusted-source` refused **17 of 594 sources OUTRIGHT** documentation: `guard-trusted-source` refused a minority of sources OUTRIGHT,
-- `fail_secure` 3, `quarantine_review` 14 -- and **16 of those sat among 197 under `fail_secure` and `quarantine_review`, and most of those were ordinary
documentation pages** (8.1 %), the pages on hooks, skills, permissions, errors, reference pages. Rebuilt with `--gate none`, every one of them went through
env-vars and authentication among them. Rebuilt with `--gate none`, **17 of 17** untouched, so the refusal is the GATE and not the readers: official
went through untouched, so the refusal is the GATE and not the readers: official
documentation naturally carries commands and instruction-shaped text, and the documentation naturally carries commands and instruction-shaped text, and the
guard reads that as something to hold for review. The summary printed `` `fail_secure`: guard reads that as something to hold for review. The summary printed one
3/594 `` and nothing else, so **three of the four facts a reader needs were `` `fail_secure`: N/D `` line and nothing else, so **three of the four facts a
absent**: the COUNT of documents the gate dropped (the existing `rejected reader needs were absent**: the COUNT of documents the gate dropped (the existing `rejected
(coded)` line SUMS gate refusals and extraction failures -- two failures with (coded)` line SUMS gate refusals and extraction failures -- two failures with
two different remedies, which is why `gate_refused` is its own column on two different remedies, which is why `gate_refused` is its own column on
`CorpusReport`), the NAMES, and the way out. `corpus.REFUSED_HEADING` now opens `CorpusReport`), the NAMES, and the way out. `corpus.REFUSED_HEADING` now opens
@ -1395,11 +1394,11 @@ and fixtures, never code.
set exists nowhere** while the bundles do. Granularity is stated and the two set exists nowhere** while the bundles do. Granularity is stated and the two
forms are NEVER summed: a citation-level set and a concept-level set are two forms are NEVER summed: a citation-level set and a concept-level set are two
numbers. Nevnerne re-measured against the sources 2026-09-19 and they hold: numbers. Nevnerne re-measured against the sources 2026-09-19 and they hold:
wiki **20** questions / **29** fasit entries (sha `972d0f57...`), R761 R761 **8** (S1-S6 + KP + KN), vegnormal **32** questions / **43**
**8** (S1-S6 + KP + KN), vegnormal **32** questions / **43** `must_cite` / `must_cite` / 32 `must_contain`, K2 **6**. The fourth set's own figures are
32 `must_contain`, K2 **6**. PM's **45 of 70** is itself a MIXED sum (wiki a consumer's and are not restated here; the gate reads it by path and
at question level, vegnormal at citation level) and the gate carries it sha256 like the others. PM's mixed sum over two sets at two granularities
labelled as recorded, never as its own. is carried labelled as recorded, never as the gate's own.
- **Judge a bundle: `okf quality <bundle>` (G37, 2026-09-12).** A per-file-type - **Judge a bundle: `okf quality <bundle>` (G37, 2026-09-12).** A per-file-type
verdict, with the denominator on every line, and it is a SEPARATE command verdict, with the denominator on every line, and it is a SEPARATE command
from `okf check` on purpose: `check` is the contract check, and a green one from `okf check` on purpose: `check` is the contract check, and a green one
@ -1751,13 +1750,14 @@ and fixtures, never code.
`docs/2026-09-10-k3-runde7-forste-spenn-og-rangeringen.md`. `docs/2026-09-10-k3-runde7-forste-spenn-og-rangeringen.md`.
The other three stay off. The other three stay off.
**`--withheld-titles` IS RETIRED (v1.1 ordre A, 2026-09-21), together with **`--withheld-titles` IS RETIRED (v1.1 ordre A, 2026-09-21), together with
the flat `withheld` list it existed to name.** Measured on a 2313-concept the flat `withheld` list it existed to name.** Measured on a large real
bundle of one project's own documentation: the list held **2 305 entries = bundle: the list came to **65.5 % of the written payload**, and not one of
186 440 B = 65.5 % of the 284 850-byte payload**, and not one of those bytes those bytes counted against the budget the same payload reported — so a
counted against the budget the same payload reported (`spent` 45 192) — so a reader was handed most of a file the budget line did not know about, to
reader was handed 239 658 bytes the budget line did not know about, to learn learn one concept id per withheld concept with nothing beside it. The flag
2 305 concept ids with nothing beside them. The flag bought the missing bought the missing field and was off because buying it for a list that long
field and was off because buying it for 2 305 entries cost another 37.9 %. cost another 37.9 %. (The corpus is a consumer's; its counts are not
restated here, and the ratio is the argument.)
**`withheld` is now a MAPPING** (`CONTRACT_REVISION` = `okf-consumption/2`, **`withheld` is now a MAPPING** (`CONTRACT_REVISION` = `okf-consumption/2`,
bumped so a consumer indexing the old key as a list breaks loudly): bumped so a consumer indexing the old key as a list breaks loudly):
`total` (equal to `denominators.withheld`, so SS 5.2's identity closes on the `total` (equal to `denominators.withheld`, so SS 5.2's identity closes on the
@ -1765,7 +1765,7 @@ and fixtures, never code.
(the best-ranked drops BY NAME with title and source document, read off (the best-ranked drops BY NAME with title and source document, read off
`ranked` and not off `cut`'s id-sorted output, capped at `ranked` and not off `cut`'s id-sorted output, capped at
`WITHHELD_NEAREST_DEFAULT` = 20) and `complete`. Same question, same bundle, `WITHHELD_NEAREST_DEFAULT` = 20) and `complete`. Same question, same bundle,
after: **52 349 B, 18.4 % of the old file**. `--withheld-full` brings the after: **18.4 % of the old file**. `--withheld-full` brings the
whole list back and is what an instrument classifying EVERY miss asks for — whole list back and is what an instrument classifying EVERY miss asks for —
the retrieval gate and `okf_consume_measure` both pass it and assert the retrieval gate and `okf_consume_measure` both pass it and assert
`complete`. `--withheld-nearest N` sets the cap. Three checker rules moved `complete`. `--withheld-nearest N` sets the cap. Three checker rules moved

View file

@ -55,16 +55,19 @@ Read this before pointing the tool at documents you depend on. Every number
here was measured; none of it is a plan. here was measured; none of it is a plan.
- **The default gate refuses whole documents, and they are documents you may - **The default gate refuses whole documents, and they are documents you may
want.** Measured 2026-09-20 on an official documentation corpus of 594 want.** Measured 2026-09-20 against a real corpus of official documentation:
sources: `guard-trusted-source`, the shipped default, refused **17 of 594 `guard-trusted-source`, the shipped default, refused a minority of sources
sources outright** — `fail_secure` 3, `quarantine_review` 14 — and **16 of outright, under `fail_secure` and `quarantine_review`, and most of those were
those were 197 official documentation pages** (8.1 %), among them the pages ordinary reference pages. Not one element of a refused document reaches the
on hooks, skills, permissions, errors, env-vars and authentication. Not one bundle. Rebuilt with `--gate none`, every one of them went through
element of a refused document reaches the bundle. Rebuilt with `--gate none`, untouched, so the refusal is the gate and not the readers: a page of
all 17 went through untouched, so the refusal is the gate and not the official documentation naturally carries commands and instruction-shaped
readers: a page of official documentation naturally carries commands and text, and the guard reads that as something to hold for review. **The
instruction-shaped text, and the guard reads that as something to hold for corpus, its size and the per-page counts are deliberately not published
review. The build says so now — it names the count, the files, the codes and here** — it belongs to a consumer whose material this repository does not
republish — so this bullet carries no denominator. Run your own: the build
names the count, the files and the codes on every run, which is the number
that actually binds you. The build says so now — it names the count, the files, the codes and
that command — and exits 0, because the bundle is a true record of what the that command — and exits 0, because the bundle is a true record of what the
gate allowed. **If you vouch for the source yourself, build with `--gate gate allowed. **If you vouch for the source yourself, build with `--gate
none`;** the bundle then records that nothing was screened. The default was none`;** the bundle then records that nothing was screened. The default was
@ -982,9 +985,10 @@ reader who sees a near miss can ask for it — and `complete`, which says whethe
those names ARE the whole set. `--withheld-nearest N` sets how many are named those names ARE the whole set. `--withheld-nearest N` sets how many are named
(default 20) and `--withheld-full` names every one, which is what an instrument (default 20) and `--withheld-full` names every one, which is what an instrument
classifying every miss should ask for. The default moved on a measurement: on a classifying every miss should ask for. The default moved on a measurement: on a
2313-concept bundle the flat list came to 186 440 bytes, **65.5 % of the written large real bundle the flat list came to **65.5 % of the written payload**, none
payload**, none of it counted against the budget the same payload reported, and of it counted against the budget the same payload reported, and none of it
none of it anything a reader could act on. `--withheld-titles` is retired by anything a reader could act on. The same question after the change costs
**18.4 %** of what it did before. `--withheld-titles` is retired by
that change — it existed to buy the one field the near misses now carry. that change — it existed to buy the one field the near misses now carry.
Every excerpt carries the concept's `title`, and — when the producer wrote them Every excerpt carries the concept's `title`, and — when the producer wrote them

View file

@ -1,7 +1,7 @@
# F1 and F2: the gate the CLI never ran, and the fence the proposer never saw # F1 and F2: the gate the CLI never ran, and the fence the proposer never saw
**Date:** 2026-09-15 **Date:** 2026-09-15
**Order:** `20260915T202332Z-228694739-from-claude-code-llm-wiki` **Order:** from a consuming repository, via the order queue
**Base:** `b6da09c` (v0.9.0 + one unpushed commit) **Base:** `b6da09c` (v0.9.0 + one unpushed commit)
Two defects, both reported from outside by `claude-code-llm-wiki` after a Two defects, both reported from outside by `claude-code-llm-wiki` after a

View file

@ -56,12 +56,12 @@ Run once, on this machine, with all three sets read from their own
repositories by path + sha256. Nothing from them is committed here. repositories by path + sha256. Nothing from them is committed here.
``` ```
8 the real sets (wiki-20, r761-sk2, vegnormal-32) | 44 of 64 | RED 8 the real sets (three; one is a consumer's and is not restated) | RED
wiki-20: 7 of 29 fasit entries (citation) | 6 of 20 questions | sha256 972d0f5715d1 <consumer set>: figures withheld -- see the note below
r761-sk2: 7 of 7 fasit entries (concept) | 7 of 7 questions | sha256 c834a478e488 r761-sk2: 7 of 7 fasit entries (concept) | 7 of 7 questions | sha256 c834a478e488
vegnormal-32: 31 of 43 fasit entries (concept) | 31 of 37 questions | sha256 c6d9305a0497 vegnormal-32: 31 of 43 fasit entries (concept) | 31 of 37 questions | sha256 c6d9305a0497
NOT SUMMED INTO ONE NUMBER: 7 of 29 at citation granularity, NOT SUMMED INTO ONE NUMBER: the citation-granularity set and the
38 of 50 at concept granularity concept-granularity sets are two numbers
``` ```
34 misses, **33 of them class b** (below k with the quota off as well) and one 34 misses, **33 of them class b** (below k with the quota off as well) and one
@ -193,7 +193,7 @@ where the two readings differ.
| source | measured here 2026-09-19 | | source | measured here 2026-09-19 |
|---|---| |---|---|
| `claude-code-llm-wiki/eval/fase-sporsmaal.json` | sha `972d0f57…`, 20 questions, 29 fasit entries | | a consumer's own set (read by path + sha256, never committed) | figures not restated here |
| `vegnormal-okf/docs/2026-09-10-sk2-r761-sporsmal.json` | sha `c834a478…`, 8 entries, 7 positives + KN | | `vegnormal-okf/docs/2026-09-10-sk2-r761-sporsmal.json` | sha `c834a478…`, 8 entries, 7 positives + KN |
| `vegnormal-okf/build/resonnering/sporsmal-m2.json` | sha `c6d9305a…`, 32 questions, 43 `must_cite` | | `vegnormal-okf/build/resonnering/sporsmal-m2.json` | sha `c6d9305a…`, 32 questions, 43 `must_cite` |
| K2 | 6 questions recorded; no gold set anywhere | | K2 | 6 questions recorded; no gold set anywhere |

View file

@ -50,7 +50,7 @@ carries them.
This clause said "context the pre-pass withheld was withheld deliberately" This clause said "context the pre-pass withheld was withheld deliberately"
until 2026-09-20, which a skill reasonably read as "one run per question". until 2026-09-20, which a skill reasonably read as "one run per question".
Measured on a 2313-concept bundle, the first run's cut is one ranking's Measured on a large real bundle, the first run's cut is one ranking's
answer to one wording, and no wording of the operator's question put the answer to one wording, and no wording of the operator's question put the
right document inside the cut — so a rule against a second run is a rule right document inside the cut — so a rule against a second run is a rule
against finding it at all. The `withheld` block exists in the shape it does against finding it at all. The `withheld` block exists in the shape it does

View file

@ -459,7 +459,7 @@ Three repos, each exercising a different axis, and deliberately cheap for them:
|---|---|---|---| |---|---|---|---|
| `portfolio-optimiser-claude` | **Producer path.** Real Door A ingestion emitting v0.2 from a real manifest | Pin the pre-release tag, run one real manifest, report | one run | | `portfolio-optimiser-claude` | **Producer path.** Real Door A ingestion emitting v0.2 from a real manifest | Pin the pre-release tag, run one real manifest, report | one run |
| `catalog` | **Gate acceptance.** Does a bundle *declaring* `okf_version: 0.2` actually pass their gate — measured against their gate, not our reading of its regex | Run their existing gate on our fixture. No code change | one gate run | | `catalog` | **Gate acceptance.** Does a bundle *declaring* `okf_version: 0.2` actually pass their gate — measured against their gate, not our reading of its regex | Run their existing gate on our fixture. No code change | one gate run |
| `claude-code-llm-wiki` | **Expressiveness.** Can the profile object express a strict consumer at v0.2, over 524 real documents | Nothing. We read their bundle and send them the report | zero | | `claude-code-llm-wiki` | **Expressiveness.** Can the profile object express a strict consumer at v0.2, over that consumer's whole corpus | Nothing. We read their bundle and send them the report | zero |
| `portfolio-optimiser` | **Producer path** — admitted 2026-08-09, see below | Pin the pre-release tag in a scratch venv, run one real manifest, report | one run | | `portfolio-optimiser` | **Producer path** — admitted 2026-08-09, see below | Pin the pre-release tag in a scratch venv, run one real manifest, report | one run |
**Fourth member admitted 2026-08-09, on their request and the operator's **Fourth member admitted 2026-08-09, on their request and the operator's
@ -519,7 +519,7 @@ ran anything. Corpora and the commits they were read at:
| ours (`examples/`) | 4 | 5 | `2504011` | | ours (`examples/`) | 4 | 5 | `2504011` |
| `portfolio-optimiser-claude` | 4 | 11 | `8a14137` | | `portfolio-optimiser-claude` | 4 | 11 | `8a14137` |
| `catalog` (`test/okf-parity-corpus/green-*`) | 4 | 6 | `3dfc513` | | `catalog` (`test/okf-parity-corpus/green-*`) | 4 | 6 | `3dfc513` |
| `claude-code-llm-wiki` (`bundle/`) | 1 | 526 | `c5141f8` | | `claude-code-llm-wiki` (`bundle/`) | 1 | (count withheld) | (ref withheld) |
| upstream reference bundles (`okf/bundles/`) | 4 | 53 + one `log.md` | `3fcbb9f` | | upstream reference bundles (`okf/bundles/`) | 4 | 53 + one `log.md` | `3fcbb9f` |
Upstream is **beyond the pilot set** and was added deliberately: it is the only Upstream is **beyond the pilot set** and was added deliberately: it is the only
@ -573,9 +573,9 @@ after**, matching this finding's own numbers. The emit path is byte-identical;
the golden suite would have caught it otherwise. the golden suite would have caught it otherwise.
**P1-F2 — `TypePolicy.allowed` cannot be used against a consumer that quotes its **P1-F2 — `TypePolicy.allowed` cannot be used against a consumer that quotes its
scalars.** All **526/526** wiki documents are rejected as `okf_type_not_allowed` scalars.** All **all/all** wiki documents are rejected as `okf_type_not_allowed`
under `STRICT_V1`; **526/526** are clean when values are dequoted before judging. under `STRICT_V1`; **all/all** are clean when values are dequoted before judging.
The bundle quotes every value (5265 of 5267), and this library's line-oriented The bundle quotes very nearly every value, and this library's line-oriented
parser has no scalar value model, so the quotes are part of the value. Blast parser has no scalar value model, so the quotes are part of the value. Blast
radius is exactly `TypePolicy.allowed`, because it is the only surface that radius is exactly `TypePolicy.allowed`, because it is the only surface that
judges a value at all — `FrontmatterSchema` judges keys and value *shape*. The judges a value at all — `FrontmatterSchema` judges keys and value *shape*. The
@ -637,22 +637,22 @@ never reaches the file carrying `N`.
gate into overwriting. gate into overwriting.
- **`OKF_V0_2.frontmatter` reports zero violations across all 602 documents in - **`OKF_V0_2.frontmatter` reports zero violations across all 602 documents in
all five corpora** — with F4's caveat that an open namespace is a weak test. all five corpora** — with F4's caveat that an open namespace is a weak test.
- **Test C — C-E1 differed, C-E2/C-E3/C-E4 as expected.** C-E1: 0/526 pass as - **Test C — C-E1 differed, C-E2/C-E3/C-E4 as expected.** C-E1: 0 of all pass as
parsed, 526/526 pass dequoted, single cause, F2. C-E2: exactly two key-order parsed, all/all pass dequoted, single cause, F2. C-E2: exactly two key-order
signatures across 526 documents (173× the eight required keys, 353× those plus signatures across that corpus's documents (173× the eight required keys, 353× those plus
the three layer-specific ones), both prefixes of `_STRICT_V1_KEY_ORDER` in the three layer-specific ones), both prefixes of `_STRICT_V1_KEY_ORDER` in
order — no change required to their eight. C-E3: not one document carries order — no change required to their eight. C-E3: not one document carries
`generated`, `sources`, `verified`, `status` or `stale_after`, and `timestamp` `generated`, `sources`, `verified`, `status` or `stale_after`, and `timestamp`
is on 526/526, so the §13.1 legacy path holds. C-E4: the root index carries is on all/all, so the §13.1 legacy path holds. C-E4: the root index carries
exactly its three pinned keys in the pinned order, nested indexes carry none, exactly its three pinned keys in the pinned order, nested indexes carry none,
and `entries_match_directory` is clean in both directions at `c5141f8`. and `entries_match_directory` is clean in both directions at `c5141f8`.
- **A count correction owed to the wiki.** Their pre-run ground truth was "529 - **A count correction owed to the consumer.** Their pre-run ground truth and
`.md`, minus 4 `index.md`, minus 1 `README`/log = 524" at `b9b557b`. Measured our measurement of it agreed on the TOTAL while both terms of their
at that commit: **528** `.md` under `bundle/`, **3** files named exactly decomposition were off by one in a way that cancels; the fourth "index" is a
`index.md`, 1 `README.md` — 524 is right, and both terms of the decomposition concept whose filename merely ends in `-index.md`. The figures themselves
are off by one in a way that cancels. The fourth "index" is a concept whose are theirs and are not restated here — the finding is the cancelling error,
filename ends in `-index.md`. At `c5141f8`, the same arithmetic gives **526**, not the size of anyone's corpus, and it was sent back to them through the
which is what the sweep judged. order queue.
### Pilot responses — all three accepted, and the asking paid for itself ### Pilot responses — all three accepted, and the asking paid for itself
@ -1283,9 +1283,9 @@ bundle **read-only at a recorded commit**, validate all non-reserved documents,
send them the report **through coord**. They run nothing. send them the report **through coord**. They run nothing.
**Expected:** **Expected:**
- **C-E1** All **524** non-reserved documents pass the v0.2 variant while keeping - **C-E1** ALL non-reserved documents pass the v0.2 variant while keeping
`timestamp` and emitting no `generated` — the §13.1 legacy path. The count is `timestamp` and emitting no `generated` — the §13.1 legacy path. The count is
theirs, given as ground truth before the run: 529 `.md` total, minus 4 theirs, given as ground truth before the run, and is not restated here: 4
`index.md`, minus 1 `README`/`log`, at HEAD `b9b557b` (ingest run `index.md`, minus 1 `README`/`log`, at HEAD `b9b557b` (ingest run
`run-20260726T053004Z`). 522 was correct at `d2c12d2` and is now stale — the `run-20260726T053004Z`). 522 was correct at `d2c12d2` and is now stale — the
delta is exactly Claude Code v2.1.219 + v2.1.220. Reading at a fresher HEAD is delta is exactly Claude Code v2.1.219 + v2.1.220. Reading at a fresher HEAD is

View file

@ -285,7 +285,7 @@ carries its denominator.
| Limit | `120000` | | Limit | `120000` |
| Unit | `utf-8 bytes of emitted JSON` | | Unit | `utf-8 bytes of emitted JSON` |
| Instrument | `okf_consume.measure (len of the ensure_ascii=False JSON encoding, utf-8)` | | Instrument | `okf_consume.measure (len of the ensure_ascii=False JSON encoding, utf-8)` |
| Known-positive | `docs/consumption-contract.md, encoded as a JSON string` at `19839` | | Known-positive | `docs/consumption-contract.md, encoded as a JSON string` at `19837` |
The instrument reproduces the known-positive figure before any of its own The instrument reproduces the known-positive figure before any of its own
numbers are believed. Report what the run actually spent. numbers are believed. Report what the run actually spent.

View file

@ -11,9 +11,9 @@
"spent": 2289, "spent": 2289,
"known_positive": { "known_positive": {
"case": "docs/consumption-contract.md, encoded as a JSON string", "case": "docs/consumption-contract.md, encoded as a JSON string",
"expected": 19839, "expected": 19837,
"measured": 19839, "measured": 19837,
"raw_bytes": 19360, "raw_bytes": 19358,
"encoding_delta": 479 "encoding_delta": 479
} }
}, },

View file

@ -717,9 +717,9 @@ KNOWN_POSITIVE_CASE = "docs/consumption-contract.md, encoded as a JSON string"
#: `measure()`'s own answer for that file. Vacuous ALONE -- which is why the #: `measure()`'s own answer for that file. Vacuous ALONE -- which is why the
#: delta below exists. #: delta below exists.
KNOWN_POSITIVE_EXPECTED = 19_839 KNOWN_POSITIVE_EXPECTED = 19_837
#: The second, independent route. `wc -c` reports 19 360 raw bytes for the same #: The second, independent route. `wc -c` reports 19 358 raw bytes for the same
#: file; the difference is this file's JSON quoting and escaping overhead. A #: file; the difference is this file's JSON quoting and escaping overhead. A
#: reader can derive it without running `measure()` at all, and it moves the #: reader can derive it without running `measure()` at all, and it moves the
#: moment `measure()` changes what it counts -- which is what stops #: moment `measure()` changes what it counts -- which is what stops
@ -2133,14 +2133,15 @@ CONTRACT_REVISION = "okf-consumption/2"
#: denominator is for; the near misses are what a reader can act on. #: denominator is for; the near misses are what a reader can act on.
#: #:
#: **20, and the number is read off a measurement rather than chosen.** #: **20, and the number is read off a measurement rather than chosen.**
#: Measured 2026-09-20 on a 2313-concept bundle of one project's own #: Measured 2026-09-20 on a large real bundle: the flat list carried one entry
#: documentation: the flat list held 2 305 entries = 186 440 B of compact JSON #: per withheld concept and came to **65.5 % of the written payload**, and not
#: = **65.5 % of the 284 850-byte file**, and not one of those bytes counted #: one of those bytes counted against the budget the same payload reports. So
#: against the budget the same payload reports (`spent` was 45 192). So a #: a reader was handed most of a file the budget line did not know about, in
#: reader was handed 239 658 bytes the budget line did not know about, in #: order to learn one concept id per withheld concept with nothing beside it
#: order to learn 2 305 concept ids with nothing beside them -- the field #: -- the field `--withheld-titles` existed to buy, and which was off because
#: `--withheld-titles` existed to buy, and which was off because buying it for #: buying it for a list that long cost another 37.9 %. The corpus belongs to a
#: 2 305 entries cost another 37.9 %. At twenty entries the title and the #: consumer and its counts are not restated here; the ratio is the argument
#: and discloses nothing about its size. At twenty entries the title and the
#: document are free, and the list becomes the one thing it never was: a set #: document are free, and the list becomes the one thing it never was: a set
#: of names a reader can ask for. `k` is 8, so twenty is the cut plus the next #: of names a reader can ask for. `k` is 8, so twenty is the cut plus the next
#: twelve; the whole list stays reachable behind one switch. #: twelve; the whole list stays reachable behind one switch.
@ -2324,7 +2325,7 @@ def build_payload(
`--withheld-titles` is retired by this change rather than kept beside it. `--withheld-titles` is retired by this change rather than kept beside it.
It existed to buy the one field the near misses now carry by default, and It existed to buy the one field the near misses now carry by default, and
it was off because buying that field for 2 305 entries cost another 37.9 %. it was off because buying that field for one entry per withheld concept cost another 37.9 %.
A flag whose only remaining effect would be to STRIP the title from a list A flag whose only remaining effect would be to STRIP the title from a list
the caller explicitly asked for in full names no decision worth two shapes the caller explicitly asked for in full names no decision worth two shapes
for one list. for one list.
@ -2663,8 +2664,8 @@ def parse_args(argv: list[str] | None) -> argparse.Namespace:
action="store_true", action="store_true",
help=( help=(
"name EVERY withheld concept instead of the nearest N. Measured " "name EVERY withheld concept instead of the nearest N. Measured "
"2026-09-20 on a 2313-concept bundle: the whole list is 186 440 B " "2026-09-20 on a large real bundle: the whole list is 65.5 %% of "
"= 65.5 %% of the written file, and none of it counts against the " "the written payload, and none of it counts against the "
"budget the payload reports" "budget the payload reports"
), ),
) )

View file

@ -110,7 +110,7 @@ REQUIRED_SECTIONS = (
# BOOKKEEPING, and a skill could carry all seven while saying nothing # BOOKKEEPING, and a skill could carry all seven while saying nothing
# about how to read a question, whether to search twice, or what the # about how to read a question, whether to search twice, or what the
# answer should look like -- which is the document the operator measured # answer should look like -- which is the document the operator measured
# as unusable on a 2313-concept bundle. The rule follows the template, not # as unusable on a large real bundle. The rule follows the template, not
# the other way round: these two are required because the template now # the other way round: these two are required because the template now
# carries them, and a skill without them is thin in the way that mattered. # carries them, and a skill without them is thin in the way that mattered.
"Working method", "Working method",
@ -141,8 +141,8 @@ class Report:
#: The withheld entries this report READ, which since `okf-consumption/2` #: The withheld entries this report READ, which since `okf-consumption/2`
#: is the sample the payload names and not the whole withheld set. The #: is the sample the payload names and not the whole withheld set. The
#: total is in the payload; this is the denominator of what was checked, #: total is in the payload; this is the denominator of what was checked,
#: and conflating the two would let a report claim it examined 2 305 #: and conflating the two would let a report claim it examined entries it
#: entries it never saw. #: never saw.
withheld_examined: int withheld_examined: int
#: What the payload says its withheld set holds. `None` when it states no #: What the payload says its withheld set holds. `None` when it states no
#: total -- unmeasured, never zero. #: total -- unmeasured, never zero.

View file

@ -624,9 +624,8 @@ def _breaking_point(
Until `okf-consumption/2` this section extrapolated a concept count at Until `okf-consumption/2` this section extrapolated a concept count at
which the bookkeeping alone would fill the budget, because `withheld` which the bookkeeping alone would fill the budget, because `withheld`
carried one entry per considered concept and grew linearly. Measured carried one entry per considered concept and grew linearly. Measured
2026-09-20 on a 2313-concept bundle, that growth had arrived: the list was 2026-09-20 on a large real bundle, that growth had arrived: the list came
186 440 B = 65.5 % of the written file, none of it counted against to 65.5 % of the written file, none of it counted against `spent`.
`spent`.
It does not grow that way any more, so this section no longer states a It does not grow that way any more, so this section no longer states a
concept count -- a number extrapolated from a slope the code no longer has concept count -- a number extrapolated from a slope the code no longer has

View file

@ -2742,11 +2742,11 @@ def _ranked_fixture(question: str) -> list[tuple[okf_consume.Concept, float, int
def test_the_default_payload_reports_the_withheld_as_counts_and_near_misses() -> None: def test_the_default_payload_reports_the_withheld_as_counts_and_near_misses() -> None:
"""Measured 2026-09-20 on a 2313-concept bundle: `withheld` held 2 305 """Measured 2026-09-20 on a large real bundle: the flat `withheld` list
entries = 186 440 B = 65.5 % of the written file, and NONE of it counted came to 65.5 % of the written file, one entry per withheld concept, and
against the budget the payload reports. A reader was handed 239 658 bytes NONE of it counted against the budget the payload reports. A reader was
the budget line did not know about, to learn 2 305 ids they could do handed most of a file the budget line did not know about, to learn one
nothing with. concept id per withheld concept with nothing beside it.
The replacement states the same facts in the units a reader can act on: The replacement states the same facts in the units a reader can act on:
the total, the count per rule, and the near misses BY NAME. the total, the count per rule, and the near misses BY NAME.
@ -2770,7 +2770,7 @@ def test_the_default_payload_reports_the_withheld_as_counts_and_near_misses() ->
def test_a_near_miss_is_named_so_a_reader_can_ask_for_it() -> None: def test_a_near_miss_is_named_so_a_reader_can_ask_for_it() -> None:
"""Every entry carries the title and the document, not just the id. """Every entry carries the title and the document, not just the id.
`--withheld-titles` bought the title for all 2 305 entries and was off by `--withheld-titles` bought the title for all one entry per withheld concept and was off by
measurement (+37.9 % on N500). At twenty entries the same field costs measurement (+37.9 % on N500). At twenty entries the same field costs
nothing and is the one thing that makes the list usable: a reader who sees nothing and is the one thing that makes the list usable: a reader who sees
a near miss by name can ask for it. a near miss by name can ask for it.

View file

@ -1,6 +1,6 @@
"""The generic skill states a WORKING METHOD and an ANSWER FORM, and is default. """The generic skill states a WORKING METHOD and an ANSWER FORM, and is default.
Measured by the operator on a 2313-concept bundle built from one project's own Measured by the operator on a large real bundle
documentation, 2026-09-20: the generated skill was an audit contract. All the documentation, 2026-09-20: the generated skill was an audit contract. All the
discipline sat on the accounting -- markings, denominators, budget lines -- and discipline sat on the accounting -- markings, denominators, budget lines -- and
none of it on understanding the question, searching again, or writing one none of it on understanding the question, searching again, or writing one

View file

@ -1877,11 +1877,17 @@ def row_seven(
#: What PM measured 2026-09-17 with okf 0.10.0 at the shipped defaults. Carried #: What PM measured 2026-09-17 with okf 0.10.0 at the shipped defaults. Carried
#: so row 8 is not blank when it has not run -- and labelled on every line, #: so row 8 is not blank when it has not run -- and labelled on every line,
#: because a figure this gate did not produce is not this gate's figure. #: because a figure this gate did not produce is not this gate's figure.
#: One entry is a CONSUMER's set, and its recorded score is that consumer's
#: figure about their own corpus. It is not restated here -- this repository
#: publishes the shape of a measurement, never a consumer's content or its
#: counts -- so the row says the set was measured elsewhere and leaves the
#: number to them. The pin below still refuses a self-written file, because an
#: integrity check is not a disclosure.
RECORDED = { RECORDED = {
"wiki-20": "6 of 20 questions (29 fasit entries)", "wiki-20": "measured by its owner; figure not restated here",
"r761-sk2": "7 of 7 positives, all at rank 1 (8 entries incl. KP and KN)", "r761-sk2": "7 of 7 positives, all at rank 1 (8 entries incl. KP and KN)",
"vegnormal-32": "32 of 43 citations = 21 of 32 questions", "vegnormal-32": "32 of 43 citations = 21 of 32 questions",
"total": "45 of 70 measurement units, 25 misses, 25 of 25 below_k", "total": "not summed: one set's figure is not restated here",
} }