llm-ingestion-okf/tools
Kjell Tore Guttormsen a381361d99
fix(retrieval-gate): row 5 reads the hold-out set in the schema the set declares
Row 5 read every registered set with the gate's synthetic reader, so a
set written in a consumer's own question-set schema came back "not a
question set this gate can read: 'set_id'" -- a NO no such set could
turn, whatever it measured.

The SET now says how it is read, and the registration carries nothing
about it: `read_hold_out_set` checks the pinned sha256, then routes on
the set's own `schema` field. `fase-sporsmaal/1` goes through the same
adapter and hit_rule as row 8 (`_wiki_questions`, factored out of
`read_real_set` so the two rows share one reading); a set with no
`schema` is the gate's synthetic form through `load_set`, unchanged;
any other schema is a NO that names it (fail closed).

Chosen to recognise the set's schema rather than add a field to the
registration because the registration then needs to know nothing about
the reading, and an unknown schema still fails with a named reason.

The row still prints only answered of asked against the threshold, never
which hold-out question missed; a test holds that. src/ untouched,
MUTANT_BAR unchanged. CLAUDE.md gains one sentence on row 5.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 08:49:26 +02:00
..
okf_accounting_gate.py test(gates): retire the K2 track; re-measure the retrieval gate's premises for BM25 2026-09-21 10:05:43 +02:00
okf_asset_census.py feat(assets): every carried image is one a model can be shown 2026-09-19 08:07:04 +02:00
okf_cid_measure.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_consume.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_consume_measure.py feat(consume): the withheld set is counts plus names, not one entry per concept 2026-09-20 23:32:22 +02:00
okf_contract_check.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_corpus_run.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_fidelity.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_gate_mutants.py test(mutants): the cursor rule's row clause and the end-of-line clause get a mutant each 2026-09-19 22:57:50 +02:00
okf_mcp_gate.py feat(mcp): serve OKF bundles over MCP in two shapes, plus the generic skill 2026-09-20 10:25:55 +02:00
okf_outline_measure.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_propose_segments.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_retrieval_gate.py fix(retrieval-gate): row 5 reads the hold-out set in the schema the set declares 2026-09-23 08:49:26 +02:00
okf_skill.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_soek_gate.py test(soek): a red search gate measuring what the asker RECEIVES, one exit code 2026-09-21 04:03:11 +02:00
okf_table_measure.py chore(ruff): the acceptance was whatever the default happened to be [skip-docs] 2026-09-09 23:15:17 +02:00
okf_watch.py feat(watch): weekly OKF upstream watch that can prove it found nothing 2026-08-23 20:38:37 +02:00
okf_witness.py fix(docs): N101 ships 568 tbx: tags, not 574 2026-09-19 08:35:50 +02:00