release: 1.1.0 -- the first behaviour change shipped under the freeze
Six live version surfaces bumped by hand (no sed -- provenance is never bumped): pyproject.toml, __init__.__version__, README badge + Status + the pinned pip install tag, docs/BRIEF.md, docs/ADOPTION-BRIEF.md Status, and CLAUDE.md. ADOPTION-BRIEF's test count 792 -> 802. NOT bumped, and deliberately: SECURITY.md's two `1.0.0` references name the freeze BASELINE, not the current version -- "a payload that disposes WARN on 1.0.0 may dispose FAIL_SECURE on a later 1.x" is the promise this release instantiates, so rewriting it to 1.1.0 would erase what it promised. The GATE-G and PLAN-v1 numbers are the 1.0.0 gate record. The Forge repo description carries no version (verified against the API last session). This is the case SECURITY.md and the 1.0.0 CHANGELOG entry described in advance: the exported surface is frozen, detection behaviour is not. No exported name moved. A document that disposed WARN on 1.0.0 may dispose FAIL_SECURE here; a consumer whose frontmatter carries an unquoted ": " in a value will see those concepts refused at import, and quoting it parses. Re-measured after the bump, alone: 802 passed, 129/129 classes, 6/6 gaps hold, 35 limitations.
This commit is contained in:
parent
da30211bc7
commit
ca4f97c8c9
7 changed files with 50 additions and 10 deletions
40
CHANGELOG.md
40
CHANGELOG.md
|
|
@ -10,6 +10,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
Nothing yet.
|
||||
|
||||
|
||||
## [1.1.0] — 2026-08-13
|
||||
|
||||
### Fixed — a mapping construct in OKF frontmatter no longer degrades into a string
|
||||
|
||||
`okf.parse_frontmatter` gives the mapping *class* no expressible form by design
|
||||
(T2). Two routes escaped that: they parsed "successfully" into the wrong **type**
|
||||
instead of raising. Both are closed, and both now `FAIL_SECURE` through
|
||||
`okf.import_bundle` (door C).
|
||||
|
||||
| route | was | now |
|
||||
|---|---|---|
|
||||
| `sources:`<br>` - uri: https://e.com/a` | string `'uri: https://e.com/a'` — WARN | `OKFFrontmatterError` — FAIL_SECURE |
|
||||
| `sources:`<br>` - uri:` | string `'uri:'` — WARN | `OKFFrontmatterError` — FAIL_SECURE |
|
||||
| `attester: resource: attesters/x.py` | string `'resource: attesters/x.py'` — WARN | `OKFFrontmatterError` — FAIL_SECURE |
|
||||
|
||||
The security consequence was the same in each: a pointer parked in a degraded
|
||||
mapping rides through in a key the `resource` allowlist never inspects, and mode-b
|
||||
`import_bundle` writes the merged concept verbatim. The first route was documented
|
||||
at `docs/LIMITATIONS.md:43`; the inline second colon was **found by measurement
|
||||
while closing it**, and is the reason this release names two routes rather than one.
|
||||
Neither shape is conformant OKF — a well-formed bundle does not produce them; a
|
||||
malformed or hostile one can.
|
||||
|
||||
**The boundary is where YAML puts it**, ground-truthed against PyYAML 6.0.3 rather
|
||||
than reasoned: `": "` and a trailing `":"` are exactly the two shapes where a plain
|
||||
scalar becomes a mapping, and they are refused. A colon carrying neither a space nor
|
||||
a line end opens no mapping — `domain:security` and `https://e.com:8443/a` still
|
||||
parse — and a quoted scalar (`- "uri: x"`) is still a scalar. Quotes are retained
|
||||
rather than stripped; that divergence from YAML is unchanged and now pinned.
|
||||
|
||||
**This is a behaviour change inside the freeze, not a break of it.** No exported
|
||||
name moved. A document that disposed `WARN` on `1.0.0` may dispose `FAIL_SECURE`
|
||||
here — the `1.0.0` entry says exactly this is a fix, not a break. A consumer whose
|
||||
bundles carry an unquoted `": "` in a frontmatter value will now see those concepts
|
||||
refused at import; quote the value, and it parses.
|
||||
|
||||
Suite 792 → **802** (11 rows added, 1 retired). 129/129 classes, 6/6 documented
|
||||
gaps, 35 limitations — all unchanged.
|
||||
|
||||
|
||||
## [1.0.0] — 2026-08-13
|
||||
|
||||
### Changed — the exported Python surface is frozen under semver
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue