flex-auth/docs/conformance/security-layer-conformance.md
tegwick c0d0d92e9f Make the layer declaration a boundary, and review the boundaries it implies.
INTENT.md pinned standard_version: "0.7" in the frontmatter §11 requires. That
conflated two things the standard separates itself: assent "records assent to a
BOUNDARY, given at the version named. It is not assent to the current text."
flex-auth is Engine/PDP at v0.6, v0.7, v0.8 and after; the role does not change
when the text is amended. The field was also decorative — parsed into
Declaration.StandardVersion and never validated — so the version was load-bearing
only via a test asserting it equalled 0.7.

That test is inverted rather than deleted: internal/layer now rejects a version
pin in the declaration and requires conformance_record to name a file that
exists. Version-scoped state moves to docs/conformance/security-layer-conformance.md,
a derived artifact carrying what it derives from and the version derived at, as
§11 requires of derived artifacts.

SCOPE.md: gap assessment replaces "conforming with one declared gap" with three
gaps, each with an owner and a route. G2 is new — flex-auth declares no emission
guarantee where §11 requires one of every §4 source of evidence. It is recorded
as a gap rather than as conformance because the flattering reading, that
audit-core is the source and flex-auth merely produces, has been asserted by
nobody but flex-auth. Also corrects the stance register from two rows to five.

Fixing one line meant reading what the declaration asserts, and a boundary is
only half held here. docs/conformance/boundaries-review.md checks the other
halves across twelve counterparts and finds four security-relevant repositories
with no layer declaration at all — including key-cape, the identity source whose
claims flex-auth consumes as normative input. That boundary is asserted from one
side only. Recorded as unstated, never as agreed.

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

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 28468@bnt-lap001
Assistant-Session: c76569b2-6056-4dad-aea4-49cd7a018f5d
2026-09-21 00:11:56 +02:00

4 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

Conforming, with declared gaps below. §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.

# 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 not declared. §11 requires every §4 repository catalogued as a source of evidence to declare class, cadence and detection surface in its machine-readable declaration, and says a source declaring none is not conforming. flex-auth declares none. gate-house to rule, then flex-auth whether flex-auth is a §4 source of evidence or only the producer of an artifact audit-core sources — see FLEX-WP-0030 B3 FLEX-WP-0030-T04
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 is recorded as a gap rather than as conformance because the flattering reading — that audit-core is the source and flex-auth merely produces — has not been confirmed by anyone but flex-auth. §11 says a source that declares no emission guarantee is not conforming; until the boundary is ruled, the conservative entry is the honest one.

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 and names a conformance_record that exists on disk. 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.