Rule the six §11 declaration questions, and hold the v0.8 flip on them
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 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 63291@bnt-lap001 Assistant-Session: 8bd77868-ca68-4f49-bb1e-d539ecc0d703
This commit is contained in:
parent
b7dfb84c0b
commit
def0af2ce7
5 changed files with 1206 additions and 0 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue