docs(okf): STEG 4 — tighten §3 on okf_version/okf_layout (non-enforcing)

§3's okf_version MUST now states the value is the upstream OKF version alone;
a plugin's own layout revision belongs in the optional okf_layout marker (§12).
Marked explicitly NOT YET ENFORCED — no checker validates the value's shape, so
an emitter still carrying a layout string conforms today.

No convention version bump: §12 ties a bump to a change in the §3 floor, and the
set of conforming bundles is unchanged (a clarification, deliberately inert).

Non-enforcing is the deliberate shape. okr ratified the split and owns the
migration, but their scripts/okf-* are file-fenced frozen through the 1.8.0
consolidation. Enforcing okf_layout presence now would redden the STEG 3 parity
gate on okr with nothing they could do until that ships. Enforcement is a
separate scoped step after their migration lands.

log.md records the round's other settled items, each verified against ground
truth rather than accepted as asserted: the roll-up carrier is a no-op for the
public-mirror class (builder tolerates absence by design); the catalog runs no
index.md generator (read-side only), so commons' inherited item is stale; the
okf_version ruling already existed in §12; and the catalog's okf-check.mjs is
NOT byte-identical to okr's (141 differing lines), so parity here is behavioural
over the §3 floor in default read-mode via check-okf-parity.mjs — never byte
identity.

Verified: suite 73/73, check-okf-parity 8/8 exit 0, check-versions 11 OK/0 WARN/
0 ERROR.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CPHvLhn2U3j2XD3Cn8zeYa
This commit is contained in:
Kjell Tore Guttormsen 2026-07-25 06:43:38 +02:00
commit 9ca2c8bdaf
2 changed files with 33 additions and 1 deletions

View file

@ -206,6 +206,35 @@ protocol; 🟢 is reserved for the independent gate-verified step (operator veri
nav-golden set (future cases additive, non-moving); Q2 the goldens derive from settled §3 Step 1.
Verified: `check-nav-golden` 10/10; gate CLI → exit 0 (2 fixtures PASS — hierarchy 5 concepts / escape 1,
`okf_version` 0.1, goldens present); full suite **73/73** across the six test files. _(catalog session.)_
- **2026-07-25** — **STEG 4: §3 tightened (non-enforcing) on the `okf_version` / `okf_layout` split.**
§3's `okf_version` MUST now states the value is the **upstream version alone**, with a plugin's own
layout revision belonging in the optional `okf_layout` marker (§12) — and marks itself **not yet
enforced**: no checker validates the value's shape, so an emitter still carrying a layout string
conforms today. **No convention version bump** — §12 ties a bump to a change in the §3 *floor*, and
the set of conforming bundles is unchanged (a clarification, deliberately non-enforcing).
**Why non-enforcing (okr's answer, received via coord):** okr ratified the split and owns the
migration, but `scripts/okf-*` is file-fenced **frozen** through their 1.8.0 consolidation (Wave 4/6);
the migration runs as scoped work right after release. It is an **ETA, not an open blocker** — their
field is pure echo text with no validation semantics, so they do not fail the gate meanwhile. Making
§3 *enforce* `okf_layout` presence now would redden the STEG 3 parity gate on okr with nothing they
could do until 1.8.0 ships. Enforcement is therefore a separate scoped step, after their migration.
**Also settled this round (all verified against ground truth, not accepted as asserted):**
(a) **D2 roll-up carrier is a no-op for the public-mirror class**`build-rollup-register.mjs`
defaults `carrierMode` to `absent` and only `committed` reaches output B, so okr, ms-ai-architect and
claude-code-llm-wiki are excluded **by design**, never reported as missing/malformed; no code change.
(b) **The catalog runs no `index.md` generator** — read-side only (`okf-check.mjs:45`,
`check-nav-golden.mjs:48`); commons' inherited "catalog regenerates index.md" item (ingest-spec §6)
is **stale** and needs no §6 ruling. (c) **`okf_version` ruling already existed** — spec §12 (lines
174186) settled it; llm-ingestion-okf was pointed at the written text rather than issued a new one.
(d) **Correction issued to llm-ingestion-okf:** their premise that the catalog's `okf-check.mjs` is
"vendored byte-identical from okr" — and thus their Phase 4 conformance oracle — is **false**
(141 diff lines; okr's copy adds `strictIngest`, `files` scoping, `innboks`/dot-dir exclusion and
`lib/` deps). Parity here is **behavioural on the §3 floor in default read-mode**, gated by
`check-okf-parity.mjs`, never byte identity; their impl's real entry point is that gate's n-way
`IMPLS` registry behind `available()`, not a catalog `ref` (they are not a marketplace plugin, and
`check-versions.mjs`/`release-plugin.mjs` operate only over `marketplace.json` entries).
Verified: full suite **73/73** across the six test files; `check-versions` 11 OK · 0 WARN · 0 ERROR.
_(catalog session.)_
## Distilled architecture notes (OKF round, 2026-07)

View file

@ -44,7 +44,10 @@ file path minus `.md`.
- **MUST** — every directory level has an `index.md` (directory enumeration, **no frontmatter**,
carries progressive-disclosure prose).
- **MUST** — the bundle-root `index.md` carries an `okf_version` marker (the upstream OKF version the
bundle targets, currently `0.1`).
bundle targets, currently `0.1`). The value is the **upstream version alone**; a plugin's own layout
revision belongs in the optional `okf_layout` marker (§12), never here. **Not yet enforced** — no
checker validates the value's shape, so an emitter still carrying a layout string here conforms
today. Enforcement waits until the emitters have migrated (`log.md`, STEG 4).
- **MUST (consumers)** — preserve unknown frontmatter keys, tolerate unknown `type` values, tolerate
broken cross-links.