Repoint at Security Layer Model v0.4; assess and report to gate-house

The standard moved v0.1 -> v0.4 after our assent. Reviewed; assent stands
unchanged. §9.1/§9.2/§9.3 adopt the KG-DEC-2026-001 finding and generalise
it estate-wide, and §12 now states that an unsatisfiability finding is a
success of the conformance loop.

Docs repointed at v0.4 (INTENT, SCOPE, AdjacentSystemBoundary, the
architecture spec note). KG-DEC-2026-001 still cites v0.1 deliberately —
it records what was assented to at the time.

INTENT gap table reshaped to §5.3's field names (capability,
intended_owner, blocked_on, review) so one register can hold both kinds,
with review dates set to 2026-11-28, and marked explicitly as unowned
capabilities rather than §5.3 declared contacts — kings-guard makes no
Tooling contact and is Conforming under §11.

Four findings sent to gate-house: §9.1 not carried through to the
observation claim; §13 conflating declared contacts with unowned
capabilities ahead of the maturity-engine migration; §9.6's unstated
consequence for posture (suppression biases posture optimistic and our
confidence score cannot express the doubt); and disclosure that §12's
fourth step is unstaffed while the pilot remains fixture-only.

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
This commit is contained in:
tegwick 2026-08-29 02:41:43 +02:00
parent bc1213545b
commit d99f395aa1
5 changed files with 132 additions and 24 deletions

View file

@ -1,13 +1,14 @@
{
"schema": "repo_manager.index.v1",
"slug": "layer-model-assent",
"slug": "layer-model-v03-review",
"repo_root": "/home/worsch/kings-guard",
"head_sha": "7c8ef38ee0603c4ca23e69abaff689b86da752b4",
"observed_at": "2026-08-28T19:30:17.391432Z",
"source_fingerprint": "ff379cda32bd3d625590480dbf164739c18022680a8390e4cd6a48514324cc5c",
"head_sha": "3686f8994bef468499abf58ddb6020503ed285e6",
"observed_at": "2026-08-28T20:40:12.405988Z",
"source_fingerprint": "cfeafedc875687fa1f24d10127b22b0b6dcce30f1faddf803b7c2a19e046cf12",
"source_files": [
".repo-classification.yaml",
"INTENT.md",
"decisions/decisions.md",
"intakes/intakes.md",
"workplans/KG-WP-0001-statehub-bootstrap.md",
"workplans/KG-WP-0002-canonical-immune-contracts-and-posture-pilot.md"
@ -103,20 +104,60 @@
"parent_id": "KG-WP-0002",
"extra": {}
},
{
"kind": "decision",
"id": "KG-DEC-2026-001",
"status": "resolved",
"title": "Assent to Staff placement, release of control-plane vocabulary, and the posture asymmetry",
"source_path": "decisions/decisions.md",
"uuid": "80313094-9b5d-4954-b37b-3313deac6b65",
"parent_id": null,
"extra": {
"record": {
"id": "KG-DEC-2026-001",
"kind": "decision",
"title": "Assent to Staff placement, release of control-plane vocabulary, and the posture asymmetry",
"status": "resolved",
"owner": "Bernd Worsch",
"repo": "kings-guard",
"standard": "net-kingdom/canon/standards/security-layer-model_v0.1.md",
"origin_ref": "KG-IN-0001",
"related": [
"gate-house/decisions/decisions.md GH-DEC-2026-001",
"gate-house/history/2026-08-28-security-layer-model-and-gate-house-recut.md"
],
"affects": [
"kings-guard",
"gate-house",
"net-kingdom",
"access-engine",
"secrets-engine",
"user-engine"
],
"created": "2026-08-28",
"updated": "2026-08-28",
"decided_by": "Bernd Worsch",
"disposition": "assent-with-finding",
"state_hub_decision_id": "80313094-9b5d-4954-b37b-3313deac6b65"
}
}
},
{
"kind": "intake",
"id": "KG-IN-0001",
"status": "open",
"status": "closed",
"title": "Assent requested: Staff layer placement, control-plane vocabulary, and the posture asymmetry",
"source_path": "intakes/intakes.md",
"uuid": null,
"uuid": "01a049ea-2e37-7dde-9772-fab7e788d8d7",
"parent_id": null,
"extra": {
"record": {
"id": "KG-IN-0001",
"kind": "intake",
"title": "Assent requested: Staff layer placement, control-plane vocabulary, and the posture asymmetry",
"status": "open",
"status": "closed",
"outcome": "absorbed",
"promoted_to": "KG-DEC-2026-001",
"origin": "cross-repo",
"origin_ref": "gate-house GH-DEC-2026-001",
"priority": "medium",
@ -125,7 +166,61 @@
"standard": "net-kingdom/canon/standards/security-layer-model_v0.1.md",
"description": "gate-house asks kings-guard to assent to its placement in the NetKingdom security layer model. (1) kings-guard is Staff \u2014 agentic and non-deterministic \u2014 not an Engine. Acting at runtime does not make a repository an Engine; being agentic makes it Staff. (2) Consequently its self-description as an adaptive security control plane needs revisiting: control plane is Engine-layer vocabulary (standard section 8). This is not a demotion \u2014 it is the reason kings-guard may contain a threat only by calling an engine, never by reaching into OpenBao or a cluster directly (the binding rule, standard section 5: Staff never touches Tooling directly). (3) The posture contract with gate-house and its asymmetry: adaptive systems may reduce authority, require step-up, or request containment; they must never probabilistically manufacture additional authority. kings-guard publishes posture, gate-house defines its authority meaning, access-engine renders it. If the binding rule is impractical for containment in a real incident, say so \u2014 that is exactly the kind of finding that should change the doctrine rather than be worked around.",
"created": "2026-08-28T19:30:17.201213Z",
"updated": "2026-08-28T19:30:17.201213Z"
"updated": "2026-08-28T19:30:17.201213Z",
"closed": "2026-08-28",
"resolution": "Assent with finding. All three points assented and adopted in INTENT.md, SCOPE.md, README.md, AGENTS.md, and docs/AdjacentSystemBoundary.md. The invited challenge to the binding rule was taken up and answered: do not weaken section 5 \u2014 but section 4 catalogs kings-guard as owning containment while no engine exposes a containment surface, so the charter is currently undischargeable. Two rulings requested of gate-house. Full record: decisions/decisions.md KG-DEC-2026-001. Vocabulary sweep of the architecture spec handed off as KG-IN-0002.",
"state_hub_intake_id": "01a049ea-2e37-7dde-9772-fab7e788d8d7"
}
}
},
{
"kind": "intake",
"id": "KG-IN-0002",
"status": "open",
"title": "Sweep \"control plane\" and layer vocabulary through NetKingdomImmuneArchitecture.md",
"source_path": "intakes/intakes.md",
"uuid": "01a049ea-3a04-74b9-a9b1-e2630f8d5628",
"parent_id": null,
"extra": {
"record": {
"id": "KG-IN-0002",
"kind": "intake",
"title": "Sweep \"control plane\" and layer vocabulary through NetKingdomImmuneArchitecture.md",
"status": "open",
"origin": "residual",
"origin_ref": "KG-DEC-2026-001",
"priority": "low",
"owner": "kings-guard",
"standard": "net-kingdom/canon/standards/security-layer-model_v0.1.md",
"description": "specs/NetKingdomImmuneArchitecture.md (approx. 1900 lines) predates the NetKingdom Security Layer Model and uses \"control plane\" in several places \u2014 including a \"Platform Immune Control Plane\" subgraph \u2014 where the layer model reserves that vocabulary for the Engine layer. A scoping note now sits at the head of the document so no reading takes it as a kings-guard self-description, but the body is not adapted. Sweep it: separate the components that are engine-layer authorities from the observation-and-judgment surface kings-guard actually owns, and check that no part of the architecture places a decision point in Staff (layer model section 6).",
"created": "2026-08-28",
"updated": "2026-08-28",
"state_hub_intake_id": "01a049ea-3a04-74b9-a9b1-e2630f8d5628"
}
}
},
{
"kind": "intake",
"id": "KG-IN-0003",
"status": "open",
"title": "Review requested: security layer model v0.3 (maturity-engine, and the posture/maturity boundary)",
"source_path": "intakes/intakes.md",
"uuid": null,
"parent_id": null,
"extra": {
"record": {
"id": "KG-IN-0003",
"kind": "intake",
"title": "Review requested: security layer model v0.3 (maturity-engine, and the posture/maturity boundary)",
"status": "open",
"origin": "cross-repo",
"origin_ref": "net-kingdom security-layer-model_v0.3",
"priority": "medium",
"owner": "kings-guard",
"requested_by": "gate-house",
"description": "v0.3 is proposed and changes sections 4, 9 and 13 only; the v0.2 assent record stands. It responds directly to KG-DEC-2026-001. Section 9.5 assigns graded progression to a new maturity-engine, which now owns the gap register with intended_owner, blocked_on and review dates, and capability readiness \u2014 so your three declared engine gaps and the pending containment claim become queryable facts rather than footnotes in a standard. Your finding also produced 9.1 in v0.2, and v0.3 applies it to gate-house itself: gate-house was catalogued as owning conformance review with no engine to act through, exactly the defect you named for containment, and it now acts through maturity-engine. THE QUESTION FOR YOU is a boundary we have not drawn: posture and maturity are both graded, and we do not want two engines grading the same subject. Our reading is that posture is volatile current security state about an actor, published by kings-guard and rendered by access-engine, while maturity is slow progression of a capability against declared criteria. If that line is wrong, or if maturity-engine would absorb something you consider posture, say so now \u2014 a second grading authority would be the same shape of mistake as a second decision point. Also worth your view: does capability readiness for containment belong in maturity-engine, or does tracking your own gaps there create a dependency you would rather not carry during an incident? Assent, revision, or rejection acceptable.",
"created": "2026-08-28T20:40:12.260389Z",
"updated": "2026-08-28T20:40:12.260389Z"
}
}
}
@ -135,15 +230,15 @@
"type": "repo.command.applied",
"command": "repo.work.create_intake",
"operation": "create",
"correlation_id": "f9b8b130-71f6-41b9-9f06-e28d2abda2d4",
"correlation_id": "aae5e5ae-a706-4da5-82fc-a0fb8982ca5b",
"kind": "intake",
"id": "KG-IN-0001",
"git_sha": "7c8ef38ee0603c4ca23e69abaff689b86da752b4",
"id": "KG-IN-0003",
"git_sha": "3686f8994bef468499abf58ddb6020503ed285e6",
"files_touched": [
"intakes/intakes.md"
],
"source": "repo-manager",
"emitted_at": "2026-08-28T19:30:17.391507Z"
"emitted_at": "2026-08-28T20:40:12.406045Z"
}
]
}

View file

@ -1,9 +1,16 @@
# INTENT
> **Layer: Staff.** *(NetKingdom Security Layer Model v0.1, §4 catalog —
> `net-kingdom/canon/standards/security-layer-model_v0.1.md`; ratified by
> `gate-house/decisions/decisions.md` GH-DEC-2026-001; assented here by
> `decisions/decisions.md` KG-DEC-2026-001 on 2026-08-28.)*
> **Layer: Staff.** *(NetKingdom Security Layer Model — current version
> `net-kingdom/canon/standards/security-layer-model_v0.4.md`, §4 catalog,
> status accepted; ratified by `gate-house/decisions/decisions.md`
> GH-DEC-2026-001; assented here by `decisions/decisions.md` KG-DEC-2026-001
> on 2026-08-28, against v0.1. This declaration is made in kings-guard's own
> voice, per §11.)*
>
> **Catalog entry (v0.4 §4):** adaptive defence, observation; **containment —
> pending (§9.2)**, until an engine exposes a containment surface. The pending
> mark exists because kings-guard raised the defect that v0.1 catalogued a
> capability §5 forbade discharging; the general rule is now §9.1.
>
> kings-guard is **interactive and non-deterministic**: adaptive defence,
> observation, containment. Acting at runtime does not make a repository an
@ -143,11 +150,17 @@ Capabilities kings-guard needs that no engine exposes today. Under the binding
rule these are gaps to close in the owning engine, not work to route around.
None is a standing licence to reach into Tooling.
| Gap | Needed for | Owning engine | Status |
| --- | --- | --- | --- |
| Authentication and assurance evidence (token assurance, attestation outcomes, authentication anomalies) exposed as an engine surface | identity-drift posture | `user-engine` / `access-engine` | open — no engine surface; kings-guard consumes fixtures only |
| Secret-use evidence (lease, revocation, mount and rotation metadata) exposed as an engine surface | secret-abuse posture | `secrets-engine` | open — no engine surface; kings-guard consumes fixtures only |
| A containment surface — reduce authority, require step-up, isolate a workload — callable as a deterministic engine API, and available while an incident is in progress | bounded response | `access-engine`, runtime engines | open — see KG-DEC-2026-001 §Finding |
These are **unowned capabilities**, not §5.3 declared contacts: kings-guard
makes no direct Tooling contact for any of them. Under §11 kings-guard is
**Conforming**, not a tracked non-conformance. The fields follow §5.3's shape so
one register can hold both, but the distinction is load-bearing — see the
assessment sent to gate-house on 2026-08-29.
| `capability` | Needed for | `intended_owner` | `blocked_on` | `review` |
| --- | --- | --- | --- | --- |
| Authentication and assurance evidence (token assurance, attestation outcomes, authentication anomalies) exposed as an engine surface | identity-drift posture | `user-engine` / `access-engine` | no engine surface exists; kings-guard consumes fixtures only | 2026-11-28 |
| Secret-use evidence (lease, revocation, mount and rotation metadata) exposed as an engine surface | secret-abuse posture | `secrets-engine` | no engine surface exists; kings-guard consumes fixtures only | 2026-11-28 |
| Containment surface — reduce authority, require step-up, isolate a workload — callable as a deterministic engine API, available while an incident is in progress | bounded response | `access-engine`, runtime engines | no engine surface exists; ruled pending in v0.4 §9.2, degraded-mode fallback ruled into the engine by §9.3 | 2026-11-28 |
Until a gap closes, the corresponding posture lane stays advisory and
fixture-driven. kings-guard MUST NOT open a direct path to the Tooling system

View file

@ -9,7 +9,7 @@
**Staff** — interactive, non-deterministic; adaptive defence, observation,
containment. Binding rule: kings-guard never touches Tooling directly; it acts
only through Engine APIs. See `INTENT.md` and
`net-kingdom/canon/standards/security-layer-model_v0.1.md`.
`net-kingdom/canon/standards/security-layer-model_v0.4.md`.
---

View file

@ -31,7 +31,7 @@ The following rules apply to every integration below:
4. `kings-guard` must preserve **tenant isolation**: any retained evidence or
memory must stay bounded by declared confidentiality rules.
5. `kings-guard` is a **Staff-layer** repository and is bound by §5 of the
NetKingdom Security Layer Model v0.1: it never holds a direct client for a
NetKingdom Security Layer Model v0.4: it never holds a direct client for a
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`.

View file

@ -15,7 +15,7 @@ classification: Public
# NetKingdom Immune Architecture
> **Layer note (2026-08-28).** kings-guard is a **Staff**-layer repository
> under the NetKingdom Security Layer Model v0.1 (assented in
> under the NetKingdom Security Layer Model v0.4 (assented in
> `decisions/decisions.md` KG-DEC-2026-001). Where this document uses "control
> plane", read it as naming an **estate-wide, Engine-layer** arrangement of
> deterministic authorities — never as a self-description of `kings-guard`,