From 7eeb1c7265181bd9178086f5b6bd83eac62d009a Mon Sep 17 00:00:00 2001 From: tegwick Date: Mon, 7 Sep 2026 13:44:46 +0200 Subject: [PATCH] docs: correct the stale step-2 blocker, and ask custody about the npm lane path SECRETS-WP-0008-T02 still said access-engine Check was unreachable. That is no longer true and the note read as current, so it is corrected rather than left to mislead: Check is reachable through the owner-documented access path and step 2 is proved against decision:0f9c98f14545c42d, a real v2 allow. Two defects that only a real request could expose -- the missing tenant and the unsatisfiable digest join -- are fixed, so the task's own acceptance line about failing closed on wrong digest and expired lifetime is now exercised against a genuine envelope rather than a fixture. What remains for that task is step 1 alone: approval-engine must serve the claim endpoint, and APPROVAL-WP-0002-T03 is still wait with no deployed base URL. One external dependency, not the two previously named. SECRETS-WP-0006-T06: asked railiance-platform which KV location backs the whynot-design npm publish lane (hub message 546403e4). The question is narrowed to the path, since the endpoint agrees and ops-warden's NPM_AUTH_TOKEN claim resolved here as a category error -- that is the resolved injection env var, not a KV field name. Catalog left unchanged: rewriting a proven production lane pointer from an inbox claim is the unverified custody mutation this task exists to prevent. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01E4tNMAYcSQmZWUE4wqP4ij Assistant: claude-code Assistant-Model: opus Assistant-Process: 715726@bnt-lap001 Assistant-Session: 80a42b32-cba6-4b23-8be0-68819b1a6092 --- .../SECRETS-WP-0006-catalog-lane-adoption.md | 10 +++++ ...-0008-layer-model-lifecycle-conformance.md | 37 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/workplans/SECRETS-WP-0006-catalog-lane-adoption.md b/workplans/SECRETS-WP-0006-catalog-lane-adoption.md index 26fbabc..cf2e6df 100644 --- a/workplans/SECRETS-WP-0006-catalog-lane-adoption.md +++ b/workplans/SECRETS-WP-0006-catalog-lane-adoption.md @@ -293,6 +293,16 @@ location backs this lane. If the platform path is authoritative, the catalog mount/path move is a reviewed lane change carrying its own approval, and the declared field stays `npm_token` unless custody says otherwise. +Asked 2026-09-07 (hub message `546403e4` to `railiance-platform`). The question +is narrowed to the path alone, since the endpoint agrees and the +`NPM_AUTH_TOKEN` claim was resolved here as a category error rather than a +discrepancy. Also asked whether the current `secret/...` location still exists +if the platform path is authoritative — a stale duplicate holding a real token +is worth knowing about independently of this lane. Flagged to them that +ops-warden's `ready: false` is our expected fail-closed posture and must not be +read as corroborating the platform path. Awaiting reply; the catalog is +unchanged. + ## Exit criteria diff --git a/workplans/SECRETS-WP-0008-layer-model-lifecycle-conformance.md b/workplans/SECRETS-WP-0008-layer-model-lifecycle-conformance.md index 4717203..f5c600e 100644 --- a/workplans/SECRETS-WP-0008-layer-model-lifecycle-conformance.md +++ b/workplans/SECRETS-WP-0008-layer-model-lifecycle-conformance.md @@ -111,6 +111,43 @@ local seam. The join is now implemented and tested; the remaining blocker is genuinely external (approval-engine claim endpoint and access-engine Check, both unreachable as of 2026-09-06). +Progress 2026-09-07. **Step 2 is no longer blocked and is proved against a real +decision.** The 2026-09-06 note above says "approval-engine claim endpoint and +access-engine Check, both unreachable"; the second half of that is now out of +date and is corrected here rather than left to read as current. + +`access-engine` Check is reachable through the owner-documented access path +(loopback `kubectl port-forward` to the named pod plus a bounded `TokenRequest` +token; `docs/pdp-access-path.md`). A real CheckRequest for +`glas-claude-agent-dev-anthropic` returned `decision:0f9c98f14545c42d`, `allow`, +`catalog_lane_policy_matched`, under package `secrets-engine.catalog-lane.lifecycle` +v2 with `binding.tenant: tenant:platform`. + +Two defects surfaced only because the request was real, both now fixed: + +- Our CheckRequest carried no `tenant`, which v2 treats as a `wrong_tenant` + denial rather than an omission (`80eafaf`). +- `validate_decision_envelope` required byte-equality between the binding and + our unenriched request, which no real decision can satisfy because the + evaluator normalizes and enriches from its registry before hashing. Corrected + to the published consumer rule in `10baad9`. + +So the acceptance line "wrong digest, expired lifetime, superseded status, or +missing record fail closed before OpenBao" is now exercised against a genuine +envelope: the unrefreshed live decision is refused on lifetime, and a restated +`resource.attributes.stage`, a foreign `subject.tenant`, or an unexpected +enrichment field are each refused. + +**What remains is step 1 only.** approval-engine must serve the claim endpoint; +`APPROVAL-WP-0002-T03` is still `wait` with no deployed base URL, so +`resolve_consume_binding` returns `None` and production stays fail-closed. That +is one external dependency rather than the two this task previously named. + +Also recorded, and not a blocker for this task: flex-auth's response channel is +unauthenticated (`FLEX-DEC-2026-010`). Fail-closed protects against a PDP that is +absent, not one that lies. Until `FLEX-WP-0024` ships detached signatures, the +enforced loopback address shape is what stands in for responder authenticity. + Blocked on the durable ActionAuthorization serving path owned with `SECRETS-WP-0007-T04` / State Hub / `access-engine`.