2026-09-01 20:32:13 +02:00
# Gate House — Architecture Doctrine Blueprint
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
**Repository:** `gate-house`
**Project family:** NetKingdom
**Artifact:** `ArchitectureBlueprint.md`
**Status:** Current — doctrine architecture; no runtime role
State two properties once, and repair SCOPE.md's withdrawn framing
Two things this week's rulings left owed, both the failure mode those
rulings were about.
A-16 and A-17, and Core Rules 16 and 17. Two general properties had
been stated three times each, always against the instance that produced
them and nowhere in general — which is how a property gets found by
accident or not at all. That is the defect gate-house corrected in
three other repositories this month while carrying it here.
A-16, distinguishable routes: where one observable state is reachable
by two routes differing in security meaning, the record must say which.
Four instances, and they only look like one rule once they are next to
each other — an envelope identical whether access-engine issued it or a
responder forged it (GH-DEC-2026-010), unknown versus absent in a
stance map (-011), a tenant claim directory-asserted versus
registration-supplied (-013), erased versus never held on an evidence
path (-014). The rule is not that the routes must diverge; usually they
must behave identically and safely. It is that a later reader can tell
them apart, or a sound check gets read as carrying a property it does
not have.
A-17, fail-closed transitions: a transitional deviation is admissible
only where it fails closed on the case distinguishing it from the
conformant state. Written because two requests for transitional relief
arrived in one week and were answered oppositely, and the answers would
otherwise read as arbitrary rather than as one rule.
Both are marked repository-level and explicitly not estate doctrine.
Graduation waits on a repository that bears a cost under them having
argued them, which is the bar security-layer-model met and these have
not.
SCOPE.md was still the withdrawn authority-plane framing. It opened by
saying gate-house "decides whether a requested action is authorized"
and listed deterministic authorization decisions as in scope — the
design retired by GH-DEC-2026-001, surviving in a derived document a
reader would take as current, with a dead pointer to Blueprint section
3 non-goals that the re-cut removed. Rewritten from current INTENT,
including what is not owned here and what would put the repository out
of scope.
The irony is noted rather than hidden: a derived artifact contradicting
its source, in the repository that generalised that failure into
statute section 12 after finding six instances in one week elsewhere.
rmgr conform clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 07:57:35 +02:00
**Version:** 0.3
**Date:** 2026-09-10
2026-09-01 20:32:13 +02:00
**Decision:** `decisions/decisions.md` GH-DEC-2026-001
Mark the Blueprint as partly withdrawn
The blueprint predates the re-cut and describes Gate House as a running
engine. Rather than delete it, mark it — the estate's precedent (zone-engine)
is to retain superseded argument as design history.
Adds a status banner with a per-section table separating what survives (domain
model, authority context, operating modes, posture and credential contracts,
MCP doctrine, change dynamics, audit, test program, architectural invariants)
from what is withdrawn (component and policy architecture, evaluation order,
storage, API surface, caching, deployment, technology direction, reference
repository layout, performance, availability, admin interfaces) and what has
lapsed (ADR-003; milestones M0, M3, M4).
Inline markers on the eight sections most likely to be cited.
A revision folding the surviving material into doctrine form is outstanding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2564823@bnt-lap001
Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2026-08-28 21:23:32 +02:00
---
2026-09-01 20:32:13 +02:00
## 1. Purpose and authority
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
This document describes the architecture of NetKingdom security doctrine: the
responsibility boundaries, semantic contracts, invariants, and conformance
loop Gate House maintains. It does not specify a Gate House service. Gate House
has no request-time position, stores no runtime state, and renders no
authorization decision.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
The v0.1 Blueprint described Gate House as a deterministic authority plane.
That design was withdrawn by GH-DEC-2026-001 because it put the deterministic
decision point inside a non-deterministic Staff repository. Its disposition is
recorded in
[`history/2026-09-01-authority-plane-blueprint-retirement.md` ](history/2026-09-01-authority-plane-blueprint-retirement.md ),
and the complete historical text remains available at Git object
`75ce372:ArchitectureBlueprint.md` .
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
This document is subordinate, in order, to:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
1. `decisions/decisions.md` ;
2. `spec/ActiveSecretsManagementCanon_v0.3.md` ;
3. `INTENT.md` ;
4. the accepted NetKingdom security-layer standard.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Where they conflict, the higher artifact wins and this Blueprint must be
corrected.
2026-08-24 20:26:50 +02:00
The architectural maxim is:
> **Cognition proposes. Authority disposes. Infrastructure executes.**
2026-09-01 20:32:13 +02:00
## 2. Architectural shape
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
NetKingdom separates security responsibilities by determinism and artifact:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
Taxonomy names the concepts and semantic contracts
↓
Tooling holds consistent, performant, scalable state
↑
Engines expose deterministic APIs over modeled concepts
↑
Staff proposes doctrine, plans, changes, and supervision
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
The arrows are dependency direction, not authority flow. Staff acts through
Engine APIs and never reaches Tooling directly.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
For a protected action, the architecture is:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
human / agent / workload proposes an action
↓
identity and context engines supply authoritative facts
↓
access-engine renders a deterministic decision
↓ GRANT only
secrets-engine materializes target-specific authority when needed
↓
ops-warden / resource-side enforcement executes within the grant
↓
evidence sources emit records; audit-core protects accepted records
↓
kings-guard observes posture and findings; whitehat-security challenges controls
```
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Gate House is outside this runtime path. It specifies what each boundary must
mean and reviews whether the path conforms.
### 2.1 Responsibility boundary
| Component | Architectural responsibility |
| --- | --- |
| info-tech-canon / NetKingdom canon | shared terminology and standards of record |
| key-cape | authentication, federation, and identity tooling profile |
| user-engine | authoritative user, account, and membership facts |
| tenant-engine | authoritative tenant and organizational facts |
| zone-engine | authoritative zone identity and membership facts |
| access-engine | the only policy decision point; evaluates access rules |
| secrets-engine | credential abstraction, custody, and lifecycle |
| OpenBao | protects and issues secret, lease, and PKI material |
| ops-mason / ops-warden | construct and operate access lanes and perimeters |
| kings-guard | observation, bounded posture, findings, and containment requests |
| whitehat-security | adversarial execution of assurance specifications |
| Gate House | doctrine, authority context, invariants, conformance, and curriculum |
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Two boundaries are lexical as well as architectural:
- an **access lane** says how a worker reaches a host and belongs to ops-mason
and ops-warden;
- an **access rule** says whether an action may occur and belongs to
access-engine.
## 3. Core domain model
Gate House fixes the following meanings. Owning engines choose storage and wire
representations without changing the semantics.
| Term | Meaning |
| --- | --- |
| **Principal** | Human, organization, workload, or system on whose behalf authority originates. |
| **Actor** | Entity directly attempting the action. |
| **Runtime Identity** | Concrete workload instance performing execution. |
| **Tenant** | Security and organizational domain in which the action occurs. |
| **Environment** | Governed operational environment containing the target. |
| **Mandate** | Standing organizational authorization defining what an autonomous actor is intended to do. |
| **Delegation** | Scoped transfer of authority that preserves principal and actor and does not widen authority. |
| **Authority Ceiling** | Maximum authority an actor can obtain. |
| **Operating Mode** | Assistant or Autonomous security regime. |
| **Task** | Bounded unit of work for which authority is requested. |
| **Action** | Canonical operation requested of a protected resource. |
| **Resource** | Canonical target of an action. |
| **Posture** | Bounded security-state input from a trusted source. |
| **Decision Evidence** | Record of the identities, inputs, policy, conditions, and result that produced a decision. |
| **Credential Binding** | Mapping from granted authority to the mechanism a target accepts. |
A mandate is not a credential, a task is not a mandate, identity is not
authorization, and a credential is not the source of authority.
Access-engine renders `GRANT` , `DENY` , `REQUIRE_APPROVAL` , or `DEFER` .
Gate House defines the vocabulary and invariants of those outcomes but neither
evaluates nor emits them.
## 4. Authority context contract
The normative logical contract is
[`authority-context.v1` ](docs/contracts/authority-context.md ), recorded by
[ADR-001 ](docs/adr/ADR-001-canonical-authority-context-contract.md ) and
[ADR-002 ](docs/adr/ADR-002-principal-actor-runtime-identity-model.md ).
Every agentic authority request must be able to express:
```text
principal
actor
runtime identity
tenant
environment
mandate
task
operating mode
```
These are input claims alongside verified identity claims, requested action and
resource, authoritative resource facts, policy, approval, posture, and limits.
No field grants authority by being present. Caller assertion must remain
distinguishable from authoritative evidence.
Principal, actor, and runtime identity are separate semantic roles. They may
resolve to the same subject in a legitimate direct operation, but a consumer
must not copy one into a missing role or use one generic identifier to erase
delegation and runtime attribution.
Missing, conflicting, stale, or unresolvable security-critical context fails
closed. `DEFER` is reserved for non-security-critical enrichment and is not a
substitute for evidence needed to decide a protected operation.
## 5. Agentic operating modes
Operating mode is a security regime, not a deployment label.
### 5.1 Assistant
A human is actively engaged and can observe, redirect, approve, or stop at
human latency.
- the human remains principal;
- the agent remains an identifiable actor;
- the concrete agent session or workload remains identifiable as runtime;
- privileged authority is bound to active supervision and short lifetime;
- the human's reusable credentials are not copied into agent context;
- interruption and confirmation remain available for high-impact actions.
Human disconnect, session timeout, or loss of supervision must not silently
convert an Assistant workflow into privileged Autonomous operation.
### 5.2 Autonomous
A scheduled, triggered, or event-driven actor runs without continuous human
supervision.
It requires:
- a unique actor identity and concrete runtime identity;
- a named governance owner;
- an explicit, current mandate and bounded task;
- an authority ceiling and tenant, environment, resource, and action bounds;
- runtime, concurrency, tool-call, token, compute, and credential-TTL bounds;
- an independent kill switch and lifecycle termination path;
- protected evidence sufficient for reconstruction;
- no borrowed human credential.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### 5.3 Transition
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
A transition from Assistant to Autonomous is a governed change. It requires a
new authority request under the Autonomous requirements; it is not a mutation
or fallback of an in-flight Assistant context.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 6. Mandates, delegation, and ceilings
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
A mandate is a governed declaration of why an autonomous actor exists. A
logical mandate includes, at minimum:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
```yaml
id: mandate:release-automation
revision: 7
owner: team:platform-release
purpose: deploy approved releases
operating_mode: autonomous
lifecycle:
starts_at: 2026-09-01T00:00:00Z
expires_at: 2026-12-01T00:00:00Z
termination_ref: kill-switch:release-automation
authority_ceiling:
tenants: [tenant:platform]
environments: [production]
actions: [release.deploy]
resources: [k8s://cluster-a/ns/payments/*]
constraints:
max_runtime: 30m
max_concurrency: 1
max_mutations_per_task: 1
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
This is a logical governance shape, not a Gate House storage schema.
Access-engine owns how the authoritative mandate reference becomes policy
input.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Delegation attenuates:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
child authority ⊆ delegated authority ⊆ principal authority ⊆ authority ceiling
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
No agent reasoning, tool availability, approval, posture, budget, or child
delegation may widen the ceiling.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 7. Deterministic authority boundary
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Every privileged action crosses an access-engine or resource-side deterministic
authority boundary. The same authoritative input state and policy version must
produce the same decision.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
The decision must be able to account for:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
WHO principal, actor, runtime identity
WHERE tenant, environment, zone, resource
WHAT action and normalized parameters
WHY task, mandate, delegation
UNDER WHICH policy, approval, posture, quotas, budgets, ceiling
UNTIL WHEN expiry and credential TTL
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
Evaluation is monotonic toward restriction: after application of the authority
ceiling, no later input may create authority beyond it. This is a property Gate
House specifies and access-engine implements; it is not a prescribed policy
algorithm or evaluation order.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Approval is an independently governed, actor/action/resource/parameter/time
binding. It can satisfy an explicit approval requirement but cannot exceed the
authority ceiling or compensate for invalid identity, mandate, tenant, or
environment context.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 8. Posture and containment contract
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
King's Guard publishes bounded posture observations. Access-engine maps trusted
posture to deterministic restrictions. Gate House owns the asymmetry:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
> **Posture may reduce authority, require stronger authorization, or request
> containment. It must not probabilistically manufacture additional
> authority.**
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Accepted direction:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
King's Guard observes DEGRADED / SUSPICIOUS / CONTAIN
↓ bounded posture with source, subject, freshness, and reason
access-engine applies a versioned deterministic rule
↓
authority stays equal or becomes narrower
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
Forbidden direction:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
adaptive system says “looks safe”
↓
new or wider authority
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
A containment request does not authorize containment. Access-engine decides
whether it may occur; ops-warden or the responsible Engine performs the
authorized action. If posture is unavailable or stale, configured fallback
must not expand authority over the last authoritative state or baseline policy.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 9. Authority, credentials, and execution
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
The responsibility chain is:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
access-engine decides whether authority exists
secrets-engine selects how granted authority is materialized
OpenBao protects and issues credential material
ops-warden operates the access lane or trusted execution path
resource independently enforces the presented authority
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
Credential invariants:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
- credentials are issued only after authority exists;
- credential scope and audience do not exceed the grant;
- credential lifetime does not exceed the authority lifetime;
- revocation and expiry semantics remain linked;
- raw reusable credentials do not enter model context;
- trusted brokered execution is preferred to disclosing credentials to an
agent;
- Gate House never accesses OpenBao or another Tooling system directly.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
An unavailable credential mechanism means execution cannot proceed. It does
not cause another component to invent authority or silently substitute a
broader credential.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 10. MCP and tooling doctrine
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
MCP is a capability interface, not an authority system. Tool discovery means
that an operation exists; it does not mean the actor may invoke it.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
A sensitive tool definition should provide enough stable metadata for a PEP to
construct a normalized request:
2026-08-24 20:26:50 +02:00
```yaml
2026-09-01 20:32:13 +02:00
tool: restart_service
action: kubernetes.deployment.restart
resource_schema: k8s-resource.v1
parameter_schema: restart-service.v1
risk_class: privileged-write
reversible: true
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
The enforcement path is:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
```text
agent selects tool
↓
MCP server / resource PEP constructs normalized request
↓
access-engine decision
↓ GRANT only
separately issued, resource- and audience-bound authority
↓
tool execution and evidence emission
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
Inbound-token passthrough is forbidden by default. The downstream resource
must receive authority intended for that resource, not whatever ambient token
the caller happened to possess.
Mark the Blueprint as partly withdrawn
The blueprint predates the re-cut and describes Gate House as a running
engine. Rather than delete it, mark it — the estate's precedent (zone-engine)
is to retain superseded argument as design history.
Adds a status banner with a per-section table separating what survives (domain
model, authority context, operating modes, posture and credential contracts,
MCP doctrine, change dynamics, audit, test program, architectural invariants)
from what is withdrawn (component and policy architecture, evaluation order,
storage, API surface, caching, deployment, technology direction, reference
repository layout, performance, availability, admin interfaces) and what has
lapsed (ADR-003; milestones M0, M3, M4).
Inline markers on the eight sections most likely to be cited.
A revision folding the surviving material into doctrine form is outstanding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2564823@bnt-lap001
Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2026-08-28 21:23:32 +02:00
2026-09-01 20:32:13 +02:00
## 11. Change Dynamics Envelope
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Agentic systems can exceed human review speed even while each individual action
looks ordinary. The Change Dynamics Envelope bounds the cumulative rate, scope,
concurrency, and duration of change.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Dimensions include:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
- concurrent mutating actors and actions per grant;
- resources per task and mutations per resource;
- task duration, credential TTL, and agent-chain depth;
- deployment frequency and destructive-action quota;
- tenant, environment, repository, and resource-class boundaries;
- read/write and reversible/irreversible action separation;
- token, compute, tool-call, and external-service spend.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Hard limits such as authority ceilings, production concurrency, destructive
quotas, and environment boundaries are deterministic enforcement inputs. Soft
signals such as cost warnings and anomaly recommendations may ask for review or
reduce authority, but do not grant it.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Economic budgets are useful blast-radius controls. They are never
authorization.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### 11.1 Independent stop paths
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Autonomous write authority must be stoppable without actor cooperation.
Depending on the owning Engine, the deterministic mechanisms may suspend an
actor or mandate, revoke grants and credentials, restrict an environment to
read-only, or require approval for mutations.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Degradation moves toward restriction:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
NORMAL → RESTRICTED → READ_ONLY → BLOCKED
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
Diagnostic visibility should remain available longer than mutation authority
where policy can safely separate them.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 12. Tenant isolation and policy self-modification
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Tenant context is explicit for protected actions. An omitted tenant is not a
wildcard, and a platform actor does not receive implicit cross-tenant authority.
Tenant, environment, resource, and action bounds compose by intersection.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Changes to authority ceilings, policy packages, identity trust, tenant mapping,
approval rules, posture mapping, audit configuration, credential bindings, or
kill switches require stronger and independently governed authorization than
ordinary workload changes.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
An actor must not have routine authority to widen the policy that constrains
itself. An attempted self-escalation is denied and emitted as high-value
security evidence.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 13. Decision evidence and audit
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Decision evidence must support reconstruction of:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
- principal, actor, runtime identity, tenant, environment, task, and mandate;
- action, resource, and normalized-parameter digest;
- operating mode, approval, and posture inputs;
- authority ceiling, quotas, budgets, and expiry;
- policy identifier and version;
- decision, reason, grant or approval references, and credential binding;
- execution target, result, and relevant state transition.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
The actor being audited must not be able to alter or erase authoritative
evidence. Each owning system emits evidence for its own state transitions;
Gate House is not a central runtime audit writer.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### 13.1 Completeness bound
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
An append-only archive with a verified hash chain proves that records it holds
were not altered or truncated after arrival. It cannot prove a record was ever
sent. Therefore:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
- completeness is the emitting system's obligation;
- load-bearing evidence emission is atomic with the state change, normally by
a local transactional outbox;
- heartbeat and reconciliation make silent omission detectable where required;
- no conformance claim says merely that “the audit record proves it happened.”
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
The approval evidence contracts are the reference application:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
- [`approval-outbox.md` ](docs/contracts/approval-outbox.md );
- [`approval-emission-detection.md` ](docs/contracts/approval-emission-detection.md );
- [`approval-consumption.md` ](docs/contracts/approval-consumption.md ).
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 14. Failure semantics
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Security-critical ambiguity fails closed.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
| Failure | Required architectural outcome |
| --- | --- |
| access-engine or required policy unavailable | Protected operation denied. |
| identity, tenant, environment, mandate, or delegation unresolved | Denied when the fact is security-critical. |
| posture unavailable or stale | Configured restrictive fallback; never additional authority. |
| approval unavailable, invalid, revoked, consumed, or mismatched | Approval-dependent operation denied. |
| credential materialization unavailable | No credential-dependent execution; the decision is not widened or replaced. |
| protected evidence cannot be durably coupled to a state change | That state change does not commit. |
| evidence archive unavailable after a local outbox commit | Retry asynchronously; do not roll back the committed safety action. |
| stale cache conflicts with newer restriction or revocation | New authority denied; caches must not outlive their safe staleness policy. |
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Fail closed does not mean one global availability rule. Each state owner must
make the safety transition and its evidence atomic locally so an unavailable
archive cannot block emergency revocation.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 15. Architectural invariants
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
These stable identifiers retain the v0.1 Blueprint's invariant lineage, now
stated against the correct ownership boundary.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-01 — No probabilistic privilege
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
No LLM or statistical component is the final source of privilege.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-02 — Explicit actor
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Every privileged action resolves to an explicit actor.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-03 — Autonomous mandate
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Every autonomous privileged action resolves to an explicit current mandate.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-04 — Attenuating delegation
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Delegated authority does not exceed parent authority or the authority ceiling.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-05 — Explicit tenant scope
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Every protected action has explicit tenant or estate-defined non-tenant scope.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-06 — Deterministic protected boundary
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Production mutations cross deterministic access-engine or resource-side
policy enforcement.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-07 — Bounded lifetime
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Authority and its credential material do not outlive their configured expiry.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-08 — Independent revocation
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Emergency reduction or revocation does not depend on the affected actor
cooperating.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-09 — Restrictive posture
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Adaptive posture may restrict authority but cannot probabilistically create
new authority.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-10 — Credential separation
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Credentials represent granted authority; they are not its source.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-11 — Protected ceiling
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Actors cannot ordinarily modify the controls defining their own authority
ceiling.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-12 — Actor-resistant evidence
Mark the Blueprint as partly withdrawn
The blueprint predates the re-cut and describes Gate House as a running
engine. Rather than delete it, mark it — the estate's precedent (zone-engine)
is to retain superseded argument as design history.
Adds a status banner with a per-section table separating what survives (domain
model, authority context, operating modes, posture and credential contracts,
MCP doctrine, change dynamics, audit, test program, architectural invariants)
from what is withdrawn (component and policy architecture, evaluation order,
storage, API surface, caching, deployment, technology direction, reference
repository layout, performance, availability, admin interfaces) and what has
lapsed (ADR-003; milestones M0, M3, M4).
Inline markers on the eight sections most likely to be cited.
A revision folding the surviving material into doctrine form is outstanding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2564823@bnt-lap001
Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2026-08-28 21:23:32 +02:00
2026-09-01 20:32:13 +02:00
Authoritative evidence is protected from the actor being audited, subject to
the completeness bound in §13.1.
Mark the Blueprint as partly withdrawn
The blueprint predates the re-cut and describes Gate House as a running
engine. Rather than delete it, mark it — the estate's precedent (zone-engine)
is to retain superseded argument as design history.
Adds a status banner with a per-section table separating what survives (domain
model, authority context, operating modes, posture and credential contracts,
MCP doctrine, change dynamics, audit, test program, architectural invariants)
from what is withdrawn (component and policy architecture, evaluation order,
storage, API surface, caching, deployment, technology direction, reference
repository layout, performance, availability, admin interfaces) and what has
lapsed (ADR-003; milestones M0, M3, M4).
Inline markers on the eight sections most likely to be cited.
A revision folding the surviving material into doctrine form is outstanding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2564823@bnt-lap001
Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2026-08-28 21:23:32 +02:00
2026-09-01 20:32:13 +02:00
### A-13 — Restrictive failure
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Failure of a security-critical dependency does not silently expand authority.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-14 — No accidental autonomy
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Assistant sessions do not silently become Autonomous sessions.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
### A-15 — Incorrect-agent tolerance
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Deterministic boundaries continue to hold when every agent behaves incorrectly.
2026-08-24 20:26:50 +02:00
State two properties once, and repair SCOPE.md's withdrawn framing
Two things this week's rulings left owed, both the failure mode those
rulings were about.
A-16 and A-17, and Core Rules 16 and 17. Two general properties had
been stated three times each, always against the instance that produced
them and nowhere in general — which is how a property gets found by
accident or not at all. That is the defect gate-house corrected in
three other repositories this month while carrying it here.
A-16, distinguishable routes: where one observable state is reachable
by two routes differing in security meaning, the record must say which.
Four instances, and they only look like one rule once they are next to
each other — an envelope identical whether access-engine issued it or a
responder forged it (GH-DEC-2026-010), unknown versus absent in a
stance map (-011), a tenant claim directory-asserted versus
registration-supplied (-013), erased versus never held on an evidence
path (-014). The rule is not that the routes must diverge; usually they
must behave identically and safely. It is that a later reader can tell
them apart, or a sound check gets read as carrying a property it does
not have.
A-17, fail-closed transitions: a transitional deviation is admissible
only where it fails closed on the case distinguishing it from the
conformant state. Written because two requests for transitional relief
arrived in one week and were answered oppositely, and the answers would
otherwise read as arbitrary rather than as one rule.
Both are marked repository-level and explicitly not estate doctrine.
Graduation waits on a repository that bears a cost under them having
argued them, which is the bar security-layer-model met and these have
not.
SCOPE.md was still the withdrawn authority-plane framing. It opened by
saying gate-house "decides whether a requested action is authorized"
and listed deterministic authorization decisions as in scope — the
design retired by GH-DEC-2026-001, surviving in a derived document a
reader would take as current, with a dead pointer to Blueprint section
3 non-goals that the re-cut removed. Rewritten from current INTENT,
including what is not owned here and what would put the repository out
of scope.
The irony is noted rather than hidden: a derived artifact contradicting
its source, in the repository that generalised that failure into
statute section 12 after finding six instances in one week elsewhere.
rmgr conform clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 07:57:35 +02:00
### A-16 — Distinguishable routes
Where one observable state is reachable by two routes that differ in security
meaning, the record distinguishes which route produced it.
The two routes usually behave identically, and must — `unknown` and `absent` both
fail closed, and should. A-16 is not a requirement that they diverge; it is a
requirement that a later reader can tell them apart. Where they cannot, a sound
check gets read as establishing a property it does not carry, and the safer
reading of the appearance becomes unavailable to everyone.
Instances: `GH-DEC-2026-010` (a decision envelope reads identically whether
`access-engine` issued it or a responder forged it), `GH-DEC-2026-011` (`unknown`
versus `absent` in a stance map), `GH-DEC-2026-013` (a `tenant` claim
directory-asserted about the principal versus registration-supplied about the
Revise R3, rule the human-approver question, and correct A-16 and A-17
Four returns arrived overnight, two of them corrections to rules
written yesterday. Both corrections are right.
A-16 GAINS A RIDER. informed-decision pointed out the rule is silent on
who writes the route marker, and the guarantee is only as good as that
party's independence from what the marker asserts. Its own instance is
the weak one: erased versus never-held is written by the party the
evidence is about, so A-16 there reduces to a self-attestation and
GH-DEC-2026-014 section 4 narrows it without removing it. Without the
rider A-16 becomes the thing it exists to prevent — a sound check read
as establishing a property it does not carry. The four instances are
now graded by marker independence rather than listed as equals.
A-17 GAINS A PRECONDITION. It asks which way a case fails, which is
unanswerable where the case cannot be seen. Their commitment-only path
had no failure direction at all as proposed: a reviewer got a blank,
indistinguishable from erased, withheld, lost and never held.
GH-DEC-2026-014 section 4 did not test the direction of failure, it
manufactured one — the right outcome reached without noticing it was a
different operation. So making the distinguishing case observable is a
precondition of applying A-17, not an outcome of it, and A-17 therefore
depends on A-16. Neither dependency was noticed when both were written
a day apart.
GH-DEC-2026-015 revises GH-DEC-2026-012 R3. approval-engine recommended
exactly the option we refused, informed-decision could not comply with
both, changed nothing, and raised it as a finding rather than choosing
— having previously offered to let approval-engine settle R3 and
declined to take that route twice.
Nesting is permitted for this pair. The cycle objection needed mutual
containment and approval-engine's digest structurally excludes
presentation material for an independent reason. But the decisive
ground is that the original ruling worked against its own rule: R3
forbade recomputing the other layer's digest from one's own vocabulary,
and co-reference by identifier left informed-decision canonicalizing
principal and target, two of the five fields in that digest. Nesting
removes the duplication; co-reference manages it. We reached for the
management option while stating the rule that recommends removal.
Conditioned on approval-engine making the exclusion normative and
tested rather than intentional, because the cycle cannot arise here is
a belief and the cycle may not arise here is a rule with an owner —
A-17's precondition applied to our own permission. The ordering
objection is withdrawn as mistaken and the withdrawal is recorded: a
cost accepted from the requester and never checked is how a wrong
reason survives into a ruling.
GH-DEC-2026-016 rules NC-03, which both repositories referred up and
neither benefits from. Where an approval is declared as discharging a
human-in-the-loop control, the approver must be a human principal and
approval-engine must refuse at bind time rather than record it.
Recording the principal type is the auditable half and stops nothing;
an approval control satisfiable by the same class of actor it exists to
check is theatre. Scoped to declared approvals, declared at issue and
never inferred, on approval-engine's own pdp_path shape. One surface
enforcing it is not the property being held — the guarantee would read
as human-approved unless someone used a different client.
Section 5 leaves what makes a principal human to the identity layer and
notes it inherits A-16: refusing a service principal while accepting an
unverified assertion of humanity moves the defect rather than closing
it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 15:21:29 +02:00
client, and — `key-cape` 's own extension — a third route where nobody asserted a
zone and a profile default supplied it), `GH-DEC-2026-014` (*erased* versus
*never held* on an evidence path).
**Rider — who writes the marker.** A-16 is only as strong as the independence of
the party that writes the route marker from what the marker asserts. Where the
marker is written by the party whose conduct the route describes, **A-16
constrains a defect but not an adversary, and MUST NOT be read as establishing the
distinction against a compromised source.**
The four instances are not equally strong and the register should say so: a
signature by the issuer is independent of the party relying on it; a PEP labelling
its own input gains nothing by mislabelling; a tenant provenance written by the
issuer is independent of the consumer; and an *erased* -versus-*never-held* marker
written by the party the evidence is about is a **self-attestation** . The last
reduces to the residual `informed-decision` has twice been refused credit for
closing, and `GH-DEC-2026-014` §4 narrows it — non-production becomes attributable
— without removing it, because the attribution still rests on that party's own
marker.
Without this rider A-16 becomes the thing it exists to prevent: a sound check read
as establishing a property it does not carry. Raised by `informed-decision`
against its own instance, which is the weak one.
State two properties once, and repair SCOPE.md's withdrawn framing
Two things this week's rulings left owed, both the failure mode those
rulings were about.
A-16 and A-17, and Core Rules 16 and 17. Two general properties had
been stated three times each, always against the instance that produced
them and nowhere in general — which is how a property gets found by
accident or not at all. That is the defect gate-house corrected in
three other repositories this month while carrying it here.
A-16, distinguishable routes: where one observable state is reachable
by two routes differing in security meaning, the record must say which.
Four instances, and they only look like one rule once they are next to
each other — an envelope identical whether access-engine issued it or a
responder forged it (GH-DEC-2026-010), unknown versus absent in a
stance map (-011), a tenant claim directory-asserted versus
registration-supplied (-013), erased versus never held on an evidence
path (-014). The rule is not that the routes must diverge; usually they
must behave identically and safely. It is that a later reader can tell
them apart, or a sound check gets read as carrying a property it does
not have.
A-17, fail-closed transitions: a transitional deviation is admissible
only where it fails closed on the case distinguishing it from the
conformant state. Written because two requests for transitional relief
arrived in one week and were answered oppositely, and the answers would
otherwise read as arbitrary rather than as one rule.
Both are marked repository-level and explicitly not estate doctrine.
Graduation waits on a repository that bears a cost under them having
argued them, which is the bar security-layer-model met and these have
not.
SCOPE.md was still the withdrawn authority-plane framing. It opened by
saying gate-house "decides whether a requested action is authorized"
and listed deterministic authorization decisions as in scope — the
design retired by GH-DEC-2026-001, surviving in a derived document a
reader would take as current, with a dead pointer to Blueprint section
3 non-goals that the re-cut removed. Rewritten from current INTENT,
including what is not owned here and what would put the repository out
of scope.
The irony is noted rather than hidden: a derived artifact contradicting
its source, in the repository that generalised that failure into
statute section 12 after finding six instances in one week elsewhere.
rmgr conform clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 07:57:35 +02:00
Correct GH-DEC-2026-014 section 4 and A-16 on audit-core's return
audit-core met the condition and then corrected its wording, and the
correction matters enough that leaving it implicit would have made the
section wrong.
The archive CARRIES the declaration; it does not DETECT non-production.
It performs no retrieval, holds no client for the emitting repository,
and its egress policy permits nothing that would let it try — asserted
by a test, because the claim silently stops being true the day someone
adds one. Detection sits with the REVIEWER at retrieval, and the stored
declaration is what makes that discovery a finding rather than a blank.
Section 4 now says so, and says explicitly that an archive must not be
read as required to chase content: an archive that fetched from the
parties it audits would acquire exactly the dependency that makes it
corruptible by them.
The residual they raised against their own delivered work is now in the
text. A custodian that never held content can emit a false
content_exists; they validate the declaration's shape, never its truth.
So what section 4 buys is narrower than it reads — it converts an
unattributable absence into an attributable false statement. Strictly
better, not proof. Better stated here than in a conformance argument
later, which was their reason for raising it.
A-16 gains two notes, both from their return.
The obligation attaches to the party that OBSERVED the route. A-16 does
not require every downstream holder to restate a route it never saw;
that is manufacturing a marker, which is the rider's failure in its
most direct form. audit-core established this by DECLINING an
obligation offered to it — its tenant is not an identity claim it
resolves but a value a credential is permitted to write, so recording a
route in an audit event would restate something it did not see. The
refusal is A-16 applied properly, not an exception to it, and it lands
the obligation on the party that resolved the value.
And applying A-16 relocates ambiguity rather than terminating it. Their
declaration disambiguates erased from never-held and creates a fourth
pair, false-declaration versus honest-declaration-then-loss. Not a
defect and not a reason to stop: the ambiguity ends up somewhere
attributable. Judge each application by whether the new residual has an
owner.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 15:23:57 +02:00
**The obligation attaches to the party that observed the route.** A-16 requires
the record to say which route produced the state; it does **not** require every
downstream holder of the value to restate a route it never saw. A party writing a
route marker for a transition it did not observe is manufacturing the marker, which
is the rider's failure in its most direct form.
`audit-core` established this by declining an obligation offered to it: asked
whether its envelope inherited `GH-DEC-2026-013` 's tenant-provenance requirement, it
answered no — its `tenant` is not an identity claim it resolves but a value a
credential is permitted to write, checked by exact match against a registration, so
recording a route in an audit event would be restating something it did not see.
The obligation lands on the party that resolved the value, and the record of the
authority for the scope lives in the registration. Confirmed correct; the refusal is
A-16 applied properly rather than an exception to it.
**Applying A-16 relocates ambiguity; it does not terminate it.** `audit-core` 's
declaration disambiguates *erased* from *never held* and creates a fourth pair —
*false declaration* versus *honest declaration then loss* . That is not a defect in
the rule and not a reason to stop applying it: the ambiguity ends up somewhere
**attributable**, which is the point. Expect each application to move the question
rather than close it, and judge the move by whether the new residual has an owner.
State two properties once, and repair SCOPE.md's withdrawn framing
Two things this week's rulings left owed, both the failure mode those
rulings were about.
A-16 and A-17, and Core Rules 16 and 17. Two general properties had
been stated three times each, always against the instance that produced
them and nowhere in general — which is how a property gets found by
accident or not at all. That is the defect gate-house corrected in
three other repositories this month while carrying it here.
A-16, distinguishable routes: where one observable state is reachable
by two routes differing in security meaning, the record must say which.
Four instances, and they only look like one rule once they are next to
each other — an envelope identical whether access-engine issued it or a
responder forged it (GH-DEC-2026-010), unknown versus absent in a
stance map (-011), a tenant claim directory-asserted versus
registration-supplied (-013), erased versus never held on an evidence
path (-014). The rule is not that the routes must diverge; usually they
must behave identically and safely. It is that a later reader can tell
them apart, or a sound check gets read as carrying a property it does
not have.
A-17, fail-closed transitions: a transitional deviation is admissible
only where it fails closed on the case distinguishing it from the
conformant state. Written because two requests for transitional relief
arrived in one week and were answered oppositely, and the answers would
otherwise read as arbitrary rather than as one rule.
Both are marked repository-level and explicitly not estate doctrine.
Graduation waits on a repository that bears a cost under them having
argued them, which is the bar security-layer-model met and these have
not.
SCOPE.md was still the withdrawn authority-plane framing. It opened by
saying gate-house "decides whether a requested action is authorized"
and listed deterministic authorization decisions as in scope — the
design retired by GH-DEC-2026-001, surviving in a derived document a
reader would take as current, with a dead pointer to Blueprint section
3 non-goals that the re-cut removed. Rewritten from current INTENT,
including what is not owned here and what would put the repository out
of scope.
The irony is noted rather than hidden: a derived artifact contradicting
its source, in the repository that generalised that failure into
statute section 12 after finding six instances in one week elsewhere.
rmgr conform clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 07:57:35 +02:00
### A-17 — Fail-closed transitions
A transitional deviation from an invariant is admissible only where it fails
closed on the case that distinguishes it from the conformant state.
This governs what may enter the declared-gap register rather than what a system
does at runtime. The admitting question is not the quality of the design or the
length of the transition, but the direction of failure at the distinguishing
case. A promise that fails open is a permission; a promise that fails closed is a
gap.
Revise R3, rule the human-approver question, and correct A-16 and A-17
Four returns arrived overnight, two of them corrections to rules
written yesterday. Both corrections are right.
A-16 GAINS A RIDER. informed-decision pointed out the rule is silent on
who writes the route marker, and the guarantee is only as good as that
party's independence from what the marker asserts. Its own instance is
the weak one: erased versus never-held is written by the party the
evidence is about, so A-16 there reduces to a self-attestation and
GH-DEC-2026-014 section 4 narrows it without removing it. Without the
rider A-16 becomes the thing it exists to prevent — a sound check read
as establishing a property it does not carry. The four instances are
now graded by marker independence rather than listed as equals.
A-17 GAINS A PRECONDITION. It asks which way a case fails, which is
unanswerable where the case cannot be seen. Their commitment-only path
had no failure direction at all as proposed: a reviewer got a blank,
indistinguishable from erased, withheld, lost and never held.
GH-DEC-2026-014 section 4 did not test the direction of failure, it
manufactured one — the right outcome reached without noticing it was a
different operation. So making the distinguishing case observable is a
precondition of applying A-17, not an outcome of it, and A-17 therefore
depends on A-16. Neither dependency was noticed when both were written
a day apart.
GH-DEC-2026-015 revises GH-DEC-2026-012 R3. approval-engine recommended
exactly the option we refused, informed-decision could not comply with
both, changed nothing, and raised it as a finding rather than choosing
— having previously offered to let approval-engine settle R3 and
declined to take that route twice.
Nesting is permitted for this pair. The cycle objection needed mutual
containment and approval-engine's digest structurally excludes
presentation material for an independent reason. But the decisive
ground is that the original ruling worked against its own rule: R3
forbade recomputing the other layer's digest from one's own vocabulary,
and co-reference by identifier left informed-decision canonicalizing
principal and target, two of the five fields in that digest. Nesting
removes the duplication; co-reference manages it. We reached for the
management option while stating the rule that recommends removal.
Conditioned on approval-engine making the exclusion normative and
tested rather than intentional, because the cycle cannot arise here is
a belief and the cycle may not arise here is a rule with an owner —
A-17's precondition applied to our own permission. The ordering
objection is withdrawn as mistaken and the withdrawal is recorded: a
cost accepted from the requester and never checked is how a wrong
reason survives into a ruling.
GH-DEC-2026-016 rules NC-03, which both repositories referred up and
neither benefits from. Where an approval is declared as discharging a
human-in-the-loop control, the approver must be a human principal and
approval-engine must refuse at bind time rather than record it.
Recording the principal type is the auditable half and stops nothing;
an approval control satisfiable by the same class of actor it exists to
check is theatre. Scoped to declared approvals, declared at issue and
never inferred, on approval-engine's own pdp_path shape. One surface
enforcing it is not the property being held — the guarantee would read
as human-approved unless someone used a different client.
Section 5 leaves what makes a principal human to the identity layer and
notes it inherits A-16: refusing a service principal while accepting an
unverified assertion of humanity moves the defect rather than closing
it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 15:21:29 +02:00
**Precondition — the distinguishing case must be observable first.** A-17 asks
which way a case fails, and that question is unanswerable where the case cannot be
seen. **Where the distinguishing case is not observable, making it observable is a
precondition of applying A-17, not an outcome of it.** Otherwise A-17 admits
anything whose distinguishing case is merely invisible, which reads as failing
closed because nothing visibly fails.
**A-17 therefore depends on A-16.** One cannot ask which direction a case fails in
until the record can distinguish that case from its neighbours.
State two properties once, and repair SCOPE.md's withdrawn framing
Two things this week's rulings left owed, both the failure mode those
rulings were about.
A-16 and A-17, and Core Rules 16 and 17. Two general properties had
been stated three times each, always against the instance that produced
them and nowhere in general — which is how a property gets found by
accident or not at all. That is the defect gate-house corrected in
three other repositories this month while carrying it here.
A-16, distinguishable routes: where one observable state is reachable
by two routes differing in security meaning, the record must say which.
Four instances, and they only look like one rule once they are next to
each other — an envelope identical whether access-engine issued it or a
responder forged it (GH-DEC-2026-010), unknown versus absent in a
stance map (-011), a tenant claim directory-asserted versus
registration-supplied (-013), erased versus never held on an evidence
path (-014). The rule is not that the routes must diverge; usually they
must behave identically and safely. It is that a later reader can tell
them apart, or a sound check gets read as carrying a property it does
not have.
A-17, fail-closed transitions: a transitional deviation is admissible
only where it fails closed on the case distinguishing it from the
conformant state. Written because two requests for transitional relief
arrived in one week and were answered oppositely, and the answers would
otherwise read as arbitrary rather than as one rule.
Both are marked repository-level and explicitly not estate doctrine.
Graduation waits on a repository that bears a cost under them having
argued them, which is the bar security-layer-model met and these have
not.
SCOPE.md was still the withdrawn authority-plane framing. It opened by
saying gate-house "decides whether a requested action is authorized"
and listed deterministic authorization decisions as in scope — the
design retired by GH-DEC-2026-001, surviving in a derived document a
reader would take as current, with a dead pointer to Blueprint section
3 non-goals that the re-cut removed. Rewritten from current INTENT,
including what is not owned here and what would put the repository out
of scope.
The irony is noted rather than hidden: a derived artifact contradicting
its source, in the repository that generalised that failure into
statute section 12 after finding six instances in one week elsewhere.
rmgr conform clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 07:57:35 +02:00
Instances: `GH-DEC-2026-011` (a dated transitional `unknown: fail_open` declined
— its distinguishing case is exactly where it fails open, so the transition
licenses the forbidden thing and dates it), `GH-DEC-2026-013` (a
registration-bound tenant granted — registration and directory disagreeing
refuses issuance rather than picking a winner), `GH-DEC-2026-014` (commitment-only
Revise R3, rule the human-approver question, and correct A-16 and A-17
Four returns arrived overnight, two of them corrections to rules
written yesterday. Both corrections are right.
A-16 GAINS A RIDER. informed-decision pointed out the rule is silent on
who writes the route marker, and the guarantee is only as good as that
party's independence from what the marker asserts. Its own instance is
the weak one: erased versus never-held is written by the party the
evidence is about, so A-16 there reduces to a self-attestation and
GH-DEC-2026-014 section 4 narrows it without removing it. Without the
rider A-16 becomes the thing it exists to prevent — a sound check read
as establishing a property it does not carry. The four instances are
now graded by marker independence rather than listed as equals.
A-17 GAINS A PRECONDITION. It asks which way a case fails, which is
unanswerable where the case cannot be seen. Their commitment-only path
had no failure direction at all as proposed: a reviewer got a blank,
indistinguishable from erased, withheld, lost and never held.
GH-DEC-2026-014 section 4 did not test the direction of failure, it
manufactured one — the right outcome reached without noticing it was a
different operation. So making the distinguishing case observable is a
precondition of applying A-17, not an outcome of it, and A-17 therefore
depends on A-16. Neither dependency was noticed when both were written
a day apart.
GH-DEC-2026-015 revises GH-DEC-2026-012 R3. approval-engine recommended
exactly the option we refused, informed-decision could not comply with
both, changed nothing, and raised it as a finding rather than choosing
— having previously offered to let approval-engine settle R3 and
declined to take that route twice.
Nesting is permitted for this pair. The cycle objection needed mutual
containment and approval-engine's digest structurally excludes
presentation material for an independent reason. But the decisive
ground is that the original ruling worked against its own rule: R3
forbade recomputing the other layer's digest from one's own vocabulary,
and co-reference by identifier left informed-decision canonicalizing
principal and target, two of the five fields in that digest. Nesting
removes the duplication; co-reference manages it. We reached for the
management option while stating the rule that recommends removal.
Conditioned on approval-engine making the exclusion normative and
tested rather than intentional, because the cycle cannot arise here is
a belief and the cycle may not arise here is a rule with an owner —
A-17's precondition applied to our own permission. The ordering
objection is withdrawn as mistaken and the withdrawal is recorded: a
cost accepted from the requester and never checked is how a wrong
reason survives into a ruling.
GH-DEC-2026-016 rules NC-03, which both repositories referred up and
neither benefits from. Where an approval is declared as discharging a
human-in-the-loop control, the approver must be a human principal and
approval-engine must refuse at bind time rather than record it.
Recording the principal type is the auditable half and stops nothing;
an approval control satisfiable by the same class of actor it exists to
check is theatre. Scoped to declared approvals, declared at issue and
never inferred, on approval-engine's own pdp_path shape. One surface
enforcing it is not the property being held — the guarantee would read
as human-approved unless someone used a different client.
Section 5 leaves what makes a principal human to the identity layer and
notes it inherits A-16: refusing a service principal while accepting an
unverified assertion of humanity moves the defect rather than closing
it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 15:21:29 +02:00
evidence granted — but **only after** §4 made the case observable; as proposed it
had no failure direction at all, because a reviewer receiving a blank could not
tell *erased* from *withheld* from *lost* from *never held* ).
The third instance is why the precondition is stated. `GH-DEC-2026-014` §4 did not
**test** the direction of failure; it **manufactured** one, by requiring an
existence assertion that turns non-production into a finding. That was the right
outcome reached without noticing it was a different operation from the one A-17
describes. Raised by `informed-decision` , from the instance it bears.
State two properties once, and repair SCOPE.md's withdrawn framing
Two things this week's rulings left owed, both the failure mode those
rulings were about.
A-16 and A-17, and Core Rules 16 and 17. Two general properties had
been stated three times each, always against the instance that produced
them and nowhere in general — which is how a property gets found by
accident or not at all. That is the defect gate-house corrected in
three other repositories this month while carrying it here.
A-16, distinguishable routes: where one observable state is reachable
by two routes differing in security meaning, the record must say which.
Four instances, and they only look like one rule once they are next to
each other — an envelope identical whether access-engine issued it or a
responder forged it (GH-DEC-2026-010), unknown versus absent in a
stance map (-011), a tenant claim directory-asserted versus
registration-supplied (-013), erased versus never held on an evidence
path (-014). The rule is not that the routes must diverge; usually they
must behave identically and safely. It is that a later reader can tell
them apart, or a sound check gets read as carrying a property it does
not have.
A-17, fail-closed transitions: a transitional deviation is admissible
only where it fails closed on the case distinguishing it from the
conformant state. Written because two requests for transitional relief
arrived in one week and were answered oppositely, and the answers would
otherwise read as arbitrary rather than as one rule.
Both are marked repository-level and explicitly not estate doctrine.
Graduation waits on a repository that bears a cost under them having
argued them, which is the bar security-layer-model met and these have
not.
SCOPE.md was still the withdrawn authority-plane framing. It opened by
saying gate-house "decides whether a requested action is authorized"
and listed deterministic authorization decisions as in scope — the
design retired by GH-DEC-2026-001, surviving in a derived document a
reader would take as current, with a dead pointer to Blueprint section
3 non-goals that the re-cut removed. Rewritten from current INTENT,
including what is not owned here and what would put the repository out
of scope.
The irony is noted rather than hidden: a derived artifact contradicting
its source, in the repository that generalised that failure into
statute section 12 after finding six instances in one week elsewhere.
rmgr conform clean.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012viPor8WJNCbV64ipwewrm
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 1754332@bnt-lap001
Assistant-Session: 9c8ac536-ff5e-46a3-8ab1-a548bde25fc0
2026-09-10 07:57:35 +02:00
**A-16 and A-17 are newer than A-01…A-15 and are not yet estate doctrine.** They
are stated here because a property recorded only against the instance that
produced it is found by accident or not at all. Graduation to
`net-kingdom/canon/standards/` waits on a repository bearing a cost under them
having argued them, which is the bar `security-layer-model` met and these have
not.
2026-09-01 20:32:13 +02:00
## 16. Conformance architecture
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Gate House doctrine is real only when the loop turns:
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
Gate House asserts an invariant or contract
↓
owning Engines and Staff repositories implement it
↓
whitehat-security executes the assurance specification
↓
kings-guard observes behavior and findings
↓
findings return to Gate House as doctrine change
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
The Canon's T-01…T-10 are specifications owned by Gate House and executed by
whitehat-security. They cover malicious-model behavior, credential
exfiltration, human disconnect, policy self-modification, confused-deputy
behavior, approval replay, circuit breakers, evidence reconstruction, audit
failure, and revocation closure.
2026-08-24 20:26:50 +02:00
2026-09-01 20:46:34 +02:00
Their executable handoff is
[`asm-assurance-targets.v1` ](docs/assurance/asm-t01-t10-executable-targets.md ).
Results return under
[`conformance-reporting.v1` ](docs/contracts/conformance-reporting.md ), and the
kings-guard observation half follows
[`posture-findings-return.v1` ](docs/contracts/posture-findings-return.md ).
2026-09-01 20:32:13 +02:00
The reference scenarios are:
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
- UC-01 — human-assisted read;
- UC-02 — autonomous release;
- UC-03 — dynamic database access;
- UC-04 — containment;
- UC-05 — self-escalation attempt.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Passing prose review is insufficient. A conformance report names the invariant,
owning implementation, test or observation, evidence bound, result, and finding
return path.
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
## 17. ADR disposition and remaining doctrine work
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
| ADR | Disposition |
| --- | --- |
| ADR-001 | Accepted — canonical authority-context contract. |
| ADR-002 | Accepted — principal / actor / runtime identity model. |
| ADR-003 | Lapsed — policy-engine selection belongs to access-engine. |
| ADR-004, ADR-005, ADR-008, ADR-011, ADR-012 | Engine implementation decisions; no Gate House runtime ADR. Their doctrine survives in invariants and contracts. |
| ADR-006 | Still meaningful — posture input contract with kings-guard. |
| ADR-007 | Credential separation is doctrine here; materialization implementation belongs to secrets-engine. |
| ADR-009 | Still meaningful — Assistant session binding. |
| ADR-010 | Still meaningful — Autonomous mandate model. |
| ADR-013 | Still meaningful — MCP authorization integration. |
| ADR-014 | Still meaningful — policy self-modification protection. |
Mark the Blueprint as partly withdrawn
The blueprint predates the re-cut and describes Gate House as a running
engine. Rather than delete it, mark it — the estate's precedent (zone-engine)
is to retain superseded argument as design history.
Adds a status banner with a per-section table separating what survives (domain
model, authority context, operating modes, posture and credential contracts,
MCP doctrine, change dynamics, audit, test program, architectural invariants)
from what is withdrawn (component and policy architecture, evaluation order,
storage, API surface, caching, deployment, technology direction, reference
repository layout, performance, availability, admin interfaces) and what has
lapsed (ADR-003; milestones M0, M3, M4).
Inline markers on the eight sections most likely to be cited.
A revision folding the surviving material into doctrine form is outstanding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2564823@bnt-lap001
Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2026-08-28 21:23:32 +02:00
2026-09-01 20:32:13 +02:00
Future ADRs in Gate House decide doctrine and responsibility boundaries. They
must not select an Engine's implementation technology or create a Gate House
runtime surface.
Mark the Blueprint as partly withdrawn
The blueprint predates the re-cut and describes Gate House as a running
engine. Rather than delete it, mark it — the estate's precedent (zone-engine)
is to retain superseded argument as design history.
Adds a status banner with a per-section table separating what survives (domain
model, authority context, operating modes, posture and credential contracts,
MCP doctrine, change dynamics, audit, test program, architectural invariants)
from what is withdrawn (component and policy architecture, evaluation order,
storage, API surface, caching, deployment, technology direction, reference
repository layout, performance, availability, admin interfaces) and what has
lapsed (ADR-003; milestones M0, M3, M4).
Inline markers on the eight sections most likely to be cited.
A revision folding the surviving material into doctrine form is outstanding.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2564823@bnt-lap001
Assistant-Session: 2a7ed827-4928-4b9f-8613-9135c9cadfe9
2026-08-28 21:23:32 +02:00
2026-09-01 20:32:13 +02:00
## 18. Blueprint summary
2026-08-24 20:26:50 +02:00
2026-09-01 20:32:13 +02:00
Gate House establishes the security doctrine that makes the runtime chain
coherent. It does not join that chain as a service.
2026-08-24 20:26:50 +02:00
```text
2026-09-01 20:32:13 +02:00
agent decides what to attempt
2026-08-24 20:26:50 +02:00
↓
2026-09-01 20:32:13 +02:00
engines establish identity and context
2026-08-24 20:26:50 +02:00
↓
2026-09-01 20:32:13 +02:00
access-engine decides what may cross
2026-08-24 20:26:50 +02:00
↓
2026-09-01 20:32:13 +02:00
secrets-engine materializes bounded authority
2026-08-24 20:26:50 +02:00
↓
2026-09-01 20:32:13 +02:00
the perimeter and resource enforce it
2026-08-24 20:26:50 +02:00
↓
2026-09-01 20:32:13 +02:00
evidence and adversarial review show whether the doctrine held
2026-08-24 20:26:50 +02:00
```
2026-09-01 20:32:13 +02:00
> **The mandate and operating mode are Gate House's. The decision is
> access-engine's. The credential is secrets-engine's. The perimeter is
> ops-mason's and ops-warden's.**