Reject advisory policy envelopes before lifecycle effects

Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a126e1-76f8-7643-8cf3-e93336539ade
This commit is contained in:
tegwick 2026-10-11 02:22:07 +02:00
parent caab9a90ec
commit 1e0df2f4a3
13 changed files with 2854 additions and 0 deletions

View file

@ -113,3 +113,17 @@ def test_transport_and_missing_caller_have_typed_observations():
client=policy(Broken());assert client.check(request()).outcome=="policy_unavailable"
client.token_provider=lambda:None
assert client.check(request()).outcome=="caller_unavailable"
@pytest.mark.parametrize("purpose", ["", "readback", "enforcement", "unknown", None, False, 0, [], {}])
def test_binding_purpose_only_allows_exact_enforcement_form(purpose):
transport = PolicyTransport()
transport.change = lambda d: d["binding"].update(purpose=purpose)
observed = policy(transport).check(request())
if type(purpose) is str and purpose == "":
observed.require_current(time.time())
assert json.loads(observed.decision_json)["binding"]["purpose"] == ""
else:
assert observed.outcome == "invalid_decision" and observed.decision_json is None
with pytest.raises(PolicyError):
observed.require_current(time.time())