Files
rune/scripts/close_contract_gap_ss.py
T
Nick 44634a1800 chore(store): close structural_store dichotomy contract BUILDER-2026-10-13T11:43:24Z-0e55c4-factory-gap-ss (parity 201530bf, phase B c66d4bab)
Re-walk of BUILDER-2026-10-13T00:32:22Z-bc3aae-factory-gap-ss whose close-commit
was lost in the store repair: submit→approved→building→verifying→closed in one
process on the fresh store, evidence = the already-pushed feat/refactor SHAs
(audit 34/34, parity 4387/4387).
2026-10-13 13:04:49 +01:00

58 lines
2.2 KiB
Python

#!/usr/bin/env python3
"""Close the #2479 structural_store gap-closing contract (re-walk on the
repaired store). The original contract BUILDER-2026-10-13T00:32:22Z-bc3aae-
factory-gap-ss was opened and walked draft→building in the isolated worktree,
but the close was never committed and the store was later repaired by
union-merge — the contract entity did not survive. This re-walks the FULL
lifecycle (submit→approved→building→verifying→closed) in ONE process per the
shared-store clobber law, carrying the already-pushed parity SHAs as evidence:
feat 201530bf close PARTIAL gaps — dichotomy wave (parity)
ref c66d4bab Phase B language-advantage pass
Usage: close_contract_gap_ss.py
"""
import json
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "src"))
from rune.construction_interface import ConstructionInterface
PARITY_SHA = "201530bf"
PHASE_B_SHA = "c66d4bab"
ORIG = "BUILDER-2026-10-13T00:32:22Z-bc3aae-factory-gap-ss"
iface = ConstructionInterface(builder="factory-gap-ss")
r = iface.submit_need(
"structural_store dichotomy gap-close (re-walk of " + ORIG + " whose "
"close-commit was lost in the store repair): 21 audit-missing functions "
"ported name-preserving to Rust, doc-envelope FFI ss_*, ctypes loader, "
"facade delegation with RUNE_STRUCTURAL_CORE=python pin; frozen-truth "
"battery 86 cases; live parity 4387/4387; audit 34/34 (was 13/34). "
"Delivered on gitea/master: feat " + PARITY_SHA + ", Phase B "
+ PHASE_B_SHA + ".",
origin="builder",
)
print("submit_need:", json.dumps(r)[:300])
if not r.get("success"):
print("NEED FAILED — aborting")
sys.exit(1)
c = r["ids"]["contract_id"]
print("contract_id:", c)
for phase in ("approved", "building", "verifying", "closed"):
t = iface.transition(c, phase, evidence_ref=f"commit:{PARITY_SHA}" if phase == "verifying" else "")
ok = t.get("success")
print(f"transition->{phase}:", "ok" if ok else json.dumps(t)[:300])
if not ok:
sys.exit(1)
doc = iface.scaffold.load()
e = iface.scaffold.contract(doc, c)
print("FINAL PHASE:", e.get("phase") if e else "MISSING")
if not e or e.get("phase") != "closed":
sys.exit(1)
print("CLOSED", c)