llm-ingestion-okf/src/llm_ingestion_okf
Kjell Tore Guttormsen f7cd84c5e6 feat(consume): a table fragment is read under the heading it stands under
C3, the remaining half. The proposer names a table block with no heading of
its own after the line it starts on (`Tabell linje <n>`). A position, not a
name: searched, it matched no question, and shown, it told a reader nothing
about what the table is.

`consume.inherit_table_titles` reads such a concept under the title of the
nearest concept ABOVE it in the same source document -- in reading order, the
heading the table stands under -- ordered by `source_offset`, else
`source_lines`, one key per document and never mixed. Applied where the bundle
is loaded, so the ranking, the excerpt and the near misses all see the same
title; the excerpt keeps the file's own as `own_title`, so the name shown is
never mistaken for the one in the file. A table with nothing named above it,
or a document whose concepts do not all carry one position key, is left as it
is.

Chose to do it in the reading and not in the build: no bundle byte moves, no
collection has to be rebuilt, and the proposer's goldens stay pinned.
`consume.MECHANICAL_TITLE` is held against the proposer's own output by a test.

Suite on a clean tree after `git add`: 2418 passed, 2 skipped, 4 xfailed.
ruff, ruff format, mypy --strict clean. The search gate's table for the
previous commit is kept in local state.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 08:26:20 +02:00
..
__init__.py feat(build): name the documents the gate refused whole, and close as 1.0.0 2026-09-20 21:44:49 +02:00
_pandoc.py feat(extract): resolve the vendored converter and refuse an unpinned version 2026-09-02 14:07:20 +02:00
accounting.py fix(accounting,gate): the conversion claim comes from the run's ledger 2026-09-19 19:12:20 +02:00
assets.py fix(assets): an end-of-line escape at column 0 states no skip, and neither does a delta out of its row 2026-09-19 22:47:29 +02:00
bm25.py feat(consume): several sub-questions in one call, merged by the product 2026-09-21 08:04:29 +02:00
cli.py feat(build): name the documents the gate refused whole, and close as 1.0.0 2026-09-20 21:44:49 +02:00
connectors.py fix(errors): type the NUL-byte path failure as SourceError 2026-07-20 10:30:42 +02:00
consume.py feat(consume): a table fragment is read under the heading it stands under 2026-09-21 08:26:20 +02:00
contract_check.py docs: remove what this repository published about a consumer's corpus 2026-09-21 04:28:15 +02:00
corpus.py feat(build): name the documents the gate refused whole, and close as 1.0.0 2026-09-20 21:44:49 +02:00
errors.py feat(assets): every carried image is one a model can be shown 2026-09-19 08:07:04 +02:00
extract.py feat(extract): one normalisation door removes U+00AD before the guard 2026-09-19 06:10:53 +02:00
guard_adapter.py fix(gate,propose): okf build runs a real guard; a code fence declares no structure 2026-09-16 00:19:50 +02:00
importer.py feat(assets): a bundle carries the images its sources declare (0.10.0) 2026-09-17 10:01:31 +02:00
inbox.py fix(accounting,gate): the conversion claim comes from the run's ledger 2026-09-19 19:12:20 +02:00
manifest.py feat(profiles): materialize_bundle takes a keyword-only profile (req 6) 2026-07-31 15:37:17 +02:00
materialize.py docs(k3): round 24, a reason that became false is struck and the emitter stays flow 2026-09-12 16:50:26 +02:00
mcp_server.py feat(consume): several sub-questions in one call, merged by the product 2026-09-21 08:04:29 +02:00
profiles.py feat(assets): a bundle carries the images its sources declare (0.10.0) 2026-09-17 10:01:31 +02:00
project.py feat(mcp): the server carries the working method, and describe fans out 2026-09-21 00:03:59 +02:00
propose.py feat(assets): a bundle carries the images its sources declare (0.10.0) 2026-09-17 10:01:31 +02:00
py.typed feat(typing): ship the PEP 561 py.typed marker 2026-07-17 03:46:51 +02:00
quality.py fix(consume): every read path into a bundle is contained, not just okf_fetch 2026-09-20 15:20:38 +02:00
render.py feat(errors): stable machine-readable codes on IngestError 2026-07-17 04:01:04 +02:00
segmentation.py feat(consume): parent reaches the reader -- excerpt field, body link, checker rule 2026-09-11 12:36:23 +02:00
skill.py docs: remove what this repository published about a consumer's corpus 2026-09-21 04:28:15 +02:00
structure.py feat(assets): a bundle carries the images its sources declare (0.10.0) 2026-09-17 10:01:31 +02:00