From 0ff263a0b2ac2ddbb9e782df7b0ebb05070ff2fe Mon Sep 17 00:00:00 2001 From: tegwick Date: Mon, 21 Sep 2026 12:36:37 +0200 Subject: [PATCH] Declare ops-mason's NetKingdom layer in INTENT.md frontmatter. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Staff, role pep-shaped, stated in ops-mason's own voice (security-layer-model §11, GH-DEC-2026-017). Direct OpenBao and Kubernetes contacts in the shipped executors are declared as §5.3 gaps; the §6.4 stance map is recorded as a dated declared gap (review 2026-12-21). No sidecar, no standard version. Co-Authored-By: Claude Opus 5 Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703 --- INTENT.md | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/INTENT.md b/INTENT.md index 61e44c1..fd7c088 100644 --- a/INTENT.md +++ b/INTENT.md @@ -1,3 +1,125 @@ +--- +# NetKingdom security layer declaration (net-kingdom security-layer-model, §11). +# +# This frontmatter IS ops-mason's declaration, stated in its own voice. The +# 2026-08-28 review note in the body, the §4 catalog row, and correspondence +# from gate-house and access-engine are statements ABOUT ops-mason and are not +# the declaration (§11). INTENT.md governs; no layer.yaml sidecar is written +# (GH-DEC-2026-017 §1). No standard version appears anywhere in this block +# (GH-DEC-2026-017 §5, A12 r2 per GH-DEC-2026-020): the layer is a standing +# property of the repository. +# +# Worked out from ops-mason's own character against §3, not copied from §4: +# every construction plan is drafted and self-reviewed by an agent and gated by +# a founder decision -- judgment, not a deterministic function of input state. +# Its artifacts are construction plans, executive summaries and build records +# (specifications, decisions, tasks). That is Staff (§3.4). It holds no state +# another layer reads at runtime: what it builds lives in OpenBao and the +# cluster, its audit log is its own. Phase 4 causes protected side effects -- +# it writes OpenBao policies and auth roles, mints and delivers AppRole +# secret_ids, and applies Kubernetes objects -- so it is PEP-shaped (§6.4). +# This agrees with §4's row. The finding is below the layer line: the shipped +# executors contact Tooling directly, which the 2026-08-28 review note says +# ops-mason does not do. Those contacts are declared here as §5.3 gaps -- +# tracked non-conformance, not a claim of conformance. +layer: Staff +role: pep-shaped +repository: ops-mason +declared_by: INTENT.md +declared_at: "2026-09-21" +ruling: GH-DEC-2026-017 + +# §6.4 obligation 3 / §13.1 -- DECLARED GAP, not a published map. ops-mason's +# stance is undecided rather than merely unpublished: its builds are gated by a +# founder approval of a construction plan, not by an access-engine decision +# record, so there is no engine outage for a stance to govern until ops-mason +# decides whether its build path consults access-engine at all. Publishing a +# fail-closed map today would describe behaviour the code does not have. +pep_stance: + status: declared-gap + path: null + blocked_on: >- + Undecided whether phase-4 builds consult access-engine (§6.4 obligation 1) + or remain founder-approval-gated only; a stance map is only meaningful once + that is settled. + review: "2026-12-21" + +# §11: every direct Tooling contact, one entry each. Empty would be a claim. +tooling_contacts: + - id: openbao-structure-build + shape: "5.3" + module: src/ops_mason/executor.py + symbol: build_approle_kv_lane, build_kubernetes_kv_lane + tooling: OpenBao + operation: "bao policy write; bao write auth/approle/role/*, auth/kubernetes/role/*" + write: true + capability: "Create policies and auth roles for an approved construction plan (structure only, never secret values)" + intended_owner: secrets-engine + blocked_on: >- + No engine exposes a policy / auth-role construction surface; ops-mason + runs the bao CLI under a scoped, time-boxed ops-mason-build token. + review: "2026-12-21" + - id: openbao-approle-credential-delivery + shape: "5.3" + module: src/ops_mason/executor.py + symbol: build_approle_kv_lane + tooling: OpenBao + operation: "bao read auth/approle/role/*/role-id; bao write -f auth/approle/role/*/secret-id" + write: true + capability: "Mint and deliver an AppRole role_id/secret_id to the consumer, write-only, never logged" + intended_owner: secrets-engine + blocked_on: >- + No engine exposes credential issuance for AppRole lanes; secrets-engine + owns credential lifecycle but fronts no issuance API today. + review: "2026-12-21" + - id: openbao-custody-metadata-read + shape: "5.1" + module: scripts/custody-inventory.py + symbol: bao + tooling: OpenBao + operation: "bao kv list; bao kv metadata get" + write: false + capability: "Inventory credential paths and their descriptions without reading any value" + intended_owner: secrets-engine + blocked_on: "No engine exposes a custody inventory query." + review: "2026-12-21" + - id: kubernetes-plane-apply + shape: "5.3" + module: src/ops_mason/kubernetes_plane.py + symbol: preflight, verify, apply + tooling: Kubernetes + operation: "kubectl get / auth can-i / apply (server dry-run, then apply) of an allowlisted, digest-pinned bundle" + write: true + capability: "Build small source-pinned security planes (namespaces, service accounts, network policies)" + intended_owner: null + blocked_on: >- + Kubernetes is not catalogued in §4, so no engine is named as its owner. + ops-mason reads the cluster as Tooling by character (§3.2) and declares + the contact rather than treating it as out of scope; raised with + gate-house as a catalog question. + review: "2026-12-21" + - id: bao-session-grant + shape: "5.2" + module: scripts/bao-session.sh + symbol: login, grant, revoke + tooling: OpenBao + operation: "Operator OIDC login; mint a scoped, bounded token under the operator's own session" + write: true + capability: "Hand an agent session a task-scoped ops-mason-build token instead of the operator's session" + supplied_authority: none + note: >- + Runs under the operator's own authority and narrows it; ops-mason holds + no standing credential of its own. + +non_tooling_clients: + - module: ops-warden registry/routing/catalog.yaml (git contribution) + target: ops-warden + rationale: "A proposed catalog entry is a repository commit, not a runtime call." + - module: State Hub (session protocol) + target: state-hub + rationale: "Not catalogued in §4; coordination only, no security state." +--- + # INTENT > **NetKingdom layering review — 2026-08-28.** This repository's role was reviewed