zone-engine/docs/exception-lifecycle-2026-08-22.md
tegwick 11af8095ae Activate ZONE-WP-0001 and decide exception lifecycle
Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a0291a-1e87-7151-9934-fcbfe3f65eb1
2026-08-22 13:01:14 +02:00

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:

  1. its record is valid and was granted by the control's designated authority;
  2. the current authoritative workload and zone match its scope;
  3. not_before <= now < not_after; and
  4. 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_id and not_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.