diff options
| author | YurenHao0426 <Blackhao0426@gmail.com> | 2026-07-22 22:33:42 -0500 |
|---|---|---|
| committer | YurenHao0426 <Blackhao0426@gmail.com> | 2026-07-22 22:33:42 -0500 |
| commit | b3beab598f062ac0bca2a27b6b62b790223366e5 (patch) | |
| tree | 91d212686b65d976d4a20bf6f8ea2d2a1e455fb3 | |
| parent | c736932ec6fee7e69af2669524c480fa77c56c89 (diff) | |
audit: bind D4 to frozen source revision
| -rw-r--r-- | DYNAMIC_INNOVATION.md | 3 | ||||
| -rw-r--r-- | experiments/analyze_kp_dynamic_projection_confirmation.py | 17 |
2 files changed, 16 insertions, 4 deletions
diff --git a/DYNAMIC_INNOVATION.md b/DYNAMIC_INNOVATION.md index 9cb27f7..ae841ea 100644 --- a/DYNAMIC_INNOVATION.md +++ b/DYNAMIC_INNOVATION.md @@ -215,6 +215,9 @@ without threshold repair. The executable audit accepts exactly the ten named frozen records and rejects missing or extra JSON cells. Once its deterministic gate exists, later audits may only verify exact equality with that record; they cannot overwrite it. +The audit binds both the exact D3 prerequisite-gate digest and the detached +`0008f2c` source revision used to launch all ten records; merely sharing an +arbitrary clean revision is insufficient. Every record must also report an NVIDIA GTX 1080 with physical visibility restricted to the authorized timan107 GPU 5 or 7; device identity is an audit condition rather than an inferred property of the launch script. diff --git a/experiments/analyze_kp_dynamic_projection_confirmation.py b/experiments/analyze_kp_dynamic_projection_confirmation.py index 12522ec..2eec89a 100644 --- a/experiments/analyze_kp_dynamic_projection_confirmation.py +++ b/experiments/analyze_kp_dynamic_projection_confirmation.py @@ -2,6 +2,7 @@ """Audit the frozen D4 paired five-seed test confirmation.""" import argparse import glob +import hashlib import json import math import os @@ -11,6 +12,9 @@ import statistics CONDITIONS = ("clean_kp", "dynamic") SEEDS = tuple(range(10, 15)) T_CRITICAL_ONE_SIDED_95_DF4 = 2.131846786 +EXPECTED_SOURCE_COMMIT = "0008f2cd96c06bea98f43560867d93967c597711" +EXPECTED_FULL_GATE_SHA256 = ( + "48957573e6feb18e5c2dd0c6785bbd20f37126dd33e8bb7cb357190d236b4937") def numeric_leaves(value): @@ -41,8 +45,11 @@ def main(): parser.add_argument( "--out", default="results/kp_dynamic_projection_confirmation_gate.json") args = parser.parse_args() - with open(args.full_gate) as handle: - full_gate = json.load(handle) + with open(args.full_gate, "rb") as handle: + full_gate_bytes = handle.read() + if hashlib.sha256(full_gate_bytes).hexdigest() != EXPECTED_FULL_GATE_SHA256: + raise ValueError("D4 D3 prerequisite gate provenance drift") + full_gate = json.loads(full_gate_bytes) if (full_gate.get("protocol") != "kp_dynamic_neutral_projection_full_v1" or full_gate.get("status") != "passed" or full_gate.get("independent_confirmation_opened") is not True): @@ -205,8 +212,10 @@ def main(): if hardware["peak_memory_allocated_bytes"] > int( 2.5 * 1024 ** 3): failures.append(f"seed{seed}:peak_memory") - if len(source_commits) != 1: - raise ValueError("all D4 runs must share one source revision") + if source_commits != {EXPECTED_SOURCE_COMMIT}: + raise ValueError( + "all D4 runs must use the frozen source revision; " + f"observed={sorted(source_commits)}") accuracies = { condition: [float(records[(seed, condition)]["final"]["accuracy"]) |
