// SPDX-License-Identifier: Apache-2.0 // © 2026 Lutar, Stephen P. — SZL Holdings // ORCID: 0009-0001-0110-4173 // // Layer 6 — a11oy policy gate for ReplayDeterminism (T5) // // Policy rationale: // For canonical JSON + pinned PRNG + frozen registry, 5× replay must yield // the canonical root "1ed4d253…". Any deviation from the expected root is // a determinism violation that blocks production deployment. // // Lean derivation cited: `replayDeterminism` (T5) // Lean file: Lutar/Gate/ReplayDeterminism.lean // Lean commit SHA: 1dca00032dfc9aa8559cc6c2e4b63192fcf52371 // Lean status: theorem (ENFORCED) // // References: // Zenodo: https://doi.org/10.5281/zenodo.20119582 // INNOVATIONS.md §2 T5: replay determinism proof export interface ReplayDeterminismGateConfig { /** Expected canonical Merkle root. Required. */ canonicalRoot: string; /** Required replay run count. Default: 5. */ requiredRuns?: number; } export interface ReplayDeterminismGateOpts { replayRoots: string[]; } export interface ReplayDeterminismDecision { allow: boolean; rationale: string; formula: string; leanTheorem: string; leanFile: string; leanCommitSha: string; canonicalRoot: string; matchingRuns: number; totalRuns: number; lambdaScore: number; } const LEAN_THEOREM = "replayDeterminism"; const LEAN_FILE = "Lutar/Gate/ReplayDeterminism.lean"; const LEAN_COMMIT = "1dca00032dfc9aa8559cc6c2e4b63192fcf52371"; const DEFAULT_RUNS = 5; export function replayDeterminismGate( config: ReplayDeterminismGateConfig ): (opts: ReplayDeterminismGateOpts) => ReplayDeterminismDecision { const { canonicalRoot } = config; const requiredRuns = config.requiredRuns ?? DEFAULT_RUNS; if (!canonicalRoot) throw new Error(`ReplayDeterminismGate: canonicalRoot is required`); return function gate(opts: ReplayDeterminismGateOpts): ReplayDeterminismDecision { const { replayRoots } = opts; if (!Array.isArray(replayRoots) || replayRoots.length < requiredRuns) { throw new Error(`ReplayDeterminismGate: need ${requiredRuns} roots; got ${replayRoots?.length}`); } const matchingRuns = replayRoots.slice(0, requiredRuns).filter(r => r === canonicalRoot).length; const allow = matchingRuns === requiredRuns; const lambdaScore = matchingRuns / requiredRuns; const rationale = allow ? `ReplayDeterminism (T5): all ${requiredRuns} runs match canonical root "${canonicalRoot.slice(0,16)}…". Passes. Lean: ${LEAN_THEOREM} @${LEAN_COMMIT.slice(0, 12)}` : `ReplayDeterminism (T5): ${matchingRuns}/${requiredRuns} runs matched — determinism violation. Denied. Lean: ${LEAN_THEOREM} @${LEAN_COMMIT.slice(0, 12)}`; return { allow, rationale, formula: "ReplayDeterminism", leanTheorem: LEAN_THEOREM, leanFile: LEAN_FILE, leanCommitSha: LEAN_COMMIT, canonicalRoot, matchingRuns, totalRuns: replayRoots.length, lambdaScore }; }; }