2026-07-24 00:24:53 +02:00
---
title: Kings Guard Adjacent-System Boundary
version: 0.1.0
status: Draft
date: 2026-07-23
repo: kings-guard
classification: Public
---
# Kings Guard Adjacent-System Boundary
## 1. Purpose
This document records how `kings-guard` interacts with adjacent security and
platform systems in the current NetKingdom stack.
It exists to prevent overlap drift: `kings-guard` consumes evidence, evaluates
posture, and emits bounded signals. It does not absorb the primary authority of
identity, authorization, secret custody, or operations systems.
## 2. Cross-System Rules
The following rules apply to every integration below:
1. `kings-guard` consumes **non-secret evidence** or references to secret
operations, never raw secret values.
2. `kings-guard` contributes **risk and posture context** , never final
authorization or identity decisions.
3. `kings-guard` emits **bounded signals and effector requests** that remain
advisory unless the owning system already delegates a narrow action lane.
4. `kings-guard` must preserve **tenant isolation** : any retained evidence or
memory must stay bounded by declared confidentiality rules.
2026-08-28 21:47:05 +02:00
5. `kings-guard` is a **Staff-layer** repository and is bound by §5 of the
Declare layer machine-readably (§11); adopt v0.6 corrections
The standard moved v0.4 -> v0.6. All four findings from our v0.4 review
were adopted in v0.5, and v0.6 went further on two of them.
§11 now requires a machine-readable declaration — prose cannot
distinguish a declaration from a transcribed review. We had none.
Added layer.yaml (form adapted from ops-warden's reference
implementation), scripts/check_layer_conformance.py, and
tests/test_layer_conformance.py.
The check makes our central claim mechanical rather than asserted: no
direct Tooling client in src/. The test exercises the negative case on a
synthetic tree, so it fails if the checker goes blind. pyyaml is added as
a DEV dependency only — `dependencies = []` is load-bearing for the §5
claim and stays empty.
Adopted from v0.6:
- containment is no longer ours (§9.2). Actuation is an Engine concept,
unowned and held at zero; kings-guard proposes containment and never
performs it. The register row is now a dependency, not our gap.
- observation is scoped to Staff-reachable sources, with identity and
secret observation pending — our finding 1, adopted near-verbatim.
- access-engine DECLINED the authentication-evidence gap; owner is now
the identity layer plus audit-core, reproposed and unassented.
- §11 blocked-clean recorded, with the rule that it must not rank below
conforming — our finding 2.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UEtvmYUBP2fDtirJGWn5MW
Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 4014379@bnt-lap001
Assistant-Session: 4af9e20f-1768-4afc-951b-b507784e382b
2026-08-29 10:20:39 +02:00
NetKingdom Security Layer Model v0.6: it never holds a direct client for a
2026-08-28 21:47:05 +02:00
Tooling-layer system. Evidence from Tooling (OpenBao, key-cape components)
is consumed **through the owning engine** . Where no engine surface exists,
the lane stays fixture-driven and the gap is declared in `INTENT.md` .
6. `kings-guard` never renders or caches an authorization decision.
`access-engine` is the estate's only decision point (layer model §6).
2026-09-02 00:11:57 +02:00
7. Every containment **proposal** carries the originating observation and
signal identity, the stream-completeness state, and a restrictive
direction. It does not carry credentials, secret values, or a direct
actuation instruction. The receiving Engine (today: `access-engine` as
decision point; actuation still unowned) MUST retain those origin
references on the eventual decision record so a containment action is
reconstructable as a decision, not a side channel (statute §9.2;
`gate-house/docs/contracts/posture-findings-return.md` ). Origin linkage
does not widen authority.
2026-07-24 00:24:53 +02:00
## 3. System-by-System Boundary
| Adjacent system | Primary authority | Evidence consumed by `kings-guard` | Signals returned by `kings-guard` | Non-goals |
| --- | --- | --- | --- | --- |
2026-08-28 21:47:05 +02:00
| `key-cape` ** (Tooling — reach via `user-engine` / `access-engine` )** | verified identity, login, MFA, assurance claims | token assurance level, attestation outcomes, claim provenance, authentication anomalies | posture hints about assurance drift or identity inconsistency | minting tokens, login flow, MFA lifecycle |
| `access-engine` (currently `flex-auth` ) | resource authorization policy, decision logs, protected-system registry | live allow/deny decisions, decision explanations, policy version, decision-rate anomalies | risk context or posture hints that a protected system may choose to include in an auth check | becoming the PDP, registering resources, final allow/deny |
2026-07-24 00:24:53 +02:00
| `secrets-engine` | approved secret workflow and scoped capability delivery | metadata-only records of reads, leases, deliveries, rotations, revocations | posture hints about abnormal secret-use patterns or repeated denied delivery attempts | holding secret values, issuing leases, bypassing approval |
2026-08-28 21:47:05 +02:00
| OpenBao ** (Tooling — reach via `secrets-engine` )** | runtime secret custody, secret engines, dynamic credentials | engine/mount metadata, lease/revocation evidence, platform-secret posture | posture hints for secret-authority consumers or operators | root-token custody, secret-engine configuration ownership |
2026-07-24 00:24:53 +02:00
| `ops-warden` | operational SSH certificate issuance and routing guidance | signing attempts, TTL/principal anomalies, access-routing misuse evidence | sign-request posture hints, actor-scrutiny hints, metadata-only evidence requests | issuing certificates, routing non-SSH credentials, host trust config |
2026-08-28 21:47:05 +02:00
| Railiance runtime layers ** (reach via the owning engine)** | provisioning, deployment, isolation, workload lifecycle | deployment provenance, runtime health, workload/network/storage events, recovery outcomes | bounded requests for isolate, rebuild, or validate, always within the runtime's own authority | becoming the deployment repo or cluster operator |
2026-07-24 00:24:53 +02:00
| Governed domain assistants (example: `qonto-assistant` ) | service-local business logic, service-local fast loops, customer/domain-facing policy enforcement points | audit events, policy denies, local safety loop outcomes, service-owned genome records | service-local posture hints and metadata-only evidence requests | replacing local policy kernels or business logic |
| `state-hub` | live coordination state and work-record indexing | repo/workplan/task/progress metadata, incident references | non-secret progress events, posture evidence, incident notes | becoming canon, storing secret payloads, driving irreversible response |
## 4. Governed Domain Assistants
`qonto-assistant` introduces an important pattern that deserves to be named
explicitly in the boundary model:
- it is a workload protected by the platform,
- it is also a policy enforcement point in its own right,
- and it already emits an audit stream and operates a local fast loop.
That class of system is not identical to a generic workload behind
2026-08-28 21:47:05 +02:00
`access-engine` , and it is not infrastructure either.
2026-07-24 00:24:53 +02:00
`kings-guard` 's relationship to this class is:
- consume its service-local audit stream as `immune_observation` ;
- consume its declared healthy intent as `security_genome` ;
- emit posture hints that the service may adopt through its own local control
logic;
- never take over its business logic, credentials, or final access policy.
## 5. Current First-Class Integrations
The first executable `kings-guard` slice targets one concrete adjacent-system
pattern:
- **Chosen pilot:** governed domain assistant (`qonto-assistant` )
- **Why first:** already has a real genome record, audit stream, and fast local
loop; lets `kings-guard` validate contracts without waiting for new platform
control paths
See `docs/pilots/QontoAssistantPosturePilot.md` .
2026-08-28 21:47:05 +02:00
The pilot lane is chosen partly *because* it is layer-clean: `qonto-assistant`
publishes its own audit stream and genome record, so kings-guard needs no
Tooling client to run it. The `key-cape` , OpenBao and runtime rows above stay
fixture-driven until the engine surfaces named in `INTENT.md` §*Declared engine
gaps* exist.
## 6. Layer conformance
Mechanically checkable, per layer model §10:
- `pyproject.toml` declares **zero runtime dependencies** — no database driver,
no OpenBao client, no Kubernetes client;
- every `EffectorRequest` carries an explicit `authority_boundary` , and the
values in use are `advisory_only` and `metadata_only` ;
2026-09-02 00:11:57 +02:00
- every `EffectorRequest` also carries `originating_observation_id` and
`originating_signal_id` so a later decision record can name what was
proposed and against which observation;
2026-08-28 21:47:05 +02:00
- no module exposes an authorization decision surface.