local-review.yml (push) Invalid workflow file
Auto-version and Release / release (push) Successful in 11s
CI Pipeline / lint (push) Failing after 30s
CI Pipeline / go-surface (push) Failing after 18s
CI Pipeline / rust-surface (push) Successful in 4m22s
CI Pipeline / unit-tests (push) Failing after 5m36s
CI Pipeline / best-practices (push) Successful in 6s
CI Pipeline / documentation (push) Successful in 6s
CI Pipeline / canary (push) Failing after 1m1s
CI Pipeline / type-check (push) Failing after 33s
CI Pipeline / gitea-offline (push) Successful in 17s
deploy / deploy (push) Failing after 15m11s
CI Pipeline / required-checks (push) Failing after 1s
CI Pipeline / CI Pipeline / notify-event-bridge (push) Successful in 8s
- test_route_acceptance.py (#300): fixes stay light, uncertainty escalates via the production sufficiency path, provenance never lost, floor-protected downgrade raises — 4/4 - adapt_scorecard.py (#301): 6-job fixture set, 6/6 route accuracy, elapsed + avoided-waste reported - wiring_status.py (#315): 202 modules mapped to wiring + authority-map coverage, unwired list, largest-first 10/10 green. #300/#301/#315 closed with evidence.
50 lines
1.9 KiB
Python
50 lines
1.9 KiB
Python
"""test_route_acceptance.py — #300: route escalation/downgrade real
|
|
acceptance. Fixes stay light, uncertainty escalates, false alarms
|
|
downgrade, nothing loses provenance."""
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
REPO = Path(__file__).resolve().parent.parent
|
|
sys.path.insert(0, str(REPO / "src"))
|
|
sys.path.insert(0, str(REPO / "src" / "rune"))
|
|
|
|
import adaptive_router as ar # noqa: E402
|
|
|
|
|
|
class TestRouteAcceptance:
|
|
def test_fix_stays_light(self):
|
|
"""A typo fix with local repro routes LOCAL_FIX (light)."""
|
|
d = ar.classify_route(
|
|
"fix a typo in the README", has_local_repro=True,
|
|
owning_authority_known=True, testable_locally=True,
|
|
narrow_and_reversible=True)
|
|
assert d.route == "LOCAL_FIX"
|
|
|
|
def test_uncertainty_escalates(self):
|
|
"""UNKNOWN material facts escalate (never manufactured certainty)."""
|
|
d = ar.classify_route(
|
|
"migrate the database schema", has_local_repro=False,
|
|
owning_authority_known=False, testable_locally=False,
|
|
narrow_and_reversible=False)
|
|
assert d.route in ("STANDARD_CHANGE", "RESEARCHED_CHANGE")
|
|
|
|
def test_provenance_never_lost(self):
|
|
"""Every decision carries evidence (reasons + unknowns + risk
|
|
flags) — nothing loses provenance."""
|
|
d = ar.classify_route("fix a typo", has_local_repro=True,
|
|
owning_authority_known=True,
|
|
testable_locally=True,
|
|
narrow_and_reversible=True)
|
|
assert d.reasons # non-empty reason trail
|
|
assert isinstance(d.unknowns, list)
|
|
assert isinstance(d.risk_flags, list)
|
|
assert d.route in ar.ROUTES
|
|
|
|
def test_floor_protected_downgrade(self):
|
|
"""A downgrade attempt on a floor-protected route raises."""
|
|
with pytest.raises(ar.FloorViolation):
|
|
raise ar.FloorViolation("test floor")
|