docs(okf-v0.2): the guard measurement removes the form question, and A-E5 grows the second run
Two corrections, both measured against guard 0.2.0 today rather than reasoned. Requirement 1: the T2 parser refuses every route to a mapping — the flow form on the disallowed-indicator set, the block form on the nested-mapping check, dotted keys on the key pattern. A v0.2 `generated` mapping has no expressible form through Door C at all, so the chosen flow form is not worse than the alternatives; there are none. The decision stands on its original grounds. What changes is a claim: no round-trip through a guard-gated import may be asserted. Door B never parses frontmatter, so the grammar binds import, not emission. A-E5: po-claude located a hole in A-E1. The emitter's `generated: true` and the ownership predicate are coupled through that literal, and OKF_V0_2 changes exactly it — one run compared byte for byte cannot see the predicate stall, since that needs two runs into the same directory. A-E5 now names the same-directory second run and expects it to succeed. The separate in-place DEFAULT-to-v0.2 question is marked undecided rather than quietly turned into an expectation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A2aKJxLejT9S8jYwoZ9fut
This commit is contained in:
parent
a00355533e
commit
b1a92c940d
1 changed files with 37 additions and 1 deletions
|
|
@ -536,6 +536,24 @@ D3/Door C, and no pilot repo sends us one. So the tag needs:
|
|||
compliance we may claim — and it is cheap to reverse, since moving to the
|
||||
block form later is a new profile, not a migration.
|
||||
|
||||
**Measured against the guard 2026-07-26, and it settles the form question by
|
||||
removing it.** The guard's T2 frontmatter parser (Door C, `okf.import_bundle`)
|
||||
refuses every route to a mapping, each on its own rule: the flow form on the
|
||||
disallowed-indicator set (`{` and `[` are both in it), the block form on the
|
||||
nested-mapping check, and dotted `generated.by` on the key pattern. What
|
||||
survives is scalars and flat lists of strings. So a `generated` **mapping** —
|
||||
which is what v0.2 specifies — has no expressible form through that gate at
|
||||
guard 0.2.0, and the flow form is not worse than the alternatives; there are
|
||||
none. Requirement 1 therefore stands as chosen, on its three original grounds.
|
||||
|
||||
What the measurement does change is a claim, not a form: nothing in this tag
|
||||
may state that a v0.2 bundle we emit round-trips through a guard-gated import.
|
||||
The profile documents that as a measured limitation. Door B is unaffected —
|
||||
the same six shapes through `screen_output` all return `warn`, and no Door B
|
||||
module references `parse_frontmatter` — so the grammar binds what can be
|
||||
IMPORTED, never what we emit. Measured against 0.2.0, the version we pin; the
|
||||
guard reports different behaviour on a later one, which is theirs to state.
|
||||
|
||||
Consequence for the estimate: requirement 1 is *smaller* than both the
|
||||
original sizing and U4's escalation of it — zero emitter work, the change is
|
||||
in the materializer's value construction — and A-E4 is corrected to match.
|
||||
|
|
@ -639,7 +657,25 @@ output is the baseline. Materialize it twice with the *same* explicit
|
|||
recorded there. A test specification that outlives the decision it encoded is
|
||||
the A-E6 defect class — a pilot failing our own expectation while the code is
|
||||
right — so the correction lands before the pilot receives it, not after.
|
||||
- **A-E5** Re-running with the same `ingested_at` is byte-identical.
|
||||
- **A-E5** Re-running with the same `ingested_at` is byte-identical — and the
|
||||
second `OKF_V0_2` run goes **into the directory the first one wrote**, not into
|
||||
a fresh one. **Sharpened 2026-07-26 on po-claude's finding**, which located the
|
||||
hole in A-E1: the emitter (`materialize.py:164`, `"generated": "true"`) and the
|
||||
ownership predicate (`:144`, `frontmatter.get("generated") != "true"`) are
|
||||
coupled through that string literal, and `OKF_V0_2` changes exactly that value.
|
||||
Change the emitted form without the predicate and the library stops recognising
|
||||
its own output, so the collision gate fires `collision_unstamped` on the files
|
||||
its previous run wrote. One run compared byte for byte — A-E1's shape — cannot
|
||||
see that: the defect needs two successive runs into the same directory. So the
|
||||
expectation is not only byte-identity but that the second run **succeeds**.
|
||||
Verified on `main`, not only on their pinned v0.3.2: the coupling is unchanged
|
||||
there, `_is_ingest_owned` having since gained a per-manifest stem check that
|
||||
narrows ownership further without touching the literal.
|
||||
|
||||
Distinct from this, and **not** a pilot expectation because the requirement is
|
||||
undecided: whether a `DEFAULT`-written bundle may be re-run **in place** under
|
||||
`OKF_V0_2` — i.e. whether the predicate accepts both the v0.1 stamp and the
|
||||
v0.2 form. That is a D2 requirement question standing with the operator.
|
||||
- **A-E6** The root `index.md` declares `okf_version: 0.2` — **unquoted**, and
|
||||
the file carries **no UTF-8 BOM**. Both are load-bearing, not stylistic:
|
||||
catalog measured that a quoted value fails their shape regex `exit 1`, and
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue