docs: declare Engine/PIP under security-layer-model v0.7
Assent to ZONE-IN-0001 in this repository's own voice: layer Engine, role PIP, offline reference remaining the catalogued surface. Align INTENT, SCOPE, and GOAL with accepted statute v0.7 and companion v0.2. Record the scope-against-intent review and open ZONE-WP-0003 for the mechanical remainder. Do not reopen the no-runtime decision. Assistant: grok Assistant-Session: 01a04ceb-0745-7ae1-9e26-0d10e5d52b8b
This commit is contained in:
parent
1b9a252fa3
commit
a34bc194dc
6 changed files with 704 additions and 88 deletions
47
GOAL.md
47
GOAL.md
|
|
@ -17,21 +17,26 @@ expires on its own.
|
||||||
|
|
||||||
## Invariants
|
## Invariants
|
||||||
|
|
||||||
- **`flex-auth` remains the only policy decision point.** zone-engine is
|
- **`access-engine` remains the only policy decision point.** It is the ruled
|
||||||
authority over zone **identity and membership**; the **effect** of a zone on
|
name for the repository currently called `flex-auth`. zone-engine is the
|
||||||
any decision flex-auth renders is expressed in a flex-auth policy package.
|
Engine-layer **PIP** for zone **identity and membership**; the **effect** of
|
||||||
|
a zone on any decision `access-engine` renders is expressed in an
|
||||||
|
`access-engine` policy package or as a claim on the request (security layer
|
||||||
|
model v0.7 §6, §18).
|
||||||
|
|
||||||
The first draft of this invariant said "nothing this repo builds sits
|
The first draft of this invariant said "nothing this repo builds sits
|
||||||
synchronously in a decision path". flex-auth rejected that on review: it is a
|
synchronously in a decision path". flex-auth rejected that on review: it is a
|
||||||
*latency* guarantee, not an authority one. Compiled data that determines an
|
*latency* guarantee, not an authority one. Compiled data that determines an
|
||||||
outcome is still deciding — it just decided earlier. Under the old wording
|
outcome is still deciding — it just decided earlier. Under the old wording
|
||||||
zone-engine could compile `enforced: false` for a lane, flip `warden sign`
|
zone-engine could compile `enforced: false` for a lane, flip `warden sign`
|
||||||
from deny to allow with no flex-auth policy change, and be literally
|
from deny to allow with no policy-package change, and be literally
|
||||||
compliant. Membership is ours; stance is theirs.
|
compliant. Membership is ours; stance is theirs; the decision point is
|
||||||
- **Compiled, not queried.** Membership reaches flex-auth by compilation into
|
neither.
|
||||||
the registry it already loads. This is a *consequence* of the invariant
|
- **Compiled, not queried.** Membership reaches `access-engine` by compilation
|
||||||
above, not the invariant itself — flex-auth is `service_class:
|
into the registry it already loads, as a PIP fact, never as stance. This is
|
||||||
latency-critical` and loads its registry once at process start.
|
a *consequence* of the invariant above, not the invariant itself —
|
||||||
|
`access-engine` is `service_class: latency-critical` and loads its registry
|
||||||
|
once at process start.
|
||||||
- **A zone that can be quietly widened is not a boundary.** Every change of
|
- **A zone that can be quietly widened is not a boundary.** Every change of
|
||||||
stance is observable, and every exception has an enforced expiry.
|
stance is observable, and every exception has an enforced expiry.
|
||||||
- **Accuracy, not altitude** (`tenancy-posture_v0.1` §6). A repo declaring a
|
- **Accuracy, not altitude** (`tenancy-posture_v0.1` §6). A repo declaring a
|
||||||
|
|
@ -64,15 +69,23 @@ runtime exists with an owner or the decision that none is needed is recorded.
|
||||||
It does not reopen the no-runtime decision; it makes the retained artifacts
|
It does not reopen the no-runtime decision; it makes the retained artifacts
|
||||||
truthful enough for an explicit archive-or-maintain decision.
|
truthful enough for an explicit archive-or-maintain decision.
|
||||||
|
|
||||||
|
`ZONE-WP-0003` is the owner-driven revision that follows from security layer
|
||||||
|
model v0.7 being accepted. It declares the Engine/PIP layer, records the
|
||||||
|
already-completed layer cut, and evolves the reference surface so zone facts
|
||||||
|
can be consumed as claims. It does not add a live API, a decision surface, or
|
||||||
|
a PEP.
|
||||||
|
|
||||||
## Retirement decision — 2026-08-23
|
## Retirement decision — 2026-08-23
|
||||||
|
|
||||||
Retain the repository as an offline reference-conformance repository while the
|
Retain the repository as an offline reference-conformance repository while the
|
||||||
canonical v0.1 standard remains `proposed`. The maintainer is zone-engine; the
|
canonical `security-zones_v0.1` standard remains `proposed`. The maintainer is
|
||||||
maintenance surface is limited to canon lineage, conformance fixtures, and
|
zone-engine; the maintenance surface is limited to canon lineage, conformance
|
||||||
concrete owner-driven revisions. There is no service or routine delivery
|
fixtures, and concrete owner-driven revisions. There is no service or routine
|
||||||
backlog.
|
delivery backlog. The 2026-08-29 layer declaration is one such revision: the
|
||||||
|
security layer model is **accepted**; the zone standard is still **proposed**;
|
||||||
|
the catalogued form stays offline.
|
||||||
|
|
||||||
Reassess archival when net-kingdom accepts or supersedes v0.1, when the fixtures
|
Reassess archival when net-kingdom accepts or supersedes `security-zones_v0.1`,
|
||||||
are durably adopted by canon/control owners, or when no adopting control needs
|
when the fixtures are durably adopted by canon/control owners, or when no
|
||||||
the reference. An actual Forgejo archive or rename remains attended operator
|
adopting control needs the reference. An actual Forgejo archive or rename
|
||||||
work.
|
remains attended operator work.
|
||||||
|
|
|
||||||
175
INTENT.md
175
INTENT.md
|
|
@ -1,37 +1,74 @@
|
||||||
# INTENT
|
---
|
||||||
|
layer: Engine
|
||||||
|
role: PIP
|
||||||
|
standard: netkingdom-security-layer-model
|
||||||
|
standard_version: "0.7"
|
||||||
|
companion: net-kingdom/SECURITY-COMPANION.md
|
||||||
|
---
|
||||||
|
|
||||||
> **NetKingdom layering review — 2026-08-28.** This repository's role was reviewed
|
# INTENT
|
||||||
> against the NetKingdom IT-security layer model: **Taxonomy → Tooling → Engines →
|
|
||||||
> Staff**, layered by determinism and by the kind of artifact each layer produces.
|
|
||||||
> Findings and the argument behind them:
|
|
||||||
> `gate-house/history/2026-08-28-security-layer-model-and-gate-house-recut.md`.
|
|
||||||
> The model is `net-kingdom/canon/standards/security-layer-model_v0.1.md` (proposed),
|
|
||||||
> ratified by `gate-house/decisions/decisions.md` GH-DEC-2026-001.
|
|
||||||
>
|
|
||||||
> The layer rule that binds every repository: **Staff never touches tooling
|
|
||||||
> directly. It acts only through engine APIs.**
|
|
||||||
>
|
|
||||||
> **This repository is Engine — currently retained as offline reference conformance.** No change to the 2026-08-23 disposition. Note that §5 of this file — *"flex-auth is the policy decision point. It stays the only one."* — is the precedent the whole review turned on, and it now generalizes: gate-house is Staff and is not a second decision point either. The falsifier in §7 ("it becomes a second decision point… it would arrive as a small convenience") is adopted estate-wide. References to flex-auth by name will need updating when the rename to access-engine lands.
|
|
||||||
>
|
|
||||||
> *This note records what should change. The body below is not yet adapted.*
|
|
||||||
|
|
||||||
> Why `zone-engine` exists and where it is going.
|
> Why `zone-engine` exists and where it is going.
|
||||||
> What is true today is `SCOPE.md`. Checkable gates and the retirement
|
> What is true today is `SCOPE.md`. Checkable gates and the retirement
|
||||||
> condition are `GOAL.md`. This file is the argument, not the checklist.
|
> condition are `GOAL.md`. This file is the argument, not the checklist.
|
||||||
|
|
||||||
|
> **Layer: Engine. Role: PIP.** This is the declaration required by NetKingdom
|
||||||
|
> Security Layer Model v0.7 §11 and working companion v0.2. It is this
|
||||||
|
> repository's own voice. A catalog row, a review note, or the 2026-08-28
|
||||||
|
> gate-house insert that used to sit here is not a declaration.
|
||||||
|
>
|
||||||
|
> The statute is
|
||||||
|
> `net-kingdom/canon/standards/security-layer-model_v0.7.md` (accepted
|
||||||
|
> 2026-08-29). The operative form is `net-kingdom/SECURITY-COMPANION.md` v0.2.
|
||||||
|
> On disagreement the statute governs, and a disagreement is a finding for
|
||||||
|
> `gate-house`.
|
||||||
|
>
|
||||||
|
> We produce a deterministic result for one modeled concept: zone identity and
|
||||||
|
> membership. Same authoritative inputs, same result. That is the Engine test.
|
||||||
|
> The PIP role means those facts reach a decision as **claims**, not as a
|
||||||
|
> verdict. We do not render, cache, or compile an authorization decision.
|
||||||
|
>
|
||||||
|
> The §4 catalog records the 2026-08-23 disposition rather than changing it:
|
||||||
|
> the current PIP surface is **offline reference conformance**, not a live API.
|
||||||
|
> Determinism does not require a network. A live Engine API, a decision
|
||||||
|
> surface, or stance compiled into membership would each be a layer change,
|
||||||
|
> and a layer change needs the six artifacts in statute §10, including a
|
||||||
|
> permission freeze. The 2026-08-23 cut already happened; it does not reopen
|
||||||
|
> by practice.
|
||||||
|
>
|
||||||
|
> **`access-engine` is the only PDP.** It is the ruled name for the repository
|
||||||
|
> currently called `flex-auth`. This file's original §5 — *"flex-auth is the
|
||||||
|
> policy decision point. It stays the only one."* — is the ruling the layer
|
||||||
|
> model generalizes as statute §6. The §7 falsifier — a second decision point
|
||||||
|
> arriving as a small convenience — is estate doctrine. Zone stance enters a
|
||||||
|
> decision as a claim on the request or a rule in a versioned policy package,
|
||||||
|
> never as compiled registry content (statute §18).
|
||||||
|
>
|
||||||
|
> We are not PEP-shaped: this repository causes no protected side effect and
|
||||||
|
> publishes no unreachable-engine stance map. We hold no Tooling-layer client.
|
||||||
|
> Staff never touches Tooling directly; we are not Staff, and we still do not
|
||||||
|
> hold a Tooling client, because a PIP that reaches into OpenBao would be
|
||||||
|
> deciding with someone else's state.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Current disposition — 2026-08-23
|
## Current disposition — 2026-08-23, confirmed 2026-08-29
|
||||||
|
|
||||||
The argument below is retained as design history. Its desired sentence is now
|
The argument below is retained as design history. Its desired sentence is now
|
||||||
sayable: the standard is in net-kingdom canon, ops-warden and flex-auth have
|
sayable: the zone standard is in net-kingdom canon, ops-warden and flex-auth
|
||||||
adopted it, the repo-wide switch is retired, and exception expiry is enforced
|
have adopted it, the repo-wide switch is retired, and exception expiry is
|
||||||
at each owning decision or enforcement point.
|
enforced at each owning decision or enforcement point.
|
||||||
|
|
||||||
The runtime hypothesis was falsified. zone-engine is retained only as an
|
The runtime hypothesis was falsified. That was a layer change in practice
|
||||||
offline reference-conformance repository while canon v0.1 remains proposed; it
|
(statute §10 cites this case). zone-engine is retained as an Engine/PIP whose
|
||||||
is not an engine, PDP, exception service, or consumer policy owner. Current
|
surface is offline reference conformance while `security-zones_v0.1` remains
|
||||||
capability is `SCOPE.md`, and the retain/archive triggers are in `GOAL.md`.
|
proposed. It is not a PDP, not a PEP, not an exception service, and not a
|
||||||
|
consumer policy owner. Current capability is `SCOPE.md`. Retain and archive
|
||||||
|
triggers are in `GOAL.md`.
|
||||||
|
|
||||||
|
The security-layer-model being accepted does not reverse that cut. It names
|
||||||
|
the cut: we are the PIP for zone identity and membership, in the form already
|
||||||
|
shipped.
|
||||||
|
|
||||||
## 1. The sentence this repo exists to make sayable
|
## 1. The sentence this repo exists to make sayable
|
||||||
|
|
||||||
|
|
@ -39,10 +76,10 @@ capability is `SCOPE.md`, and the retain/archive triggers are in `GOAL.md`.
|
||||||
> band until Friday** — and all three of those are written down, reviewable, and
|
> band until Friday** — and all three of those are written down, reviewable, and
|
||||||
> expire on their own."*
|
> expire on their own."*
|
||||||
|
|
||||||
At inception NetKingdom could not say that. It could say how exposed a workload was
|
At inception NetKingdom could not say that. It could say how exposed a workload
|
||||||
(environment posture), how ready it is (`M0`–`M3`), and what state the
|
was (environment posture), how ready it is (`M0`–`M3`), and what state the
|
||||||
organization is in (`organization_posture`). Every one of those **describes**.
|
organization is in (`organization_posture`). Every one of those **describes**.
|
||||||
None of them **decides**. So every enforcement control in the estate has been a
|
None of them **decides**. So every enforcement control in the estate was a
|
||||||
boolean over a whole repo.
|
boolean over a whole repo.
|
||||||
|
|
||||||
## 2. Where that bit
|
## 2. Where that bit
|
||||||
|
|
@ -52,7 +89,7 @@ the gate verified clean. It was deliberately not switched on until the zone
|
||||||
model replaced its global scope.
|
model replaced its global scope.
|
||||||
|
|
||||||
`policy.enabled` is one boolean over the entire repo. With `fail_closed: true`
|
`policy.enabled` is one boolean over the entire repo. With `fail_closed: true`
|
||||||
it makes flex-auth a hard dependency of *every* `warden sign` — including the
|
it makes the PDP a hard dependency of *every* `warden sign` — including the
|
||||||
SSH certificates the ops-bridge tunnels depend on, one of which carries the
|
SSH certificates the ops-bridge tunnels depend on, one of which carries the
|
||||||
policy call itself. Turning it on would have been correct for a settled
|
policy call itself. Turning it on would have been correct for a settled
|
||||||
production lane and wrong for an estate in the middle of decommissioning one
|
production lane and wrong for an estate in the middle of decommissioning one
|
||||||
|
|
@ -93,44 +130,54 @@ it decides something, so the model must carry:
|
||||||
|
|
||||||
- **Identity and membership** — an authoritative workload binding and its
|
- **Identity and membership** — an authoritative workload binding and its
|
||||||
responsible party's declared zone. Lanes, actors, paths and repositories are
|
responsible party's declared zone. Lanes, actors, paths and repositories are
|
||||||
inputs or caller context, never substitute policy subjects.
|
inputs or caller context, never substitute policy subjects. **This is the PIP
|
||||||
|
fact this repository owns.**
|
||||||
- **Admission** — a mechanical reconciliation of that declaration against the
|
- **Admission** — a mechanical reconciliation of that declaration against the
|
||||||
zone floor and the workload posture. Missing identity, membership or evidence
|
zone floor and the workload posture. Missing identity, membership or evidence
|
||||||
remains `unknown`; it is never inferred into a permissive zone.
|
remains `unknown`; it is never inferred into a permissive zone. Same
|
||||||
- **Stance per control** — enforced, advisory, or exempt.
|
authoritative inputs, same result.
|
||||||
|
- **Stance per control** — enforced, advisory, or exempt. **Not ours.** The
|
||||||
|
effect of a zone on a decision belongs in a versioned `access-engine` policy
|
||||||
|
package, or as a claim on the request (statute §18).
|
||||||
- **Failure mode** — what happens when the control cannot run. This is where
|
- **Failure mode** — what happens when the control cannot run. This is where
|
||||||
the bite is; `fail_closed` is what turns a dead tunnel into an outage.
|
the bite is; `fail_closed` is what turns a dead tunnel into an outage. **The
|
||||||
|
PEP owner's**, declared ahead of time per statute §9.3.
|
||||||
- **Exceptions that expire without anyone remembering them.**
|
- **Exceptions that expire without anyone remembering them.**
|
||||||
|
|
||||||
The last was the runtime hypothesis. A standing classification needs no engine
|
The last was the runtime hypothesis. A standing classification needs no live
|
||||||
— canon plus a declaration file covers it, which is exactly how tenancy posture
|
engine — canon plus a declaration file covers it, which is exactly how tenancy
|
||||||
works. The implementation proved that exception state can remain with the
|
posture works. The implementation proved that exception state can remain with
|
||||||
control owner when `not_after` is evaluated where the effect occurs. That gives
|
the control owner when `not_after` is evaluated where the effect occurs. That
|
||||||
it an owner, audit trail, and enforced deadline without a central service.
|
gives it an owner, audit trail, and enforced deadline without a central service.
|
||||||
|
|
||||||
## 5. The line this repo must not cross
|
## 5. The line this repo must not cross
|
||||||
|
|
||||||
`flex-auth` is the policy decision point. It stays the only one.
|
`access-engine` (currently `flex-auth`) is the policy decision point. It stays
|
||||||
|
the only one.
|
||||||
|
|
||||||
zone-engine is authority over zone **identity and membership**. The **effect**
|
zone-engine is authority over zone **identity and membership**. The **effect**
|
||||||
of a zone on a decision flex-auth renders belongs in a flex-auth policy package,
|
of a zone on a decision `access-engine` renders belongs in an `access-engine`
|
||||||
because flex-auth's decision envelope stamps `matched_policy_version` and
|
policy package, because the decision envelope stamps `matched_policy_version`
|
||||||
`policy_package` — and registry content appears nowhere in that provenance. Put
|
and `policy_package` — and registry content appears nowhere in that provenance.
|
||||||
stance in the registry and two decisions with the same policy version and the
|
Put stance in the registry and two decisions with the same policy version and
|
||||||
same request can differ, with nothing in the audit trail explaining why.
|
the same request can differ, with nothing in the audit trail explaining why.
|
||||||
|
|
||||||
That boundary was drawn by flex-auth on review, against a first draft of ours
|
That boundary was drawn by flex-auth on review, against a first draft of ours
|
||||||
that got it wrong in an instructive way: the original invariant forbade sitting
|
that got it wrong in an instructive way: the original invariant forbade sitting
|
||||||
*synchronously* in a decision path, which is a latency guarantee wearing an
|
*synchronously* in a decision path, which is a latency guarantee wearing an
|
||||||
authority guarantee's clothes. Compiled data that determines an outcome is still
|
authority guarantee's clothes. Compiled data that determines an outcome is still
|
||||||
deciding; it just decided earlier.
|
deciding; it just decided earlier. Statute §6.1 is that sentence, generalized.
|
||||||
|
|
||||||
**Held to, in one line: membership is ours, stance is theirs, and the decision
|
**Held to, in one line: membership is ours, stance is theirs, and the decision
|
||||||
point is neither.**
|
point is neither.**
|
||||||
|
|
||||||
|
A new engine is a PIP unless the statute is amended. We are already that PIP.
|
||||||
|
We will not become a second PDP by growing a convenient live lookup, a cached
|
||||||
|
verdict, or a profile that changes a live effect.
|
||||||
|
|
||||||
## 6. What success looks like from outside
|
## 6. What success looks like from outside
|
||||||
|
|
||||||
These conditions are now met for the adopted v0.1 path:
|
These conditions are met for the adopted v0.1 path:
|
||||||
|
|
||||||
Someone who has never read this repo should be able to:
|
Someone who has never read this repo should be able to:
|
||||||
|
|
||||||
|
|
@ -145,6 +192,11 @@ Someone who has never read this repo should be able to:
|
||||||
If a reader has to come here to understand their own posture, the model has
|
If a reader has to come here to understand their own posture, the model has
|
||||||
failed at being a standard and has succeeded only at being a service.
|
failed at being a standard and has succeeded only at being a service.
|
||||||
|
|
||||||
|
Under the layer model, the same reader should also be able to say: zone
|
||||||
|
*facts* come from this PIP; zone *effect* lives in `access-engine` policy;
|
||||||
|
unreachable-engine *behaviour* is the PEP's declared stance. Three owners,
|
||||||
|
one reconstructable decision.
|
||||||
|
|
||||||
## 7. What would make this repo wrong
|
## 7. What would make this repo wrong
|
||||||
|
|
||||||
Stated up front, because a repo created on a recommendation should say what
|
Stated up front, because a repo created on a recommendation should say what
|
||||||
|
|
@ -152,8 +204,9 @@ would falsify it:
|
||||||
|
|
||||||
- **The exception lifecycle turns out not to need a runtime.** This falsifier
|
- **The exception lifecycle turns out not to need a runtime.** This falsifier
|
||||||
triggered. Reviewed owner records plus decision-time expiry are sufficient.
|
triggered. Reviewed owner records plus decision-time expiry are sufficient.
|
||||||
The honest outcome is canon plus offline conformance tooling, not an engine.
|
The honest outcome is canon plus offline conformance tooling, not a live
|
||||||
Retention is bounded to the proposed-standard reference need in `GOAL.md`.
|
engine. Retention is bounded to the proposed-standard reference need in
|
||||||
|
`GOAL.md`.
|
||||||
- **The zones do not partition the real estate.** If the model needs a residue
|
- **The zones do not partition the real estate.** If the model needs a residue
|
||||||
of special cases to cover today's 27 routing lanes and actor inventory, it is
|
of special cases to cover today's 27 routing lanes and actor inventory, it is
|
||||||
describing an aspiration, not a structure.
|
describing an aspiration, not a structure.
|
||||||
|
|
@ -161,16 +214,27 @@ would falsify it:
|
||||||
reading is the minimum evidence of a model rather than a preference.
|
reading is the minimum evidence of a model rather than a preference.
|
||||||
- **It becomes a second decision point.** The failure would not announce itself;
|
- **It becomes a second decision point.** The failure would not announce itself;
|
||||||
it would arrive as a small convenience — a stance compiled into membership
|
it would arrive as a small convenience — a stance compiled into membership
|
||||||
"just for now".
|
"just for now", a live lookup "just for this consumer", a profile change that
|
||||||
|
alters a live effect with no policy-package revision. Statute §6 is this
|
||||||
|
falsifier, estate-wide.
|
||||||
|
|
||||||
## 8. What this repo deliberately will not become
|
## 8. What this repo deliberately will not become
|
||||||
|
|
||||||
Not a PDP. Not network segmentation — "zone" is overloaded and the routing sense
|
Not a PDP. Not a PEP. Not network segmentation — "zone" is overloaded and the
|
||||||
is someone else's word. Not a placement model: reefs answer *where a thing runs*
|
routing sense is someone else's word. Not a placement model: reefs answer
|
||||||
and are `repo-manager`'s, and the fact that `reef-railiance` caps availability
|
*where a thing runs* and are Railiance's, and the fact that `reef-railiance`
|
||||||
for everything bound to it is a canon composition problem (`NK-WP-0027`), not
|
caps availability for everything bound to it is a canon composition problem
|
||||||
ours. Not an owner of anyone's controls — the controls stay with the repos that
|
(statute §20.3, originally `NK-WP-0027`), not ours. Not an owner of anyone's
|
||||||
enforce them; this model only says where they bite.
|
controls — the controls stay with the repos that enforce them; this model only
|
||||||
|
says where they bite.
|
||||||
|
|
||||||
|
Not a live Engine API unless a later layer-change decision carries the six
|
||||||
|
§10 artifacts and obtains assent from the repositories whose boundaries move.
|
||||||
|
The catalogued offline form is the current Engine, not a temporary embarrassment.
|
||||||
|
|
||||||
|
Not an inventor of the estate request-claim schema. Statute §17 assigns that
|
||||||
|
artifact to Taxonomy. Until it exists, this PIP's resolver output is
|
||||||
|
reference-shaped membership, not a competing claim dialect.
|
||||||
|
|
||||||
## 9. Direction
|
## 9. Direction
|
||||||
|
|
||||||
|
|
@ -185,3 +249,8 @@ and the cheaper answer is a legitimate result, not a disappointment.
|
||||||
That direction is delivered. `ZONE-WP-0002` hardened the offline contracts and
|
That direction is delivered. `ZONE-WP-0002` hardened the offline contracts and
|
||||||
made canon lineage, owner provenance, revision/delta evidence, and exception
|
made canon lineage, owner provenance, revision/delta evidence, and exception
|
||||||
fixtures executable without reopening the runtime decision.
|
fixtures executable without reopening the runtime decision.
|
||||||
|
|
||||||
|
What remains is to live inside the layer the estate has now named: declare the
|
||||||
|
PIP in a machine-readable form, keep the permission freeze, and evolve the
|
||||||
|
reference surface so zone facts can be consumed as claims when Taxonomy
|
||||||
|
publishes the schema — without growing a second decision point to get there.
|
||||||
|
|
|
||||||
83
SCOPE.md
83
SCOPE.md
|
|
@ -8,24 +8,56 @@
|
||||||
|
|
||||||
## One-liner
|
## One-liner
|
||||||
|
|
||||||
`zone-engine` is the retained reference-conformance repository for NetKingdom
|
`zone-engine` is the Engine-layer **PIP** for NetKingdom zone identity and
|
||||||
security-zone membership, admission, owner-provenanced control profiles, and
|
membership, retained as an offline reference-conformance repository. It does
|
||||||
time-boxed exception semantics. It does **not** run an engine or make policy
|
**not** run a live engine, render a policy decision, or cause a protected side
|
||||||
decisions.
|
effect.
|
||||||
|
|
||||||
|
## Layer
|
||||||
|
|
||||||
|
Declared in `INTENT.md` frontmatter, in this repository's own voice:
|
||||||
|
|
||||||
|
| Key | Value |
|
||||||
|
| --- | --- |
|
||||||
|
| Layer | Engine |
|
||||||
|
| Role | PIP |
|
||||||
|
| Statute | `security-layer-model_v0.7` (accepted 2026-08-29) |
|
||||||
|
| Companion | `net-kingdom/SECURITY-COMPANION.md` v0.2 |
|
||||||
|
| Catalogued form | offline reference conformance (2026-08-23 disposition) |
|
||||||
|
| PEP-shaped | no |
|
||||||
|
| Tooling contacts | none |
|
||||||
|
| Conformance | conforming for Tooling contact; the live Engine API is not a missing capability this repository currently owes |
|
||||||
|
|
||||||
|
The machine-readable `layer.yaml` form and a conformance check that fails a
|
||||||
|
new Tooling client or a new decision surface are not yet evidenced here.
|
||||||
|
Until they are, the declaration is the `INTENT.md` frontmatter and the prose
|
||||||
|
in that file.
|
||||||
|
|
||||||
|
`access-engine` (currently `flex-auth`) is the only PDP. Zone stance and
|
||||||
|
failure mode remain owner policy and PEP configuration. This repository
|
||||||
|
projects only explicit versioned owner data and never changes a live effect.
|
||||||
|
|
||||||
## Lifecycle
|
## Lifecycle
|
||||||
|
|
||||||
`ZONE-WP-0001` delivered and proved the model. `ZONE-WP-0002` hardened the
|
`ZONE-WP-0001` delivered and proved the model. `ZONE-WP-0002` hardened the
|
||||||
retained reference boundary. Both are finished with `DoD-Ok`; no runtime is
|
retained reference boundary. Both are finished with `DoD-Ok`; no runtime is
|
||||||
needed and there is no continuing implementation backlog.
|
needed.
|
||||||
|
|
||||||
The repository is retained while `security-zones_v0.1` remains `proposed` in
|
The repository is retained while `security-zones_v0.1` remains `proposed` in
|
||||||
net-kingdom canon, with zone-engine as maintainer of fixtures and reference
|
net-kingdom canon, with zone-engine as maintainer of fixtures and reference
|
||||||
tooling. Retention is not service ownership. A future canon lifecycle change,
|
tooling. Retention is not service ownership. Acceptance of the security layer
|
||||||
an owner-requested conformance revision, or evidence that an adopting control
|
model does not reopen the no-runtime decision; it names the retained form as
|
||||||
cannot enforce the contract at its existing point are the only normal change
|
the Engine/PIP this repository already is.
|
||||||
triggers. Archival remains an attended action once the reference artifacts are
|
|
||||||
durably handed off or no longer needed.
|
Normal change triggers remain: a canon lifecycle or content change, an
|
||||||
|
owner-requested conformance revision, or evidence that an adopting control
|
||||||
|
cannot enforce the contract at its existing point. The layer declaration and
|
||||||
|
the PIP claim-mapping work that follow from v0.7 are owner-driven revisions
|
||||||
|
of that kind. Archival remains an attended action once the reference
|
||||||
|
artifacts are durably handed off or no longer needed.
|
||||||
|
|
||||||
|
A live Engine API, a decision surface, or stance compiled into membership
|
||||||
|
would be a layer change and is out of present scope.
|
||||||
|
|
||||||
## Capability actually present
|
## Capability actually present
|
||||||
|
|
||||||
|
|
@ -59,6 +91,10 @@ ambiguous join, read a live clock, or publish a consumer registry. Its profile
|
||||||
fixture records owner-approved v0.1 behavior; only the referenced owner policy
|
fixture records owner-approved v0.1 behavior; only the referenced owner policy
|
||||||
and PEP configuration can change a live effect.
|
and PEP configuration can change a live effect.
|
||||||
|
|
||||||
|
The resolver output is a reference membership/admission record. It is not yet
|
||||||
|
a statute §17 request-claim. Taxonomy owns that schema and has not published
|
||||||
|
it. This repository must not ship a competing dialect.
|
||||||
|
|
||||||
## Authority boundary
|
## Authority boundary
|
||||||
|
|
||||||
| Concern | Authority | This repository's role |
|
| Concern | Authority | This repository's role |
|
||||||
|
|
@ -67,13 +103,17 @@ and PEP configuration can change a live effect.
|
||||||
| Managed workload tuple and applicability | Repo Manager / owning catalog | Consumes the explicit projection |
|
| Managed workload tuple and applicability | Repo Manager / owning catalog | Consumes the explicit projection |
|
||||||
| Zone ids and admission standard | zone-engine model, published by net-kingdom | Maintains conformance fixtures and lineage |
|
| Zone ids and admission standard | zone-engine model, published by net-kingdom | Maintains conformance fixtures and lineage |
|
||||||
| Canon publication and lifecycle | net-kingdom | Detects change; never promotes by inference |
|
| Canon publication and lifecycle | net-kingdom | Detects change; never promotes by inference |
|
||||||
| Control stance | Owner of the control | Projects only explicit versioned owner data |
|
| Layer model and engine roles | gate-house / net-kingdom canon | Declares Engine/PIP; does not author the statute |
|
||||||
|
| Request-claim schema | Taxonomy (statute §17, unassigned) | Will consume, not invent |
|
||||||
|
| Control stance | Owner of the control; effect in `access-engine` policy | Projects only explicit versioned owner data |
|
||||||
| Failure behavior | Owner of the PEP | Records provenance and semantics only |
|
| Failure behavior | Owner of the PEP | Records provenance and semantics only |
|
||||||
| Authorization effect | Existing PDP or control owner | Makes no decision |
|
| Authorization effect | `access-engine` (currently `flex-auth`) | Makes no decision; supplies PIP facts |
|
||||||
| Exception grant and expiry | Designated control authority and enforcement point | Checks reusable fixtures offline |
|
| Exception grant and expiry | Designated control authority and enforcement point | Checks reusable fixtures offline |
|
||||||
|
| Reef placement vs zone floor | Railiance / canon composition (statute §20.3) | Keeps the axes separate; does not compose them |
|
||||||
|
|
||||||
The invariant remains: **membership is ours; stance is theirs; the decision
|
The invariant remains: **membership is ours; stance is theirs; the decision
|
||||||
point is neither.** `flex-auth` remains the only PDP for decisions it renders.
|
point is neither.** `access-engine` remains the only PDP for decisions it
|
||||||
|
renders.
|
||||||
|
|
||||||
## Deliberately absent
|
## Deliberately absent
|
||||||
|
|
||||||
|
|
@ -81,12 +121,15 @@ There is no:
|
||||||
|
|
||||||
- API, daemon, database, controller, scheduler, watch loop, or reload path;
|
- API, daemon, database, controller, scheduler, watch loop, or reload path;
|
||||||
- synchronous lookup in an authorization or enforcement path;
|
- synchronous lookup in an authorization or enforcement path;
|
||||||
|
- authorization decision surface, cached verdict, or compiled stance;
|
||||||
|
- PEP, unreachable-engine stance map, or protected side effect;
|
||||||
|
- Tooling-layer client (OpenBao, key-cape, or a direct datastore);
|
||||||
- central exception store, grant workflow, clock, or expiry evaluator;
|
- central exception store, grant workflow, clock, or expiry evaluator;
|
||||||
- live policy evaluation or implementation of another repository's control;
|
- live policy evaluation or implementation of another repository's control;
|
||||||
- fleet discovery, reference repair, registry publication, or workload
|
- fleet discovery, reference repair, registry publication, or workload
|
||||||
migration;
|
migration;
|
||||||
- network segmentation, reef placement, tenancy, identity, or secrets service;
|
- network segmentation, reef placement, tenancy, identity, or secrets service;
|
||||||
or
|
- estate request-claim schema, or authority to publish one; or
|
||||||
- authority to publish canon or select a consumer's stance and failure mode.
|
- authority to publish canon or select a consumer's stance and failure mode.
|
||||||
|
|
||||||
Exception expiry remains enforced at decision or enforcement time by each
|
Exception expiry remains enforced at decision or enforcement time by each
|
||||||
|
|
@ -99,16 +142,24 @@ decision point.
|
||||||
- Checking direct declarations or explicit Repo Manager projections offline.
|
- Checking direct declarations or explicit Repo Manager projections offline.
|
||||||
- Verifying a versioned owner profile is total and fully attributed.
|
- Verifying a versioned owner profile is total and fully attributed.
|
||||||
- Testing an owner exception implementation against the lifecycle boundaries.
|
- Testing an owner exception implementation against the lifecycle boundaries.
|
||||||
- Reviewing a net-kingdom canon lifecycle/content change.
|
- Reviewing a net-kingdom canon lifecycle/content change, including the
|
||||||
|
security-layer-model.
|
||||||
|
- Declaring or checking this repository's Engine/PIP conformance.
|
||||||
- Auditing why no zone-engine runtime exists.
|
- Auditing why no zone-engine runtime exists.
|
||||||
|
|
||||||
## Not relevant when
|
## Not relevant when
|
||||||
|
|
||||||
- Determining the published rule: read net-kingdom canon.
|
- Determining the published rule: read net-kingdom canon.
|
||||||
- Asking whether a request is allowed: use `flex-auth` or the owning control.
|
- Asking whether a request is allowed: use `access-engine` or the owning
|
||||||
|
control.
|
||||||
- Discovering or repairing managed workloads: use Repo Manager and the owning
|
- Discovering or repairing managed workloads: use Repo Manager and the owning
|
||||||
catalog.
|
catalog.
|
||||||
- Granting, applying, or expiring a live exception: use the control owner's
|
- Granting, applying, or expiring a live exception: use the control owner's
|
||||||
versioned policy or PEP configuration.
|
versioned policy or PEP configuration.
|
||||||
- Placing a workload, routing a network, managing identity/tenancy, or handling
|
- Placing a workload, routing a network, managing identity/tenancy, or handling
|
||||||
secrets.
|
secrets.
|
||||||
|
- Publishing an unreachable-engine stance, containing a workload, or observing
|
||||||
|
production: those are PEP, actuation, and `kings-guard`, and the last two
|
||||||
|
are held at zero by the statute.
|
||||||
|
- Mapping Railiance `reef-*` onto security zones: statute §20.3 leaves that
|
||||||
|
composition unwritten; guessing it here is out of scope.
|
||||||
|
|
|
||||||
221
history/2026-08-29-security-layer-model-scope-against-intent.md
Normal file
221
history/2026-08-29-security-layer-model-scope-against-intent.md
Normal file
|
|
@ -0,0 +1,221 @@
|
||||||
|
---
|
||||||
|
id: ZONE-REVIEW-2026-08-29-001
|
||||||
|
type: review
|
||||||
|
title: "Scope against intent under NetKingdom security layer model v0.7"
|
||||||
|
status: accepted
|
||||||
|
reviewed: "2026-08-29"
|
||||||
|
reviewer: grok
|
||||||
|
source: operator
|
||||||
|
consumer: zone-engine maintainers, gate-house, access-engine, ops-warden
|
||||||
|
resulting_workplan: ZONE-WP-0003
|
||||||
|
standards:
|
||||||
|
- net-kingdom/canon/standards/security-layer-model_v0.7.md
|
||||||
|
- net-kingdom/SECURITY-COMPANION.md
|
||||||
|
- net-kingdom/canon/standards/security-zones_v0.1.md
|
||||||
|
---
|
||||||
|
|
||||||
|
# Review: scope against intent under security layer model v0.7
|
||||||
|
|
||||||
|
## Demand signal
|
||||||
|
|
||||||
|
The NetKingdom security-layer standard has been finalized as **accepted v0.7**
|
||||||
|
(2026-08-29) and complemented by **working companion v0.2**. Read the latest
|
||||||
|
text, adapt `INTENT.md`, update `SCOPE.md`, assess remaining gaps between
|
||||||
|
intent and current implementation, and open a workplan for the evolution this
|
||||||
|
repository still owes.
|
||||||
|
|
||||||
|
## Consumer purpose
|
||||||
|
|
||||||
|
Maintainers and consuming control owners need to tell, without reconstructing
|
||||||
|
context from the 2026-08-28 gate-house insert:
|
||||||
|
|
||||||
|
- which layer and engine role this repository occupies, in its own voice;
|
||||||
|
- that the 2026-08-23 offline disposition is the catalogued PIP form, not a
|
||||||
|
temporary embarrassment;
|
||||||
|
- that `access-engine` (currently `flex-auth`) remains the only PDP;
|
||||||
|
- which v0.7 obligations this repository already meets, which it still owes,
|
||||||
|
and which it must refuse.
|
||||||
|
|
||||||
|
## Purpose fit
|
||||||
|
|
||||||
|
**Strong fit.** Statute §4 already catalogs `zone-engine` as Engine / PIP for
|
||||||
|
zone identity and membership, "offline reference conformance per its
|
||||||
|
2026-08-23 disposition". Statute §6 generalizes this repository's original
|
||||||
|
INTENT §5. Statute §10 writes the layer-change procedure from this
|
||||||
|
repository's runtime-falsified case. Statute §18 restates the membership /
|
||||||
|
stance split this repository already shipped.
|
||||||
|
|
||||||
|
`ZONE-IN-0001` asked for a layer declaration in this repository's own voice.
|
||||||
|
Companion §2 requires `layer:` and `role:` in `INTENT.md` frontmatter plus
|
||||||
|
prose. That declaration is now written. Remaining work is to make the
|
||||||
|
declaration mechanically checkable and to evolve the reference surface
|
||||||
|
without reversing the no-runtime decision.
|
||||||
|
|
||||||
|
## Evidence reviewed
|
||||||
|
|
||||||
|
- `net-kingdom/canon/standards/security-layer-model_v0.7.md` (accepted; §2–§6,
|
||||||
|
§10, §11, §14, §18, §20.3)
|
||||||
|
- `net-kingdom/SECURITY-COMPANION.md` v0.2 (operative form; §1–§3, §8)
|
||||||
|
- `net-kingdom/canon/standards/security-zones_v0.1.md` (still `proposed`)
|
||||||
|
- `INTENT.md` and `SCOPE.md` before and after this review
|
||||||
|
- `GOAL.md`, `history/2026-08-23-retain-reference-decision.md`,
|
||||||
|
`history/2026-08-23-scope-against-intent.md`
|
||||||
|
- `docs/canon-lineage.yaml`, `tools/resolve_zones.py`,
|
||||||
|
`profiles/netkingdom-build-v0.1.yaml`, `Makefile`
|
||||||
|
- `intakes/intakes.md` `ZONE-IN-0001`
|
||||||
|
- Reference declarations: `ops-warden/layer.yaml`, `kings-guard/layer.yaml`
|
||||||
|
- Prior work: `ZONE-WP-0001` and `ZONE-WP-0002`, both `finished` / `DoD-Ok`
|
||||||
|
|
||||||
|
MCP tools for the State Hub were not exposed in this session. The REST
|
||||||
|
surface at `http://127.0.0.1:8000` answered as primary (`railiance01`).
|
||||||
|
|
||||||
|
## What the standard requires of this repository
|
||||||
|
|
||||||
|
Statute §11: an estate-authored repository declares its layer in its own
|
||||||
|
`INTENT.md`, in a machine-readable form. A catalog row or a review note about
|
||||||
|
us is not a declaration. We **are** in §4, proposed layer Engine, role PIP.
|
||||||
|
|
||||||
|
Companion §2: frontmatter `layer:` plus `role:` for engines, and prose in our
|
||||||
|
own voice.
|
||||||
|
|
||||||
|
Statute §3.3 / §4: we own zone identity and membership as a PIP. A new engine
|
||||||
|
is a PIP unless the statute is amended. Outage of a PIP is input degradation
|
||||||
|
at `access-engine` (§9.3), not a Staff fallback.
|
||||||
|
|
||||||
|
Statute §6 / §18: `access-engine` is the only PDP. Zone stance enters a
|
||||||
|
decision as a claim or a versioned policy rule, never as compiled registry
|
||||||
|
content. Compiled data that determines an outcome is still deciding.
|
||||||
|
|
||||||
|
Statute §10: the 2026-08-23 runtime-falsified cut is a layer change and must
|
||||||
|
carry six artifacts. The procedure was written from this case after the fact;
|
||||||
|
the artifacts are incomplete.
|
||||||
|
|
||||||
|
Statute §5 / §11: no undeclared Tooling contact. We are Engine, not Staff, so
|
||||||
|
the three Staff shapes are not our lane; we still must not hold a Tooling
|
||||||
|
client, and we must record non-Tooling clients so the check is total.
|
||||||
|
|
||||||
|
Companion §5 / statute §6.4: PEP obligations attach to runtimes that cause a
|
||||||
|
protected side effect. This repository does not. No stance map is owed.
|
||||||
|
|
||||||
|
Statute §17: the request-claim schema is Taxonomy's and is unassigned. Until
|
||||||
|
it exists, every engine that invents its own claim shape is the drift §17
|
||||||
|
exists to prevent.
|
||||||
|
|
||||||
|
Statute §20.3: reef-versus-zone composition is unwritten. This repository
|
||||||
|
already recorded that as a canon composition problem and must not guess a
|
||||||
|
mapping.
|
||||||
|
|
||||||
|
Statute §14: as of 2026-08-29 this repository is one of the nine §4
|
||||||
|
repositories that have not declared in their own voice. `ZONE-IN-0001` is
|
||||||
|
that request.
|
||||||
|
|
||||||
|
## Intent-to-scope map (after the 2026-08-29 rewrite)
|
||||||
|
|
||||||
|
| Intent claim | Present scope | Implementation |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Engine / PIP for zone identity and membership | Declared in `INTENT.md` frontmatter and prose | No `layer.yaml`; no conformance check |
|
||||||
|
| Offline reference is the catalogued PIP form | SCOPE names it; retain decision unchanged | Resolver, lineage, fixtures, 29 tests — shipped |
|
||||||
|
| Same inputs, same result | Offline tools are deterministic | `make check` covers resolver, exceptions, tests |
|
||||||
|
| `access-engine` is the only PDP | SCOPE / GOAL name the ruled name; fixtures still say `flex-auth` | No decision surface in this repo |
|
||||||
|
| Stance in policy package or as a claim, never registry | Profile projection is optional, versioned, owner-provenanced | Profile fixture still uses `flex-auth` as the owner identity, which is correct until the rename |
|
||||||
|
| Not PEP-shaped | SCOPE says no stance map | Nothing to publish; do not add one |
|
||||||
|
| No Tooling contact | SCOPE claims none | True of `tools/` (stdlib + PyYAML); not mechanically checked |
|
||||||
|
| Layer change already happened; freeze holds | INTENT states the freeze | §10 artifact set is incomplete |
|
||||||
|
| Exception expiry at the owning control | Offline checker, explicit instant | Shipped in `ZONE-WP-0002` |
|
||||||
|
| Consumers understand posture without reading this repo | Canon + owner declarations | Still true for the adopted v0.1 path |
|
||||||
|
| Request-claim schema | Explicitly out of scope to invent | Resolver emits membership records, not claims |
|
||||||
|
| Reef / zone composition | Out of scope to guess | Unchanged; statute §20.3 agrees |
|
||||||
|
|
||||||
|
## Gaps that are this repository's to close
|
||||||
|
|
||||||
|
These are the relevant remaining requirements. They are owner-driven
|
||||||
|
revisions under the 2026-08-23 retain contract, not a reopening of the
|
||||||
|
runtime.
|
||||||
|
|
||||||
|
### 1. The declaration is prose-plus-frontmatter, not yet a check
|
||||||
|
|
||||||
|
Companion §2 and statute §11 treat `INTENT.md` frontmatter as the declaration
|
||||||
|
surface, and they also offer `layer.yaml` plus a conformance script as the
|
||||||
|
estate working reference. `ops-warden` and `kings-guard` already ship that
|
||||||
|
shape. Without it, a new OpenBao client or a new `/authorize`-shaped helper
|
||||||
|
would land as a small convenience and nothing in `make check` would fail.
|
||||||
|
|
||||||
|
**Necessary:** a `layer.yaml` in the kings-guard no-contact shape, with
|
||||||
|
`layer: engine`, `role: pip`, empty `tooling_contacts`, recorded non-Tooling
|
||||||
|
clients, no `pep_stance` path; plus a checker that fails undeclared Tooling
|
||||||
|
imports and any authorization decision surface.
|
||||||
|
|
||||||
|
### 2. `ZONE-IN-0001` is still open
|
||||||
|
|
||||||
|
The intake asked for a declaration in this repository's own voice, or a
|
||||||
|
contest. The declaration is now written and does not contest the proposed
|
||||||
|
Engine layer. The intake should close against that answer and against
|
||||||
|
`ZONE-WP-0003` for the mechanical remainder. `gate-house` should be told so
|
||||||
|
statute §14 stops counting this repository among the silent nine.
|
||||||
|
|
||||||
|
### 3. Statute §10 artifacts for the 2026-08-23 cut are incomplete
|
||||||
|
|
||||||
|
The layer-change procedure requires: before/after `INTENT.md`, client
|
||||||
|
inventory, gap inventory, assent list, state-migration decision, and
|
||||||
|
permission freeze. The retain decision covers state migration. The 2026-08-29
|
||||||
|
`INTENT.md` is the after-declaration. Client inventory, gap inventory, assent
|
||||||
|
list, and an explicit freeze record are not yet written as one set.
|
||||||
|
|
||||||
|
**Necessary:** a short retrospective note, not a new runtime. The freeze is
|
||||||
|
the checkable piece: no live API, no decision surface, no compiled stance.
|
||||||
|
|
||||||
|
### 4. Consumer-facing naming still says only `flex-auth`
|
||||||
|
|
||||||
|
`INTENT.md`, `SCOPE.md`, and `GOAL.md` now use `access-engine` as the ruled
|
||||||
|
name and `flex-auth` as the current repository identity. `README.md` and
|
||||||
|
older evidence still do not. Fixtures that pin the actual flex-auth
|
||||||
|
declaration must keep that identity until the governed rename lands — they
|
||||||
|
are evidence, not vocabulary.
|
||||||
|
|
||||||
|
**Necessary:** `README.md` naming; leave fixture owner ids alone.
|
||||||
|
|
||||||
|
### 5. PIP output is membership, not a claim
|
||||||
|
|
||||||
|
Statute §18 says zone facts enter a decision as a claim or a policy rule.
|
||||||
|
The resolver emits a canonical membership/admission record. That is the
|
||||||
|
right fact set and the wrong envelope, and inventing the envelope here would
|
||||||
|
violate statute §17.
|
||||||
|
|
||||||
|
**Necessary:** a short PIP claim-boundary note that maps current resolver
|
||||||
|
fields onto the facts a future claim must carry, marks the mapping as a
|
||||||
|
contribution to Taxonomy rather than a schema, and forbids a competing
|
||||||
|
dialect. Do not wait by growing a live API.
|
||||||
|
|
||||||
|
## Gaps that are not this repository's to close
|
||||||
|
|
||||||
|
| Gap | Owner | Why not here |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| Live Engine API / daemon | — | Retain decision forbids it; catalog records the offline form; §10 freeze |
|
||||||
|
| Compiling stance into registry content | `access-engine` policy packages | Original invariant; statute §6.1 / §18 |
|
||||||
|
| Registry-snapshot digest in decision provenance | `access-engine` (self-declared in §13) | A PDP provenance gap, not a PIP one |
|
||||||
|
| Request-claim schema | Taxonomy (§17, unassigned) | Inventing it here is the defect §17 exists to prevent |
|
||||||
|
| PEP unreachable-engine stance maps | PEP-shaped consumers; §13.1 register | We cause no protected side effect |
|
||||||
|
| Reef / zone composition | `railiance-master` + net-kingdom canon (§20.3) | Placement is not posture |
|
||||||
|
| Observation in production | `kings-guard`; currently unstaffed | Statute §2 / §12; do not cite it |
|
||||||
|
| Actuation / containment | Engine concept held at zero (§9.2) | Not ours to own or to assume |
|
||||||
|
| `flex-auth` → `access-engine` repository rename | `access-engine` governed migration | Touches this repo's prose later; not a zone-engine workplan |
|
||||||
|
| `security-zones_v0.1` remaining `proposed` | net-kingdom | Lineage already pins it; do not promote by inference |
|
||||||
|
| Estate-wide reference migration | Workload and catalog owners | `ZONE-WP-0002` already excluded this |
|
||||||
|
|
||||||
|
## Recommendation
|
||||||
|
|
||||||
|
Keep the repository as the catalogued offline PIP. Declare, check, and freeze.
|
||||||
|
Do not grow a service to look more like the word "engine". Close `ZONE-IN-0001`
|
||||||
|
on the declaration already written. Open `ZONE-WP-0003` for the mechanical
|
||||||
|
and documentary remainder only.
|
||||||
|
|
||||||
|
## Disposition of `ZONE-IN-0001`
|
||||||
|
|
||||||
|
**Assent to the proposed layer, with a form clarification rather than a
|
||||||
|
contest.** Engine is correct. PIP is the role the catalog already recorded.
|
||||||
|
The 2026-08-23 offline disposition is the current surface, not a decline of
|
||||||
|
the layer. Contesting would have been appropriate if the catalog had required
|
||||||
|
a live API; it does not.
|
||||||
|
|
||||||
|
Closed against the 2026-08-29 `INTENT.md` declaration. Mechanical remainder
|
||||||
|
is `ZONE-WP-0003`.
|
||||||
|
|
@ -7,7 +7,9 @@ id: ZONE-IN-0001
|
||||||
kind: intake
|
kind: intake
|
||||||
title: 'Declaration requested: state this repository''s layer in INTENT.md (security
|
title: 'Declaration requested: state this repository''s layer in INTENT.md (security
|
||||||
layer model §11)'
|
layer model §11)'
|
||||||
status: open
|
status: closed
|
||||||
|
outcome: absorbed
|
||||||
|
promoted_to: ZONE-WP-0003
|
||||||
origin: cross-repo
|
origin: cross-repo
|
||||||
origin_ref: net-kingdom security-layer-model_v0.4 §11
|
origin_ref: net-kingdom security-layer-model_v0.4 §11
|
||||||
priority: low
|
priority: low
|
||||||
|
|
@ -34,5 +36,15 @@ description: 'A conformance sweep on 2026-08-28 found this repository has no lay
|
||||||
repository actually does, that is more useful to us than a label added to close
|
repository actually does, that is more useful to us than a label added to close
|
||||||
a checkbox. Standard: net-kingdom/canon/standards/security-layer-model_v0.4.md.'
|
a checkbox. Standard: net-kingdom/canon/standards/security-layer-model_v0.4.md.'
|
||||||
created: '2026-08-28T21:02:13.994597Z'
|
created: '2026-08-28T21:02:13.994597Z'
|
||||||
updated: '2026-08-28T21:02:13.994597Z'
|
updated: '2026-08-29'
|
||||||
|
closed: '2026-08-29'
|
||||||
|
resolution: >-
|
||||||
|
Assent to the proposed Engine layer, with PIP as the role the v0.7 catalog
|
||||||
|
already recorded. Declaration is in INTENT.md frontmatter (layer: Engine,
|
||||||
|
role: PIP) and prose, against security-layer-model_v0.7 and companion v0.2,
|
||||||
|
in this repository's own voice. The 2026-08-23 offline reference form is the
|
||||||
|
catalogued PIP surface, not a contest of the layer. Mechanical remainder
|
||||||
|
(layer.yaml, conformance check, §10 freeze record, claim-boundary note) is
|
||||||
|
ZONE-WP-0003. Full review:
|
||||||
|
history/2026-08-29-security-layer-model-scope-against-intent.md.
|
||||||
```
|
```
|
||||||
|
|
|
||||||
250
workplans/ZONE-WP-0003-security-layer-model-alignment.md
Normal file
250
workplans/ZONE-WP-0003-security-layer-model-alignment.md
Normal file
|
|
@ -0,0 +1,250 @@
|
||||||
|
---
|
||||||
|
id: ZONE-WP-0003
|
||||||
|
type: workplan
|
||||||
|
title: "Declare Engine/PIP and freeze the offline zone-membership surface"
|
||||||
|
domain: infotech
|
||||||
|
repo: zone-engine
|
||||||
|
status: ready
|
||||||
|
owner: zone-engine
|
||||||
|
assignee: grok
|
||||||
|
lane: yellow
|
||||||
|
topic_slug: netkingdom
|
||||||
|
planning_priority: P1
|
||||||
|
created: "2026-08-29"
|
||||||
|
updated: "2026-08-29"
|
||||||
|
origin: "history/2026-08-29-security-layer-model-scope-against-intent.md"
|
||||||
|
context_paths:
|
||||||
|
- "GOAL.md"
|
||||||
|
- "INTENT.md"
|
||||||
|
- "SCOPE.md"
|
||||||
|
- "README.md"
|
||||||
|
- "intakes/intakes.md"
|
||||||
|
- "history/2026-08-23-retain-reference-decision.md"
|
||||||
|
- "history/2026-08-29-security-layer-model-scope-against-intent.md"
|
||||||
|
quality_dor: DoR-Ok
|
||||||
|
quality_dor_at: "2026-08-29"
|
||||||
|
quality_dor_by: grok
|
||||||
|
quality_dor_note: "Gaps are evidenced against security-layer-model v0.7, companion v0.2, and the shipped offline resolver; owners, stop conditions, and the no-runtime freeze are explicit."
|
||||||
|
---
|
||||||
|
|
||||||
|
# ZONE-WP-0003 — Declare Engine/PIP and freeze the offline zone-membership surface
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
Make this repository a conforming Engine-layer PIP under NetKingdom Security
|
||||||
|
Layer Model v0.7 without reversing the 2026-08-23 no-runtime decision. Declare
|
||||||
|
the layer in a machine-readable form, close the declaration intake, record the
|
||||||
|
already-completed layer cut, and map current membership output onto the facts
|
||||||
|
a future request-claim must carry.
|
||||||
|
|
||||||
|
Source review: `history/2026-08-29-security-layer-model-scope-against-intent.md`.
|
||||||
|
Statute: `net-kingdom/canon/standards/security-layer-model_v0.7.md`.
|
||||||
|
Companion: `net-kingdom/SECURITY-COMPANION.md` v0.2.
|
||||||
|
|
||||||
|
`INTENT.md` already declares `layer: Engine` and `role: PIP` in this
|
||||||
|
repository's own voice. This workplan makes that declaration checkable and
|
||||||
|
closes the remaining documentary gaps. It does not add a live API.
|
||||||
|
|
||||||
|
## Why these gaps are the relevant ones
|
||||||
|
|
||||||
|
| Priority | Gap | Why address it here |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| P0 | No `layer.yaml` or conformance check | Statute §11 is mechanical; a new Tooling client or decision surface would land as the small convenience §6 warns about |
|
||||||
|
| P0 | `ZONE-IN-0001` still open after the declaration | gate-house asked for our voice; §14 still counts us among the silent nine |
|
||||||
|
| P1 | Statute §10 artifacts for the 2026-08-23 cut are incomplete | The procedure was written from this case; the freeze is the checkable piece |
|
||||||
|
| P1 | `README.md` still names only `flex-auth` | Consumer-facing docs must use the ruled PDP name |
|
||||||
|
| P1 | Resolver output is membership, not a claim | Statute §18 wants claims; §17 forbids inventing the schema here |
|
||||||
|
|
||||||
|
A live Engine API, a PEP stance map, compiled stance, reef/zone composition,
|
||||||
|
and the `flex-auth` repository rename are intentionally excluded.
|
||||||
|
|
||||||
|
## Authority and dependencies
|
||||||
|
|
||||||
|
- **gate-house / net-kingdom** own the statute and the §4 catalog. This plan
|
||||||
|
declares into that catalog; it does not edit it.
|
||||||
|
- **`access-engine` (currently `flex-auth`)** owns the PDP, policy packages,
|
||||||
|
and the governed rename. This plan uses the ruled name in prose and leaves
|
||||||
|
fixture owner identities as `flex-auth` until that rename lands.
|
||||||
|
- **Taxonomy** owns the request-claim schema (statute §17, unassigned). This
|
||||||
|
plan offers a field mapping, not a schema.
|
||||||
|
- **zone-engine** owns the declaration, the conformance check, the freeze
|
||||||
|
record, and the PIP mapping note.
|
||||||
|
- **Operator action** is not required. No archive, rename, or service
|
||||||
|
deployment is in this plan.
|
||||||
|
|
||||||
|
## Boundaries
|
||||||
|
|
||||||
|
- Do not add an API, daemon, database, controller, scheduler, or reload path.
|
||||||
|
- Do not expose an authorization decision surface or cache a verdict.
|
||||||
|
- Do not compile stance into membership or change a live effect from a local
|
||||||
|
profile edit.
|
||||||
|
- Do not publish a PEP stance map; this repository is not PEP-shaped.
|
||||||
|
- Do not invent the estate request-claim schema.
|
||||||
|
- Do not map `reef-*` onto security zones.
|
||||||
|
- Do not treat observation-in-production or automatic containment as available.
|
||||||
|
- Do not fold `ZONE-WP-0001` or `ZONE-WP-0002` back open.
|
||||||
|
- Leave fixture `policy_owner` / source identities as the actual repository
|
||||||
|
names they pin.
|
||||||
|
|
||||||
|
## T01 - Machine-readable layer declaration and conformance check
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: ZONE-WP-0003-T01
|
||||||
|
status: todo
|
||||||
|
priority: high
|
||||||
|
```
|
||||||
|
|
||||||
|
Add `layer.yaml` in the kings-guard no-contact shape, pointing at security
|
||||||
|
layer model v0.7:
|
||||||
|
|
||||||
|
- `layer: engine`
|
||||||
|
- `role: pip`
|
||||||
|
- `tooling_contacts: []`
|
||||||
|
- `non_tooling_clients` lists any State Hub / work-record client, recorded
|
||||||
|
as not-catalogued
|
||||||
|
- no `pep_stance` path
|
||||||
|
- catalog note: §4 Engine / PIP; offline reference conformance per the
|
||||||
|
2026-08-23 disposition
|
||||||
|
|
||||||
|
Add `tools/check_layer_conformance.py` and a unit test. The check must fail
|
||||||
|
if:
|
||||||
|
|
||||||
|
- `layer.yaml` is missing, unparseable, or disagrees with `INTENT.md`
|
||||||
|
frontmatter;
|
||||||
|
- a Tooling-layer client import appears under `tools/` (OpenBao/Vault,
|
||||||
|
cluster, direct datastore);
|
||||||
|
- a new HTTP authorization decision surface appears.
|
||||||
|
|
||||||
|
Wire it into `make check`. Review dates, if any, are reported, never used as
|
||||||
|
a calendar-day build failure.
|
||||||
|
|
||||||
|
**Done when:** `layer.yaml` is committed, agrees with `INTENT.md`, `make check`
|
||||||
|
covers it, and a reviewer can see there are no Tooling contacts, no PEP
|
||||||
|
claim, and no decision surface.
|
||||||
|
|
||||||
|
## T02 - Close ZONE-IN-0001 and notify gate-house
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: ZONE-WP-0003-T02
|
||||||
|
status: todo
|
||||||
|
priority: high
|
||||||
|
```
|
||||||
|
|
||||||
|
Close `ZONE-IN-0001` in `intakes/intakes.md` with outcome `absorbed` /
|
||||||
|
promoted to this workplan, recording that the proposed Engine layer is
|
||||||
|
assented in this repository's own voice and that the offline PIP form is the
|
||||||
|
catalogued surface, not a contest.
|
||||||
|
|
||||||
|
Notify `gate-house` (State Hub message or equivalent durable notice) that
|
||||||
|
zone-engine has declared Engine / PIP under v0.7 so statute §14 can stop
|
||||||
|
counting this repository among the undeclared nine.
|
||||||
|
|
||||||
|
**Done when:** the intake file is closed with a resolution that points at
|
||||||
|
`INTENT.md` and this workplan, and the notice to `gate-house` exists.
|
||||||
|
|
||||||
|
## T03 - Record the §10 artifacts for the 2026-08-23 layer cut
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: ZONE-WP-0003-T03
|
||||||
|
status: todo
|
||||||
|
priority: medium
|
||||||
|
```
|
||||||
|
|
||||||
|
Write a short retrospective under `history/` (or a `docs/` note cited from
|
||||||
|
`INTENT.md`) that gathers the six statute §10 artifacts for the already
|
||||||
|
completed cut:
|
||||||
|
|
||||||
|
| Artifact | Source |
|
||||||
|
| --- | --- |
|
||||||
|
| before/after `INTENT.md` | 2026-08-23 retain text vs 2026-08-29 declaration |
|
||||||
|
| client inventory | none against Tooling; offline Python tools only |
|
||||||
|
| gap inventory | none as §5.3 contacts; live Engine API is not a gap this repo currently owes |
|
||||||
|
| assent list | flex-auth / ops-warden adoption already evidenced; no new boundary moves |
|
||||||
|
| state-migration decision | `history/2026-08-23-retain-reference-decision.md` |
|
||||||
|
| permission freeze | no live API, no decision surface, no compiled stance until a later cut carries its own six artifacts |
|
||||||
|
|
||||||
|
**Done when:** a reviewer can find all six artifacts without reconstructing
|
||||||
|
them from workplan history, and `INTENT.md` or `SCOPE.md` cites the note.
|
||||||
|
|
||||||
|
## T04 - Align remaining consumer-facing naming
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: ZONE-WP-0003-T04
|
||||||
|
status: todo
|
||||||
|
priority: medium
|
||||||
|
```
|
||||||
|
|
||||||
|
Update `README.md` so a first-time reader sees Engine / PIP, offline
|
||||||
|
reference, and `access-engine` as the ruled PDP name (currently `flex-auth`).
|
||||||
|
Do not rewrite historical evidence, workplan files, or fixture owner
|
||||||
|
identities.
|
||||||
|
|
||||||
|
Confirm `GOAL.md` invariants already match; only patch if T01–T03 drift them.
|
||||||
|
|
||||||
|
**Done when:** `README.md`, `INTENT.md`, `SCOPE.md`, and `GOAL.md` agree on
|
||||||
|
layer, role, and PDP name, and `git grep access-engine README.md INTENT.md
|
||||||
|
SCOPE.md GOAL.md` is the consumer-facing surface.
|
||||||
|
|
||||||
|
## T05 - PIP claim-boundary note, without a schema
|
||||||
|
|
||||||
|
```task
|
||||||
|
id: ZONE-WP-0003-T05
|
||||||
|
status: todo
|
||||||
|
priority: medium
|
||||||
|
```
|
||||||
|
|
||||||
|
Write `docs/pip-claim-boundary.md` that:
|
||||||
|
|
||||||
|
1. lists the facts this PIP owns today (authoritative identity, declared and
|
||||||
|
effective zone, admission result and reason, membership revision, source
|
||||||
|
and source revision);
|
||||||
|
2. maps those fields onto what a future statute §17 request-claim must carry
|
||||||
|
(issuer, freshness, zone membership — not stance, not failure mode);
|
||||||
|
3. states that stance and failure mode remain owner policy and PEP
|
||||||
|
configuration, consumed by `access-engine` as a claim or a versioned rule
|
||||||
|
(statute §18);
|
||||||
|
4. marks the mapping as a contribution to Taxonomy, not a published schema;
|
||||||
|
5. forbids a competing claim dialect and forbids compiling those facts into
|
||||||
|
registry content that determines an outcome.
|
||||||
|
|
||||||
|
Offer the note to `gate-house` / `net-kingdom` and to `access-engine`. Do not
|
||||||
|
wait on their assent to keep the freeze.
|
||||||
|
|
||||||
|
**Done when:** the note is cited from `SCOPE.md`, tests still pass unchanged,
|
||||||
|
and no new wire format has shipped.
|
||||||
|
|
||||||
|
## Acceptance criteria
|
||||||
|
|
||||||
|
- [ ] `layer.yaml` declares Engine / PIP, no Tooling contacts, no PEP map.
|
||||||
|
- [ ] `make check` fails a new undeclared Tooling client or decision surface.
|
||||||
|
- [ ] `ZONE-IN-0001` is closed on the own-voice declaration.
|
||||||
|
- [ ] `gate-house` has been notified.
|
||||||
|
- [ ] Statute §10 artifacts for the 2026-08-23 cut are gathered in one place.
|
||||||
|
- [ ] Consumer-facing docs use `access-engine` as the ruled PDP name.
|
||||||
|
- [ ] PIP facts are mapped for a future claim schema without shipping one.
|
||||||
|
- [ ] No live API, daemon, decision surface, or compiled stance was added.
|
||||||
|
|
||||||
|
## Out of scope
|
||||||
|
|
||||||
|
- A zone-engine API, daemon, database, controller, scheduler, or synchronous
|
||||||
|
lookup.
|
||||||
|
- Publishing a PEP unreachable-engine stance map.
|
||||||
|
- Compiling stance into registry content or changing owner policy.
|
||||||
|
- Inventing or publishing the estate request-claim schema.
|
||||||
|
- Mapping Railiance reefs onto security zones.
|
||||||
|
- The `flex-auth` → `access-engine` repository rename.
|
||||||
|
- Promoting `security-zones_v0.1` out of `proposed`.
|
||||||
|
- Archiving or renaming this Forgejo repository.
|
||||||
|
- Estate-wide reference migration of unresolved catalog entries.
|
||||||
|
|
||||||
|
## Stop conditions
|
||||||
|
|
||||||
|
Stop and return to the relevant owner if implementation would require any of
|
||||||
|
the following:
|
||||||
|
|
||||||
|
- adding zone-engine to a live authorization or enforcement path;
|
||||||
|
- making a local profile authoritative over an owner policy package;
|
||||||
|
- inventing a claim schema and presenting it as estate canon;
|
||||||
|
- cataloguing this repository as PEP-shaped;
|
||||||
|
- reversing the 2026-08-23 retain / no-runtime decision without a new §10
|
||||||
|
layer-change record and assent from the repositories whose boundaries move.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue