flex-auth/docs/conformance/security-layer-conformance.md
tegwick 80ffe729d4
All checks were successful
CI Smoke / host-smoke (push) Successful in 1s
CI Smoke / container-smoke (push) Successful in 5s
Build and Publish Container Image / build-and-push (push) Successful in 1m11s
Apply gate-house's section 11 rulings: four-token validator, emission guarantee, resource.system.
GH-DEC-2026-017: the validator admitted {Staff, Engine, Tooling}, built from
section 4's catalog rows, and rejected Taxonomy, which section 3.1 defines.
railiance-master was conforming; the validator was the divergent artifact.
Now four tokens, ASCII case folded, section 4's spelling canonical, INTENT.md
governing while form disagreements are still reported, and every run states
its scope (section 11 binds section 4; volunteers are not non-conformances).
Also fixes the survey silently dropping audit-core's layer.yaml by decoding
peers into flex-auth's own struct.

GH-DEC-2026-018: flex-auth is a section 4 source of evidence. G2 closes as a
question and reopens as a dated gap (review 2026-10-19). cadence.yaml
publishes the per-event-class inventory: deny, redact, not_applicable and
audit_only rare load-bearing (heartbeat and reconciliation, rate forbidden);
allow volume load-bearing (expected-rate and reconciliation). INTENT.md
declares source_of_evidence and names it; tests assert both. Delivery is
FLEX-WP-0031.

FLEX-DEC-2026-015: resource.system follows the runtime, not the repository,
answering ops-warden's WARDEN-IN-0003.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 63291@bnt-lap001
Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
2026-09-21 06:35:30 +02:00

6 KiB

Security Layer Model — flex-auth conformance record

Derived artifact (§11). Derives from net-kingdom/canon/standards/security-layer-model_v0.8.md (status: proposed, source_revision: gate-house@516ed4e). Derived at: 2026-09-21. Maintained by flex-auth.

This file exists because INTENT.md deliberately does not carry one. The layer declaration states a boundary — flex-auth is Engine / PDP — and a boundary does not change when the standard text is amended. Conformance state does change, every revision, and belongs in an artifact that is expected to move and that carries the version it was derived at.

The split is the standard's own. Its frontmatter: "assented_by records assent to a BOUNDARY, given at the version named. It is not assent to the current text."

Declaration

Field Value
Layer Engine
Role PDP — the estate's only policy decision point (§6)
Declared at 2026-08-29
Declared by FLEX-DEC-2026-001, FLEX-DEC-2026-002, FLEX-DEC-2026-003
PEP stance null — not PEP-shaped; flex-auth renders decisions and causes no protected side effect
Tooling contacts none — §5 binds Staff; flex-auth holds no Tooling client

Assent history

Assent is to the boundary, recorded at the version where it was given.

Version Record Outcome
v0.4 FLEX-DEC-2026-002 §9.3 contested and upheld
v0.6 FLEX-DEC-2026-003 review; §6.4.2, §9.7.2, §17 adopted into v0.7
v0.7 four flex-auth findings adopted
v0.8 (proposed) FLEX-DEC-2026-011 assent with four findings, all adopted

Conformance state at v0.8

Scope of this record: one repository, flex-auth, which is the §4 row access-engine. §11 binds §4 and flex-auth is in it, so this is an in-scope record. Stated because a run MUST state its scope (A11, GH-DEC-2026-017 §4).

Not conforming on §11, held as a declared gap. GH-DEC-2026-018 ruled that flex-auth is a §4 source of evidence for the decision record and owes an emission guarantee it did not declare. Recorded in those words, as gate-house wrote them: flex-auth asked for the unflattering reading, and softening it here would make the register useless for whoever is next.

§11's four states: conforming, blocked-clean, declared gap, undeclared violation. flex-auth claims no blocked-clean capability and holds no undeclared violation it is aware of. Everything below is a declared gap: owner, blocker, review date.

# Gap Owner Blocked on Review
G1 Registry-snapshot digest absent from decision provenance. §9.7.2 promotes it to a conformance prerequisite: a decision that turned on registry content must be replayable from its own record. flex-auth implementation FLEX-WP-0019
G2 Emission guarantee declared, not delivered. Ruled 2026-09-21 (GH-DEC-2026-018): flex-auth is the source; custody is never source; audit-core confirmed its half and declined the role (AUDIT-IN-0005). The per-event-class inventory and classification are published in cadence.yaml and named from INTENT.md (source_of_evidence: true, emission_guarantee). Five decision classes are load-bearing; deny, redact, not_applicable, audit_only are rare — heartbeat and reconciliation, rate monitoring forbidden; allow is volume — expected-rate and reconciliation. Nothing emits yet: no sender is registered with audit-core, no outbox, no heartbeat. flex-auth outbox + heartbeat implementation, and an audit-core sender registration (intake + token lane, per AUDIT-IN-0002/0003) — FLEX-WP-0031 2026-10-19
G3 Published stance-register review is stale: written at two register rows, §13.1 now carries five, and its Finding 1 was ruled by v0.8 §6.4 obligation 3. flex-auth second edition FLEX-WP-0029

G2 fails closed. A stream with no delivered cadence produces no silence finding, so the failure on its distinguishing case is a missed detection, never a manufactured permission (A-17, §9.6's §8-asymmetry). That is why it can be held as a gap rather than being a permission. It is still non-conformance, tracked, and it is not closed by the classification being published: a declaration of a guarantee nobody delivers is the §9.1 defect this standard keeps correcting.

What the classification is. flex-auth's, published as §11 requires the source to publish it. GH-DEC-2026-018 §4 declined to classify on flex-auth's behalf because §11 forbids inferring class from event name, payload or observed rate, and that binds a ruling as hard as a runner. A conformance run is supplied this inventory and must not derive it.

Atomicity is pending, not waived. Whether decision-record emission must be atomic with the decision (§9.4) was expressly left open by GH-DEC-2026-018 pending this inventory. It now exists; the question goes to FLEX-WP-0031.

Not gaps

  • No standard version in INTENT.md. Deliberate, enforced by test (internal/layer), and raised to gate-house as FLEX-WP-0030 B4 in case §11 should say so generally.
  • Canon says access-engine, the repository answers to flex-auth. The rename is ruled (FLEX-DEC-2026-013) and sequenced (FLEX-WP-0020); the coordinate is pending, not broken. Raised as B5.

How this file is kept true

internal/layer asserts that INTENT.md carries no standard_version, names a conformance_record that exists on disk, states source_of_evidence, and — because it is true — names an emission_guarantee that exists on disk and classifies every event class, with every rare load-bearing class carrying heartbeat and reconciliation and forbidding rate monitoring. That is the same property flex-auth praised in ops-warden's stance map: the published artifact is asserted equal to the shipped one by test, rather than merely written down. It does not assert the contents below the declaration — a reviewer still has to read this file.