Answer the exec-path question: the front door reads the ungoverned duplicate.

ops-warden and railiance-platform asked, independently, which OpenBao location
`secrets-engine exec --catalog whynot-design-npm-publish` reads. Answered from
this repository's own code and catalog with no OpenBao read and no value.

It reads `secret/coulomb/whynot-design/npm/publish` — the legacy, ungoverned
duplicate. `_fetch_value` concatenates the catalog's `mount` and `path` with no
override or fallback, so the proven pilot published from the duplicate and the
lowercase `npm_token` field is the field there. ops-warden's front door names
this repository as exec_owner, so it currently routes callers at a path no CCR
covers.

Recorded in SECRETS-WP-0006 with what a move to the governed lane requires, and
flagged that the duplicate must not be destroyed until the lane moves. Whether
the two locations hold the same value is a value comparison and is not answered
here.

Also records GH-DEC-2026-017 against SECRETS-WP-0008: INTENT.md governs, the
sidecar is derived, the vocabulary is case-insensitive so nothing is re-spelled,
and standard_version comes out of layer.yaml once ops-warden updates the
reference form this repository copied.

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:
tegwick 2026-09-21 02:36:31 +02:00
parent e5672846ab
commit 550ba95a67
3 changed files with 162 additions and 1 deletions

View file

@ -354,6 +354,68 @@ Acceptance:
- No fallback from JWT/service-auth failure into bootstrap or AppRole.
- Issued delivery sessions continue to self-revoke as in WP-0007-T05.
### 2026-09-21 GH-DEC-2026-017 — section 11 layer declaration ruled
Read from `gate-house/decisions/decisions.md`, not from message text.
`secrets-engine` is a named affected repository and carries both permitted
forms, so all four parts apply here. State Hub decision id
`82dd0fea-fabb-4940-92d5-d6e2ea9985f5`.
What the ruling settles for this repository:
1. **`INTENT.md` governs.** Our declaration is the `layer: Engine` key in
`INTENT.md` frontmatter. `layer.yaml` is a **derived artifact**: it must be
marked as derived, must name `INTENT.md` as what it derives from, and must
agree with it. Our `layer.yaml` already carries `declared_by: INTENT.md` and
a `Voice: INTENT.md (this repository's own declaration, §11)` header comment,
so we are among the repositories already treating the sidecar as derived in
substance. What is missing is the explicit derived marking the ruling now
requires as a field rather than a comment.
2. **The §3 vocabulary is case-insensitive and comparison must ASCII case-fold.**
Our `INTENT.md` says `Engine` and our `layer.yaml` says `engine`. Under §2 of
the ruling that is **conforming**, it was never a disagreement about a layer,
and **nothing here is re-spelled**. flex-auth withdrew the casing finding
itself (message `962bf395`) and its validator is the thing that changes. We
do not touch either file's spelling, and we do not "align" them.
3. **The vocabulary is closed with four tokens**`Taxonomy`, `Tooling`,
`Engine`, `Staff`. `Engine` is in it; no action.
4. **`standard_version` comes out of the declaration.** Our `layer.yaml` carries
`standard_version: "0.7"`. A declaration asserts a standing property and must
not carry a standard version; version-scoped state belongs in the derived
conformance record, which must name what it derives from and the version or
commit it was derived at.
**Deliberately not done in this session.** The ruling states that
`standard_version` is not one repository's habit but **ops-warden's reference
form**, which this repository copied along with seven others, and that ops-warden
is asked to make the change there rather than each adopter deciding independently.
ops-warden is updating that reference form in a parallel session. Inventing our
own sidecar shape ahead of it would produce exactly the divergence the ruling
exists to close, so we record the requirement and wait for the reference form.
What `secrets-engine` will need, once the reference form lands:
- Adopt the reference form's derived-artifact marking in `layer.yaml`, keeping
`declared_by: INTENT.md` or whatever field the reference form names for it.
- Remove `standard_version: "0.7"` from `layer.yaml`.
- Move the version the conformance run was derived at into our derived
conformance record, per the reference form's field for it. Our conformance
checker is `scripts/check_layer_conformance.py`; it reads `layer.yaml` today
and will need to read `INTENT.md` as the governing form, read the sidecar as
well, and **report a disagreement between them as a finding** rather than
resolve it by precedence. A casing-only difference is not such a disagreement.
- Keep `framework:`, `layer:`, `role:` and the substantive §3/§5/§6/§9.6
content unchanged. `role:` is explicitly not ruled and stays as it is.
- The `Framework:` header comment in `layer.yaml` cites
`security-layer-model_v0.7.md` while the ruling is issued against `v0.8`.
That is a citation in a comment, not a declaration version, so it is out of
scope for part 4 — but it should be refreshed in the same commit so the two
are not confused for each other.
No task is opened here by hand. This is a note against the workplan that already
owns `layer.yaml` / `pep-stance.yaml` / INTENT frontmatter staying in one voice;
the work lands under that exit criterion when ops-warden's form is published.
## Exit criteria
- The published PEP stance is the shipped default and stance application is