Sub of: #73 (factorized-β wave).
Mode: design-and-build. cell_kind: implementation.
Dispatch: §5.2 single-session δ-as-γ (γ cap A−). Branch: cycle/{this-issue-number} off origin/main.
Scope-sizing: 10 ACs — at the top of the typical band; kept whole (one cohesive engine change: enumerate → adjudicate → aggregate → gate). Split only if β/γ enumerators diverge mid-flight.
Source of truth (frozen — α MUST NOT re-derive)
docs/beta/governance/CONSISTENCY-FACTORIZATION-PREREG.md rev 4 — the authority for the seam, enumerators, aggregation, and gate.
docs/beta/governance/fixtures/factorized-beta-controls.json — the B3 oracle (frozen; not tunable in this PR except a pre-run syntax fix).
- Engine anchors already present:
engine/ocaml/lib/mechanical_scoring.ml (extract_md_links, link_resolves, doc_slug_map, authority_alignment, target_file_fit), witness_numeric.ml, response_schema.ml, witness_medoid.ml, consistency.ml.
Implementation contract (pinned by δ; α implements to these, does not improvise)
- Allowed β locus kinds — exactly three, each mapped to its real mechanical anchor:
citation_bears_claim (cross_reference/source_of_truth link+anchor), authority_claim (self-claim phrase with an inline link), target_file_fit (H1 words vs filename stem; parent dir for readme/skill). No repeated_fact, no γ/version kind, no undocumented kind.
- Deterministic pre-witness inventory. Enumerate loci per the prereg §"β locus enumerators"; canonical order (bundle file order → source line → kind order);
locus_id assigned by that order. mechanical_status ∈ {resolved, unresolved} (two-valued; non-document links are not enumerated).
- Aggregation formula — exact:
supports→0.0, insufficient→0.5, contradicts→1.0, unresolved→1.0 (no LLM call); kind weights citation_bears_claim=1.0, authority_claim=1.0, target_file_fit=0.5; β_factorized = 1 − Σ(w·d)/Σ(w), clamped [0,1]. N(T)=0 → β=1.0; locus_sparse ⇔ E(T)<5 on LLM-eligible count.
- Response validation: exactly one response per resolved
locus_id; missing/duplicate → sample refused (counts against A0 yield).
- Gate wiring: evaluate A0/A1/A2/A3 + B1/B2/B3 + C exactly as preregistered, including the NO-DECISION rule (>1 held-out target
locus_sparse).
- The LLM never emits a scalar; the engine computes β.
Acceptance criteria
- AC1 — exactly the three allowed kinds (contract §1); no others.
- AC2 — deterministic pre-witness inventory artifact with fields:
target, locus_id, kind, source_path, source_span, target_path, target_span, mechanical_status, llm_called; written before any LLM call; uploaded + cited in close-out.
- AC3 — locus IDs stable: regression test proving same bundle → same inventory + same IDs.
- AC4 — response refused on any missing/duplicate resolved
locus_id.
- AC5 — unresolved loci scored
d=1.0, no LLM call.
- AC6 — aggregation exactly per contract §3.
- AC7 — B3 fixture gate passes on the committed fixtures;
jq -e . clean; all hard controls pass while n<20.
- AC8 — A/B/C evaluated exactly as preregistered, incl. NO-DECISION.
- AC9 —
scripts/cm-admissibility.sh --self-test matrix unchanged.
- AC10 — close-out records exactly one of PASS | FAIL | NO-DECISION; on FAIL/NO-DECISION no follow-up tweak without a new operator dispatch.
Proof commands
cd engine/ocaml && dune build && dune runtest && cd ../..
jq -e . docs/beta/governance/fixtures/factorized-beta-controls.json
scripts/cm-admissibility.sh --self-test
bash scripts/validate-release-gate.sh --mode pre-merge
bash scripts/verify-skill-bundle.sh
Then the pre-registered k=3 factorized-β run over all five held-out targets (credentialed CI witness), attaching: inventory artifacts, raw witness responses, validation artifacts, factorized-β reports, free-witness baseline, gate summary, and the PASS/FAIL/NO-DECISION close-out.
Out of scope
α/γ factorization; repeated_fact; more filing/checklist/card structure; standing promotion; release/ledger/tag/VERSION; editing the fixture manifest (except a pre-run syntax fix); tuning on real registry targets.
Sub of: #73 (factorized-β wave).
Mode:
design-and-build. cell_kind:implementation.Dispatch: §5.2 single-session δ-as-γ (γ cap A−). Branch:
cycle/{this-issue-number}offorigin/main.Scope-sizing: 10 ACs — at the top of the typical band; kept whole (one cohesive engine change: enumerate → adjudicate → aggregate → gate). Split only if β/γ enumerators diverge mid-flight.
Source of truth (frozen — α MUST NOT re-derive)
docs/beta/governance/CONSISTENCY-FACTORIZATION-PREREG.mdrev 4 — the authority for the seam, enumerators, aggregation, and gate.docs/beta/governance/fixtures/factorized-beta-controls.json— the B3 oracle (frozen; not tunable in this PR except a pre-run syntax fix).engine/ocaml/lib/mechanical_scoring.ml(extract_md_links,link_resolves,doc_slug_map,authority_alignment,target_file_fit),witness_numeric.ml,response_schema.ml,witness_medoid.ml,consistency.ml.Implementation contract (pinned by δ; α implements to these, does not improvise)
citation_bears_claim(cross_reference/source_of_truth link+anchor),authority_claim(self-claim phrase with an inline link),target_file_fit(H1 words vs filename stem; parent dir for readme/skill). Norepeated_fact, no γ/version kind, no undocumented kind.locus_idassigned by that order.mechanical_status ∈ {resolved, unresolved}(two-valued; non-document links are not enumerated).supports→0.0,insufficient→0.5,contradicts→1.0,unresolved→1.0 (no LLM call); kind weightscitation_bears_claim=1.0,authority_claim=1.0,target_file_fit=0.5;β_factorized = 1 − Σ(w·d)/Σ(w), clamped [0,1].N(T)=0 → β=1.0;locus_sparse ⇔ E(T)<5on LLM-eligible count.locus_id; missing/duplicate → sample refused (counts against A0 yield).locus_sparse).Acceptance criteria
target, locus_id, kind, source_path, source_span, target_path, target_span, mechanical_status, llm_called; written before any LLM call; uploaded + cited in close-out.locus_id.d=1.0, no LLM call.jq -e .clean; all hard controls pass while n<20.scripts/cm-admissibility.sh --self-testmatrix unchanged.Proof commands
Then the pre-registered k=3 factorized-β run over all five held-out targets (credentialed CI witness), attaching: inventory artifacts, raw witness responses, validation artifacts, factorized-β reports, free-witness baseline, gate summary, and the PASS/FAIL/NO-DECISION close-out.
Out of scope
α/γ factorization;
repeated_fact; more filing/checklist/card structure; standing promotion; release/ledger/tag/VERSION; editing the fixture manifest (except a pre-run syntax fix); tuning on real registry targets.