docs(linkedin-studio): OKF trinn E — Q3 besvart + korriger uverifisert vokabular-tilslutning

To selvkorreksjoner verifisert mot kode:
- type-vokabularet er tre verdier, ikke fem (JournalEntry/TributarySummary
  finnes kun i designnotat, aldri i kode)
- tilslutningen til lukket vokabular ble gitt uten aa sjekke innholdet;
  okf-check --strict-ingest exit 1 paa vaart konforme bundle, og safe
  default kollapser alle tre typene til Dokument

Nytt empirisk argument mot obligatorisk noekkel-prefiks: referanse-checkerens
egen konstant heter RECOMMENDED, ikke REQUIRED (exit 0 med advarsler).

Q3 (fase 4-omfang) besvart av llm-ingestion-okf: lag 1-primitivene, ikke
materialize_bundle-paritet. Status forblir planned.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019uzhvLjCm39mNQXVFwG7w2
This commit is contained in:
Kjell Tore Guttormsen 2026-07-20 21:38:55 +02:00
commit 4f95331801

View file

@ -72,6 +72,23 @@ library's materializer is stricter than the spec it implements. Our Stage-1 OKF
(`docs/okf-convergence-brief.md`) depends on rich fields riding along as extension keys; door A has no (`docs/okf-convergence-brief.md`) depends on rich fields riding along as extension keys; door A has no
mechanism for that. mechanism for that.
> **Addition, 2026-07-20 (trinn E).** Two runs of `okr/scripts/okf-check.mjs` against a fresh
> `brain init` scaffold sharpen this into a concrete argument, and correct one of our own claims:
>
> - The reference checker's own constant is named `RECOMMENDED`, not `REQUIRED` (`okf-check.mjs:21`).
> A bundle missing `resource`/`timestamp` gets **warnings and exit 0**. The de-facto conformance
> tool already treats every §5 key beyond `type` as advisory — so a mandatory ordered prefix would
> turn a green bundle red without a byte changing. Argument fed to commons' D1.
> - **Correction:** trinn C claimed our `type` vocabulary is five values. It is three —
> `Profile` (`scripts/brain/src/profile.ts:48`), `Operations` (`scaffold.ts:56`),
> `PendingDiff` (`cli.ts:252`). `JournalEntry`/`TributarySummary` exist only as examples in
> `docs/okf-convergence-brief.md:101`, never in code.
> - **Correction:** we assented to a closed `type` vocabulary without checking its contents.
> `okf-check.mjs --strict-ingest` **exits 1** on our conformant bundle — `okr/lib/okf-vocab.mjs:11-21`
> is nine okr-domain values, and the safe default (`Dokument`) collapses all three of our types into
> one, erasing the distinction `okf-conform.test.ts` rests on. Our assent now carries a condition:
> an absent vocabulary must mean *do not snap*, and the vocabulary is per-bundle, never spec-global.
**(2) Rewrite-on-run ownership vs incremental accretion.** Door A owns files via `generated: true` + **(2) Rewrite-on-run ownership vs incremental accretion.** Door A owns files via `generated: true` +
`ingest_manifest`, then **deletes every stamped file and rewrites the set** each run. Our stores accrete: `ingest_manifest`, then **deletes every stamped file and rewrites the set** each run. Our stores accrete:
dedupe by content id, topic-union on re-capture, last-wins score, collision-suffix on body divergence, dedupe by content id, topic-union on re-capture, last-wins score, collision-suffix on body divergence,
@ -240,8 +257,14 @@ the other's approval. The guard plan's own interop blocker (Python↔Node) is tr
scan nor an external bundle import. scan nor an external bundle import.
2. Is R2 (extension keys) a spec change via commons, or a materializer relaxation within the current spec? 2. Is R2 (extension keys) a spec change via commons, or a materializer relaxation within the current spec?
OKF v0.1 already mandates preserving unknown keys, which suggests the latter. OKF v0.1 already mandates preserving unknown keys, which suggests the latter.
3. For phase 4: is the Node half expected to reach parity with door A only, or with whatever doors exist 3. ~~For phase 4: is the Node half expected to reach parity with door A only, or with whatever doors exist
when it starts? Our adoption depends on R1, which is not door A. when it starts?~~ **Answered 2026-07-20 (trinn E, felles §6): phase 4 delivers the layer-1 primitives,
not `materialize_bundle` parity** — no Node repo in the set runs door A (verified here: the only Python
in this repo is `hooks/scripts/compile-hooks.py`, a build-time script never on a data path). Our register
status therefore stays **`planned`**, not `blocked on phase 4 scope`. One follow-up outstanding: layer 1
grew after the question was asked (`read_concept`, `navigate_bundle`, `routeLevel`), so we asked whether
phase 4 tracks the set as it stands or as it evolves — the reader is decision-relevant for us, since our
dependency is `serialize ∘ parse = identity`, not the writer alone.
## 9. References ## 9. References