39 lines
1.6 KiB
Python
39 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Open + walk the #2479 dichotomy-wave construction contract for
|
|
research_budget to verifying. Full lifecycle in ONE process."""
|
|
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
|
|
|
|
iface = ConstructionInterface(builder="factory-batch-i")
|
|
|
|
r = iface.submit_need(
|
|
"Complete the research_budget dichotomy port to FULL Rust (#2479 "
|
|
"tranche): the bounded RESEARCHED_CHANGE budget kernel — new_budget "
|
|
"/ spend (query/tool dispatch, loud overrun refusal with exact "
|
|
"oracle stop_reason strings) / stop — as doc-envelope FFI (rb_* "
|
|
"symbols, free via capability_scoring cs_free_string — no free "
|
|
"re-export); rb_loader mirroring broker_loader.py; facade keeps "
|
|
"the Python floor, RUNE_RB_CORE=python pin; frozen-oracle battery "
|
|
"(every branch: defaults, boundary spend to cap, overrun refusal, "
|
|
"already-stopped refusal, non-query kinds take the tool path, "
|
|
"explicit stop); live parity 100% (frozen + fuzz seeds); Phase B "
|
|
"language-advantage pass (positional budget slots).",
|
|
origin="builder",
|
|
)
|
|
print("submit_need:", json.dumps(r)[:300])
|
|
if not r.get("success"):
|
|
print("NEED FAILED — aborting"); sys.exit(1)
|
|
cid = r["ids"]["contract_id"]
|
|
print("contract_id:", cid)
|
|
for phase in ("approved", "building", "verifying"):
|
|
t = iface.transition(cid, phase)
|
|
print(f"transition->{phase}:", json.dumps(t)[:150])
|
|
if not t.get("success"):
|
|
sys.exit(1)
|
|
print("CONTRACT", cid, "verifying")
|