docs(okf-v0.2): A-E3 no longer outlives the decision it encoded

The operator chose V1(d) for OKF_V0_2, so the pilot expectation A-E3 was
written against — a producer-and-version actor — is stale. Corrected in place,
with the reason, before po-claude receives the tag rather than after they run.

V1's own section records what the choice does and does not settle: DEFAULT's
generated is commons' §5 layer and stays in their queue as item 8. TDD step 5
is marked done at c90171d.
This commit is contained in:
Kjell Tore Guttormsen 2026-07-27 09:12:07 +02:00
commit aac765fa5a

View file

@ -648,8 +648,16 @@ output is the baseline. Materialize it twice with the *same* explicit
frontmatter block where the profile requires one satisfies A-E2; a diff in
body bytes does not.
- **A-E3** `generated` is an inline flow mapping
`{ by: llm-ingestion-okf/<version>, at: <ingested_at> }` — not the string
`{ by: process:llm-ingestion-okf, at: <ingested_at> }` — not the string
`true` — and `at` equals the `ingested_at` argument **exactly**.
**Corrected 2026-07-27**, before the pilot receives the tag. The original read
`{ by: llm-ingestion-okf/<version>, ... }`, written before V1 resolved. The
actor now carries **no version**, which is the whole point of the change: a
producer version inside a byte-compared golden fires regression on every
release with no contract having changed. A pilot expectation that outlives its
own decision is the A-E6 defect class, so this is sent to po-claude rather than
left to surface during their run.
- **A-E4** `sources` is present as an inline flow sequence of one flow mapping —
`[{ id: <source id>, resource: <source reference> }]` — carrying at least a
`resource` derived from the manifest's source. **Corrected 2026-07-26** from
@ -906,6 +914,17 @@ Either way the decision is the operator's via commons' queue, not ours. Our only
ask: if (d) is ratified, we want it before freezing a v0.2 fixture carrying
`generated`, so the regeneration happens once.
**Settled for OUR profile 2026-07-27 — and only for ours.** The operator chose
(d) for `OKF_V0_2`, which shipped in D2 as
`OwnershipPolicy(actor="process:llm-ingestion-okf")`. Keep the two apart: V1 as
raised is about `DEFAULT`'s `generated`, and `DEFAULT` states **commons'** §5
layer, so that half stays in their ratification queue as item 8 and is not
settled by this. What this does settle is that the ask above is discharged in the
direction we control — the v0.2 fixture will be frozen at D5 carrying the
constant actor, so there is no regeneration to do later. It also makes our
recommendation to commons and our own implementation agree, which is worth
something when they weigh it: we took the cost we were recommending they take.
**V2 — Which D1 direction?** (c) recommended above; needs a decision before code
because it determines whether `mypy --strict` churn lands across the existing
call sites or stays confined to the new path.
@ -997,7 +1016,15 @@ everything after. **Done 2026-07-26** (`1215f98`, `7bc366b`).
needs no emitter change — so this stays here for D1/Door C and drops out of
the critical path to `v0.5.0a1`.
5. **D2** — the `OKF_V0_2` profile, profile-aware `_is_ingest_owned`, `sources`
derivation. `OKF_LATEST` stays on v0.1 semantics.
derivation. `OKF_LATEST` stays on v0.1 semantics. **Done 2026-07-27**
(`c90171d`, 542 tests). Ownership became an `OwnershipPolicy` on the profile
rather than a literal in the gate — the emitter and the predicate are coupled
through the stamp value, and a policy is what makes them changeable only
together. Recognition is one-way by decision (v0.2 owns the v0.1 stamp, not
the reverse), so V-A3's fail-safe survives. `okf_version` is deliberately NOT
declared here; it lands once, at D5, when the placement question closes.
Requirement 6 — the keyword-only `profile` parameter on `materialize_bundle`
— is next and is what makes the profile reachable from outside the library.
6. **D5** — the v0.2 golden fixture, generated by the code. `okf_version: 0.2`
is declared only here, once 15 are green (conform first, claim after).
**Unquoted** — the quoted form written here previously contradicted A-E6 and