chore(release): 0.8.4

Version 0.8.3 -> 0.8.4 in pyproject.toml, __init__.py and uv.lock, and the
guard pin in [tool.uv.sources] moved from v1.3.0 to v1.4.0 (uv.lock follows
via `uv lock`: the guard's version, source and requires-dist lines, nothing
else). CHANGELOG [Unreleased] closed as [0.8.4] with K3-21's and K3-22's
entries moved as written, plus one entry for the guard pin: 1.4.0 parses a
flow sequence of plain scalars that 1.3.0 refused (26 of 28 frontmatter
blocks refused by 1.3.0, 0 of 28 by 1.4.0, on one five-document bundle).
Dependency range llm-ingestion-guard>=1.2,<2.0 unchanged.

README: the four install lines and llms.txt's one to @v0.8.4, the guard
pairing prose to v0.8.4 / v1.4.0, the pip fallback to @v1.4.0, a v0.8.4
row as the current tag (seventeen checker rules), and the suite count
(1783 collected, 1782 passed, 1 skipped) with its history extended.

No behaviour change in src/ beyond the version string.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-11 14:53:50 +02:00
commit 69dc51fa89
6 changed files with 42 additions and 21 deletions

View file

@ -9,7 +9,7 @@ call anywhere in the run path.
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@v0.8.3"
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.4"
```
## Use it
@ -59,12 +59,12 @@ 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 @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.3"
uv pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.4"
```
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 `v0.8.3`
points that entry at `llm-ingestion-guard` `v1.3.0`. Use `uv tool install`
entry in the `pyproject.toml` **of the tag it is installing**, and `v0.8.4`
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.
@ -73,12 +73,12 @@ With plain pip, the transitive git dependency does not resolve on its own —
`No matching distribution found for llm-ingestion-guard`:
```sh
pip install "llm-ingestion-guard @ git+https://git.fromaitochitta.com/open/llm-ingestion-pipeline-security.git@v1.3.0"
pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.3"
pip install "llm-ingestion-guard @ git+https://git.fromaitochitta.com/open/llm-ingestion-pipeline-security.git@v1.4.0"
pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.4"
```
The guard tag is paired to the okf tag, not to this branch. `v0.8.3` declares
`llm-ingestion-guard>=1.2,<2.0`, which `v1.3.0` satisfies; the pairing above is
The guard tag is paired to the okf tag, not to this branch. `v0.8.4` 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
that fails.
@ -88,7 +88,17 @@ 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.
- `v0.8.3` — the current tag: a NISO-STS document's own `<doc-number>` names
- `v0.8.4` — the current tag: frontmatter this library writes is YAML a YAML
reader reads back the same (a block scalar it would misread is written
double-quoted; a flow leaf with no form both readers accept is refused), and
`okf consume` resolves a concept's `parent:` pointer into the excerpt
(`parent: { concept_id, title }`) with one enclosing-section link in a
heading-only body, a pointer the index now resolves too. `okf consume
--follow-parent` and `okf build --shell-parent` ship off; `okf check` has
seventeen rules (`parent_unfollowable`). The guard pin moves to `v1.4.0`,
which reads a flow sequence of plain scalars (`source_offset: [1, 24]`) that
the previous pin refused.
- `v0.8.3` — a NISO-STS document's own `<doc-number>` names
its directory and titles its `sources` entry, `okf build --frontmatter
KEY=VALUE` stamps a key on every concept of a run, and an STS section's
`description` comes from its own first spec point. `okf consume` keeps a
@ -567,7 +577,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@v0.8.3"
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.4"
okf project ~/my-documents
claude
```
@ -900,8 +910,8 @@ From a checkout, the test suite runs with:
.venv/bin/python -m pytest
```
The suite is the verification surface for everything above: **1668 tests
collected, 1667 passed and 1 skipped**, run on 2026-09-11 with the `[extract]`
The suite is the verification surface for everything above: **1783 tests
collected, 1782 passed and 1 skipped**, run on 2026-09-11 with the `[extract]`
extra installed. Both numbers are given because they are two measurements: the
figure published before the `v0.8.2` release was the PASSED count, and `pytest
--collect-only -q` reported one more.
@ -909,7 +919,8 @@ figure published before the `v0.8.2` release was the PASSED count, and `pytest
updated as the suite grew — at 1515 until the `v0.8.0` release, at 1575
through it, at 1582 through the `v0.8.1` release, at 1602 through the
`v0.8.2` release, at 1658 after K3-19, and at 1667 after K3-20 and through
the `v0.8.3` release: a count is a measurement with a date on it.)
the `v0.8.3` release; the figure above is the `v0.8.4` release's, after K3-22
and K3-21: a count is a measurement with a date on it.)
Without the extra the same suite skips the tests covering the parser path;
that split was last counted on 2026-08-21 as 589 passed and 7 skipped and has
**not** been re-measured since. The tests holding the fail-fast rejection for