Assistant: codex Assistant-Model: gpt-5.6-sol Assistant-Session: 01a0291a-1e87-7151-9934-fcbfe3f65eb1
6.1 KiB
Time-boxed security-zone exceptions — ZONE-WP-0001-T04
Decision date: 2026-08-22
Decision: the exception lifecycle does not require a zone-engine runtime.
An exception is a temporary relaxation of one control for workloads already admitted to a named security zone. It does not change membership, lower an admission floor, or create a temporary-sounding zone. Membership remains a declared workload fact. The control owner remains the authority for the effect.
1. Grant authority
The workload's responsible party may request an exception. Only the authority designated by the control owner may grant it, because that owner owns the base stance and the enforcement point that must apply the relaxation. For a failure-mode relaxation, the grant authority is the owner of the policy enforcement point (PEP), never the PDP.
One person may currently perform both roles in this founder-operated estate,
but the record still names requested_by and granted_by separately. A
declarer cannot grant itself an exemption merely by changing its zone
membership.
Each control declares a maximum_exception_duration. If it declares no
maximum, it permits no exceptions. A grant beyond the declared maximum is
invalid rather than silently shortened.
2. Minimum record
This is a conceptual record for the canon draft, not an API or storage schema. Every implementation must preserve these facts in machine-readable form:
| Fact | Rule |
|---|---|
exception_id |
Stable and unique; renewed grants get new ids |
security_zone |
The admitted zone whose normal rule is being relaxed |
control |
Stable owner-qualified control id |
workloads |
Authoritative workload ids; an empty or unresolved subject is invalid |
base |
The stance and, where relevant, PEP failure mode that auto-restores |
relaxation |
Explicit advisory or exempt stance and/or PEP-side failure mode |
justification |
The bounded work that requires the relaxation |
requested_by / granted_by |
Auditable responsible parties |
issued_at / not_before / not_after |
UTC instants; not_after is exclusive |
maximum_duration_policy |
Versioned rule against which duration was checked |
change_ref |
Reviewed source change that introduced the grant |
A grant may only relax a named control. Promotion to a stricter stance is an ordinary policy change, not an exception. Wildcard workload scope is forbidden: the work that needs relief must be named, and unknown membership never inherits a permissive zone or exception.
3. Enforced expiry
At every decision or enforcement attempt, an exception applies only when all of the following are true:
- its record is valid and was granted by the control's designated authority;
- the current authoritative workload and zone match its scope;
not_before <= now < not_after; and- its duration does not exceed the referenced maximum.
Missing, malformed, unresolved, or unevaluable facts make the exception inactive. The enforcement point applies the base stance and failure mode. Clock failure must never preserve the relaxation.
Expiry is an automatic return to the base rule. It does not block waiting for a renewal, and it does not require a commit, image rebuild, rollout, scheduler, or human reminder. Renewal is a new reviewed grant with a new id; the expired record remains in history.
No authority created under an exception may outlive it. A certificate, token,
lease, session, or other durable result must have an expiry no later than the
exception's not_after, or the enforcement point must re-evaluate the exception
before each use. Otherwise the timestamp would expire while its effect remained
live.
4. Placement by control
| Control kind | Grant representation | Expiry evaluator | Required evidence |
|---|---|---|---|
| flex-auth decision | Versioned flex-auth policy package | Rego decision time (time.now_ns()) |
Decision envelope includes policy package/version and active exception id/expiry |
| ops-warden CLI decision | Versioned ops-warden control data | CLI at each invocation | Verdict reasons includes active exception id/expiry |
| PEP failure mode | Versioned consumer configuration | PEP when the PDP/control is unreachable | PEP audit record includes exception id/expiry and fallback taken |
This placement preserves the authority boundary: zone-engine standardizes the lifecycle, while each control owner represents and evaluates the effect where that control already runs. In particular, fail-open cannot be implemented by flex-auth because no PDP decision exists when flex-auth is unreachable.
The current flex-auth deployment loads registry and policy once at process start. Granting therefore costs rebuild and rollout, but a timestamp evaluated at decision time still lapses without either. An inert registry flag would not; it is prohibited for exceptions.
5. Visibility
Someone who did not grant an exception must be able to discover it in two places:
- the reviewed, versioned source record owned with the control, including expired records in history; and
- the machine-readable decision or verdict whenever the exception changes an
outcome, including
exception_idandnot_after.
Control builds must also produce a machine-readable inventory of active and future grants and reject overlaps that would make the selected relaxation ambiguous. Near-expiry reporting is useful operationally but is not the expiry mechanism.
6. Runtime decision
A central zone-engine service would not enforce expiry more reliably. It could
not alter flex-auth's digest-pinned, load-once artifacts at the deadline, and a
synchronous lookup would add a new availability dependency while crossing the
PDP authority boundary. The enforcement points already have the clocks and the
decision context needed to make a compiled not_after self-expiring.
Therefore T04 selects reviewed declarations plus enforcement-time timestamp
evaluation. zone-engine needs a canon contract and conformance fixtures, not a
runtime. This decision can be reopened only if a real adopting control cannot
evaluate time at the point where the relaxation takes effect.