Gate House ruled all three questions within a day, attributing the speed to the request being filed before the architecture with candidate answers and their costs. R1 PEP-shaped, confirmed as proposed. The ruling settles the shape; the layer stays ours to declare, so layer.yaml is written in this repository's voice rather than transcribed from the reply. R2 yes to a presentation claim, no second catalog row, under three limits now declared in layer.yaml and tested. Limit 2 — the claim must never be an input to the decision it presents for — is load-bearing: our self-dealing argument was accepted because it holds, not despite it. Limit 3 drives architecture, since here the actor being audited and the evidence source are the same component. R3 (b) with the authority rule: binding digest authoritative for what the request is, view_hash only for what was shown, neither substitutable, and a disagreement between them is a finding against the presenting surface rather than a fact about the request. Linkage is co-reference; nesting was refused because it reproduces the GH-DEC-2026-008 hash cycle. Built to v0.8 obligation 3 rather than migrating later: axis enumerated, unknown resolves to fail_closed, absent distinguishable from unknown in the record, and published-equals-shipped asserted by test rather than claimed. Every stance is fail_closed, which is a conclusion not a shortcut — ops-warden can justify fail_open on a continuity argument that does not exist here. GH-DEC-2026-010 inherited as a declared gap in four documents: a decision cannot today be proven to have come from access-engine. The decision path must not be described as validated while FLEX-WP-0024 is open. 46 tests pass. T05 and T07 unblocked. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01V3W1dQG7GFFM9d94jFx7iR Assistant: claude-code Assistant-Model: opus Assistant-Process: 1565372@bnt-lap001 Assistant-Session: 16bb2f25-b34c-49ef-8e94-5fec3567a568
56 lines
2 KiB
Python
56 lines
2 KiB
Python
"""The shipped unreachable-engine stance map.
|
|
|
|
This is the map the surface actually applies. ``pep-stance.yaml`` publishes it,
|
|
and ``tests/test_layer_conformance.py`` asserts the two are equal — a published
|
|
map that may drift from the code invites reliance it cannot support.
|
|
|
|
Built to v0.8 obligation 3 per GH-DEC-2026-012: the axis is enumerated rather
|
|
than defaulted, ``unknown`` resolves to ``fail_closed``, and an absent scope is
|
|
distinguishable in the record from an unknown one.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
|
|
AXIS = "binding_level"
|
|
|
|
#: Total by enumeration, not by catch-all. See ``pep-stance.yaml`` for why every
|
|
#: stance is ``fail_closed`` here where ops-warden can justify ``fail_open``.
|
|
STANCE: dict[str, str] = {
|
|
"acknowledgment": "fail_closed",
|
|
"organizational": "fail_closed",
|
|
"aes": "fail_closed",
|
|
"qes": "fail_closed",
|
|
"unknown": "fail_closed",
|
|
"absent": "fail_closed",
|
|
}
|
|
|
|
#: Values of the axis proper — the two non-value outcomes are not axis values.
|
|
AXIS_VALUES: tuple[str, ...] = ("acknowledgment", "organizational", "aes", "qes")
|
|
|
|
|
|
class BindingLevelState(str, Enum):
|
|
"""How the axis value was obtained. Recorded; never collapsed.
|
|
|
|
``ABSENT`` and ``UNKNOWN`` resolve to the same stance but must never be
|
|
recorded as the same fact: collapsing them hides a schema-drift incident
|
|
inside a malformed-input statistic.
|
|
"""
|
|
|
|
PRESENT = "present"
|
|
ABSENT = "absent"
|
|
UNKNOWN = "unknown"
|
|
|
|
|
|
def resolve(binding_level: str | None) -> tuple[str, BindingLevelState]:
|
|
"""Return ``(stance, state)`` for a memo's ``binding_level``.
|
|
|
|
There is no per-call discretion and no implicit default: an unlisted value
|
|
is resolved explicitly to the ``unknown`` stance, never permissively.
|
|
"""
|
|
if binding_level is None or binding_level == "":
|
|
return STANCE["absent"], BindingLevelState.ABSENT
|
|
if binding_level not in AXIS_VALUES:
|
|
return STANCE["unknown"], BindingLevelState.UNKNOWN
|
|
return STANCE[binding_level], BindingLevelState.PRESENT
|