chore(release): 0.8.5
Version to 0.8.5 in pyproject.toml, __init__.py and uv.lock; CHANGELOG's [Unreleased] becomes [0.8.5] — 2026-09-12, carrying K3-23's instrument, K3-25's default and K3-24's block-sources fix byte-identically, with the two `### Changed` headings merged into one and one post written here: what `okf.parse_frontmatter` now returns for a block `sources:` is a READING projection PyYAML reads back on 0 of 4 605 measured block files. 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. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
06c057ff39
commit
64661c7198
6 changed files with 59 additions and 33 deletions
48
CHANGELOG.md
48
CHANGELOG.md
|
|
@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.8.5] — 2026-09-12
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- **`consume` can rank a body without the door's own link line (K3-23).** One
|
- **`consume` can rank a body without the door's own link line (K3-23).** One
|
||||||
|
|
@ -53,6 +55,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
OFF -- gets a different delivered order; `link_in_signal=True` is still
|
OFF -- gets a different delivered order; `link_in_signal=True` is still
|
||||||
reachable for the older reading.
|
reachable for the older reading.
|
||||||
|
|
||||||
|
- **No bundle bytes move.** A five-document folder built before and after is
|
||||||
|
`diff -r`-identical (52 files), so no ranking measurement is owed. The
|
||||||
|
emission rule is untouched: this library still writes flow.
|
||||||
|
|
||||||
|
- **Two docstrings and one README paragraph corrected rather than left
|
||||||
|
standing.** `materialize._render_sources` gave three measured reasons for
|
||||||
|
refusing to emit the block form; reason 1 (a block list round-trips to an
|
||||||
|
empty value) and reason 3 (B6's acceptance test cannot pass) FELL with this
|
||||||
|
fix and are struck. Reason 2 STANDS and now carries the rule alone,
|
||||||
|
re-measured by reading `portfolio-optimiser` at `6eb58e5`: `read_provenance`
|
||||||
|
returns `UnreadableProvenance(reason="block-sequence")`. It is not the
|
||||||
|
guard's objection -- guard 1.4.0 reads the block form on 4 609 of 4 609
|
||||||
|
files. The README said this library "cannot read the block form" where one
|
||||||
|
reader could and one could not; it now separates the two by KEY.
|
||||||
|
|
||||||
|
- **`okf.parse_frontmatter` returns a flow string for a block `sources:`
|
||||||
|
where it returned an EMPTY string (public API).** The fix above changes what
|
||||||
|
an outside caller reads: a consumer who read the empty value and concluded
|
||||||
|
the address was absent now gets the address, while a consumer who passed the
|
||||||
|
return value straight to a YAML reader gets a parse error where they
|
||||||
|
previously got something empty that parsed -- a regression for them, and the
|
||||||
|
reason it is stated here rather than left inside the fix. Measured
|
||||||
|
2026-09-12 over the same four bundles, denominator = concept files carrying
|
||||||
|
a block `sources:` (2 756 + 446 + 1 133 + 270): PyYAML 6.0.3 reads the
|
||||||
|
returned string back on **0 of 4 605** of them, because the `?` opening a
|
||||||
|
query string in the viewer URL ends the flow scalar. The string is a READING
|
||||||
|
projection of a value this library does not write in that form; the emitter
|
||||||
|
`materialize._render_sources` still writes flow, so no bundle bytes move.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
- **A block `sources:` sequence no longer loses the address in the flat
|
- **A block `sources:` sequence no longer loses the address in the flat
|
||||||
|
|
@ -83,23 +114,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
is unmoved and asserted per reader copy: a nested key never enters the
|
is unmoved and asserted per reader copy: a nested key never enters the
|
||||||
document's namespace.
|
document's namespace.
|
||||||
|
|
||||||
### Changed
|
|
||||||
|
|
||||||
- **No bundle bytes move.** A five-document folder built before and after is
|
|
||||||
`diff -r`-identical (52 files), so no ranking measurement is owed. The
|
|
||||||
emission rule is untouched: this library still writes flow.
|
|
||||||
|
|
||||||
- **Two docstrings and one README paragraph corrected rather than left
|
|
||||||
standing.** `materialize._render_sources` gave three measured reasons for
|
|
||||||
refusing to emit the block form; reason 1 (a block list round-trips to an
|
|
||||||
empty value) and reason 3 (B6's acceptance test cannot pass) FELL with this
|
|
||||||
fix and are struck. Reason 2 STANDS and now carries the rule alone,
|
|
||||||
re-measured by reading `portfolio-optimiser` at `6eb58e5`: `read_provenance`
|
|
||||||
returns `UnreadableProvenance(reason="block-sequence")`. It is not the
|
|
||||||
guard's objection -- guard 1.4.0 reads the block form on 4 609 of 4 609
|
|
||||||
files. The README said this library "cannot read the block form" where one
|
|
||||||
reader could and one could not; it now separates the two by KEY.
|
|
||||||
|
|
||||||
## [0.8.4] — 2026-09-11
|
## [0.8.4] — 2026-09-11
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
|
||||||
36
README.md
36
README.md
|
|
@ -9,7 +9,7 @@ call anywhere in the run path.
|
||||||
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.4"
|
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5"
|
||||||
```
|
```
|
||||||
|
|
||||||
## Use it
|
## Use it
|
||||||
|
|
@ -59,11 +59,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.4"
|
uv pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5"
|
||||||
```
|
```
|
||||||
|
|
||||||
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.4`
|
entry in the `pyproject.toml` **of the tag it is installing**, and `v0.8.5`
|
||||||
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.
|
||||||
|
|
@ -74,10 +74,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.4"
|
pip install "llm-ingestion-okf @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5"
|
||||||
```
|
```
|
||||||
|
|
||||||
The guard tag is paired to the okf tag, not to this branch. `v0.8.4` declares
|
The guard tag is paired to the okf tag, not to this branch. `v0.8.5` 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
|
||||||
|
|
@ -88,7 +88,18 @@ 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.4` — the current tag: frontmatter this library writes is YAML a YAML
|
- `v0.8.5` — the current tag: a block `sources:` sequence is decoded by all
|
||||||
|
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
|
||||||
|
changes what an outside caller reads: it returns a flow string where it
|
||||||
|
returned an empty one. That string is a READING projection — PyYAML reads
|
||||||
|
it back on 0 of the 4 605 block files measured, because the `?` opening a
|
||||||
|
query string in the source URL ends the flow scalar — and the emitter still
|
||||||
|
writes flow, so no bundle bytes move. `okf consume` also stops scoring the
|
||||||
|
door's own `Enclosing section:` link line, which is now the default reading;
|
||||||
|
the excerpt still carries the line, so what moves is order and never an
|
||||||
|
excerpt's bytes. No new functionality; `okf check` has seventeen rules.
|
||||||
|
- `v0.8.4` — frontmatter this library writes is YAML a YAML
|
||||||
reader reads back the same (a block scalar it would misread is written
|
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
|
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
|
`okf consume` resolves a concept's `parent:` pointer into the excerpt
|
||||||
|
|
@ -586,7 +597,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.4"
|
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5"
|
||||||
okf project ~/my-documents
|
okf project ~/my-documents
|
||||||
claude
|
claude
|
||||||
```
|
```
|
||||||
|
|
@ -936,17 +947,18 @@ From a checkout, the test suite runs with:
|
||||||
.venv/bin/python -m pytest
|
.venv/bin/python -m pytest
|
||||||
```
|
```
|
||||||
|
|
||||||
The suite is the verification surface for everything above: **1783 tests
|
The suite is the verification surface for everything above: **1827 tests
|
||||||
collected, 1782 passed and 1 skipped**, run on 2026-09-11 with the `[extract]`
|
collected, 1826 passed and 1 skipped**, run on 2026-09-12 with the `[extract]`
|
||||||
extra installed. Both numbers are given because they are two measurements: the
|
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
|
figure published before the `v0.8.2` release was the PASSED count, and `pytest
|
||||||
--collect-only -q` reported one more.
|
--collect-only -q` reported one more.
|
||||||
(The figure stood at 596 until 2026-09-09 — measured 2026-08-21 and never
|
(The figure stood at 596 until 2026-09-09 — measured 2026-08-21 and never
|
||||||
updated as the suite grew — at 1515 until the `v0.8.0` release, at 1575
|
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
|
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
|
`v0.8.2` release, at 1658 after K3-19, at 1667 after K3-20 and through
|
||||||
the `v0.8.3` release; the figure above is the `v0.8.4` release's, after K3-22
|
the `v0.8.3` release, and at 1783 through the `v0.8.4` release, after K3-22
|
||||||
and K3-21: a count is a measurement with a date on it.)
|
and K3-21; the figure above is the `v0.8.5` release's, after K3-23, K3-24 and
|
||||||
|
K3-25: a count is a measurement with a date on it.)
|
||||||
Without the extra the same suite skips the tests covering the parser path;
|
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
|
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
|
**not** been re-measured since. The tests holding the fail-fast rejection for
|
||||||
|
|
|
||||||
2
llms.txt
2
llms.txt
|
|
@ -6,7 +6,7 @@ Requires Python 3.10+ and [uv](https://docs.astral.sh/uv/). Neither this package
|
||||||
nor the guard it depends on is on a package index yet; one command resolves both:
|
nor the guard it depends on is on a package index yet; one command resolves both:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.4"
|
uv tool install "llm-ingestion-okf[extract] @ git+https://git.fromaitochitta.com/open/llm-ingestion-okf.git@v0.8.5"
|
||||||
```
|
```
|
||||||
|
|
||||||
Then, in the folder you want to work from:
|
Then, in the folder you want to work from:
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "llm-ingestion-okf"
|
name = "llm-ingestion-okf"
|
||||||
version = "0.8.4"
|
version = "0.8.5"
|
||||||
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"
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ from .manifest import (
|
||||||
)
|
)
|
||||||
from .materialize import IngestResult, materialize_bundle
|
from .materialize import IngestResult, materialize_bundle
|
||||||
|
|
||||||
__version__ = "0.8.4"
|
__version__ = "0.8.5"
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"BlockedFile",
|
"BlockedFile",
|
||||||
|
|
|
||||||
2
uv.lock
generated
2
uv.lock
generated
|
|
@ -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.4"
|
version = "0.8.5"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "llm-ingestion-guard" },
|
{ name = "llm-ingestion-guard" },
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue