Prepare INFD-WP-0002-T03 sitting without a fake bind.
T08 historically bound three SECRETS-WP-0010-T03 memos on this origin. Live accept is closed: /readyz 503 because audit-core has no ready endpoints. Compact drafts still lack approval_id. Operator packet and preflight record the gates; T03 stays wait. Assistant: grok Assistant-Session: 01a09dc1-b21e-77e1-919e-fcad2f82b267
This commit is contained in:
parent
98aa4547a9
commit
6a386dd787
8 changed files with 413 additions and 3 deletions
78
tests/test_sitting_bind_preflight.py
Normal file
78
tests/test_sitting_bind_preflight.py
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
import importlib.util
|
||||
from io import BytesIO
|
||||
from pathlib import Path
|
||||
|
||||
spec = importlib.util.spec_from_file_location(
|
||||
"sitting_bind_preflight",
|
||||
Path(__file__).resolve().parents[1] / "tools" / "sitting_bind_preflight.py",
|
||||
)
|
||||
preflight = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(preflight)
|
||||
evaluate, load_sitting, probe_origin = preflight.evaluate, preflight.load_sitting, preflight.probe_origin
|
||||
|
||||
|
||||
class _Resp:
|
||||
def __init__(self, status, body=b"", headers=None):
|
||||
self.status = status
|
||||
self.headers = headers or {}
|
||||
self._body = BytesIO(body)
|
||||
|
||||
def getcode(self):
|
||||
return self.status
|
||||
|
||||
def read(self, n=-1):
|
||||
return self._body.read(n)
|
||||
|
||||
def __enter__(self):
|
||||
return self
|
||||
|
||||
def __exit__(self, *exc):
|
||||
return False
|
||||
|
||||
|
||||
def test_unsigned_sitting_is_not_ready_to_sit():
|
||||
report = evaluate(load_sitting())
|
||||
assert report["ready_to_sit"] is False
|
||||
assert report["agent_disposition"] == "forbidden"
|
||||
assert report["memo_count"] == 8
|
||||
assert "missing_act_binding" in report["gates"]
|
||||
assert "principal_not_live_subject" in report["gates"]
|
||||
assert len(report["missing_act_binding"]) == 8
|
||||
assert report["live_accept"] is None
|
||||
|
||||
|
||||
def test_origin_readyz_503_is_live_accept_closed():
|
||||
bodies = {
|
||||
"/healthz": _Resp(200, b'{"status":"ok"}'),
|
||||
"/readyz": _Resp(503, b'{"status":"incomplete","reason":"approval_path_not_connected"}'),
|
||||
"/auth/start": _Resp(303, b"", {"Location": "https://kc.coulomb.social/authorize?client_id=informed-decision-approver"}),
|
||||
}
|
||||
|
||||
def opener(req, timeout=10):
|
||||
return bodies[req.full_url.split("https://decisions.coulomb.social", 1)[1]]
|
||||
|
||||
probe = probe_origin("https://decisions.coulomb.social", opener=opener)
|
||||
report = evaluate(load_sitting(), probe)
|
||||
assert report["live_accept"] == "closed"
|
||||
assert "live_accept_closed" in report["gates"]
|
||||
assert report["ready_to_sit"] is False
|
||||
assert probe["auth_start"]["http"] == 303
|
||||
assert probe["auth_start"]["location_host"] == "kc.coulomb.social"
|
||||
assert "body" not in probe["auth_start"]
|
||||
|
||||
|
||||
def test_origin_ready_still_blocked_on_unsigned_memos():
|
||||
bodies = {
|
||||
"/healthz": _Resp(200, b'{"status":"ok"}'),
|
||||
"/readyz": _Resp(200, b'{"status":"ready"}'),
|
||||
"/auth/start": _Resp(303, b"", {"Location": "https://kc.example/authorize"}),
|
||||
}
|
||||
|
||||
def opener(req, timeout=10):
|
||||
return bodies[req.full_url.split("https://origin.example", 1)[1]]
|
||||
|
||||
report = evaluate(load_sitting(), probe_origin("https://origin.example", opener=opener))
|
||||
assert report["live_accept"] == "open"
|
||||
assert "live_accept_closed" not in report["gates"]
|
||||
assert report["ready_to_sit"] is False
|
||||
assert "missing_act_binding" in report["gates"]
|
||||
Loading…
Add table
Add a link
Reference in a new issue