chore(release): 0.9.0

Version to 0.9.0 in pyproject.toml, __init__.py and uv.lock; CHANGELOG's
[Unreleased] becomes [0.9.0] - 2026-09-13, carrying G37's `okf quality` and
K3-26's README file-type table byte-identically. MINOR rather than patch: the
release adds a command.

README's four install lines and the two tag-pairing sentences move to v0.9.0,
and the tag history gains a `v0.9.0` entry stating what ships -- three
verdicts, two bars (.pdf 8/32, .docx 2/5), both regression bars against the
pinned reference and not quality claims, `okf check` untouched at seventeen
rules.

No behaviour change in src/ beyond the version string. The guard pin stays at
v1.4.0 and the dependency floor stays at >=1.2,<2.0. Suite 1 850 passed, 1
skipped, run after `git add`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-13 00:15:51 +02:00
commit 5e5d01cc0a
5 changed files with 17 additions and 11 deletions

View file

@ -5,7 +5,7 @@ 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/), 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). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased] ## [0.9.0] — 2026-09-13
### Added ### Added

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: Python 3.10+ and [uv](https://docs.astral.sh/uv/). One line:
```sh ```sh
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5" uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.9.0"
``` ```
## Use it ## Use it
@ -110,11 +110,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: both install by direct reference. With uv, one command resolves both:
```sh ```sh
uv pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5" uv pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.9.0"
``` ```
uv resolves the guard on its own, because it reads the `[tool.uv.sources]` 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.5` entry in the `pyproject.toml` **of the tag it is installing**, and `v0.9.0`
points that entry at `llm-ingestion-guard` `v1.4.0`. Use `uv tool install` 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 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. active virtualenv — that is the form the first screen shows.
@ -125,10 +125,10 @@ With plain pip, the transitive git dependency does not resolve on its own —
```sh ```sh
pip install "llm-ingestion-guard @ git+https://git.fromaitochitta.com/open/llm-ingestion-pipeline-security.git@v1.4.0" 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.5" pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.9.0"
``` ```
The guard tag is paired to the okf tag, not to this branch. `v0.8.5` declares The guard tag is paired to the okf tag, not to this branch. `v0.9.0` declares
`llm-ingestion-guard>=1.2,<2.0`, which `v1.4.0` satisfies; the pairing above is `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 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 off `main` and installing it against an older okf tag is the one combination
@ -139,7 +139,13 @@ that fails.
These are not install lines. They record what each earlier tag was, so a reader 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. who meets one in an older document knows what they are looking at.
- `v0.8.5` — the current tag: a block `sources:` sequence is decoded by all - `v0.9.0` — the current tag: `okf quality <bundle>`, a per-file-type
verdict on a bundle with the denominator on every line. Three verdicts
(`PASS` / `FAIL` / `UNMEASURED`) and a type with no measured threshold is
never `PASS`; two bars ship, `.pdf` 8/32 and `.docx` 2/5, both regression
bars against the pinned 43-document reference rather than quality claims.
`okf check` is untouched and still has seventeen rules.
- `v0.8.5` — a block `sources:` sequence is decoded by all
three of this library's flat frontmatter readers, where they returned the three of this library's flat frontmatter readers, where they returned the
key with an empty value. `okf.parse_frontmatter` is public API, so this key with an empty value. `okf.parse_frontmatter` is public API, so this
changes what an outside caller reads: it returns a flow string where it changes what an outside caller reads: it returns a flow string where it
@ -692,7 +698,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. builds the bundle and writes a skill beside it, the third asks.
```sh ```sh
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5" uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.9.0"
okf project ~/my-documents okf project ~/my-documents
claude claude
``` ```

View file

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

View file

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

2
uv.lock generated
View file

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