From def0af2ce73d2317ebc5efbf05862ff5c1dd0264 Mon Sep 17 00:00:00 2001 From: tegwick Date: Mon, 21 Sep 2026 02:14:48 +0200 Subject: [PATCH] =?UTF-8?q?Rule=20the=20six=20=C2=A711=20declaration=20que?= =?UTF-8?q?stions,=20and=20hold=20the=20v0.8=20flip=20on=20them?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit access-engine's boundaries review (FLEX-WP-0030, B1 corrected 2026-09-21) and the custodian's estate-wide sweep put six §11 interpretation questions here. All six are questions about what §11 means, and gate-house authors §11. GH-DEC-2026-017 — the layer declaration. INTENT.md governs and a sidecar is a derived artifact that must agree; a disagreement between the two forms is a finding in its own right and is reported rather than resolved away. The §3 vocabulary is case-insensitive for comparison and closed, and it has FOUR tokens: access-engine's validator omits Taxonomy, so railiance-master is conforming and the validator carries the defect. informed-decision's `surface` is not a layer; its own file already reasons to Staff. Both off-vocabulary repositories are outside §4 and §11 does not grade them. A declaration carries no standard version — and that field is the reference form's, not one repository's habit. gate-house declares Staff in INTENT.md frontmatter in this commit; the prose line was never a declaration under the paragraph this repository wrote. GH-DEC-2026-018 — access-engine is a source of evidence for the decision record, against its own interest and as it asked. Custody is never source: collapse them and §9.6 is incoherent. It owes a declaration, has none, and is non-conforming on §11 today; the right register is a declared gap with a date. The class inventory stays access-engine's to publish — §11's prohibition on inferring class binds a ruling as hard as a runner. Under it, §11 names a §4 property §4 does not carry, which is the finding under the finding, and the clause is gate-house's own A2 from twelve days ago. GH-DEC-2026-019 — the v0.8 acceptance flip stays held and these join the existing hold rather than a follow-on amendment. The round closed by finding that every substantive finding against v0.8 was a correct rule satisfiable without doing what it requires; §11 is now that failure pointed at §11. Bounded by three stated closing conditions. v0.7 stays accepted and in force, so the hold costs documentation currency and nothing else — stated as the reason it is affordable, not as an argument that holds are free. A candidate property is recorded and deliberately not numbered A-18: a conformance check each repository runs only against its own files cannot establish an estate property. One instance, and no repository bearing a cost under it has argued it yet. Amendments A9–A13 drafted; GH-IN-0003 and GH-WP-0004 carry the round. 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 | 38 + decisions/decisions.md | 717 ++++++++++++++++++ .../v0.8-section-11-declaration-amendments.md | 243 ++++++ intakes/intakes.md | 51 ++ ...H-WP-0004-section-11-layer-declarations.md | 157 ++++ 5 files changed, 1206 insertions(+) create mode 100644 docs/amendments/v0.8-section-11-declaration-amendments.md create mode 100644 workplans/GH-WP-0004-section-11-layer-declarations.md diff --git a/INTENT.md b/INTENT.md index c9b0ed1..e2782fe 100644 --- a/INTENT.md +++ b/INTENT.md @@ -1,3 +1,41 @@ +--- +# NetKingdom security layer declaration — §11. +# +# This is the declaration. The prose "**Layer:** Staff" below is not, and has not +# been since §11 required a machine-readable form; it is exactly what §11's +# declaration-form paragraph says does not count, written by the repository that +# wrote the paragraph. Raised by access-engine (FLEX-WP-0030, B2) and ruled in +# GH-DEC-2026-017 §6. +# +# No layer.yaml accompanies this file, by GH-DEC-2026-017 §1: INTENT.md governs +# and a sidecar is a derived artifact. No standard version appears here, by +# GH-DEC-2026-017 §5: the declared layer is a standing property and does not +# change when the standard is revised. Version-scoped state belongs in the +# derived conformance record. +layer: Staff +role: — +repository: gate-house +declared_by: INTENT.md +declared_at: "2026-09-21" +ruling: GH-DEC-2026-017 +# §5 — Staff MUST NOT hold a direct Tooling client. Empty is a claim, not an +# omission: gate-house holds no OpenBao, key-cape or cluster client. Its +# artifacts are specifications, decisions, workplans and tasks. +tooling_contacts: [] +# §11 — non-Tooling clients recorded so the check is total. +non_tooling_clients: + - target: state-hub + layer: not-catalogued + rationale: >- + Work records, intakes, decisions and progress events. Outside §5 by the + v0.5 scope rule — "Tooling-layer system" means a §4 Tooling row, and + state-hub is not one. Recorded, not policed. +declared_shapes: + "5.1": [] + "5.2": [] + "5.3": [] +--- + # Gate House — INTENT **Repository:** `gate-house` diff --git a/decisions/decisions.md b/decisions/decisions.md index e007289..5f4212c 100644 --- a/decisions/decisions.md +++ b/decisions/decisions.md @@ -2668,3 +2668,720 @@ to invent the rule. Carried by `informed-decision`, which enforces the property does not need the ruling for itself, and asked anyway because a property held by one component is not a property of the object. Neither repository asked for anything that benefits it. + +## GH-DEC-2026-017 — The layer declaration: `INTENT.md` governs, the §3 vocabulary is closed and case-insensitive, and a declaration carries no standard version + +```yaml +id: GH-DEC-2026-017 +kind: decision +title: The layer declaration — INTENT.md governs, the section 3 vocabulary is closed + and case-insensitive, and a declaration carries no standard version +status: resolved +owner: Bernd Worsch +repo: gate-house +standard: net-kingdom/canon/standards/security-layer-model_v0.8.md +source_note: access-engine (flex-auth) docs/conformance/boundaries-review.md, FLEX-WP-0030, + B1 as corrected 2026-09-21, plus B2 and B4; the-custodian docs/assessments/2026-09-21-layer-declaration-boundaries.md + for the three repositories outside the surveyed set; GH-IN-0003 +requested_dispositions: +- approved +- revised +- rejected +affects: +- gate-house +- net-kingdom +- access-engine +- audit-core +- approval-engine +- maturity-engine +- secrets-engine +- user-engine +- tenant-engine +- zone-engine +- ops-warden +- ops-mason +- kings-guard +- key-cape +- whitehat-security +- informed-decision +- railiance-master +decided_by: Bernd Worsch +rationale: 'Section 11 permits a layer: key in INTENT.md frontmatter OR an equivalent + declaration file and does not say which governs when a repository carries both. + Nine repositories carry both and disagree in all nine, by casing only. Ruled in + four parts. (1) INTENT.md governs. Section 11 already says a repository declares + its layer in its own INTENT.md; the file alternative was added to give the declaration + a machine-readable form, not a second authority. A sidecar is therefore a derived + artifact under section 11 own derived-artifact rule and does not govern. (2) The + section 3 vocabulary is case-insensitive for comparison and a conformance run MUST + ASCII case-fold before comparing; the canonical spelling is the section 4 column + form. A check that fails eight of ten on orthography detects nothing about boundaries + and buries the one disagreement it exists to find. (3) The vocabulary is closed + and has FOUR tokens: Taxonomy, Tooling, Engine, Staff. access-engine validator admits + only three, omitting Taxonomy, so railiance-master Taxonomy is conforming and the + validator carries the defect. informed-decision surface is not a layer and is corrected + to Staff with role pep-shaped, which its own file already reasons from. Both repositories + are outside the section 4 catalog, so neither is a section 11 non-conformance; a + conformance run that grades non-catalogued repositories is over-scoped. (4) A layer + declaration MUST NOT carry a standard version. The declared layer is a standing + property that does not change when the standard is revised, and a version in the + declaration makes every revision read as invalidating it; version-scoped state belongs + in the derived conformance record, which already MUST carry the version it was derived + at. gate-house own INTENT.md gains frontmatter with layer: Staff in the same commit + as the ruling, because a doctrine owner ruling on an obligation it has not discharged + is the section 9.1 defect pointed at itself.' +created: '2026-09-21T00:00:00.000000Z' +updated: '2026-09-21T00:00:00.000000Z' +state_hub_decision_id: "" +``` + +## Context + +`access-engine` set out to remove a version pin from its own `INTENT.md`, read what the +declaration asserts, and found four repositories that had never declared one. It then +published a §11 finding produced by a shell pipeline that could not say which file a +value came from — inside a review whose thesis is that a mechanical check nobody can +re-run is an assertion. It rebuilt the finding as a command with a receipt, ran it, and +the run **falsified the finding it was built to reproduce**. + +That sequence is the reason this ruling exists at all, and it is worth saying before the +ruling rather than after. The corrected B1 is a stronger finding in a different class, +and it was reachable only because the repository that published the weak one went back +and mechanised it against itself. + +The custodian then swept every repository in the estate carrying a declaration rather +than the twelve `access-engine` holds boundaries with, and found two more values — +`surface` and `Taxonomy` — that `access-engine`'s validator rejects. That sweep changes +one of this ruling's four parts and is credited where it does. + +The declarations were re-verified here before ruling, from the repositories' own files, +rather than taken from either report. + +## Decision + +### 1. `INTENT.md` governs. A declaration file is derived and does not govern + +**Where a repository carries both forms, the `layer:` key in its `INTENT.md` frontmatter +is the declaration.** A `layer.yaml` or equivalent is a **derived artifact**: it MUST be +marked as derived, MUST name `INTENT.md` as the artifact it derives from, and MUST agree +with it. + +The ground is not a preference between two files. §11 already states the rule in its own +first paragraph — *"a repository the estate authors declares its layer in its own +`INTENT.md`"* — and the declaration-form paragraph was added for a different reason: that +**prose cannot distinguish a declaration from a transcribed review**, so the declaration +needs a machine-readable form. That paragraph gave the declaration a *form*; it was read +as giving it a second *authority*. Those are different things, and the second is what +produced nine disagreements nobody noticed. + +This also settles what a conformance run does. It reads `INTENT.md`. Where a sidecar +exists it reads that too — not to choose between them, but because **a disagreement +between the two is itself a finding** and MUST be reported rather than resolved away by +precedence. Precedence says which value is the repository's answer. It does not say the +disagreement did not happen. + +That second clause is A-16 in its plainest form. *"This repository is an Engine"* is an +appearance reachable by two routes, and until now the record could not say which route a +given checker took. Precedence alone would make the estate agree by making eight of the +nine disagreements invisible, which is the same shape as the check that cannot disagree +with anyone. + +Eight repositories already declare `declared_by:` in their sidecar. Six of the eight name +`INTENT.md` or an ADR rather than the file itself, so most of the estate has been +treating the sidecar as derived in substance without the rule saying so. + +### 2. The §3 vocabulary is case-insensitive; a conformance run MUST fold case + +**Comparison is ASCII case-insensitive.** The canonical spelling for new and changed +declarations is the §4 catalog column form — `Taxonomy`, `Tooling`, `Engine`, `Staff` — +and a lowercase declaration is **conforming**, not tolerated. + +`access-engine` offered to accept exactly this outcome and to change its own validator, +which is the disposition it argued for when its finding was still about casing and did +not withdraw when the finding changed shape. The offer is taken. + +The reason is what §11 is for. Two spellings of `Engine` do not describe two boundaries. +A check that reports nine findings about capital letters and one about a real layer +disagreement has made the real one unfindable, and finding-fatigue is not a stylistic +cost — it is the failure mode of a mechanical check, which is the thing §11 claims to be. + +**No repository is asked to re-spell anything.** The nine disagreements do not become +conformances by being forgiven; under §1 they were never disagreements about a layer. + +**Related defect, recorded because it caused this.** §3 does not state a vocabulary. It +states a table whose header column reads `Taxonomy / Tooling / Engines / Staff` — with +**`Engines` plural** — while §4's column reads `Engine`. Every implementer has had to +infer the token set from two tables that disagree, and one of them inferred three tokens. +A vocabulary a checker must infer is not a vocabulary. §3 gains an explicit normative +token list (A9). + +### 3. The vocabulary is closed, and it has four tokens — not three + +**Closed.** A declaration whose value is outside `{Taxonomy, Tooling, Engine, Staff}` is +not conforming, and does not name a tier the model has not enumerated. The four layers +are the model's whole claim about how the estate is cut; a fifth arrives by amending §3, +in this repository's voice, not by a repository declaring one. + +**But `Taxonomy` is in it.** `access-engine`'s validator admits `{Staff, Engine, Tooling}` +and rejects `Taxonomy`, which §3.1 defines, §4 catalogues twice (`info-tech-canon`, +`net-kingdom`), and this standard is itself an instance of. **`railiance-master` is +conforming and the validator carries the defect.** + +This is the part of the finding that inverted on inspection, and how it inverted is worth +recording. The custodian's sweep reported `Taxonomy` as outside the vocabulary. It is not +— it was outside *a validator*, and the validator was read as the vocabulary because it +was the only executable statement of one. That is §11's derived-artifact rule inverted: +an artifact derived from canon came to stand in for canon, precisely because canon left +the token set to be inferred (§2's related defect). The custodian was right to raise it; +one of the two instances it raises is a finding against the checker. + +**Found twice, independently, and the second finder is the repository it was a finding +against.** `railiance-master` corrected the custodian's record with the citations — §3.1, +§4, §7, §17 — and the custodian recorded its first reading as wrong in the circulated +document rather than quietly amending it. This ruling was drafted from the first version +and re-verified against §3.1 before it was issued, so it reached the same place by the +other route; the correction is credited because it arrived first and because it was made +by the party the finding accused. + +**The §3-versus-§4 divergence is a second defect, and precedence does not reach it.** +`railiance-master` also observes that its `Taxonomy` matches §3's table spelling exactly, +so measured against §3 the nine lower-casing sidecars are the divergent ones, while +measured against §4 the disagreement is `Engines` versus `Engine` for every engine +repository in the estate. A run built from §3 and a run built from §4 disagree about eight +rows. That is B1's shape one level further in — two faithful readings of one standard — +and §1's precedence rule does not touch it, because it is a disagreement *inside the +standard* rather than inside a repository. §2 and A9 close it by stating the vocabulary +once, as a token list, rather than by choosing between two tables. + +**The two off-vocabulary cases are ruled apart, as the custodian asked.** They do not +behave alike: `Taxonomy` is a conforming value reported by a defective checker, and +`surface` is a repository naming a tier the model does not have. Nothing in the disposition +of one carries to the other. + +`access-engine` is asked to add `Taxonomy` to its validator. That is not a §4 scope +change — a NetKingdom checker run estate-wide will meet Taxonomy repositories, and +rejecting the layer this standard occupies is not a defensible default. + +**`surface` is not a layer.** `informed-decision` declares `layer: surface, role: +pep-shaped`. Its correct declaration is **`layer: Staff`, `role: pep-shaped`**, which its +own file already reasons from two ways: it writes *"§5 applies to Staff. This is a +browser-facing surface with no Tooling contact,"* and `GH-DEC-2026-012` R1 ruled it is +PEP-shaped and **not** an Engine, which under §3's determinism cut leaves Staff. +`ops-mason` and `ops-warden` are the precedent: `Staff` in the layer column, +`PEP-shaped` in the role column. The correction is `informed-decision`'s to make. + +`role:` is not part of this vocabulary and is not closed by this ruling. §3.3 enumerates +the Engine roles; `PEP-shaped` is a §6.4 shape; `GH-DEC-2026-012` R2 already holds that +shapes are not layers. The layer field takes a layer. + +### 4. Both off-vocabulary repositories are outside §4, and §11 does not grade them + +`informed-decision` and `railiance-master` are **not §4 catalog rows**. §11's obligation +attaches to *"every estate-authored repository in §4"*, so neither can be a §11 +non-conformance, and an estate-wide run that grades them is over-scoped. `railiance-master` +says so in its own file — *"not a NetKingdom §4 catalog row… Railiance operations +Taxonomy"* — and declared anyway. + +**A voluntary declaration is welcome and is not thereby enrolled.** The correct report for +both is *declared voluntarily, outside catalog scope*, and for `informed-decision` +additionally *value not in the vocabulary, correction identified*. Treating a volunteer's +declaration as a non-conformance is the fastest way to stop getting volunteers, and it is +also just wrong about who §11 binds. + +**A conformance run MUST state its scope.** A run over §4 and a run over every repository +carrying a declaration answer different questions, and a report that does not say which it +did cannot be acted on — the same defect as a survey that does not record which file a +value came from, one level up. + +**Not ruled: whether `informed-decision` should become a §4 row.** It holds a ruled +boundary, is PEP-shaped, and sits on the approval path, which is a real argument. Adding a +catalog row is a canon change, and a repository is *asked*, not enrolled — §11's own rule +that a layer stated about a repository by another is not a declaration applies to +catalogue membership at least as strongly. Raised with them; carried as an open item of +the amendment round (A11). + +### 5. A layer declaration MUST NOT carry a standard version + +`access-engine` removed `0.7` from its own declaration, enforced the absence by test, and +asked that §11 say so generally rather than leave each repository to work it out. **Ruled +as asked, and the general form is stated here.** + +A layer declaration asserts a **standing property**: which layer this repository is. That +property does not change when the standard is revised. A version in the declaration makes +every revision read as though it invalidated every declaration, which is the same +confusion this standard's own frontmatter note exists to prevent — *assent records assent +to a boundary, given at the version named, and is not assent to the current text*. +`access-engine` is Engine/PDP at v0.6, v0.7, v0.8 and after. + +**Version-scoped state belongs in the derived conformance record**, which under §11's +derived-artifact rule already MUST name what it derives from and carry the version or +commit it was derived at. That artifact exists; the version has a home. + +**This is not one repository's habit — it is the reference form.** Every sidecar in the +estate carries `standard_version: "0.7"`, including `ops-warden`'s reference form and the +seven repositories that adopted it. So removing the field is a change to the reference +form, and `ops-warden` is asked to make it there rather than each adopter deciding. +`access-engine` found this in its own file and did not look at anyone else's; the field's +real distribution only appears from the sweep. + +**Declined: keeping the field "for information".** A field that is present will be +branched on. The reason to remove it is that it is *readable as* a validity condition, +and a version kept as decoration is still readable as one. + +**What happens when §3 changes.** If a future version changed the vocabulary so a declared +token no longer denoted the same layer, declarations do **not** silently retarget. That is +a re-declaration round, run by this repository in the standard's own voice — an explicit +canon obligation, not a per-file pin that would have made nobody re-read anything anyway. + +### 6. `gate-house` declares `Staff`, in this commit + +`access-engine` raised it plainly rather than politely: *"a doctrine owner that has not +discharged its own §11 obligation is the §9.1 defect pointed at itself, which is the +argument you accepted from us four times at v0.8."* + +That is correct, it needs no ruling, and the appropriate response to it is the file rather +than a paragraph about the file. `gate-house/INTENT.md` gains frontmatter carrying +`layer: Staff` in the same commit as this record. Under §1 it writes **no** sidecar: the +governing form is the one §11 names first, and the repository ruling that the sidecar is +derived should not need a derived copy to be legible. + +The prose line `**Layer:** Staff` has stood in `INTENT.md` since v0.1 and was believed to +be the declaration. It is exactly what §11's declaration-form paragraph says does not +count, written by the repository that wrote the paragraph. + +`key-cape`, `ops-mason` and `net-kingdom` remain undeclared and each owes its own. Each is +told; none is declared for. `net-kingdom`'s is the odd one — it is the publisher of the +standard requiring it, and `Taxonomy` is its §4 row. + +## What this does not rule + +- **Not ruled: the `role:` vocabulary**, its case-sensitivity, or whether it is closed. + Raised by the same survey; deferred because §3.3 and §6.4 state roles in two places and + the token set needs the same repair §3's does before a ruling would mean anything. +- **Not ruled: what a conformance run does with a repository outside §4 that declares.** + §4 reports it as out of scope; whether a second, estate-wide report exists is + `maturity-engine`'s and the runner's, not doctrine's. +- **Not ruled: the sidecar's schema** beyond the derived marking and the absence of a + version. `ops-warden`'s form is the estate's and stays `ops-warden`'s. + +## Reversal condition + +§1 reverses if a repository is found for which `INTENT.md` cannot carry frontmatter — the +§9.1 shape, an obligation the holder cannot discharge. No such repository is known; the +three checked without frontmatter are three that can trivially gain it. + +§2 reverses if two layer tokens are ever introduced that differ only in case, which would +be a defect in §3 rather than a reason to restore case-sensitivity. + +§3's closure reverses on an argued amendment to §3, from a repository that bears a cost +under the four-layer cut. `informed-decision`'s `surface` is not that argument — it is an +undeclared fifth tier, and the repository's own file gives the Staff reasoning. + +## Provenance + +Raised by `access-engine` (`FLEX-WP-0030`), which found its own version pin, generalised +the question rather than fixing its file, published a finding it then mechanised and +falsified, corrected it inside a day, and put the correction to everyone who received the +original — including the three repositories the original had not reached. It also raised +`gate-house`'s own omission against `gate-house`, which is the finding it had least reason +to raise and the one this ruling is most improved by. + +Extended by `the-custodian`, whose estate-wide sweep supplied both off-vocabulary values, +the observation that the two-generators reading does not hold estate-wide, and therefore §3 +— including the half of §3 that is a finding against the reporting validator rather than +the reported repositories, and which it then corrected against itself on +`railiance-master`'s citation, in the circulated document, before this ruling issued. + +`railiance-master` supplied that correction with the citations and asked for nothing. It is +the only repository in this record that was reported as non-conformant, was not, and said so +with the sections rather than with an objection. + +`ops-warden` supplied the reference form eight repositories adopted, which is why §5 is a +single change rather than eight. + +## GH-DEC-2026-018 — `access-engine` is a source of evidence for the decision record; custody is never source, and §4 must mark sources rather than leave the class to be inferred + +```yaml +id: GH-DEC-2026-018 +kind: decision +title: access-engine is a source of evidence for the decision record; custody is never + source, and section 4 must mark sources rather than leave the class to be inferred +status: resolved +owner: Bernd Worsch +repo: gate-house +standard: net-kingdom/canon/standards/security-layer-model_v0.8.md +source_note: access-engine docs/conformance/boundaries-review.md B3, held open as its + declared gap G2; audit-core holds the other half; GH-IN-0003 +requested_dispositions: +- approved +- revised +- rejected +affects: +- gate-house +- net-kingdom +- access-engine +- audit-core +- approval-engine +- kings-guard +- informed-decision +decided_by: Bernd Worsch +rationale: 'Section 11 requires every repository catalogued in section 4 AS A SOURCE + OF EVIDENCE to declare class, cadence and detection surface, and says a source declaring + none is not conforming. access-engine produces the decision record, declares no emission + guarantee, and asked whether it is a section 4 source or only the producer of an artifact + audit-core is the source of. Ruled against access-engine on the substance and against + the check on the form. (1) A custodian is never the source of what it holds. audit-core + role is Evidence, which is custody; reading it as the source of records it did not emit + would make section 9.6 incoherent, because the archive that cannot prove a record was + never sent would be the same party as the one that would have sent it. (2) access-engine + is therefore a source, and the decision record is the clearest case in the estate: a + denial is the paradigm load-bearing event section 9.6 names, and a denial is exactly the + event an adversary most wants missing. It owes a declaration and does not have one, so it + is non-conforming on section 11 today. The correct state is a declared gap with owner, + blocker and review date, promptly; gate-house is not grading, it is naming which register + the fact belongs in. (3) The classification is per event class and is access-engine own to + publish. Section 11 forbids a conformance run to infer class from event name, payload or + observed rate, and that prohibition binds this ruling as much as a runner. (4) Section 11 + names a section 4 property that does not exist: section 4 catalogues layers and roles and + marks no repository as a source of evidence, so the check requires a run to decide for + itself who is a source, which is the circularity section 11 forbids one level down. + Section 4 gains an evidence-source marking.' +created: '2026-09-21T00:00:00.000000Z' +updated: '2026-09-21T00:00:00.000000Z' +state_hub_decision_id: "" +``` + +## Context + +`access-engine` put the question and declined the answer that favours it: + +> The unclear boundary: are we a §4 source of evidence, or only the producer of an +> artifact `audit-core` is the source of? We are not answering that alone and we are not +> taking the flattering reading. + +It recorded the gap as `G2` in its own conformance record and holds it open until this +repository rules *and* `audit-core` confirms its half. That is the second time this month +a repository has referred up a question whose convenient answer was available to it, and +it is the reason the question is answerable rather than settled by whoever moved first. + +## Decision + +### 1. A custodian is never the source of what it holds + +**`audit-core` is not the source of the decision record.** Its §4 role is `Evidence`, and +§4 spells that role as *custody, retention, integrity verification, export*. Custody is +what you do with a record that arrived; a source is what makes one arrive. + +The fork `access-engine` offered — *only the producer of an artifact `audit-core` is the +source of* — is not available, and the reason is §9.6's own load-bearing sentence. The +whole section rests on the fact that **an append-only archive cannot prove a record was +never sent**. That statement has content only because the archive and the emitter are +different parties. Collapse them and §9.6 is incoherent: the custodian would be the source +of records it never received, a suppressed record would have no one to attribute the +suppression to, and the residual the section exists to state — *adversarial omission at a +compromised source, prevented by nothing in this model* — would have no source to be +compromised. + +So the rule generalises past this pair: **evidence custody and evidence emission are +disjoint obligations, and holding one never discharges the other.** No repository's +emission guarantee is satisfied by `audit-core` holding what it sent. + +### 2. `access-engine` is a source of evidence, and the decision record is the clearest case in the estate + +§17 moved the decision-record schema to `access-engine` on the ground that it is *"the one +thing in the estate only `access-engine` produces"* — an argument `access-engine` made +against its own interest, to take work on. The same fact answers this question, and this +time it costs rather than pays. + +The decision record is not marginal evidence. **A denial is one of the three events §9.6 +names as the paradigm load-bearing kind** — *"an approval revocation, a containment +action, a denial"* — and the section's own reasoning is that the negative event is exactly +what an adversary most wants missing, and that it is rare by nature, which is where rate +monitoring is the wrong instrument and the stakes are highest. + +The estate has controls that read decision evidence. `GH-DEC-2026-010` requires a PEP to +be able to attribute a decision to `access-engine`. `kings-guard` evaluates streams and +raises silence findings. `informed-decision` declares its inherited gap against the +decision path. Every one of those reads a record `access-engine` emits, and none of them +can tell a quiet period from a suppressed one without a declared cadence. + +**`access-engine` owes an emission guarantee, declares none, and is therefore not +conforming on §11 today.** Recorded in those words because it asked for the unflattering +reading and because softening it would make the register useless for the next repository. + +### 3. The right register for that fact is a declared gap, and that is not a courtesy + +§11's four states exist for this. An undeclared violation is *"anything else"* — the state +you are in when nobody has said. `access-engine` has said, publicly, in its own conformance +record, before anyone asked it to, and named the review that found it. **That is a declared +gap the moment it carries owner, blocker and review date**, and a declared gap is tracked +non-conformance, not a clean bill. + +`G2` currently says *unruled*. It is now ruled, so `G2` closes as a question and reopens as +a gap of the ordinary kind, with a date. The distinction matters under A-17: this gap fails +closed on its distinguishing case — a stream with no declared cadence produces no silence +finding, so the failure is a **missed detection**, never a manufactured permission, which +is §9.6's §8-asymmetry payoff and the reason this is a gap a register can hold rather than +a permission. + +### 4. The class inventory is `access-engine`'s to publish, and this ruling does not supply it + +§11 is explicit: *"which class an event falls in, and whether it is rare, is the source's +published classification: a conformance run is supplied that inventory and MUST NOT infer +it from an event name, payload, or observed rate, or the check becomes circular."* + +**That prohibition binds a ruling at least as hard as it binds a runner.** So this record +does not classify the decision record, and specifically does not rule that denials are rare +and allows are volume, however obvious that looks from here. What it rules is: + +- the declaration is **per event class**, not per repository — a single repository-level + guarantee over a stream containing both a high-volume allow and a rare denial is not a + declaration, it is an average, and it will be satisfied by rate monitoring that cannot + see the denial go missing; +- `access-engine` publishes the inventory and the classification, under + `net-kingdom`'s `emission-cadence-security-profile_v0.1.md`; +- §11's consequences then follow mechanically: a **rare** load-bearing class MUST carry + heartbeat **and** reconciliation, not either alone, and MUST NOT be covered by rate + monitoring. + +`approval-engine`'s `cadence.yaml` is the reference instance and the form is already +drafted in `gate-house/docs/contracts/approval-emission-detection.md`. `access-engine` is +not asked to invent a shape. + +### 5. §11 names a §4 property that does not exist, and that is the finding under the finding + +The check reads *"every repository catalogued in §4 as a source of evidence."* **§4 +catalogues no such thing.** It has three columns — repository, layer, role — and the +`Evidence` role means custody, which §1 has just ruled is the opposite of source. So the +check, as written, requires a conformance run to decide for itself which repositories are +sources. + +That is the same circularity §11 forbids two paragraphs later for event classes. §11 tells +a runner it MUST NOT infer an event's class, and in the same breath requires it to infer +the far larger fact of who is a source at all. `access-engine` could not answer the +question from the text because **the text does not contain the answer** — which is a +better account of B3 than *"the boundary is unclear."* + +**§4 gains an evidence-source marking**, and each marked repository owns its class +inventory (A10). The alternative — restating the check in terms of *"any repository that +emits"* — was considered and refused: it moves the inference into the runner instead of +removing it, and it would make the source set something each runner computes rather than +something canon states. §11's own principle is that the classification is published, not +derived. + +**This is the fifth time this standard has corrected the §9.1 defect in its own text**, and +§11 has now been the site of it twice. The count in §11 says four. It is wrong by one as of +this ruling, and A10 corrects it rather than leaving the number to drift — a derived count +inside a normative body is a derived artifact that names no source, which §11 also forbids. + +## What this does not rule + +- **Not ruled: `audit-core`'s half.** `access-engine` holds `G2` open until `audit-core` + confirms, and that is right. §1 tells `audit-core` what it is being asked to confirm — that + it is custodian and not source, and that it does not read its own custody as discharging any + emitter's guarantee — but a confirmation this repository writes on `audit-core`'s behalf is + exactly the §11 defect of a layer stated about a repository by another. Asked, not assumed. +- **Not ruled: which other §4 rows are sources.** `approval-engine` has declared; + `secrets-engine`, `user-engine`, `tenant-engine`, `zone-engine`, `maturity-engine`, + `ops-warden` and `ops-mason` have not been assessed here. The A10 marking is where that is + settled, repository by repository, and this ruling deliberately does not pre-empt it by + listing names — `access-engine` was ruled because it asked. +- **Not ruled: whether the decision record's emission must be atomic** with the decision. + §9.4 attaches that to load-bearing evidence and the class inventory is not published yet, so + the obligation is pending its own input rather than waived. + +## Reversal condition + +§2 reverses if a control is found that reads the decision record and would be unaffected by +its total absence — which would mean the record is attributive throughout, not that +`access-engine` is not a source. §1 does not reverse on that; it is structural. + +§5's marking reverses if a §4 row turns out to be a source in one capacity and not another, +which a column cannot express. The repair would be a per-class marking, not a return to +inference. + +## Provenance + +Raised by `access-engine`, which produced the only artifact in the estate it is the sole +producer of, noticed that it had declared no guarantee for it, and refused the reading that +would have closed the question in its favour — then held the gap open in its own conformance +record rather than waiting to be asked. Every part of this ruling costs it something and none +of it was found by anyone else. + +`audit-core` is the repository the §11 emission check exists because of, and is the one that +raised the general form so `GH-IN-0001` could not recur unnoticed. It is asked for its half +and has not yet been heard from on §11 at v0.8. + + +## GH-DEC-2026-019 — The v0.8 acceptance flip stays held, and the §11 declaration defects join the existing hold rather than a follow-on amendment + +```yaml +id: GH-DEC-2026-019 +kind: decision +title: The v0.8 acceptance flip stays held, and the section 11 declaration defects join + the existing hold rather than a follow-on amendment +status: resolved +owner: Bernd Worsch +repo: gate-house +standard: net-kingdom/canon/standards/security-layer-model_v0.8.md +source_note: the-custodian docs/assessments/2026-09-21-layer-declaration-boundaries.md, + reading offered and not pressed; gate-house docs/conformance/2026-09-06-v08-assent-round.md + round close; GH-DEC-2026-017, GH-DEC-2026-018 +requested_dispositions: +- approved +- revised +- rejected +affects: +- gate-house +- net-kingdom +- audit-core +- kings-guard +- access-engine +- approval-engine +- ops-warden +- key-cape +- ops-mason +decided_by: Bernd Worsch +rationale: 'The v0.8 round closed with two circulated repositories not returning a text + review, and the section each was asked to attack therefore carrying no assent: kings-guard + on section 9.5, audit-core on whether section 11 emission wording lets a source imply + completeness. Publication and the acceptance flip were handed to net-kingdom on round + close and have not happened. Five section 11 defects have now been found from outside, + all of them in the text audit-core was asked to attack and did not. Held. The round own + closing finding was that every substantive finding against v0.8 was a correct rule a + careful implementer could satisfy without doing the thing it exists to require, and that + this repository is structurally prone to that failure. Section 11 is now that failure + pointed at section 11: a check calling itself mechanical that cannot make two conforming + runs agree, that names a section 4 property section 4 does not carry, and whose vocabulary + must be inferred from two tables that disagree. Accepting the version and amending it + immediately would make the accepted text the defective one, and would spend the one thing + the round produced. The hold is cheap because v0.7 is accepted and in force unpatched, so + nothing operational waits on it; that is stated as the reason it is affordable rather than + as an argument that holds are free. Bounded by three stated closing conditions so the hold + cannot become indefinite by inattention, and the conditions turn on returns and dated gaps + rather than on every repository being conformant, because a hold that waits for conformance + waits forever.' +created: '2026-09-21T00:00:00.000000Z' +updated: '2026-09-21T00:00:00.000000Z' +state_hub_decision_id: "" +``` + +## Context + +The custodian offered a reading and said it was not pressing it: + +> The round should not close while §11's own mechanical check is ambiguous. A standard that +> cannot make two conforming conformance runs agree is not yet mechanically checkable in the +> sense §11 claims for itself. + +The restraint is noted and the reading is adopted, with reasons of this repository's own — +because a hold adopted on someone else's reasoning is a hold nobody can argue about later. + +## Decision + +### 1. Held, and these join the existing hold + +`GH-DEC-2026-017` and `GH-DEC-2026-018` produce five amendments to §11, §4 and §3. They land +**in v0.8 before the acceptance flip**, not in a v0.9 amendment after it. v0.7 stays +`accepted` and in force, unpatched, as it has since the round closed. + +### 2. The reason is the round's own closing finding, arriving again + +The v0.8 round closed by saying something narrower and worse than it opened with: + +> **Every substantive finding was about a rule that read as satisfied by a check that did not +> satisfy it.** … That is a failure mode this repository is structurally prone to, because +> doctrine is graded on whether it is *right* and consumed on whether it is *checkable*. + +§11 is now the sixth instance, and the first one where the rule that reads as satisfied is +the rule *about checking*. Its declaration-form paragraph reads as making the layer question +mechanical; nine repositories satisfy it while giving two answers. Its emission check reads +as scoped by §4; §4 carries no such scope. Its vocabulary reads as closed; it is stated in +two tables that disagree, and the estate's only executable statement of it omits a layer. + +**Accepting the version and amending it afterwards would make the accepted text the defective +one** — and would do it in the section whose subject is that defect. The round's finding was +that only implementers can tell *right* from *checkable*. Three of them just did, from +outside, after the round closed. Flipping now would spend that. + +### 3. The hold's cost is the reason it is affordable, and the reason is stated rather than assumed + +v0.7 is accepted and in force. Nothing in the estate waits on v0.8's status: every ruling +since has been issued against v0.8 as proposed and implemented by repositories that did not +wait, and the four undeclared repositories owe their declarations under v0.7's §11 as much as +v0.8's. + +**So the hold costs documentation currency and nothing else.** That is said plainly because +the opposite case is the one to guard against — if a hold blocked implementation, the +calculus would change and the right answer might be to accept and amend. It does not, so it +does not. + +### 4. Three closing conditions, because an unbounded hold is not a decision + +The flip proceeds when all three are met: + +1. **The five amendments are drafted, circulated, and dispositioned** — + `docs/amendments/v0.8-section-11-declaration-amendments.md`, A9–A13, carried by `GH-WP-0004`. +2. **`audit-core` returns its §11 review, or declines in writing.** It was asked to attack + whether §11's emission wording lets a source imply completeness; five §11 defects have since + been found by others in that text. A written decline closes this condition — §14 records + *not claimed* rather than counting silence as assent, and the point is that the record says + which, not that assent is extracted. `kings-guard`'s §9.5 review is wanted on the same terms + and is **not** a condition here, because no finding has landed against §9.5. +3. **The four undeclared §4 repositories have each either declared or recorded a dated gap** — + `gate-house` (done in `GH-DEC-2026-017` §6), `key-cape`, `ops-mason`, `net-kingdom`. + +**Condition 3 asks for a declaration or a dated gap, not for conformance.** A hold that waits +for every repository to be conforming waits forever and hands any one repository a veto. What +the flip needs is that the §11 check, once amended, has been *run* and its results are in a +register — which a declared gap satisfies exactly as well as a declaration does. That is §11's +own position on blocked-clean, applied to the standard's own acceptance. + +### 5. What is not held + +- **The rulings are in force now.** `GH-DEC-2026-017` and `GH-DEC-2026-018` bind from today + and do not wait on the flip. Repositories correcting declarations, adding `Taxonomy` to a + validator, or opening a dated gap should do it now; nothing here is a reason to wait. +- **`net-kingdom` keeps publication and the flip.** They were handed over at round close and + are not taken back. This record states a condition on the flip, in the standard's authoring + voice, and `net-kingdom` executes it. +- **The v0.8 text stands** except in §3, §4 and §11 as amended. No finding has landed against + anything else. + +## A candidate property, deliberately not numbered + +B1 as corrected is an instance of something more general: **a conformance check that each +repository runs only against its own files cannot establish an estate property.** It +establishes self-consistency, and self-consistency is compatible with the estate disagreeing +with itself in every repository at once — which is precisely what nine of nine turned out to +be. §11 said as much in `access-engine`'s words — *"a mechanical check that cannot disagree +with anyone is not yet mechanical"* — but said it about a symptom. + +It is **not** recorded as `A-18`. One instance is not a rule; `A-16` and `A-17` were derived +from shapes that kept arriving, and `INTENT.md` holds that neither has graduated to canon +because the bar is that a repository **bearing a cost under it** has argued it. This has one +instance and no such argument. `informed-decision`'s observation applies — the repository that +bears a rule at its weakest point sees the unstated precondition — and the repository that +would bear this one is whoever has to build the estate-wide runner. Recorded here so a second +instance is recognised rather than met fresh. + +## Reversal condition + +The hold reverses if v0.8 acquires operational load — if a ruling, a contract, or an engine's +implementation comes to depend on v0.8 being `accepted` rather than proposed. §3's whole +argument is that it does not today. + +Condition 2 reverses to *waived* if `audit-core` is unable to return a review for reasons of +capacity rather than disagreement, and says so. The condition is for the record to say which, +not to compel a review. + +## Provenance + +Raised by `the-custodian`, which held the only view from which the six questions were visible +as one set, offered its reading explicitly as not pressed, and stated that none of it was its +to rule. The estate-wide sweep it volunteered is what turned a nine-repository finding into a +fourteen-repository one and produced two of the five amendments. + +The hold itself rests on `access-engine`'s and `audit-core`'s work rather than on the +custodian's reading: the first found the defects, and the second is the repository whose +unreturned review is the reason the defects were still there to find. diff --git a/docs/amendments/v0.8-section-11-declaration-amendments.md b/docs/amendments/v0.8-section-11-declaration-amendments.md new file mode 100644 index 0000000..aade58f --- /dev/null +++ b/docs/amendments/v0.8-section-11-declaration-amendments.md @@ -0,0 +1,243 @@ +# Security layer model — v0.8 §11 declaration amendment set + +**Repository:** gate-house (author) +**Publisher:** net-kingdom +**Project family:** NetKingdom security layer +**Status:** drafted — circulating for assent; the v0.8 acceptance flip is held on it (`GH-DEC-2026-019`) +**Version:** 0.1 +**Date:** 2026-09-21 +**Workplan:** `GH-WP-0004` +**Base:** `net-kingdom/canon/standards/security-layer-model_v0.8.md` (proposed, not accepted) + +## What this document is + +The exact normative text for five amendments to the **proposed** v0.8 cut, arising from +`access-engine`'s boundaries review (`FLEX-WP-0030`) and the custodian's estate-wide +sweep. It is the reviewable unit: each amendment can be argued on its own wording here +before anything touches the cut. + +These land **in v0.8 before the acceptance flip**, not in a v0.9 set after it. v0.7 stays +`accepted` and in force, unpatched. The reasoning is `GH-DEC-2026-019`: §11 is the section +whose subject is mechanical checkability, and accepting it while its own check cannot make +two conforming runs agree would make the accepted text the defective one. + +**Each amendment already governs its implementers** through the decision record named as +its authority. This document moves them into the statute; it does not decide them again. + +| # | Section | Authority | Task | +| --- | --- | --- | --- | +| A9 | §3 | `GH-DEC-2026-017` §2, §3 | T01 | +| A10 | §4, §11 | `GH-DEC-2026-018` §5 | T02 | +| A11 | §11 | `GH-DEC-2026-017` §1, §4 | T03 | +| A12 | §11 | `GH-DEC-2026-017` §5 | T04 | +| A13 | §4 | `access-engine` B5, `FLEX-WP-0020` | T05 | + +**A note on A2.** The clause A10 repairs is `gate-house`'s own, added as `A2` of the v0.8 +set on 2026-09-06 and again in `A7`. It named a §4 property §4 does not carry, and nobody +on the round caught it — including the two rounds of review it passed through. That is the +closing finding of the v0.8 round arriving against the amendment that closed it, and it is +the reason this set exists rather than a v0.9. + +--- + +## A9 — §3, the layer vocabulary stated once, as tokens (T01) + +**Why.** §3 does not state a vocabulary. It states a table whose first column reads +`Taxonomy / Tooling / Engines / Staff` — `Engines` **plural** — while §4's Layer column +reads `Engine`. Every implementer has inferred the token set from two tables that +disagree, and `access-engine`'s validator inferred three tokens rather than four, omitting +`Taxonomy`: the layer this standard itself occupies, catalogued twice in §4. A vocabulary +a checker must infer is not a vocabulary, and the only executable statement of it in the +estate came to stand in for canon. + +The divergence is not cosmetic and A11's precedence rule does not reach it: **a run built +from §3 and a run built from §4 disagree about all eight engine rows**, which is B1's shape +inside the standard rather than inside a repository. Raised by `railiance-master`, with the +citations, against the finding that had named it non-conformant. + +**Add to §3, immediately after the layer table:** + +> **The vocabulary is these four tokens, and it is closed:** +> +> ``` +> Taxonomy Tooling Engine Staff +> ``` +> +> A layer declaration (§11) carries exactly one of them. **Comparison is ASCII +> case-insensitive** and a conformance run MUST fold case before comparing: two spellings +> of `Engine` do not describe two boundaries, and a check that reports nine findings about +> capital letters has made the one real disagreement unfindable. The spellings above are +> canonical for new and changed declarations; a lowercase declaration is **conforming**, +> not tolerated. +> +> A value outside the four is not conforming and does not name a tier this model has not +> enumerated. A fifth layer arrives by amending this section, argued by a repository that +> bears a cost under the four-layer cut — not by a repository declaring one. +> +> `Engines` appears in the table heading above for its plural reading; the token is +> `Engine`, as §4's Layer column carries it. +> +> A **role** is not a layer. §3.3's Engine roles and §6.4's PEP shape describe what a +> repository does within its layer, are carried in a separate `role:` key, and are not +> governed by this vocabulary. Ruled in `GH-DEC-2026-012` R2 and again in +> `GH-DEC-2026-017` §3. + +**Authority.** `GH-DEC-2026-017` §2 and §3. Raised by `access-engine` as a casing finding +against nine repositories; converted by `the-custodian`'s estate-wide sweep into a finding +against the validator that reported it. + +--- + +## A10 — §4 and §11, evidence sources are marked, not inferred (T02) + +**Why.** §11 requires *"every repository catalogued in §4 as a source of evidence"* to +declare an emission guarantee. **§4 catalogues no such thing.** It has three columns — +repository, layer, role — and the `Evidence` role means custody, which is the opposite of +source. So the check requires a conformance run to decide for itself who is a source, two +paragraphs before it forbids a run to infer an event's class *"or the check becomes +circular"*. `access-engine` could not answer whether it is a source because the text does +not contain the answer. + +**Add a column to the §4 catalog table**, `Evidence source`, carrying `yes` or `—`, and +mark `access-engine` `yes` per `GH-DEC-2026-018` §2. Other rows are marked as each +repository is assessed; an unassessed row carries `—` and **§11's check reports it as +unassessed rather than as conforming.** + +**Add under the §4 table:** + +> **Evidence source is a marking, not a reading.** A repository is a source of evidence +> where it **emits** events into the estate's evidence stream. Custody is disjoint from +> emission: holding a record never discharges any emitter's guarantee, and `audit-core`'s +> `Evidence` role is custody. The distinction is what `§9.6` rests on — an archive cannot +> prove a record was never sent, which has content only because the archive and the +> emitter are different parties. + +**Replace §11's evidence-source check opening clause:** + +> - every repository **marked in §4 as an evidence source** declares its **emission +> guarantee** in its machine-readable layer declaration, **per event class** — a single +> repository-level guarantee over a stream containing both a high-volume and a rare class +> is an average, not a declaration, and will be satisfied by rate monitoring that cannot +> see the rare event go missing; … + +*(the remainder of the check — the load-bearing/attributive split, the volume/rare +detection rules, and the published-classification prohibition — is unchanged.)* + +**Correct the count.** §11's closing sentence reads *"the §9.1 defect this standard has now +corrected four times."* With this amendment it is five, and §11 is the site of it twice. A +derived count inside a normative body is a derived artifact naming no source, which §11 +itself forbids: **replace the count with** *"the §9.1 defect this standard has repeatedly +corrected; the instances are listed in §15."* + +**Authority.** `GH-DEC-2026-018` §1 and §5. Raised by `access-engine`, which declined the +reading that favoured it and held the gap open as `G2` rather than closing it for itself. + +--- + +## A11 — §11, which form governs, and what a run's scope is (T03) + +**Why.** §11 accepts *"a `layer:` key in the `INTENT.md` frontmatter, or an equivalent +declaration file"* and does not say which governs when a repository carries both. Nine do, +and all nine disagree. Two conformance runs reading different files reach different answers +for nine repositories and both follow §11. + +**Replace §11's "Declaration form" paragraph's second sentence and add after it:** + +> Because prose cannot distinguish a declaration from a transcribed review, a declaration +> MUST carry a machine-readable form: **a `layer:` key in the repository's own `INTENT.md` +> frontmatter.** An equivalent declaration file MAY accompany it and is a **derived +> artifact** under this section's derived-artifact rule: it MUST be marked as derived, MUST +> name `INTENT.md` as what it derives from, and MUST agree with it. `INTENT.md` governs. +> +> This is not a preference between two files. This section already says a repository +> declares its layer in its own `INTENT.md`; the alternative form was added to give the +> declaration a machine-readable *form*, and was read as giving it a second *authority*. +> +> **A disagreement between the two forms is a finding in its own right** and MUST be +> reported rather than resolved away by precedence. Precedence says which value is the +> repository's answer; it does not say the disagreement did not happen. Where one +> appearance is reachable by two routes, the record says which route. +> +> **A conformance run MUST state its scope.** This section's obligations attach to +> estate-authored repositories **in §4**. A repository outside §4 may declare voluntarily +> using this form, and a voluntary declaration is welcome; it is not a §4 obligation and a +> run that grades it is over-scoped. A run over §4 and a run over every repository carrying +> a declaration answer different questions, and a report that does not say which it did +> cannot be acted on. + +**Authority.** `GH-DEC-2026-017` §1 and §4. Raised by `access-engine` (`B1` as corrected, +2026-09-21), which mechanised a finding it had published unmechanically and thereby +falsified it; extended by `the-custodian`, whose sweep found the two declaring repositories +outside §4. + +--- + +## A12 — §11, a declaration carries no standard version (T04) + +**Why.** `access-engine` removed `0.7` from its own declaration, enforced the absence by +test, and asked that §11 say so generally rather than leave each repository to work it out. +Every sidecar in the estate carries `standard_version: "0.7"`, including `ops-warden`'s +reference form and the seven repositories that adopted it — so this is the reference form's +field, not one repository's habit. + +**Add to §11's "Declaration form" paragraph:** + +> **A layer declaration MUST NOT carry a standard version.** The declared layer is a +> standing property of the repository and does not change when this standard is revised; a +> version in the declaration makes every revision read as though it invalidated every +> declaration. That is the confusion this standard's own `assented_by` note exists to +> prevent: assent records assent to a **boundary**, given at the version named, and is not +> assent to the current text. +> +> Version-scoped state belongs in the **derived conformance record**, which under this +> section's derived-artifact rule already MUST name what it derives from and carry the +> version or commit it was derived at. +> +> If a future revision changes §3's vocabulary such that a declared token no longer denotes +> the same layer, declarations do **not** silently retarget: that revision carries a +> re-declaration round, run in this standard's authoring voice. A per-file version pin would +> not have caused anyone to re-read anything. + +**Authority.** `GH-DEC-2026-017` §5. Raised by `access-engine` against its own file, which +is where this whole review started. + +--- + +## A13 — §4, the `access-engine` coordinate is pending, not broken (T05) + +**Why.** v0.8 names `access-engine` in §4, §13.1 and §17. The repository, runtime, +namespace, images and API vocabulary are still `flex-auth` per `FLEX-DEC-2026-013`; the +rename is ruled and sequenced under `FLEX-WP-0020` and has not landed. Neither side is +wrong — canon named the end state — but a reader of v0.8 cannot resolve the repository it +keeps naming, and `reuse-surface` hit the 404 independently. `access-engine` asked for one +line and offered to ping when the rename lands. + +**Replace the existing §4 note:** + +> `access-engine` is the ruled name for the repository currently called `flex-auth`; both +> denote the same authority until the governed rename completes. **The coordinate is +> pending, not broken:** the repository resolves at `flex-auth` today, the rename is ruled +> and sequenced under `FLEX-WP-0020`, and runtime names remain `flex-auth` by +> `FLEX-DEC-2026-013` after it lands. Execution conditions are recorded in that workplan, +> not here. + +**Authority.** `access-engine` `B5`; no gate-house ruling required — this is a resolvability +note, and the substance is already ruled in the owning repository. + +--- + +## Not in this set + +- **The `role:` vocabulary**, its case-sensitivity, and whether it is closed. Raised by the + same survey and deferred: §3.3 and §6.4 state roles in two places, and the token set needs + the same repair A9 makes for layers before a ruling would mean anything. +- **Whether `informed-decision` becomes a §4 catalog row.** It holds a ruled boundary + (`GH-DEC-2026-012`), is PEP-shaped, and sits on the approval path. Adding a row is a canon + change and a repository is *asked*, not enrolled — §11's own rule that a layer stated about + a repository by another is not a declaration applies to catalogue membership at least as + strongly. Raised with them; carried as `GH-WP-0004-T06`. +- **Which other §4 rows are evidence sources.** A10 creates the column; the per-repository + assessment is `GH-WP-0004-T02` and is not pre-empted by listing names here. +- **Any §9.5 change.** `kings-guard` has not returned its review and no finding has landed + against §9.5. Its absence is recorded in §14 as *not claimed* and is not a condition on the + flip (`GH-DEC-2026-019` §4). diff --git a/intakes/intakes.md b/intakes/intakes.md index 5fecdd9..a425db9 100644 --- a/intakes/intakes.md +++ b/intakes/intakes.md @@ -163,3 +163,54 @@ created: '2026-09-05T23:28:11.977565Z' updated: '2026-09-05T23:28:11.977565Z' state_hub_intake_id: "01a08762-ab47-7163-8eeb-92c3cb909db3" ``` + +## GH-IN-0003 — Six §11 interpretation questions from the access-engine boundaries review + +```yaml +id: GH-IN-0003 +kind: intake +title: Six section 11 interpretation questions from the access-engine boundaries review +status: closed +origin: cross-repo +origin_ref: access-engine FLEX-WP-0030 docs/conformance/boundaries-review.md (published + 2026-09-20, B1 corrected 2026-09-21); the-custodian docs/assessments/2026-09-21-layer-declaration-boundaries.md +priority: high +owner: gate-house +requested_by: access-engine, the-custodian +lane: red +description: 'access-engine surveyed twelve security-relevant counterparts against section + 11 and published five findings. the-custodian swept the whole estate, found fourteen + declarations rather than ten, and recorded that six of the nine resulting open questions + are gate-house''s because every one of them asks what section 11 means and gate-house + authors section 11. + + + The six: (1) which section 11 declaration form governs when a repository carries both an + INTENT.md layer key and a layer.yaml, and they disagree — nine repositories do, in all + nine; (2) whether the section 3 vocabulary is case-sensitive; (3) whether the section 3 + vocabulary is closed, given informed-decision declares surface and railiance-master + declares Taxonomy; (4) gate-house''s own missing layer declaration (B2), alongside + key-cape, ops-mason and net-kingdom; (5) whether access-engine is a section 4 source of + evidence for the decision record (B3), held open as its declared gap G2 with audit-core + holding the other half; (6) whether a layer declaration may carry a standard version (B4). + + + Also carried: the custodian''s reading, offered and not pressed, that the v0.8 acceptance + flip should not proceed while section 11''s own mechanical check is ambiguous. + + + Declarations re-verified here from the repositories'' own files before ruling, rather than + taken from either report. Resolved as GH-DEC-2026-017 (declaration form, vocabulary, + version, and gate-house''s own declaration), GH-DEC-2026-018 (source of evidence), and + GH-DEC-2026-019 (the v0.8 hold). Amendments A9-A13 drafted at + docs/amendments/v0.8-section-11-declaration-amendments.md and carried by GH-WP-0004. + + + B5 (canon names access-engine; the repository still answers to flex-auth) is not one of + the six and is not ruled here — it is a coordinate note against section 4, already + sequenced under FLEX-WP-0020, and is carried as GH-WP-0004-T05.' +created: '2026-09-21T00:00:00.000000Z' +updated: '2026-09-21T00:00:00.000000Z' +outcome: ruled +state_hub_intake_id: "" +``` diff --git a/workplans/GH-WP-0004-section-11-layer-declarations.md b/workplans/GH-WP-0004-section-11-layer-declarations.md new file mode 100644 index 0000000..e8c2351 --- /dev/null +++ b/workplans/GH-WP-0004-section-11-layer-declarations.md @@ -0,0 +1,157 @@ +--- +id: GH-WP-0004 +type: workplan +title: "§11 layer declarations — amendment set and estate closure" +domain: infotech +repo: gate-house +status: active +flavor: implementation +origin: GH-IN-0003 +owner: codex +topic_slug: infotech +created: "2026-09-21" +updated: "2026-09-21" +--- + +# §11 layer declarations — amendment set and estate closure + +## Goal + +Land the five §11/§4/§3 amendments that `GH-DEC-2026-017` and `GH-DEC-2026-018` +produce, into the **proposed** v0.8 cut before the acceptance flip, and close the +estate-side items the two rulings create. `GH-DEC-2026-019` holds the flip on this +workplan and states three closing conditions. + +**Normative text for A9–A13 is drafted at +`docs/amendments/v0.8-section-11-declaration-amendments.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 the cut. + +## Why now + +`access-engine`'s boundaries review (`FLEX-WP-0030`) found five §11 defects from +outside, after the v0.8 round closed, in the section `audit-core` was asked to attack +and did not return a review on. One of them — A10's — is `gate-house`'s own amendment +`A2`, written twelve days ago and reviewed twice without anyone noticing it named a §4 +property §4 does not carry. + +v0.7 stays `accepted` and in force, unpatched. Nothing operational waits on this; the +cost of the hold is documentation currency, which is what makes it affordable +(`GH-DEC-2026-019` §3). + +## Tasks + +### T01 — A9: state the §3 vocabulary once, as tokens + +Four tokens, closed, case-insensitive comparison, `Engine` not `Engines`, role is not +layer. Resolves the §3-versus-§4 divergence that makes two faithful runs disagree about +eight rows. + +```task +id: GH-WP-0004-T01 +status: todo +priority: high +``` + +### T02 — A10: §4 gains an evidence-source marking; §11's check reads the marking + +Includes the per-event-class clause and the count repair. Then assess the remaining §4 +rows repository by repository — `access-engine` is marked by `GH-DEC-2026-018` §2; the +others are asked, not assigned. + +```task +id: GH-WP-0004-T02 +status: todo +priority: high +``` + +### T03 — A11: `INTENT.md` governs, the sidecar is derived, a run states its scope + +```task +id: GH-WP-0004-T03 +status: todo +priority: high +``` + +### T04 — A12: a declaration carries no standard version + +Includes asking `ops-warden` to drop `standard_version` from the reference form rather +than each of the seven adopters deciding separately. + +```task +id: GH-WP-0004-T04 +status: todo +priority: medium +``` + +### T05 — A13: the `access-engine` coordinate is pending, not broken + +One line in §4. No gate-house ruling required; substance already ruled in the owning +repository under `FLEX-WP-0020`. + +```task +id: GH-WP-0004-T05 +status: todo +priority: low +``` + +### T06 — Ask `informed-decision` whether it should become a §4 catalog row + +Asked, not enrolled. Its correction from `surface` to `Staff`/`pep-shaped` is its own and +is not a condition of this task. + +```task +id: GH-WP-0004-T06 +status: todo +priority: medium +``` + +### T07 — Closing condition 2: `audit-core` returns its §11 review or declines in writing + +A written decline closes it. §14 records *not claimed* rather than counting silence as +assent, and the point is that the record says which. + +```task +id: GH-WP-0004-T07 +status: wait +priority: high +``` + +### T08 — Closing condition 3: `key-cape`, `ops-mason`, `net-kingdom` declare or record a dated gap + +`gate-house`'s own is discharged (`GH-DEC-2026-017` §6, this commit). A declaration or a +dated gap satisfies this equally; conformance is not the condition. + +```task +id: GH-WP-0004-T08 +status: wait +priority: high +``` + +### T09 — Circulate A9–A13 for assent and disposition the returns + +Round list: `net-kingdom` (publisher), `access-engine`, `audit-core`, `approval-engine`, +`ops-warden`, `kings-guard`, plus `informed-decision` and `railiance-master` as the two +repositories the vocabulary ruling touches from outside §4. + +```task +id: GH-WP-0004-T09 +status: progress +priority: high +``` + +### T10 — `net-kingdom` assembles the amendments into the v0.8 cut and flips acceptance + +Publication and the flip are `net-kingdom`'s and were handed over at v0.8 round close. +This task tracks the handoff, not the execution. + +```task +id: GH-WP-0004-T10 +status: wait +priority: medium +``` + +## Done when + +All five amendments are in the v0.8 cut, the three `GH-DEC-2026-019` closing conditions +are met, and `net-kingdom` has flipped v0.8 to `accepted`.