LYGO-Resonance-Engine / protocol_stack /tools /run_twin_gate_vector_suite.py
DeepSeekOracle's picture
Phase 3: Run a Node pipeline + blueprint refs
9242d90 verified
Raw
History Blame Contribute Delete
3.16 kB
#!/usr/bin/env python3
"""40+ vector twin-gate convergence: semantic text path vs byte path per claim."""
from __future__ import annotations
import json
import sys
from datetime import datetime, timezone
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
VECTORS = ROOT / "tests" / "test_falsifiable_vectors.json"
OUT = ROOT / "tests" / "twin_gate_vector_suite_last_run.json"
sys.path.insert(0, str(ROOT / "stack"))
from lygo_stack import deploy_stack # noqa: E402
SIGNATURE = "Δ9Φ963-TWIN-GATE-VECTOR-SUITE-v1"
def main() -> int:
data = json.loads(VECTORS.read_text(encoding="utf-8"))
stack = deploy_stack("TWIN_GATE_VECTOR_SUITE")
rows = []
verdict_match = 0
deltas = []
print("=" * 72)
print(" TWIN GATE — 40+ VECTOR CONVERGENCE SUITE")
print(f" {SIGNATURE}")
print("=" * 72)
for category, vectors in (data.get("categories") or {}).items():
for vec in vectors:
claim = (vec.get("payload") or {}).get("claim", "")
ent = float((vec.get("payload") or {}).get("entropy_level", 0.5))
sw = ent
text = stack.process_ethical_query(
claim,
severity=sw,
severity_weight=sw,
audit_category=category,
purpose=f"vec_{vec.get('id')}",
)
byte = stack.process_falsifiable_vector(vec, category=category)
t0 = text.get("p0") or {}
tv = str(t0.get("verdict", ""))
bv = str(byte.get("decision", ""))
tp = float(t0.get("phi_risk", t0.get("risk", 0)))
bp = float(byte.get("phi_risk", 0))
dphi = round(bp - tp, 4)
deltas.append(abs(dphi))
if tv == bv:
verdict_match += 1
rows.append(
{
"id": vec.get("id"),
"category": category,
"text_verdict": tv,
"byte_verdict": bv,
"text_phi": round(tp, 4),
"byte_phi": round(bp, 4),
"delta_phi": dphi,
"verdict_match": tv == bv,
"expected": vec.get("expected_decision"),
}
)
total = len(rows)
payload = {
"signature": SIGNATURE,
"timestamp": datetime.now(timezone.utc).isoformat(),
"total": total,
"verdict_match_count": verdict_match,
"verdict_match_rate": round(100.0 * verdict_match / max(1, total), 2),
"mean_abs_delta_phi": round(sum(deltas) / max(1, len(deltas)), 4),
"max_abs_delta_phi": round(max(deltas) if deltas else 0, 4),
"rows": rows,
}
OUT.write_text(json.dumps(payload, indent=2), encoding="utf-8")
print(f"Vectors: {total}")
print(f"Verdict match (text vs byte): {verdict_match}/{total} ({payload['verdict_match_rate']}%)")
print(f"Mean |Δφ|: {payload['mean_abs_delta_phi']} | max |Δφ|: {payload['max_abs_delta_phi']}")
print(f"Report: {OUT}")
return 0 if verdict_match >= total else 1
if __name__ == "__main__":
raise SystemExit(main())