feat(okf-v0.2): D4 — the Attested Computation contract, format only
Upstream §10 adds a concept type carrying a sanctioned way to compute a value. This lands its FORMAT: the five contract fields for emission and round-trip, and §10.2's one requirement. No execution — upstream defers the receipt and verdict wire formats, so there is nothing to build a runtime against. Two additions, both additive: - The five fields (`runtime`, `parameters`, `computation`, `executor`, `attester`) join `OKF_V0_2`'s emission order as one block, internally in §10.2's own listing order. Without it they still emit — in `emit`'s sorted tail, where `attester` precedes `runtime`, alphabetical order standing in for the contract's own. No bundle that carries none of the keys changes by a byte, and the v0.1 profiles gain nothing. - `FrontmatterSchema.required_by_type` expresses "`runtime` is REQUIRED for this type and no other" — the first rule here keyed off a frontmatter VALUE rather than a key. It cannot be `required`, which would demand `runtime` of every document. A type the mapping does not name carries no extra requirement, which is what keeps it inside §14: a consumer must not reject on an unknown `type`, so a conditional keyed on an unknown type stays silent rather than guesses. Also pinned, measured today: the line-oriented parser cannot read §10's canonical BLOCK form. `executor` and `attester` both carry a `resource`, and with no indentation model the second overwrites the first — `executor.resource` is lost silently, no error. Characterized rather than fixed: reading that form needs the structured reader (D1b), and a half-reader that drops half a contract is worse than one that never claimed to read it. CLAUDE.md gains the invariant that falls out of it: we emit flow form, never block, or we write bundles we cannot read back. 578 tests, mypy --strict clean, goldens byte-identical. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KKKMwi7e7PVHoFW6dJK5XP
This commit is contained in:
parent
99e5e17c00
commit
deeb248091
4 changed files with 287 additions and 2 deletions
|
|
@ -106,6 +106,15 @@ supported and the unspecified runtime is not; it re-enters scope when upstream
|
|||
specifies it. Because "always latest" decays silently, the release checklist
|
||||
carries an upstream-version re-check.
|
||||
|
||||
**Structured frontmatter values are emitted in YAML *flow* form, never block.**
|
||||
Both are valid YAML and an upstream reader recovers the same structure from
|
||||
either, but this library's parser is line-oriented: it round-trips a flow
|
||||
mapping as an opaque value and cannot read the block form at all — two block
|
||||
mappings sharing an inner key (§10.2's `executor` and `attester`, both carrying
|
||||
`resource`) collapse into one namespace and the first is lost silently.
|
||||
Emitting block would produce bundles we cannot read back. Reading it needs the
|
||||
structured reader (D1b); until then the constraint binds what we write.
|
||||
|
||||
**Every upstream release runs `docs/upstream-okf-upgrade-runbook.md`.** Pin the
|
||||
commit, enumerate the whole `okf/` tree, **read the shipped example bundles and not
|
||||
only `SPEC.md`**, classify the diff, measure our exposure and each consumer's, plan
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue