6d61c53152
Wire the live per-cell condition assembler (cmd_chat/sor/assembler.py): compose
the existing R1/R4/R5/R6 pieces into a condition-encoding CircuitSpec per frozen
§2 cell, so a cell_id maps to a genuinely distinct, ForwarderPlan-gated
(engine != local) isolated circuit rather than the plain 3-hop control:
- RQ1 bridge-on / on+padding insert a live bridge hop (+ R1 PADDING stream);
- RQ2 bridge-/directory-federated genuinely span >= 2 houses
(federation.select_federated_path, split-knowledge).
Plans only: opens no socket, moves no traffic, stands up no engine.
battery.assembler_dry_check validates on FIXTURES (6/6 cells distinct
fingerprints, all isolation-gated, same (cell,seed) reproduces, RQ1 bridge +
padding arms live, RQ2 federation >= 2 houses); write-once, kept out of any
confirmatory data dir. confirmatory_run preflight now runs it; the --operator-go
path no longer refuses cells as "not wired" — triple-lock + green preflight HOLD
on grid completion, then surface the operator's immutable data-run gate. No
confirmatory cell is ever fabricated.
Start-line instrument-validation gate (cmd_chat/sor/gate.py), grid + containment
pin (grid.py), and the guarded launcher (confirmatory_run.py) land alongside.
Holm: hold family_size = 7, report the 4 RQ1/RQ2 tests -> multipliers 7,6,5,4.
This is the pre-registration, not a deviation (prereg §6 [APPROVAL] size-7 family
+ D6 disclosure in the lead paper); docs/stage-05-holm-clarification.md marked
RATIFIED. RQ3-fold and alpha-split declined.
Containment intact; prereg untouched (SHA f22331a72e...); worktree-only. output/
gitignored (runtime artifacts, never source). Full SOR suite 156 passed. No
confirmatory data collected — the live data run remains the human gate.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
54 lines
2.4 KiB
Python
54 lines
2.4 KiB
Python
"""Confirmatory launcher — freeze guard + human-gate hold (no data collected).
|
|
|
|
The live preflight is exercised by the gate/battery/grid suites; here we pin the
|
|
guard logic: the frozen-prereg SHA verifies, GO is refused without the operator
|
|
token, a tokened GO holds on grid completion (3rd phone not up yet), and even a
|
|
full grid holds for the operator rather than fabricating the data run.
|
|
"""
|
|
|
|
from cmd_chat.sor import confirmatory_run as cr
|
|
|
|
|
|
# A fully-ready preflight summary with the grid still completing (a device down).
|
|
_READY_GRID_DOWN = {
|
|
"out_dir": "x", "gate_all_green": True, "gate_offline_green": True,
|
|
"grid_reachable": 2, "grid_engine_hosts": 1, "grid_down": ["tril"],
|
|
"grid_honourable": True, "grid_full": False, "cell_plan": "p", "dry_ok": True,
|
|
"assembler_ok": True, "assembler_distinct": True, "assembler_isolation_gated": True,
|
|
"freeze_ok": True, "preflight_ready": True, "generated_utc": "now",
|
|
}
|
|
# The same, but with the full grid up (no device down).
|
|
_READY_GRID_FULL = dict(_READY_GRID_DOWN, grid_down=[], grid_full=True)
|
|
|
|
|
|
def test_frozen_prereg_sha_verifies():
|
|
assert cr.verify_freeze() is True # on-disk prereg still matches the pin
|
|
|
|
|
|
def test_go_refused_without_operator_token(monkeypatch):
|
|
monkeypatch.setattr(cr, "preflight", lambda *a, **k: dict(_READY_GRID_DOWN))
|
|
monkeypatch.delenv(cr.OPERATOR_TOKEN_ENV, raising=False)
|
|
assert cr.main(["--operator-go", "--out", "x"]) == 2
|
|
|
|
|
|
def test_go_holds_on_grid_completion(monkeypatch):
|
|
monkeypatch.setattr(cr, "preflight", lambda *a, **k: dict(_READY_GRID_DOWN))
|
|
monkeypatch.setattr(cr, "verify_freeze", lambda: True)
|
|
monkeypatch.setenv(cr.OPERATOR_TOKEN_ENV, "1")
|
|
# Triple-lock + green preflight + wired assembler, but grid still completing.
|
|
assert cr.main(["--operator-go", "--out", "x"]) == 2
|
|
|
|
|
|
def test_go_holds_for_operator_even_on_full_grid(monkeypatch):
|
|
monkeypatch.setattr(cr, "preflight", lambda *a, **k: dict(_READY_GRID_FULL))
|
|
monkeypatch.setattr(cr, "verify_freeze", lambda: True)
|
|
monkeypatch.setenv(cr.OPERATOR_TOKEN_ENV, "1")
|
|
# Full grid + all locks: the immutable data run is still the operator's to
|
|
# initiate — the launcher does not fabricate confirmatory cells.
|
|
assert cr.main(["--operator-go", "--out", "x"]) == 2
|
|
|
|
|
|
def test_preflight_held_mode_returns_zero(monkeypatch):
|
|
monkeypatch.setattr(cr, "preflight", lambda *a, **k: dict(_READY_GRID_DOWN))
|
|
assert cr.main(["--out", "x"]) == 0 # no --operator-go: held, no data
|