chore(release): prepare 1.1.1 — version sync and changelog

Patch release. It adds no capability over 1.1.0 and changes no package
behaviour. What changes is that the fixtures, tests, tools and documents use
generic, fictitious examples. Help text reworded in `okf build --assets`,
`--pdf-outline` and the `okf quality --fasit` provenance line, and the
`--fasit` bar is written as the round share 999/1000.

The version is synced in pyproject.toml, src/llm_ingestion_okf/__init__.py,
uv.lock (uv lock --check clean), README (install lines and the tag list) and
CHANGELOG. No tag: the operator tags.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-23 14:51:18 +02:00
commit 306bf7c05c
5 changed files with 75 additions and 10 deletions

View file

@ -5,6 +5,68 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.1.1] — 2026-09-23
Sector-specific example material is replaced by generic, fictitious examples.
Nothing a bundle is built from, and no verdict, changes; what changes is what
the tests, fixtures, tools and documents are written about.
### Changed
- **Every fixture and test document is fictitious.** They are now written
about an invented kitchen-and-baking handbook series. Two things move with
the words: the fixtures written by `make_fixtures.py`,
`make_k2_office.py`, `make_image_fixtures.py` and
`make_accounting_fixtures.py` are regenerated, and the image-inbox and
accounting documents are renamed `kapittel-7-*`. Their structural counts
are identical before and after: elements, images, rows, cells, headings,
bookmarks and the witness inventory's per-document totals. The texts, the
frozen literals and three office text digests moved with them.
- **Help text names no source document.** `okf build --assets` and
`--pdf-outline` now describe their evidence as "a long reference
standard". The `okf quality --fasit` provenance line now reads "one pinned
reference build against its own declared structure".
- **The `okf quality --fasit` bar is `999/1000`.** It was the known-good
arm's own measured fraction, which named the document it was read off. The
round share sits just under it (99.9 %), and every build measured reads the
same verdict under it: the known-good arm passes, an older build of the
same product (99.7 %) and the known-bad arm (41.6 %) fail. One corpus, as
before.
- **Measurement prose names no document by its numbers.** Section totals,
page counts and build sizes that identify one reference document or one
generated HTML corpus are written as N, M, an offset of N or a share, in
docstrings, comments, help text, reports, README and this file. No
measured relation changes.
- **The STS test fixtures carry fictitious titles.** `sts-identity.xml`,
`sts-inherit.xml` and `sts-empty-label.xml` are written about a kitchen
counter, with their labels renumbered; their structure (nesting, spec
points, label-only points) is unchanged, and so is every test's shape.
- **Thirteen dated measurement reports are removed.** They documented runs on
a retired reference corpus and nothing else. The reports that remain keep
their reasoning and their numbers without the names, and the links to the
removed reports are gone.
- **`tools/okf_accounting_gate.py` takes `--corpus PATH`.** The option is
repeatable, takes a directory, a zip or one file, and has no default. It
replaces the two options that named one real corpus each. Row 6 measures
whatever it is given, and row 5 compares the PDF pair alone.
- **`tools/okf_witness.py` has no STS JSON reader.** The reader and its role
map existed for one publisher's delivery. A `.json` file is now counted as
generic JSON, the way the package reads it. The reader's three twins and
five tests are removed. In `tools/okf_gate_mutants.py`, `W09` is removed
and `W03`/`W07` edit the one remaining role map.
### Added
- **`tests/test_excluded_terms.py`.** No tracked file may carry a term from a
git-ignored local list (`*.local.txt`). The check covers the file's path,
its text, and the text inside a binary fixture (zip members, inflated PDF
streams). Without the list the check is skipped with a message and never
passed. The scanner's own known-positive runs on a synthetic term either
way. A term never uses `\b`, because `_` is a word character and a code
written beside one would pass; a synthetic known-positive holds that shape,
and a known-negative list of ordinary words and codes holds the list from
growing too wide.
## [1.1.0] — 2026-09-21
The reading side. Nothing here changes how a bundle is built from a folder;

View file

@ -10,7 +10,7 @@ types](#supported-file-types) lists each one with the evidence behind it.
Python 3.10+ and [uv](https://docs.astral.sh/uv/). One line:
```sh
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.0"
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.1"
```
## Use it
@ -209,11 +209,11 @@ Neither this package nor the guard it depends on is on a package index yet, so
both install by direct reference. With uv, one command resolves both:
```sh
uv pip install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.0"
uv pip install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.1"
```
uv resolves the guard on its own, because it reads the `[tool.uv.sources]`
entry in the `pyproject.toml` **of the tag it is installing**, and `v1.1.0`
entry in the `pyproject.toml` **of the tag it is installing**, and `v1.1.1`
points that entry at `llm-ingestion-guard` `v1.4.0`. Use `uv tool install`
instead of `uv pip install` when you want the `okf` command on `PATH` without an
active virtualenv — that is the form the first screen shows.
@ -224,10 +224,10 @@ With plain pip, the transitive git dependency does not resolve on its own —
```sh
pip install "llm-ingestion-guard @ git+https://git.fromaitochitta.com/open/llm-ingestion-pipeline-security.git@v1.4.0"
pip install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.0"
pip install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.1"
```
The guard tag is paired to the okf tag, not to this branch. `v1.1.0` declares
The guard tag is paired to the okf tag, not to this branch. `v1.1.1` declares
`llm-ingestion-guard>=1.2,<2.0`, which `v1.4.0` satisfies; the pairing above is
read off that tag's own `[tool.uv.sources]`, not off this branch. Reading a pin
off `main` and installing it against an older okf tag is the one combination
@ -238,7 +238,10 @@ that fails.
These are not install lines. They record what each earlier tag was, so a reader
who meets one in an older document knows what they are looking at.
- `v1.1.0` — the current tag. The reading side: BM25 ranking on passages and
- `v1.1.1` — the current tag. No capability over `v1.1.0`: sector-specific
example material in fixtures, tests, tools and documents is replaced by
generic, fictitious examples. See the CHANGELOG.
- `v1.1.0` — the reading side: BM25 ranking on passages and
titles, several sub-questions in one call, a map per bundle, a signal for
weak coverage, and one generic skill plus the server as the standard way in
over a whole folder of bundles. The payload contract is `okf-consumption/2`,
@ -1273,7 +1276,7 @@ not need this repository — the first line installs the command, the second
builds the bundle and writes a skill beside it, the third asks.
```sh
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.0"
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v1.1.1"
okf project ~/my-documents
claude
```

View file

@ -4,7 +4,7 @@ build-backend = "hatchling.build"
[project]
name = "llm-ingestion-okf"
version = "1.1.0"
version = "1.1.1"
description = "Shared OKF (Open Knowledge Format) ingestion library: spec-based connectors, bundle inbox, and external-bundle import, with security delegated to llm-ingestion-guard."
readme = "README.md"
license = "MIT"

View file

@ -76,7 +76,7 @@ from .manifest import (
)
from .materialize import IngestResult, materialize_bundle
__version__ = "1.1.0"
__version__ = "1.1.1"
__all__ = [
"BlockedFile",

2
uv.lock generated
View file

@ -547,7 +547,7 @@ source = { git = "https://git.fromaitochitta.com/open/llm-ingestion-pipeline-sec
[[package]]
name = "llm-ingestion-okf"
version = "1.1.0"
version = "1.1.1"
source = { editable = "." }
dependencies = [
{ name = "llm-ingestion-guard" },