docs(k3): round 22, frontmatter a YAML reader reads back the same
K3-22's report, CHANGELOG under [Unreleased], and two corrections of a sentence measured false. README and CLAUDE.md both said of the flow form "both are valid YAML, and a real YAML consumer recovers the same structure from either". An unquoted URL with a query string inside a flow mapping is not valid YAML for PyYAML, and the quoted form is refused by the pinned guard; the paragraph now states the limit. CLAUDE.md also records the K3-22 invariant and the new refusal of a `--frontmatter` flow value with such a leaf. Measured, fix `ed0418f` against base `0308169`, each tree built twice from frozen exports: five-document project 0 files moved; R761 XML and HTML 1 line each; K2 default 42 `title` lines, after which 454 of 454 frontmatters parse and read back the same (base 413 parse, 412 read back). hit@k on R761 base = fix, S1-S6 6/6 at hit@1/8/50 at both k, KP rank 1; okf check 32 of 32 payloads 0 findings over 16 rules; K2 pin 7 passed in the export. Found outside the order: the pinned guard refuses nearly every segmented concept okf writes, on its scalar flow sequences (`source_offset`, `references`, `derived`) -- identical before and after, so older than K3-22. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
ed0418f228
commit
e717b1c87a
4 changed files with 350 additions and 6 deletions
32
CHANGELOG.md
32
CHANGELOG.md
|
|
@ -7,6 +7,38 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Frontmatter this library writes is YAML a YAML reader reads back the same
|
||||
(K3-22).** SPEC § 11 point 1 requires "a parseable YAML frontmatter block" in
|
||||
every file. Measured with PyYAML 6.0.3 before the change, the pinned K2
|
||||
default bundle failed `safe_load` on 41 of 455 blocks (and a 42nd parsed to
|
||||
a truncated title), and each R761 build on 1 -- every one a block scalar
|
||||
written verbatim: a title with `": "` or `" #"`, a leading `- `, `*` or `**`,
|
||||
a trailing `:`.
|
||||
- **Block scalars:** a value K3-19's plain-scalar rule refuses is written
|
||||
double-quoted, `\` and `"` escaped; every other value keeps its bytes.
|
||||
Rebuilt, the five-document project moves 0 files, each R761 build 1 line
|
||||
and the K2 default bundle 42 `title` lines, after which all 454 of its
|
||||
frontmatters parse and read back the same.
|
||||
- **Flow leaves (`sources`, Door A's list, a run-stated flow value):** the
|
||||
pinned guard refuses any quote inside a flow mapping, so a leaf PyYAML
|
||||
would refuse (`?`, `,[]{}`, `": "`, `" #"`, a quote, a leading indicator)
|
||||
has no form both read and is refused with the door's existing code
|
||||
(`inbox_source_file_unaddressable`, `inbox_source_title_unaddressable`,
|
||||
`source_reference_unquotable`, `run_frontmatter_invalid`).
|
||||
- **Behaviour change:** `okf build --frontmatter 'sources=[{ resource: <URL
|
||||
with a query string>, … }]'` now exits 2 and writes nothing. K3-19's own
|
||||
flagged R761 build used such a URL and wrote 2 761 of 2 761 frontmatters
|
||||
PyYAML refuses.
|
||||
- **Readers** (`parse_frontmatter`, the index and structure readers, both
|
||||
`read_sources` branches) unquote a `"`-wrapped value; `'`-wrapped values
|
||||
are untouched. On 25 273 files of existing bundles the readers return
|
||||
exactly what they returned before.
|
||||
- The generated `SKILL.md` header goes through the same block rule.
|
||||
- PyYAML joins the `dev` dependency group only; `src/` imports no yaml.
|
||||
- Report: `docs/2026-09-11-k3-runde22-yaml-lesbar-frontmatter.md`.
|
||||
|
||||
## [0.8.3] — 2026-09-11
|
||||
|
||||
### Added
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue