Add layer.yaml, RMASTER-ADR-0009, the consumption contract, and a tracked non-answer for the five §20.3 questions. Split admission, exposure, and authorization without renaming schema fields. Finish the workplan. Assistant: grok Assistant-Session: 01a04c9f-cd6b-7741-bce0-f1d9d1b3c3bc
4 KiB
NetKingdom Security Consumption Contract
Date: 2026-08-29 Status: Adopted under ADR-0009 / RMASTER-WP-0026-T03
Purpose
Say what every Railiance rail, rapp, and reef owes when it consumes NetKingdom security, without copying engine schemas or turning this repository into a second decision point.
The statute is net-kingdom/canon/standards/security-layer-model_v0.7.md
§20.2 and §6.4. The working companion is net-kingdom/SECURITY-COMPANION.md
v0.2 §9. On disagreement the statute governs.
This contract does not decide:
- whether a binding may run in production — that is ADR-0006;
- who may reach a listener we control — that is ADR-0008;
- how the four Railiance axes map onto Taxonomy, Tooling, Engine, and Staff — that remains unset in the open-questions record.
Three distinct questions
| Question | Owner | Must not be read as |
|---|---|---|
| May this binding run in production? | Railiance admission (ADR-0006) | permission for an actor to act |
| Who may reach the listener we control? | Railiance exposure (ADR-0008) | an authorization decision |
| May this actor perform this action on this resource? | access-engine |
admission or exposure |
production-approved and exposure: public MUST NOT be treated as
authorization decisions. Compiled admission or exposure data that resolved
whether an actor may act would be statute §6.1 — deciding early.
Consumption rules
For any Railiance consumer of NetKingdom security, without exception:
- Authorization decisions come from
access-engineand from nowhere else. No rail, rapp, reef, or ownership repo may render or cache an authorization verdict. A registry, schema, or cache that resolves a result before the engine runs has decided early (statute §6.1). - Approvals are objects in
approval-engine, consumed as claims. They are not a Railiance axis and not an audit-core verdict. Callers needing current approval state askapproval-engine. - Credentials are materialized by
secrets-engineafter a decision, never as a substitute for one. A lease or certificate is an artifact of authority, not its source. - Evidence goes to
audit-coreunder the bound in statute §9.6. An archive proves records were not altered or truncated after arrival. It does not prove an event was sent. Absence of a record is not non-occurrence. - A runtime that causes a protected side effect is PEP-shaped and owes statute §6.4 in its own repository: no side effect without a decision record or a recorded unreachable-engine stance; no replay outside the decision's binding and lifetime; a published stance map inventoried in statute §13.1; reconstructability within the evidence bound.
This repository is not PEP-shaped. layer.yaml records that. Implementation
rails, rapps, and reefs that do cause protected side effects inherit these
obligations themselves. This contract does not publish a stance map.
What this repository does not host
- a policy decision point
- an approval store
- a credential lifecycle API
- an evidence archive
- an actuation or containment surface
Observation-in-production and automatic containment are estate-wide zeros (companion §10). Do not plan Railiance operations as if they existed.
Engine schemas stay with their owners
This file names the engines and the rules. It does not restate their request, decision, approval, credential, or evidence schemas. Those contracts live in the owning repositories and, for shared claim vocabulary, in Taxonomy artifacts statute §17 still requires.
Related
- ADR-0009 — assent
- ADR-0006 — admission
- ADR-0008 — exposure
- Open questions — §20.3, unset