docs(okf-v0.2): steps 1-3 are done, and step 3 was not behavior-neutral
The plan's own line said steps 1-3 change no behavior. V-A7's construction gate made that untrue, and a stale premise in a plan is the class of thing this repo has already paid for twice. Recorded where it was wrong, with the operator decision that put the gate before D2 rather than at it, and with Door C's six tolerance cases measured rather than expected. 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
7bc366bc1a
commit
c85347e8a5
1 changed files with 13 additions and 2 deletions
|
|
@ -921,8 +921,8 @@ consumer can use anyway.
|
|||
|
||||
## TDD order
|
||||
|
||||
Steps 1–3 add tests and change no behavior, so they are safe first and de-risk
|
||||
everything after.
|
||||
Steps 1–3 are almost entirely tests, so they are safe first and de-risk
|
||||
everything after. **Done 2026-07-26** (`1215f98`, `7bc366b`).
|
||||
|
||||
1. **Characterize what already holds.** `parse_frontmatter` round-trips an inline
|
||||
flow mapping opaquely; `_is_ingest_owned` returns False for a v0.2 `generated`
|
||||
|
|
@ -930,8 +930,19 @@ everything after.
|
|||
documented guarantee.
|
||||
2. **Audit Door C against the tolerance rules** (D3): one test per MUST NOT plus
|
||||
the bare-`verified` MUST. Failures here are real defects, not plan revisions.
|
||||
*Measured: all six pass.* Door C's tolerance is structural rather than
|
||||
lenient — it writes the guard's bytes verbatim and never parses the sender's
|
||||
frontmatter, so a D1b reader that starts judging shape at this door is what
|
||||
would break them.
|
||||
3. **Assert no hard-coded version** anywhere a profile should decide (V4), and
|
||||
the no-`timestamp`-plus-malformed-`generated` construction invariant (V-A7).
|
||||
**The one place these three steps add behavior**, and it was an operator
|
||||
decision to add it here rather than at D2: V-A7's stated test shape is a
|
||||
construction-time refusal, and building it before D2 is what develops D2
|
||||
under the invariant instead of alongside it. It lives on
|
||||
`FrontmatterSchema.__post_init__` — the C3 analog, and a profile must build
|
||||
its schema first. Behavior-neutral for both shipped profiles, with the
|
||||
byte-exact golden suite as the proof rather than the claim.
|
||||
4. **D1a — the emitter half only.** `FrontmatterSchema.emit` accepts a block-list
|
||||
value. Runs through `DEFAULT`'s path, so the golden suite proves V-A6 here.
|
||||
**No longer tag-blocking** after requirement 1's re-sizing — the flow form
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue