Seeded repo with intent and initial content.

This commit is contained in:
tegwick 2026-10-03 14:13:45 +02:00
parent 86b9063721
commit 12d0c31cff
27 changed files with 2683 additions and 1 deletions

42
tests/test_decisions.py Normal file
View file

@ -0,0 +1,42 @@
"""Decision function (canon A3) against the fixture cases."""
from __future__ import annotations
import pytest
from fixture_loading import decision_cases
from emergent_security.decide import decide
from emergent_security.delegation import Delegation
from emergent_security.memory import MemoryEntry
from emergent_security.model import Request
def run(request_dict, context, default_envelope, scales, tenant_context_from):
return decide(
Request.from_dict(request_dict),
envelope=default_envelope,
scales=scales,
registry=[Delegation.from_dict(d) for d in context.get("registry", [])],
tenant=tenant_context_from(context),
memory=[MemoryEntry.from_dict(m) for m in context.get("memory", [])],
)
@pytest.mark.parametrize(("request_dict", "context", "expect"), decision_cases())
def test_decision(request_dict, context, expect, default_envelope, scales, tenant_context_from):
decision = run(request_dict, context, default_envelope, scales, tenant_context_from).to_dict()
actual = {key: decision[key] for key in expect}
assert actual == expect
@pytest.mark.parametrize(("request_dict", "context", "expect"), decision_cases())
def test_every_decision_is_explained(request_dict, context, expect, default_envelope, scales, tenant_context_from):
"""A DENY names a rule; an ESCALATE names its blocking condition and a recipient (A3, A7)."""
decision = run(request_dict, context, default_envelope, scales, tenant_context_from)
if decision.outcome.value == "DENY":
assert decision.rules
if decision.effect == "escalate":
assert decision.route_to
if decision.outcome.value == "ESCALATE":
assert decision.blocking_condition