source: repo-manager reason: deterministic projection registration Assistant: claude-code Assistant-Model: opus Assistant-Process: 425128@bnt-lap001 Assistant-Session: f5944d8b-dac4-4e1a-87eb-8b3d8f314a63
185 lines
8.3 KiB
Markdown
185 lines
8.3 KiB
Markdown
---
|
||
id: GH-WP-0003
|
||
type: workplan
|
||
title: "Security layer model v0.8 amendment set"
|
||
domain: infotech
|
||
repo: gate-house
|
||
status: active
|
||
owner: codex
|
||
topic_slug: infotech
|
||
created: "2026-09-05"
|
||
updated: "2026-09-05"
|
||
state_hub_workstream_id: "a331dc88-c9bc-5d2a-9ff1-2aa7e837c3bb"
|
||
---
|
||
|
||
# Security layer model v0.8 amendment set
|
||
|
||
## Goal
|
||
|
||
Land the queued amendments to security-layer-model as v0.8: the §9.7.3 consume-ordering protocol clarification, the §11 emission-guarantee declaration check, the §13/§13.1 register disposition against maturity-engine, the §9.5 posture/maturity recomputability boundary, and the GH-DEC-2026-005 split-validation doctrine. Each is currently doctrine held in a gate-house contract or decision rather than in the accepted statute.
|
||
|
||
**Normative text for A1–A6 is drafted at
|
||
`docs/amendments/v0.8-amendment-set.md`.** That file is the reviewable unit: each
|
||
amendment carries its own wording, defect statement, and authority, so it can be
|
||
argued before anything touches a cut document. T06 assembles from it.
|
||
|
||
## Why now
|
||
|
||
`security-layer-model_v0.7.md` is accepted and must not be patched in place. Since
|
||
its acceptance, five separate rulings have been made that belong in the statute and
|
||
are currently held in gate-house contracts, decision records, or a reply in another
|
||
repository's inbox. Each was correctly kept out of v0.7; together they are now a
|
||
version.
|
||
|
||
The risk of leaving them scattered is not that any one is wrong — each was argued
|
||
where it was made. It is that a reader of the accepted statute gets an answer that
|
||
the estate no longer holds, and that the register sections (§13, §13.1) are
|
||
accumulating rows in a document that four repositories have said should be a
|
||
pointer.
|
||
|
||
Gate House authors the amendment set. `net-kingdom` publishes. Nothing here edits
|
||
v0.7.
|
||
|
||
```task
|
||
id: GH-WP-0003-T01
|
||
status: done
|
||
priority: high
|
||
state_hub_task_id: "330d9739-f172-536d-82f6-74eec03902e0"
|
||
```
|
||
|
||
**§9.7.3 — consume ordering.** v0.7 reads as if the protected action must precede
|
||
the consume call. `GH-DEC-2026-003` and `docs/contracts/approval-consumption.md`
|
||
establish the opposite: the PEP MUST obtain a successful consume before the side
|
||
effect, because act-then-consume lets CAS prevent only the second *record* and not
|
||
the second *side effect*. Carry the clarification into §9.7.3 without retracting the
|
||
forensic claim that consumption MUST NOT be inferred from a decision record.
|
||
|
||
```task
|
||
id: GH-WP-0003-T02
|
||
status: done
|
||
priority: high
|
||
state_hub_task_id: "fe278b70-8c05-539c-9f41-4019c3c35520"
|
||
```
|
||
|
||
**§11 — emission-guarantee declaration check.** Add the conformance check drafted as
|
||
the last section of `docs/contracts/approval-emission-detection.md`: a load-bearing
|
||
evidence source declares a local outbox plus heartbeat-or-reconciliation; an
|
||
attributive non-atomic source declares the trade and does not claim completeness.
|
||
This exists so the next engine catalogued as an evidence source cannot reintroduce
|
||
the `GH-IN-0001` gap silently.
|
||
|
||
```task
|
||
id: GH-WP-0003-T03
|
||
status: done
|
||
priority: high
|
||
state_hub_task_id: "6d5efa1a-54d9-5995-bfac-d2a9f5291469"
|
||
```
|
||
|
||
**§13 and §13.1 — register disposition.** `maturity-engine` (MAT-WP-0001) holds the
|
||
§13 gap-register snapshot and the §13.1 stance-map inventory as queryable data, with
|
||
`ASM-0`…`ASM-6` registered as data owned by gate-house and `pep-stance-publication`
|
||
owned by ops-warden. Four repositories have offered §13.1 rows —
|
||
`user-engine/pep-stance.yaml`, `tenant-engine/pep-stance.yaml`, ops-warden published,
|
||
ops-mason unpublished.
|
||
|
||
Decide whether §13 becomes a pointer to `maturity-engine` or stays a table. The
|
||
argument for the pointer is that a hand-maintained table in a statute is a register
|
||
that drifts, and that transcribing rows is exactly the manual step the engine exists
|
||
to remove. The argument against is that a statute must be readable without a live
|
||
query. Both are real; settle it as a decision record rather than by editing.
|
||
|
||
Settled as `GH-DEC-2026-006`: the registers become pointers, and not before
|
||
`maturity-engine` publishes a committed, versioned export readable without a live
|
||
query. Publication is the precondition, not the follow-up. Until it lands the tables
|
||
stay and rows are transcribed, so the four outstanding stance-map offers are
|
||
inventoried in v0.8 either way — `user-engine`, `tenant-engine`, `ops-warden`
|
||
(published) and `ops-mason` (unpublished).
|
||
|
||
```task
|
||
id: GH-WP-0003-T04
|
||
status: done
|
||
priority: medium
|
||
state_hub_task_id: "89ffd56e-5abf-5003-889e-1d00c3453b23"
|
||
```
|
||
|
||
**§9.5 — the posture/maturity boundary.** `kings-guard` (KG-DEC-2026-002,
|
||
`kings-guard/docs/PostureMaturityBoundary.md`) argues that the discriminator is
|
||
recomputability, not volatility: given the same criteria and the same evidence, if
|
||
you MUST get the same answer it is maturity and belongs in an engine; if you CANNOT
|
||
promise the same answer it is posture and belongs in Staff. The argument is that
|
||
volatility describes the two things without partitioning them, and every case it does
|
||
not obviously cover becomes an argument at exactly the boundary §6 says must not be
|
||
open to argument.
|
||
|
||
Disposed as `GH-DEC-2026-007`: **adopted**, with one added clause. Recomputability
|
||
is assessed over the stated criteria, so a criterion that dereferences a judgment
|
||
("level 2 iff the reviewer marked it adequate") is deterministic in form and
|
||
inferential in substance. A criterion MUST therefore bottom out in evidence about the
|
||
subject, not in another party's conclusion about it. All three kings-guard
|
||
consequences are carried, including the constraint they volunteered against
|
||
themselves — capability readiness MUST NOT be an input to posture — and their honest
|
||
limit, that "the same evidence" is undefined until §17, is recorded in the statute
|
||
beside the test rather than left in the commentary.
|
||
|
||
```task
|
||
id: GH-WP-0003-T05
|
||
status: done
|
||
priority: medium
|
||
state_hub_task_id: "087d3f67-66ef-59a3-8d4b-26ebfa5b2d00"
|
||
```
|
||
|
||
**Split validation as statute.** `GH-DEC-2026-005` states that a PEP validates each
|
||
artifact against the layer that owns its data and that a PIP MUST NOT republish the
|
||
PDP's decision. That is a general property of the layer model, not a fact about the
|
||
approval path, and it currently lives only in a decision record and a contract.
|
||
Place it in the statute where §8's three-way split is stated.
|
||
|
||
```task
|
||
id: GH-WP-0003-T06
|
||
status: todo
|
||
priority: medium
|
||
state_hub_task_id: "ecc01a7b-22df-5a9c-a29b-eb7559713ca7"
|
||
```
|
||
|
||
**Assemble, circulate, publish.** Cut `security-layer-model_v0.8.md`, circulate for
|
||
assent as v0.6 and v0.7 were, and hand to `net-kingdom` for publication. Record
|
||
dispositions of the returned findings. v0.7 stays accepted and unedited until v0.8
|
||
is accepted in its place.
|
||
|
||
```task
|
||
id: GH-WP-0003-T07
|
||
status: done
|
||
priority: low
|
||
state_hub_task_id: "d68be07d-2528-52a2-8de5-909890eb7758"
|
||
```
|
||
|
||
**§17 — refresh the ownership paragraph.** §17 closes with "Ownership is proposed,
|
||
not assigned… Neither has assented." `GH-DEC-2026-004` assigned the split and both
|
||
`info-tech-canon` (`ITC-WP-0018`, `ITC-EMISSION-CADENCE 0.1` in canon 0.7.0) and
|
||
`net-kingdom` (`NK-WP-0035`, `emission-cadence-security-profile_v0.1.md`) have
|
||
accepted in their own voice. Replace the paragraph with the settled ownership and
|
||
cite the decision; keep §17's drafter credit to `kings-guard`.
|
||
|
||
Surfaced by `docs/conformance/2026-09-06-v06-findings-audit.md`, which also confirms
|
||
that all fifteen v0.6 review findings are dispositioned in v0.7 — this is the one
|
||
paragraph a later decision made stale, not a missed finding.
|
||
|
||
```task
|
||
id: GH-WP-0003-T08
|
||
status: done
|
||
priority: medium
|
||
state_hub_task_id: "ce6a814f-f854-52af-8e3c-205bf240f487"
|
||
```
|
||
|
||
**Derived summaries must be marked (A7).** Four instances in one week, in four
|
||
repositories, of a repository acting on a derived summary rather than the
|
||
authoritative body — a stale revisit trigger here, a change log read for section text
|
||
here, a dual-control rule written against an assumed schema in `access-engine`, a
|
||
fixture read for contract prose in `secrets-engine`. Proposed by `approval-engine` on
|
||
the observation that at four instances it is a property of how the estate publishes
|
||
rather than four separate lapses: authoritative bodies with derived summaries beside
|
||
them and no staleness marker on the derivatives.
|
||
|
||
Drafted as A7 — a §11 marking obligation on the publisher and a §12 paragraph on the
|
||
consumer. The limit is stated in the draft: marking makes staleness visible, it does
|
||
not detect a marked derivative that is still wrong.
|