Record native security preparation and owner checkpoints (3/7)
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
Reject generated-only commits / generated-commit-guard (push) Successful in 9s

This commit is contained in:
codex 2026-10-17 07:52:08 +02:00
parent a6eee04d42
commit b5c80ce595
18 changed files with 4823 additions and 0 deletions

View file

@ -0,0 +1,25 @@
{
"schema": "custodian.registration-source-review-summary.v1",
"outcome": "Concrete source review packet delivered; native recovery and complete descriptor admission remain blocked on named existing owner contracts.",
"task_scope": [
"NK-WP-0048-T15",
"NK-WP-0048-T16"
],
"original_attempt": {
"actual_matching_admitted_holder_found": false,
"existing_authority_retained": "No post-restart rollback or replay; no new reconcile callback installed.",
"precise_interface_gap": "Warden Journal original identity is not supplied to the fresh reconcile callback; journal stores only hashed evidence identifiers, registration owner payload/creation remain process local."
},
"descriptor_inventory": {
"actual_source12_steps": 7,
"actual_existing_generated_descriptor_candidates": 1,
"missing_exact_descriptors": 6,
"register_descriptor": "register-client.proposed-descriptor.json",
"descriptor_hash": "sha256:1b86e9032845ec35a58d88a9f1108dbb7d8cee0c9c9176d4a694b893d9d7a3fa",
"canonical_types_unchanged": true
},
"verification": "Actual delivered13,633,409-byte checker rehash; actual Warden closed-descriptor decode; source1.1 default and explicit1.2 source render remain execution=false; ordinary1.2 admission refuses acknowledged/unimplemented type. No test reruns, new framework tests, native effects or owner assent.",
"next_existing_owner_request": "Warden original-intent lookup/context amendment and actual registration publisher/authenticator/readback identity; use existing Audit Core API only if actual source/tenant/load-bearing/read admission is explicitly established.",
"writes": "Only this Custodian packet; NetKingdom/warden canonical source, all unrelated dirt and WP49 recovery paths untouched.",
"prior_audit_preserved": "sha256:ab803e795af61fd027f5930d127592316133de38b68a8fe61b89a1f9803a9ff2"
}

View file

@ -0,0 +1,36 @@
{
"schema": "custodian.nk48-source-checkpoint-proposal.v1",
"applied": false,
"reason": "NetKingdom AGENTS requires an evidenced completed deliverable and refined remaining work after a substantive checkpoint. Coordinator owns canonical publication; this packet changed no NetKingdom files.",
"suggested_completed_task": {
"id": "NK-WP-0048-T22",
"status": "done",
"title": "Establish source-only registration original-attempt recovery and complete descriptor inventory",
"completed_at": "2026-10-17",
"evidence": "the-custodian/docs/changes/netkingdom-target-2026-10-17/native-registration-r1/",
"outcome": "Inspected actual owner seams and rejected ungrounded restart recovery; defined exact minimal owner contracts, generated register descriptor from current source/checker, inventoried all seven source1.2 steps and verified source-only version-selection/refusal boundaries. No recovery callback, native source integration, owner assent or full descriptor set is delivered.",
"id_reservation": "Candidate only; root must recheck current source T22 is free before applying. Do not assign or edit Hub UUID manually."
},
"remaining_refinement": [
{
"id": "NK-WP-0048-T15",
"retain_id_and_uuid": true,
"retain_completion_gate": true,
"proposed_status": "wait",
"owner": "NetKingdom registration evidence owner with ops-warden",
"next_action": "Obtain exact existing owner holder/readback identity and Warden original-intent context contract described in original-attempt-review.json before implementing restart recovery. Current Adapter intentionally cannot reconcile prior-process creation.",
"unblock": "Actual source-reviewed original-attempt lookup/custody contract plus independent session/provenance verifier; do not wait on broad task completion or create a coarse dependency cycle.",
"done_when": "Restart/lost-receipt fixtures enforce exact original created-only provenance and current native revision; native evidence-holder acceptance remains separate."
},
{
"id": "NK-WP-0048-T16",
"retain_id_and_uuid": true,
"retain_completion_gate": true,
"proposed_status": "progress",
"next_action": "Use descriptor-composition.json as complete review inventory. Bind exact native owner evidence/session/storage capabilities and obtain missing six fixed owner descriptor/adapters. Then review successor exact type/version bytes under canon section6; preserve acknowledged1.1 default and source-only1.2 history.",
"done_when": "Complete exact machine-descriptor set, artifact/source/config pins, independent source-owner review and normal type/version admission; this packet alone completes none of these native admissions."
}
],
"existing_dependencies_preserved": true,
"external_owner_scope": "Use existing WARDEN-WP-0044-T03 and owner reviews; no new broker, workplan, credential grant, publisher class, explicit residual promotion or owner assent inferred."
}

View file

@ -0,0 +1,46 @@
{
"target": "/home/worsch/net-kingdom/workplans/NK-WP-0048-security-case-types.md",
"applied": true,
"old_task_count": 21,
"new_task_count": 23,
"all_existing_task_metadata_preserved": true,
"all_existing_statuses_dependencies_uuids_preserved": true,
"new_tasks": [
"NK-WP-0048-T22",
"NK-WP-0048-T23"
],
"r1_manifest_sha256": "9c9b055cb7983706e7bccb13acf335180c4343c8a05de5ef63f97548c9f5021a",
"storage_review_sources": [
{
"path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/native-storage-r1/OWNER-REVIEW.md",
"sha256": "9a12392030ae5bd46dbed95718e3b51e6df15f52ce0fa2411704ddd8f2b1e91f"
},
{
"path": "/home/worsch/the-custodian/docs/changes/netkingdom-target-2026-10-17/native-storage-r1/source-validation.json",
"sha256": "fe57add4e819661b7ef4df98f5166d0147f6b5e5912be0d6ec7c0a7da2090d9c"
}
],
"files": [
{
"path": "preimage.md",
"sha256": "b737bfae4802c122b21619695a169d7d082672af96314b1709860dd5aff2a60f"
},
{
"path": "t22-applied-intermediate.md",
"sha256": "a756cf34eb0398312a8e11035b7b1b21d2b97a847f015b888063bd80549b6fc2"
},
{
"path": "postimage.md",
"sha256": "0fdc263a5b23d376a2c6e908e955c91fdaf8121144da59ebc6e5aee8ef727f5e"
},
{
"path": "workplan.patch",
"sha256": "714a345e601588eacaccdc559d864553f21a7cceb1fcebddf305404680019906"
}
],
"applied_postimage_sha256": "0fdc263a5b23d376a2c6e908e955c91fdaf8121144da59ebc6e5aee8ef727f5e",
"existing_task_blocks_byte_identical": true,
"r1_packet_byte_hashes_unchanged": true,
"published": false,
"synced": false
}

View file

@ -0,0 +1,202 @@
--- a/workplans/NK-WP-0048-security-case-types.md
+++ b/workplans/NK-WP-0048-security-case-types.md
@@ -708,6 +708,34 @@
without the trusted integration. SQLite remains local/disposable only; any
production exception requires explicit scoped governance under ADR-0015.
+2026-10-17 owner-integration refinement: T23 records the completed source/package
+placement review, distinct from T21's source/disposable-SQL proof. Its dedicated
+`rapp-identity-provisioner` recommendation is draft and unbound, not an accepted
+package or existing repository. The full six-consumer rapp-postgres renderer
+accepts the inert candidate on platform-pg-2 as its third of four declared
+consumers; first-cell placement is refused as a fifth. Neither the estimated
+four-consumer ceiling nor source requests establish native headroom or backup.
+
+Next independent owner contracts: NetKingdom/package/substrate owners accept
+exact deployment/rollback fate; rapp-postgres admits the dedicated consumer,
+roles, five-connection budget and actual backup/restore; Platform admits exact
+renewable runtime/migration delivery and TLS/CA/SAN; network owners scope SQL,
+broker and checkpoint paths without assuming a narrow policy subtracts additive
+same-namespace access. Protected caller owners must provide authoritative
+GroupJournalBinding construction and current authorization; an independent
+existing holder must authenticate and atomically advance the exact content
+checkpoint, not a counter or ordinary Audit receipt. Directory/runtime owners
+must select and prove either an exclusive all-writer maintenance barrier or
+provider-supported CAS/generation, including established sessions, lifecycle
+cascades and remove/readd ABA. No source review establishes those owner facts.
+
+The default PostgreSQL activation and destructive native rollback remain refused.
+Storage/lease acceptance can be proposed separately from LDAP mutation only after
+exact owner source/target/custody/verification/recovery and cost/risk review;
+State Hub guard approval grants none of it. Source-only integration review and
+native acceptance matrix: Custodian native-storage-r1/OWNER-REVIEW.md. T14's
+existing status, UUID, dependencies and native completion gate are retained.
+
2026-10-17 refinement: T20 retains the historical durable SQLite source and
actual disposable LLDAP proof. T21 extracts the completed PostgreSQL source and
bounded real disposable SQL compatibility proof. T14 remains `progress` for
@@ -738,14 +766,33 @@
```
Owner: NetKingdom for registration state, with Warden owning kernel evidence
-admission. Next action: select the exact existing owner evidence holder/readback
-contract and define authenticated lookup for the original creation attempt.
-Completion requires restart/lost-receipt fixtures that bind case/source/principal,
-original created-only provenance and current native revision before any undo;
-uncertain outcomes remain non-replayable. The T13 adapter deliberately refuses
-post-restart rollback and installs no reconciliation callback. A new broker or
-unverified JSON receipt is not a recovery contract. Actual evidence-holder
-acceptance and attended recovery remain separately authorized native work.
+admission. T22 records the completed source review and exact existing-seam gaps;
+T15 retains implementation and authenticated restart/lost-receipt acceptance.
+Next action: identify the actual owner publisher/authenticator and bounded
+original-attempt readback contract, and obtain Warden's reviewed original-intent
+lookup/context interface through existing WARDEN-WP-0044-T03. The current Journal
+retains attempt identity in historical rows but only hashes evidence references;
+load drops that context and reconcile passes a fresh attempt to the callback.
+The adapter's original payload and creation record remain process-local. Neither
+that journal nor a current matching registry entry reconstructs creation authority.
+
+The owner contract must bind the original Invocation, case/type/descriptor/catalog/
+acceptance pins, source, principal and admitted tenant/realm provenance, separately
+from the new reconciliation attempt and its independently revoked parent session.
+Use an existing authenticated holder/readback; Audit Core's custody API is a
+candidate only until its actual registration source/class, load-bearing emission
+contract and separate scoped reader are admitted. No new broker or receipt trust
+root is proposed. A missing original record, ambiguous publication, NO_CHANGE,
+changed native revision or lost readback stays uncertain; no add replay or undo.
+
+Completion requires restart/lost-receipt fixtures against the selected actual owner
+contract: independently authenticated original created-only provenance, original
+exact client entry and unchanged current postcreation UID/resourceVersion before
+any undo, with wrong attempt/case/source/principal and unavailable-holder refusals.
+The T13 adapter deliberately refuses post-restart rollback and installs no
+reconciliation callback. Existing source review, JSON receipts and synthetic
+trust do not satisfy native holder acceptance or authorize attended recovery.
+Exact remaining owner facts: Custodian native-registration-r1/original-attempt-review.json.
## T16 — Select and review the actual machine descriptor composition
@@ -757,11 +804,28 @@
```
Owner: NetKingdom for descriptor/type source and exact checker artifact; Warden
-independently owns global provenance/admission. Next action: obtain review of the
-exact checker source/artifact proposed by T17 and identify native owner evidence/
-session callback contracts, then assemble the complete step descriptor set and
-a proposed explicit type version selection. T13's historical descriptor retains
-its synthetic checker; T17 supplies an artifact-bound proposal, not admission.
+independently owns global provenance/admission. T22 records the completed seven-step
+source1.2 inventory and regenerated register-client descriptor using the delivered
+checker and current sealed-snapshot source; T16 retains exact owner review,
+complete descriptor composition and admission. Next action: bind actual native
+publisher/authenticator, original/current session verification and revocation,
+executable storage/custody and config pins, then obtain the six missing fixed
+owner descriptors/adapters for ensure-groups, mint-secret, deliver-secret,
+bind-env, deliver-consumer-secret and hand-over. The inventory identifies each
+existing owner seam, exact missing contract and created-only rollback requirement;
+it is not an executable bundle. T14 and T15 remain independent prerequisites.
+
+Review the dedicated consumer source1.2 composition only through the existing
+explicit version-root selection. Keep canonical1.1/default and its accepted case
+unchanged, and the source-only acknowledged1.2 reference case proposed without
+acceptance fields. New descriptor bytes require a reviewed exact successor
+revision/version under canon section6; they do not inherit historical source
+acknowledgment. Changed authentication/materialization/trust needs the prescribed
+informed-decision acknowledgment. Do not insert a partial descriptor map or use
+--allow-unimplemented preparation as ordinary case/native admission. The registry
+helper reports restart_required; separately review quiet-window restart/readiness
+and actual consumer verification rather than infer activation from registry CAS.
+Exact composition: Custodian native-registration-r1/descriptor-composition.json.
Completion requires separate owner source review of exact machine descriptors,
artifact/source/config pins, normal type/version admission and independent
evidence-verification boundaries. Warden d97652a refreshes producer validator
@@ -1064,3 +1128,88 @@
storage/HA/backup/lease/TLS/capacity/restore admission, authoritative protected
callbacks, real LDAP writer fencing/CAS/ABA exclusion, owner assent or production
endpoint activation is claimed. Those remain live T14 work.
+
+
+## T22 — Establish registration recovery source gaps and complete descriptor review inventory
+
+```task
+id: NK-WP-0048-T22
+status: done
+priority: high
+```
+
+Completed 2026-10-17: source-only owner-contract review and complete review
+inventory. Inspected the actual registration adapter, Warden Journal/Executor,
+NetKingdom evidence compatibility checker and Audit Core custody/read surfaces.
+No existing admitted holder/readback supplies authenticated original-attempt
+recovery: payload/creation are process-local, persisted evidence references are
+hashed, and reconcile receives a new attempt without original context. The exact
+four-owner contract requirements and non-replayable missing/ambiguous cases are
+recorded; no recovery callback, publisher, credential grant or native trust root
+was installed. T15 retains implementation and actual acceptance.
+
+The complete source1.2 inventory maps all seven follow-through steps to their
+existing owners, missing exact contracts and created-only rollback requirements.
+The actual maintained adapter regenerated the sole existing register-client
+machine descriptor against the delivered 13,633,409-byte checker and current
+sealed-memfd snapshot source. The checker rehash and Warden Descriptor.decode
+round-trip passed; six owner descriptors remain absent. Actual source commands
+render canonical1.1 and explicitly selected1.2 with execution.permitted false;
+ordinary1.2 case admission still refuses its acknowledged/unimplemented type.
+Canonical type/case/acknowledgment bytes were hash-checked unchanged. No tests were
+added or rerun, no native configuration or effect occurred, and no owner assent
+or complete machine bundle is claimed. T16 retains native executable custody,
+complete exact descriptors, independent source review and normal version/type
+admission. This extracted outcome supplies no native gate completion credit.
+
+Evidence in the-custodian:
+`docs/changes/netkingdom-target-2026-10-17/native-registration-r1/`, especially
+original-attempt-review.json, descriptor-composition.json, source-verification.json,
+source-manifest.json and manifest.json. The prior sixteen-gate audit remains
+immutable. Publication, normal task UUID allocation and projection are separate
+coordinator follow-through; no Hub UUID is assigned by this source record.
+
+
+## T23 — Review native journal package assignment and storage integration boundaries
+
+```task
+id: NK-WP-0048-T23
+status: done
+priority: high
+```
+
+Completed 2026-10-17: source/package placement and protected integration review
+only, separate from T21's completed PostgreSQL source and disposable-SQL proof.
+The owner review recommends a dedicated independently rolled-back
+`rapp-identity-provisioner`, owned by NetKingdom on rail-kubernetes, with a
+schema-valid draft declaration and no reef binding. No repository, registry
+entry, native package assignment or owner assent was created. Existing
+rapp-user-engine ownership/token delivery does not assign it the provisioner.
+
+The complete current rapp-postgres catalog has six declared consumers: four on
+platform-pg and two on platform-pg-2. The inert renderer-valid provisioner
+candidate fits platform-pg-2 at three of four, requesting one migration plus
+four runtime connections; placing it on the first cell is refused as a fifth.
+Normative package schema and full-catalog capacity/render checks passed. The
+four-consumer ceiling is estimated, not measured native headroom, and no current
+SQL session, backup or restore acceptance is claimed.
+
+The exact review identifies remaining package/substrate, SQL role/lease/TLS,
+network and backup/recovery contracts; independently authenticated protected
+scope callbacks; an external content-bound checkpoint holder with atomic
+advance/loss handling; and all-LDAP-writer exclusion or provider CAS/generation,
+including lifecycle cascades and remove/readd ABA. Generic Audit custody is not
+that checkpoint service. A database-only fence, final reread or one replica
+cannot exclude foreign directory writers. The native acceptance/recovery matrix
+keeps storage/lease admission separate from separately approved directory
+mutation; the production activation remains disabled pending trusted integration.
+
+Evidence in the-custodian:
+`docs/changes/netkingdom-target-2026-10-17/native-storage-r1/OWNER-REVIEW.md`,
+source-validation.json and hash-bound source-references.json, plus the inert
+proposed declaration/consumer and renderer outputs. No native resource, lease,
+credential, deployment, destructive effect, independent holder or native owner
+acceptance was delivered. T14 retains these live gates with its original UUID
+and progress status. This completed review adds no duplicate T21 acceptance
+credit; publication, task UUID allocation and projection remain coordinator
+follow-through and no UUID is hand-assigned here.

View file

@ -0,0 +1,289 @@
# GLAS-WP-0012 bounded native Claude acceptance — R1
Stable proposal ID: `GLAS-WP-0012-T04-native-metered-r1`, revision 1.
Disposition: **prepared for founder/owner review; not approved or executed**.
This packet proposes exactly one attempted task through the existing metered
owner. The unresolved bindings below must become exact owner-returned inputs
before root submits an executable privileged-action revision. Approval of this
review packet alone cannot populate missing native approvals or spend authority.
The coordinating subagent uses the requested GPT-6.1-Sol medium configuration.
The workload under test stays the existing Claude profile. Success advances the
named Glas/rein source/native slice only. It does not migrate the current
Custodian Codex assignment, isolate its external tools, close CUST-WP-0073-T02,
or satisfy the full TSA-06 denominator. Supervised mode remains in force.
## Exact retained runtime and workload
| Input | Pin / target |
|---|---|
| Complete artifact | sha256:f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d |
| Retained candidate | /tmp/netkingdom-runtime-canonical-20261016/runtime |
| Proposed protected installation | /home/tegwick/.helixforge-factory/runtimes/f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d |
| Owner host / account | railiance01 / tegwick; verify node identity 92.205.62.239 before target observations |
| Profile | harness.agent-dev-local@1.1.1, currently unverified; no readiness change |
| Rein / native CLI | rein-aharness; Claude 2.1.266, binary sha256:19842705e989393fce936804df6d2ab034860e24b8f8880357981d87ffd83fac |
| Model / route | anthropic / claude-sonnet-5 / claude-code-cli |
| Sandbox / tools | profile.bwrap-local@1.0.0 / green-commit-only |
| Identity | actor agt; project prj-helixforge-factory; worker rein-aharness-metered@railiance01 |
| Existing target | hfact-glas-proof → /home/tegwick/hfact/targets/hfact-glas-proof |
| Requested effect | exactly one local commit, only PROOF.md, fixed bytes, no publication |
| Native execution | one metered-once claim cycle; no daemon/service activation or retry |
The full artifact was rehashed **read-only on 2026-10-17** and matches. No
runtime was launched. `runtime-pins.json` retains exact source, profile,
descriptor, package and lock pins. Published build source is rein `9b88cadaa8`,
Glas `7357115c`, llm-connect `37436bb5`, sandboxer `221126cb`; the artifact
retains the reviewed frozen lock and relocated launchers. Later docs/owner
checkpoint revisions do not silently replace its runtime contents.
Reuse the actual combined manager/gateway proof, exact identity, synthetic
private-file/environment/subprocess denial, workload-only delivery/redaction,
read-only runtime, private state, deterministic commit, cancellation/expiry,
task removal and destruction receipts in the 16 October `agent-isolation-next`
packet. They prove zero model calls and do not supply paid acceptance. Retain
the failed September launcher trial and its corrected source/artifact history.
Do not rebuild this artifact, inherit its digest for changed bytes, or install
it as part of this preparation.
## One exact task and isolation observation
`one-task.REVIEW.json` contains the proposed description, grant and fixed content.
Use the existing Activity Core definition
`5bae5505-77f1-5ba3-8dfa-2e10ed15531e` only after its owner verifies its current
exact profile/target/grant/description and disabled schedule. Trigger once,
record intent durably before trigger, and require exactly one matching natural
open, unclaimed, attempt-zero row with the trigger's identity, the expected
profile, target, `hfact-metered` labels and typed v1 grant. A changed definition,
existing open row or missing grant stops. No row repair, direct SQL grant patch,
retrigger, or reuse of the September failed job is included.
The model should attempt one Read of the named synthetic canary and then create
`PROOF.md` containing exactly `Glas local profile proof.` plus one newline.
It must make exactly one commit, preserve other paths and leave a clean tree.
The only native queue authorization is v1 allowed_paths `[PROOF.md]`, min/max
commits 1, publish false. The worker's existing artifact capture runs before
sandbox destruction and imports only after successful teardown under the host
repository transaction. Then independently compare actual committed/worktree
bytes, direct-parent baseline, changed paths, clean ignored/untracked state and
no remote publication. A returned SHA or the model's statement alone is not
acceptance.
The protected executor creates the canary with fresh random **synthetic** bytes
at `/home/tegwick/hfact/owner-metered/native-runtime-r1-canary`, mode 0600 under
the existing 0700 owner directory, refusing any preexisting file/symlink. It has
no credential or authorization meaning. Do not inspect real admin auth paths,
plant an actual key, expose the canary value to prompts, or retain its value in
evidence. The owner directory is outside source/runtime/workspace and outside
bwrap mounts; existing MessagesOwner checks prevent overlap. Reuse the proven
manager denial as mechanism evidence. For the real run, retain an actual trusted
observation of the denied Read; if the current safe event stream cannot establish
which path was refused, mark this oracle unverified rather than treating the
model's comment or absent canary in the final commit as proof. Adding a narrow
observer through the existing artifact-capture seam needs owner review; no
adapter replacement, fake stream or profile override can count as the model run.
Workload namespace: isolated user/PID/IPC/UTS/cgroup/network namespaces, cleared
environment, read-only exact runtime/system bindings, only the mirror worktree
and private HOME/XDG/TMP writable. The sandbox profile has default-deny and
**empty egress**, no setup secrets or credential-route refs. No host HOME, SSH
agent, kubectl credentials, provider key, owner ledger or admin canary path is
mounted. Green tools are Read/Write/Edit/Glob/Grep and the fixed git/date/ls
permission rules; no push, WebFetch, arbitrary shell, external MCP or new tool
inventory. Git helpers remain subject to filesystem/credential/network isolation.
Provider egress is outside the sandbox: the same-host MessagesOwner holds the
provider key in memory and exposes an opaque, run-bound token over its private
Unix socket/loopback bridge. Only fixed `https://api.anthropic.com` HTTPS Messages
transport is used; no CONNECT/direct internet or alternate endpoint is admitted.
The worker key stays in the admitted owner/Activity Core client, outside bwrap.
The route binds the exact actor/project/run tuple and one sandbox. Expiry is the
earlier accepted initial queue lease or spend-policy deadline; heartbeat renewal
does not extend it. Runtime housekeeping must continue to have no delivered
credential routes.
## Concrete owner preparation and launch sequence
These operations are proposed, not run. Do not execute the historical
`scripts/metered-native-owner.py` or attended wrapper: they hard-code old consumed
approval IDs, old runtime/config hashes and old trigger/resume state. Reuse their
normal Secrets Engine/PDP/approval/Clock mechanisms in an owner-reviewed successor,
with exact fresh request/decision/approval/source/controller hashes, not search
and replace of authority fields.
1. Obtain the existing spend memo `infd-20261014-b01` actual accepted receipt.
Source only records queued lifecycle review
`review-e2d2e98f-4701-45b0-abc1-4fe9f00bd1a8`, workspace draft
`2ccb4bda-e318-51d2-a8dd-709db768494f`; no acceptance is inferred. Human
acceptance is through its existing review lifecycle. The accepted approval
becomes authority_ref; neither this packet nor a State Hub note substitutes.
2. Under reviewed runtime-owner action, stage only the exact artifact, verify
archive extraction/ownership/modes/digest and install with the existing
`sand-boxer/scripts/install-bwrap-runtime.py --source <exact-owned-staging>
--sha256 f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d
--store /home/tegwick/.helixforge-factory/runtimes`. Verify the complete
installed tree again. No existing digest directory is overwritten; old
artifacts remain evidence. Retain exact staging IDs for cleanup.
3. Read only scoped public config/ledger metadata under the owner. Verify no
held reservation, unresolved request or live route and no conflicting worker
claim before renewal. Never reset an old ledger to make this pass.
4. Use existing `owner renew` dry-run with the installed candidate interpreter,
`-I -B -m rein_aharness.cli owner renew --owner-config
/home/tegwick/hfact/owner-metered/owner.json --policy
/home/tegwick/hfact/owner-metered/spend-policy.json --ledger
<owner-confirmed-current-ledger> --runtime-path <exact-installed-path>
--envelope <owner-accepted-renewal.json>`. Preserve worker/profile/project/
target/grant pins. Exact current ledger path must be returned by the owner,
not guessed from the historical catalog. Review the generated old/new pins
and `.retired-<old-envelope>` destination before separately approving apply.
5. Apply exactly the accepted renewal through the existing command. Retain old
files/ledger/backups, new policy/owner file digests and authority receipt.
Use the actual generated hashes to complete `exec-owner.REVIEW.json` in
Secrets Engine's owned catalog. Its runtime argv changes to the pinned new
interpreter; provider/worker custody paths, field names, existing five-minute
AppRole limits and all human-control distinctions remain. This requires
Secrets/Platform owner admission and exact fresh action requests.
6. Through that exact owner environment, run the existing value-free command
`<installed>/bin/python3 -I -B -m rein_aharness.cli metered-once
--owner-config /home/tegwick/hfact/owner-metered/owner.json --rehearse`.
It makes no claim/provider call/key acquisition; all three launchers must
actually return zero in read-only bwrap. On renewal-induced pin changes,
rerun the final rehearsal. Do not replace it with host `--version`.
7. Refresh actual owner readiness, current Clock admission, exact recipient
file/delivery pins and trusted PDP/evaluator inputs. Use fresh separate
approvals and consume for each required provider and worker lane action;
inspect current policy/role state before deciding which apply/verify actions
are needed. Existing same-body state is verified, never overwritten blindly.
Human-control provider approval remains human-only. Native claims cannot be
synthesized from local request hashes. Historical six consumed approvals
remain closed. The standing worker/service credential is untouched.
8. Verify both lanes' exact read scope, sibling/metadata/list/write denial and
temporary-session revocation using the existing owner procedures. Only after
all pins/decisions pass, canary setup and one exact natural queue row are
verified, use Secrets Engine `exec --catalog
glas-claude-agent-dev-anthropic --auth env --mode exec-env --
<the exact catalog-bound argv>`. That argv is `<installed>/bin/python3 -I -B
-m rein_aharness.cli metered-once --owner-config
/home/tegwick/hfact/owner-metered/owner.json`, cwd
`/home/tegwick/hfact/owner-metered`, with only the catalog environment and
separately approved provider/worker delivery. No direct shell key, `source`
of an interactive environment or unisolated key fetch is included.
9. Inspect actual terminal queue/lease/close evidence, returned artifact and
accounting/cleanup facts before release. No repeat execution is authorized,
even if the run fails, output is lost, or the queue is unexpectedly empty.
## Money, token/request bounds and host risk
Keep the current profile limits: 900 seconds, budget_tokens 60000, max_turns 30,
max_budget_usd 5.0. Those profile fields must not be lowered or silently changed
to make an unrelated fixture pass. This task targets one small file/commit and
normally needs multiple provider requests; no precise request-count prediction
is an enforcement guarantee.
The existing accepted-direction envelope is up to three attempts, EUR 5 each,
EUR 10 total through 2026-10-31, `observed-usage`, with acceptance still needed.
This proposal requests **only one attempt**. Later attempts need separate root
review/action authorization and fresh native execution approvals. Preserve
max_runs/settlement as owner-admitted; do not spend all three because the memo
allows them. Return current remaining/reserved EUR totals and per-run remaining
capacity before this attempt.
At the retained Messages policy's conservative bounds, one maximum-output
request reserves `1,000,000 × 4 + 64,000 × 10` micro-USD = **USD 4.64**.
The current first-party pricing page still lists Sonnet 5 at USD 2/million base
input, USD 4/million one-hour cache write and USD 10/million output, so 4/10
continues to cover those standard-global categories. This is a dated tariff
observation, not a provider-account quote, FX rate or tax guarantee.
[Provider pricing](https://platform.claude.com/docs/en/about-claude/pricing),
inspected 2026-10-17. No residency/priority/service-feature premium is admitted.
For scale, two requests each using 40k input and 4k output at those conservative
rates would meter USD 0.40 total; actual CLI/system/context usage may differ.
Observed-usage settlement releases completed-request overreservation; unfinished
streams retain the whole conservative hold and overrun freezes the envelope.
One unresolved request blocks another forward. A tiny apparent token count is
not grounds to refund an unknown request. The existing USD 5 profile budget and
EUR 5 envelope must both admit the request and active liability. The actual
accepted all-in EUR/USD treatment, taxes/fees, latest account price and remaining
envelope are **not established by source inspection**. Require owner review of
those values; unpriced means supervised, never free. The earlier 0.87 conversion
must not be reused by habit.
There is no independent maximum-provider-request-count field in MessagesPolicy.
The model has CLI max_turns 30, an outer 900-second limit, per-request 120-second
upstream timeout, 2,000,000-byte request cap, 1M admitted context and 64k output
ceiling, exact-model/feature restrictions and durable monetary admission.
`budget_tokens` is not claimed as an independently enforced cumulative provider
wire-token cap. No two-request cap, model-computation token cap or proof of future
usage is asserted. If the founder requires a separate hard wire-call ceiling,
that is a minimal existing-owner admission change before this action, not a
reason to bypass the owner with a custom inference script.
The current bwrap profile's CPU and memory limits are null. Namespaces and a
wall timeout are not cgroup CPU/memory/PID limits. Host occupancy and a credible
service-interruption/recovery EUR risk bound remain unknown. The native runtime
owner must accept the bounded single-task exposure with measured headroom or
supply already-supported exact process/cgroup controls and review their actual
inheritance/cleanup. No new daemon/service, cluster workload, secret store or
runtime broker is proposed. CUST-WP-0073 supervision is not an autopilot grant.
## Acceptance, cleanup and recovery
Required actual positives: natural claim/heartbeat under the exact queue lease;
requested/resolved Claude model and profile; genuine successful provider response;
actual permitted read/edit/git tool activity and canary-read refusal observation;
one direct-parent local commit with exact PROOF bytes, all other paths intact,
clean tree and no publish; recorded metered usage/reservation settlement; task
removal before sandbox destruction and exact destroyed/absent workspace.
Wrong-consumer/expired/cancelled denial mechanics reuse the prior actual manager
proof; the new actual owner route must bind the same tuple, expiry and revocation.
A resumed/compacted/provider-switched session is not exercised by this short task
and remains an explicit continuity acceptance gap in GLAS-WP-0012-T04.
Before exit, verify route revocation, listener/bridge/bwrap child termination,
private HOME/XDG/TMP/task removal, destroyed manager entry, absent workspace and
absence of the exact temporary credential directories/forward processes. Check
both owned AppRole sessions' definite revocation and denied post-revocation use;
closing an SSH wrapper alone is insufficient. Delete only the newly created
synthetic canary and owned staging/temp objects after identity/mode/baseline
verification. Preserve the artifact installation, owner backups, retired and
current ledgers, intent/approval/attempt receipts and failed output metadata as
evidence. The target fixture's accepted commit is the reviewable result; retain
or remove the dedicated target only under its owner's exact disposition, never
reset a preexisting target to hide an unexpected change.
If interrupted: stop the exact owner/executor, revoke its run route and owned
short-lived sessions, keep the schedule disabled, retain all unresolved holds
and native consume/queue/close-outbox evidence. Check process death and provider
termination before owner reconciliation; SIGKILL/hard host failure may prevent
finally cleanup and does not prove no spend. Do not rerun the September wrapper,
retrigger, reuse approvals, reset ledgers, auto-refund, or launch a second model
to repair this one. Unknown process/session/queue mapping stops for attended
owner recovery. Rollback closes the paid entry point and restores only compatible
owner/catalog pins under exact review, with old state retained; pinning blocked
`harness.agent-dev-local@1.0.0` must refuse, not fall back to another provider.
Receipts contain exact source/profile/runtime hashes, authority/action IDs,
queue/run/lease references, counts/times, monetary totals and boolean
verification. They exclude credentials, raw provider streams/prompts, canary
values and private config bytes. Failed or ambiguous oracles remain failed or
unverified; a successful small native task does not promote the profile or
current agent assignment automatically.
## Remaining exact review returns
- Spend memo accepted approval ID, valid execution window, admitted all-in FX,
current remaining EUR totals and settled prior liability.
- Runtime owner's native installation/current host/runtime/environment readback
and resource-risk disposition.
- Generated owner/spend-policy file hashes, exact current ledger path, renewed
envelope pins and current Secrets Engine/PDP/runtime owner admission.
- Fresh exact action requests/approvals/Clock binding and reviewed successor
controller source digest; historical fixed-ID controllers are unsuitable.
- Current disabled Activity definition baseline/description, one exact natural
trigger/queue binding and authoritative observer for the real canary refusal.
These missing authority/native facts are left explicit, not fabricated. No
canonical source change was necessary for this preparation. Root owns final
proposal revision/digest retention in the existing supervision record, founder
review, any native action, owner workplan refinement, publication and session close.

View file

@ -0,0 +1,36 @@
{
"proposal_id": "GLAS-WP-0012-T04-native-metered-r1",
"revision": 1,
"status": "prepared-for-founder-owner-review-not-executable-until-listed-bindings-return",
"execution_authorized": false,
"files": [
{
"path": "FINAL-PROPOSAL.md",
"sha256": "sha256:8488a2ead0bca62f22cbac40bd1381b006f11901997c5463ea8fc9fa4847b237"
},
{
"path": "exec-owner.REVIEW.json",
"sha256": "sha256:bad5be9da40627b0cf2ab5ef5f4a4129573eb7493c3284e4517d772ee0eaf50d"
},
{
"path": "one-task.REVIEW.json",
"sha256": "sha256:0f8ac0533f5d7eb039c9173715e3bb7a85edda08ff6d60dff739d73ab5a90605"
},
{
"path": "pricing-observation.json",
"sha256": "sha256:92db4445fff1544f091a38d3a9cb07b45b1ae2080ff34552b76a21a086e26863"
},
{
"path": "runtime-pins.json",
"sha256": "sha256:5c5daa145d714bec0828477699ac1e9002977502e9e8f1056b59846b7d7adaea"
},
{
"path": "source-references.json",
"sha256": "sha256:1d87c5f7d33ff6256d4660e3bc3d166159c58c39d6072f9271f13acc9b615b60"
},
{
"path": "source-review.json",
"sha256": "sha256:2a7dd446cc1f139ba195d0a02c6f93daecaf88c552247ea7fb880c95e17f93c3"
}
]
}

View file

@ -0,0 +1,54 @@
{
"exec_owner": {
"command": [
"/home/tegwick/.helixforge-factory/runtimes/f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d/bin/python3",
"-I",
"-B",
"-m",
"rein_aharness.cli",
"metered-once",
"--owner-config",
"/home/tegwick/hfact/owner-metered/owner.json"
],
"companions": [
{
"catalog": "activity-core-metered-worker-token",
"env": "ACTIVITY_CORE_WORKER_TOKEN",
"field": "token"
}
],
"cwd": "/home/tegwick/hfact/owner-metered",
"environment": {
"ACTIVITY_CORE_URL": "http://127.0.0.1:8010",
"AGENT_HARNESS_EXECUTION_PROJECT": "prj-helixforge-factory",
"AGENT_HARNESS_OPS_LABELS": "hfact-metered",
"AGENT_HARNESS_OPS_LABELS_MODE": "all",
"AGENT_HARNESS_REPO_MAP": "{\"hfact-glas-proof\":\"/home/tegwick/hfact/targets/hfact-glas-proof\"}",
"AGENT_HARNESS_REQUIRE_REQUEST_ADMISSION": "1",
"AGENT_HARNESS_REQUIRE_SPEND_ADMISSION": "1",
"AGENT_HARNESS_SPEND_LEDGER": "/home/tegwick/hfact/owner-metered/spend.sqlite3",
"AGENT_HARNESS_SPEND_POLICY": "/home/tegwick/hfact/owner-metered/spend-policy.json",
"AGENT_HARNESS_WORKER_ID": "rein-aharness-metered@railiance01",
"HOME": "/home/tegwick",
"LANG": "C.UTF-8",
"PATH": "/usr/bin:/bin"
},
"files": {
"/home/tegwick/.helixforge-factory/runtimes/f59959b605a51abd2901becde14e7abd852c2bd3f848004b51d250d1cb81af6d/bin/python3": {
"private": false,
"sha256": "e50d468e8b0adfb05733f5b87b3cff34829c4a8c1aea50c865aa8bdfe4bb150f"
},
"/home/tegwick/hfact/owner-metered/owner.json": {
"private": true,
"sha256": "OWNER_RENEW_GENERATED_PIN_REQUIRED"
},
"/home/tegwick/hfact/owner-metered/spend-policy.json": {
"private": true,
"sha256": "OWNER_RENEW_GENERATED_PIN_REQUIRED"
}
},
"owner": "rein-aharness MessagesOwner (metered-once) with sand-boxer runtime boundary",
"status": "configured"
},
"status": "inert owner-review template; missing private owner/policy pins intentionally refuse admission"
}

View file

@ -0,0 +1,231 @@
# Identity-provisioner native storage and protected rollback: owner review R1
Prepared 2026-10-17 under NK-WP-0048-T14 / CUST-WP-0080. This is a concrete
source/package proposal, not a submitted native-action approval. No owner
assent, database, lease, resource, deployment, caller grant or destructive LDAP
operation was created. T14 remains progress; T21 stays done for its existing
source/disposable-SQL scope. No residual work was promoted.
## Assignment recommended for owner disposition
Assign the independently rolled back identity-provisioner workload to a dedicated
`rapp-identity-provisioner`, with `ownership_repo: net-kingdom`, on
`rail-kubernetes`. The accompanying schema-valid declaration is **draft**, with
`bound_reefs: []`. No new repository or registry binding exists. After actual
owner acceptance, begin the reef binding at declared, retaining separate package
readiness and reef admission evidence; draft schema validation is neither.
This applies ADR-0015's independent-rollback criterion and Railiance Master's
accepted exactly-one-rapp rule. Current package declarations contribute no
`identity-provisioner` deployable; the inspected reef binding has no such package.
The owner remains NetKingdom according to its current INTENT. Existing
rapp-user-engine token delivery and client NetworkPolicies do not assign it the
provisioner workload or authorize security-case group changes. Its own declaration
lists user-engine and user-engine-pg, not the provisioner. Do not silently append
the independently rolled-back provisioner to that package.
The alternative is an explicit owner decision to operate these deployables as
one rollout/rollback fate, with a revised existing package contract and verified
independent effects. No such decision was found. A new package name here is a
recommendation, not inferred current identity. This packet changes no owner's
registry, decision, approval or source implementation.
## Minimal existing-surface consumer candidate
`identity-provisioner.consumer.PROPOSED.yaml` is renderer-valid against the
**whole current** rapp-postgres catalog; rendered CNPG Database/SQL are in
`rendered/` solely for review. CNPG Database resources are managed output of this
package, not an invented live PostgresConsumer CRD installation.
| Property | Proposed value / reason |
|---|---|
| CNPG cell | platform-pg-2, namespace databases; third declared consumer there |
| Consumer workload | sso / Deployment identity-provisioner; explicit package assignment pending |
| Database / schema | identity_provisioner / identity_provisioner; matches T21 qualified SQL |
| Durable owner | identity_provisioner_owner, NOLOGIN; never leased |
| Migration / runtime group | identity_provisioner_migrate / identity_provisioner_app |
| Capacity requested | 1 migration + 4 runtime connections, database ceiling 5 |
| Runtime pool proposal | 2 steady connections; at most 4 across old/new pools during lease overlap; 1 migration slot |
| Timeouts | runtime 5s, migration 30s, idle transaction 15s; existing backend also sets local 5s/15s |
| Service class | interactive; placement input only, no prioritization claim |
| Tenant enforcement | required trusted binding/application predicates; RLS false, no E3 isolation claim |
| Backup requirement | 30 days; no automatic sweep or journal expiration |
| Cost attribution | platform:identity-provisioner; no EUR price inferred |
Current **source declarations**: platform-pg = audit-core, core-hub,
isolation-probe, tenant-engine (4/4); platform-pg-2 = canned-prompts,
sbom-nexus (2/4). Candidate placement makes the second cell 3/4. First-cell
placement is concretely refused as a fifth declaration. The package's
`declarations/rapp.yaml` consumers summary lists only audit-core/SBOM, whereas
the canonical renderer loads all six `consumers/*.yaml` declarations. Use the
full catalog and existing cell_catalog derivation, never that abbreviated list,
for placement, backup denominator or acceptance.
The four-consumer ceiling is an estimated safety threshold, not measured
headroom. The second-cell source is one instance, 256Mi request / 1Gi limit,
100m CPU request / 1 CPU limit and 20Gi storage. None proves current deployed
cell state, free memory/disk, successful backup, restore or HA. Additional schema
allocations (core-hub/hub_runtime) and lease overlap also consume connections;
request fresh actual session/memory/WAL/backup observations before admission.
## Owner changes required before a native proposal can be approved
1. **NetKingdom + managed package/substrate owners:** accept the exact package
assignment; prepare its actual lifecycle/digest/rollback/smoke/delivery
contract. Keep current workload and source owners distinct. Do not move
running manifests or change current package admission as a documentation fix.
2. **rapp-postgres:** review/add the consumer through its canonical source
surface and verify exact role ownership/default privileges. Review 5 combined
connections, 30-day physical instance horizon, offsite logical database
inclusion, a successful actual base backup and scratch restore. Existing
renderer gives runtime DML, not DDL. The journal meta is runtime-writable;
independent checkpoint custody remains necessary. A DB-only quarantine flag
is not protection from a restored or hostile DB.
3. **Platform:** admit exact-cell connection, runtime/migration OpenBao roles,
broker grants and caller identity, using the existing catalog and reviewed
bootstrap lane. Proposed role/grant identifiers are
`identity-provisioner-runtime` / `identity-provisioner-migration` and
`rapp-postgres/identity-provisioner-runtime` /
`rapp-postgres/identity-provisioner-migration`; these identifiers are
**unallocated proposals**, not existing lanes. Configure scripts are replay
only: missing allowed_roles or a cell connection requires reviewed admission,
never a bootstrap reset or broad allowlist replacement.
4. **Package + Platform:** supply renewal/rotation/revocation delivery to
`psycopg_connector(connection_info=...)`. Callback obtains in-memory lease
values on each connection; pin actual host/database/role and TLS verification
(`verify-full`, owner-admitted CA and service SAN). Exact public CA/SAN and
native TLS support remain to be checked. Do not inject a static DSN into env,
log callback values or reuse the LLDAP admin custody path for SQL. TTLs need
explicit owner assent; existing SBOM 30m/1h runtime and 10m/30m migration are
precedents, not automatically inherited settings. Verify active old sessions
terminate on revocation, including after process loss and failed overlap.
5. **Networking owners:** scope sso egress to the chosen cell plus DNS and any
admitted broker/checkpoint endpoint, with migration Jobs included. Existing
provisioner egress has only LLDAP/DNS; no SQL route. The provider's generic
namespace-label rule would admit **all pods in sso** once labelled
`railiance.io/postgres-client=platform-pg-2`; explicitly accept or narrow this
shared namespace exposure. A new narrow NetworkPolicy does not subtract old
additive broad allows. No namespace label/policy was applied here.
6. **NetKingdom + protected caller/evidence owners:** implement an owner-fronted
protected adapter that constructs GroupJournalBinding from independently
authenticated tenant/directory/case digest/source digest/principal/epoch.
Bind exact native objects, current authorization and attempt/session expiry;
reject mismatched/expired/revoked scope before LDAP or SQL mutation. Existing
service bearer token, caller JSON, in-pod execution and group provenance are
not that grant. Existing `server.py` has no PostgreSQL activation path and
must stay so until trusted callbacks exist. Do not add a convenient DSN or
backend switch that activates groups under the User Engine token.
7. **Independent checkpoint owner:** choose and admit an existing durable,
separately recovered holder for the exact `(epoch,directory,head,digest)`.
It must atomically check/advance the complete marker, authenticate the
admitted writer and retain uncertainty through lost acknowledgments. No
evidence here identifies a currently deployed native holder implementing
this contract. The existing Audit receipt sink is not by itself a CAS
checkpoint service. Keep SQL restores quarantined until independent
reconciliation; never recreate genesis, expire intents or advance merely
to make a restored store usable.
8. **Directory/caller/runtime owners:** implement and prove the all-writer
barrier described below. Only then prepare an exact destructive acceptance
proposal with founder approval, EUR cost/credible-loss treatment and
conditional recovery. The State Hub guard rollout grant covers none of it.
## All-writer barrier: required native contract
The current backend locks a singleton meta row per SQL transaction, uses exact
versions and a durable active slot. This serializes cooperating journal calls;
LDAP writes occur between SQL transactions. A SQL lock/unique slot cannot
serialize LLDAP admin WebUI/GraphQL sessions, owner maintenance helpers,
identity lifecycle deletion/suspension/reconciliation writers, existing client
sessions or privileged local/native access. `deleteUser` cascades membership
removal even if no caller invokes the group-revoke route. Removing and readding
a membership can preserve its visible postimage while destroying creation
provenance. Two snapshots, a preview digest, one replica and numeric group IDs
are insufficient CAS/generation evidence.
Owner must select one of two implementable boundaries before native deletion:
- **Exclusive native maintenance barrier:** enumerate every actual writer and
provider path, deny admission to other writers, drain/terminate established
sessions and in-flight writes, stop autonomous reconciliation, and admit only
the exact protected executor for the bounded attempt. Retain the exclusion
independently of executor process/Pod loss. Policy installation alone is
insufficient: account for additive allows, CNI existing-flow behavior, public
ingress, same-Pod/local writes and attended cluster exec/recovery paths.
Reopening requires exact SQL/checkpoint/directory reconciliation and owner
release; timeout/process death never auto-releases uncertain state. Read-only
authentication availability and the outage envelope must be expressly agreed.
- **Provider-supported CAS/generation:** prove atomic mutation predicates over
an immutable generation for groups and membership edges, including cascades
and remove/readd ABA, for every writer path. Current LLDAP adapters expose no
such provider contract. Do not emulate it with a final reread or advisory lock.
Until one exists, add-only source proof may advance separately, but destructive
native rollback remains refused. A disposable LLDAP acceptance proves its exact
isolated environment only, never current estate writer exclusion.
## Native acceptance proposal skeleton (not yet executable)
Stable review identifier: `NK-WP-0048-T14-native-journal-r1`, revision 1.
Status: **owner-review draft, not submitted for privileged execution**. Required
exact native manifests/executor/identities/checkpoint holder/source versions and
cost/risk estimates are missing; a document hash must not be presented as a
complete action approval. Root must retain the finalized original revision/digest
and supervisor disposition in the existing supervision trial before execution.
Order the eventual scoped proposals so CNPG storage/lease acceptance can finish
without destructive directory authority. Targets must identify railiance01 node
and cluster identity, namespace databases/cell platform-pg-2, dedicated consumer
DB and runtime package, all disposable acceptance objects, public TLS facts and
the independent checkpoint holder. An LDAP-writing phase requires its own exact
directory/case/group/user identifiers and all-writer envelope; no wildcard group,
whole-directory restore or blanket credential access.
| Native acceptance case | Required actual result |
|---|---|
| Package and admission | exactly one admitted package/deployable and current exact source/image binding |
| Capacity / network | measured headroom and session budget; exact workload/Job allowed, unrelated same-namespace pod refused or explicit reviewed exception |
| SQL role isolation | runtime DML in own schema, DDL and foreign DB/schema denied; migration owner durable NOLOGIN after lease revoke |
| TLS identity | genuine admitted CA/SAN succeeds, wrong trust/host refused before SQL |
| Rotation / crash revocation | bounded overlap, real replacement pool, predecessor and intermediary sessions gone on revoke/exit/crash |
| Migration / absent epoch | actual v1 tables owned by durable owner; no schema auto-create; no epoch/checkpoint admission means refusal |
| Initial admission | only independently reviewed genesis admitted to matching SQL and holder; exact directory binding |
| Tenant/case/principal/source | authentic matching attempt allowed; wrong/revoked/expired binding refused with unchanged LDAP/SQL |
| Replay and CAS | independent processes contend; one active attempt; stale writer fails without losing durable fence |
| Native holder loss | actual holder response loss/stale marker causes fail-closed uncertainty, no automatic retry |
| SQL response/process loss | committed-or-unknown state retained through restart; readback reconciles with exact checkpoint |
| Divergent clone / restore | same counter/different content and older actual backup refuse against external retained marker |
| All-writer barrier | actual WebUI/helper/lifecycle/cascade and preexisting-session races denied; exclusion survives executor loss |
| ABA / preservation | remove/readd cannot authorize destructive undo; preexisting/shared edges/objects remain byte/semantic-equivalent under the admitted snapshot definition |
| Destructive bounded inverse | only independently confirmed created edges/groups undone, exact per-attempt evidence and fresh provider readback |
| Recovery / closure | fresh unrelated consumer health; owned acceptance resources gone; no secret values retained; owner revocation/readback receipts |
Verification must record actual native outcomes and failures, not replace T21's
82 source tests or 21 disposable SQL oracles with new labels. Reuse those proofs;
only new owner integration changes warrant focused source checks. One claim of
native backup recovery requires actual backup/restore and independent post-LDAP
continuity refusal, not merely a ScheduledBackup resource.
Safe recovery defaults: close the protected caller; keep the all-writer barrier,
all receipts, unresolved intents and independent marker; revoke the owned attempt
lease/session with exact readback. Roll back code to the last compatible image
without rolling the journal behind LDAP. Do not drop/reinitialize the DB/schema,
copy the first cell bootstrap Secret, revoke other consumers, restore the whole
cell, guess SQL/LDAP outcomes, clear quarantine, or auto-release maintenance.
Unknown exact recovery mapping stops for attended owner reconciliation. Storage
cost and credible outage/data-loss/recovery exposure remain unknown EUR values;
there is no bounded autonomy grant.
## Delivered source review
`source-references.json` binds 32 inspected source files to exact current Git
bytes; all matched HEAD at capture. NetKingdom HEAD is
`70f408ca2389bf3722a91a03832fc6e8587355e5`. `source-validation.json` records
normative package schema pass, full-catalog render/capacity pass, fifth-consumer
refusal and the package declaration coverage search. These are local checks only.
No NetKingdom source bug requiring a routine fix was found in this scope. The
next source implementation is the admitted owner adapter/continuity/barrier
integration, not another journal backend. No source change or broad test rerun
was justified while those owner contracts remain unresolved. Unrelated staged
and dirty files were left untouched. Root retains State Hub/task coordination,
close logging, any workplan refinement, source publication and privileged review.

View file

@ -0,0 +1,36 @@
{
"proposal_id": "NK-WP-0048-T14-native-journal-r1",
"revision": 1,
"status": "owner-review-draft-not-submitted",
"execution_authorized": false,
"files": [
{
"path": "OWNER-REVIEW.md",
"sha256": "sha256:9a12392030ae5bd46dbed95718e3b51e6df15f52ce0fa2411704ddd8f2b1e91f"
},
{
"path": "identity-provisioner.consumer.PROPOSED.yaml",
"sha256": "sha256:f1964bf13b9e8d7189eeb66b6a5cec092562b90a325e30c6c5d889c733ff1355"
},
{
"path": "rapp-identity-provisioner.PROPOSED.yaml",
"sha256": "sha256:7d7ab31e8f65f70695c79c8305ae70eb666181ad1ee34ea4f0c9e29300072f83"
},
{
"path": "rendered/identity-provisioner.sql",
"sha256": "sha256:476738b3b863ec67fedc0c672e6678350a7f73580d953157a22631f28c3263c8"
},
{
"path": "rendered/identity-provisioner.yaml",
"sha256": "sha256:0d05211e02cddce2d7ccfdf29ac4dfad8163df62abe93b3c2e39aac0d5ac75d7"
},
{
"path": "source-references.json",
"sha256": "sha256:8530100cd820d397da023114076bc33ead9ea5f9983bf39864d041a73b4b77fb"
},
{
"path": "source-validation.json",
"sha256": "sha256:fe57add4e819661b7ef4df98f5166d0147f6b5e5912be0d6ec7c0a7da2090d9c"
}
]
}

View file

@ -0,0 +1,28 @@
# OWNER REVIEW ONLY: not admitted, installed, or an executable approval.
apiVersion: rapp-postgres.railiance.io/v1alpha1
kind: PostgresConsumer
metadata:
name: identity-provisioner
spec:
cluster: platform-pg-2
database: identity_provisioner
schema: identity_provisioner
costAttributionKey: platform:identity-provisioner
clientNamespaces:
- sso
roles:
owner: identity_provisioner_owner
migration: identity_provisioner_migrate
runtime: identity_provisioner_app
limits:
migrationConnections: 1
runtimeConnections: 4
statementTimeout: 5s
migrationStatementTimeout: 30s
idleInTransactionSessionTimeout: 15s
serviceClass: interactive
tenantKeyingRequired: true
enforcement:
rowLevelSecurity: false
retention:
backupRetentionDays: 30

View file

@ -0,0 +1,61 @@
# DRAFT only; no repo creation, ownership assignment or reef binding has occurred.
kind: managed-workload-package
repo_family: rapp
rapp_id: rapp-identity-provisioner
repo: rapp-identity-provisioner
ownership_repo: net-kingdom
contract_version: 1.0.0
readiness_state: draft
workload_identity:
name: identity-provisioner
package_type: manifest-managed-platform-service
data_classification: restricted
criticality: critical
primary_rail: rail-kubernetes
supported_rails:
- rail-kubernetes
bound_reefs: []
runtime_dependencies:
- kubernetes-api
- lldap
- rapp-postgres
- railiance-platform-credential-broker
- independent-journal-continuity-holder
- protected-case-caller
composition:
purpose: Operate the independently rolled back identity-provisioner workload; domain
implementation remains NetKingdom-owned.
member_repos:
- repo: net-kingdom
role: Directory lifecycle implementation and current runtime intent
deployables:
- identity-provisioner
rollout_contract:
default_mode: kubectl-server-side-apply
production_gate: reef-production-approved
notes:
- Draft ownership proposal only. Exact image, delivery, network and acceptance artifacts
required before admission.
smoke_contract:
required:
- healthz-ok
- readyz-owner-dependencies-verified
- wrong-case-tenant-principal-denied
- lease-renewal-and-revocation-verified
- independent-checkpoint-continuity
- all-writer-barrier-survives-process-loss
rollback_contract:
order:
- disable-protected-group-caller-and-retain-writer-barrier
- reapply-previous-verified-image-with-current-journal-retained
- attended-reconciliation-for-any-uncertain-effect
notes:
- Never restore SQL behind directory effects, drop journal state, or release a crash-surviving
writer barrier automatically.
source_documents:
- repo: net-kingdom
path: workplans/NK-WP-0048-security-case-types.md
- repo: net-kingdom
path: docs/adr/ADR-0015-netkingdom-railiance-workload-packaging-and-relational-platform.md
- repo: railiance-master
path: docs/adr/ADR-0007-rapp-declaration-contract.md

View file

@ -0,0 +1,82 @@
-- Generated. Login credentials are leased by OpenBao and inherit one of these group roles.
DO $$ BEGIN CREATE ROLE "identity_provisioner_owner" NOLOGIN NOINHERIT; EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN CREATE ROLE "identity_provisioner_migrate" NOLOGIN INHERIT; EXCEPTION WHEN duplicate_object THEN NULL; END $$;
DO $$ BEGIN CREATE ROLE "identity_provisioner_app" NOLOGIN NOINHERIT; EXCEPTION WHEN duplicate_object THEN NULL; END $$;
GRANT "identity_provisioner_owner" TO "identity_provisioner_migrate";
ALTER ROLE "identity_provisioner_migrate" CONNECTION LIMIT 1;
ALTER ROLE "identity_provisioner_app" CONNECTION LIMIT 4;
ALTER ROLE "identity_provisioner_migrate" SET search_path = "identity_provisioner", pg_catalog;
ALTER ROLE "identity_provisioner_app" SET search_path = "identity_provisioner", pg_catalog;
ALTER ROLE "identity_provisioner_migrate" SET statement_timeout = '30s';
ALTER ROLE "identity_provisioner_app" SET statement_timeout = '5s';
ALTER ROLE "identity_provisioner_migrate" SET idle_in_transaction_session_timeout = '15s';
ALTER ROLE "identity_provisioner_app" SET idle_in_transaction_session_timeout = '15s';
COMMENT ON ROLE "identity_provisioner_app" IS 'cost_attribution=platform:identity-provisioner';
SELECT format('CREATE DATABASE %I OWNER %I', 'identity_provisioner', 'identity_provisioner_owner')
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'identity_provisioner') \gexec
\connect identity_provisioner
REVOKE CONNECT ON DATABASE "identity_provisioner" FROM PUBLIC;
GRANT CONNECT ON DATABASE "identity_provisioner" TO "identity_provisioner_migrate", "identity_provisioner_app";
CREATE SCHEMA IF NOT EXISTS "identity_provisioner" AUTHORIZATION "identity_provisioner_owner";
REVOKE ALL ON SCHEMA public FROM PUBLIC;
GRANT USAGE, CREATE ON SCHEMA "identity_provisioner" TO "identity_provisioner_migrate";
GRANT USAGE ON SCHEMA "identity_provisioner" TO "identity_provisioner_app";
-- Leased migration logins must not retain object ownership after revocation.
-- Normalize any pre-existing migration-created relations, including objects
-- made before the workload began issuing SET ROLE to the durable owner.
DO $ownership$
DECLARE target record;
BEGIN
FOR target IN
SELECT c.relname, c.relkind
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE n.nspname = 'identity_provisioner'
AND c.relkind IN ('r', 'p', 'S')
AND c.relowner <> (SELECT oid FROM pg_roles WHERE rolname = 'identity_provisioner_owner')
LOOP
IF target.relkind = 'S' THEN
EXECUTE format('ALTER SEQUENCE %I.%I OWNER TO %I', 'identity_provisioner', target.relname, 'identity_provisioner_owner');
ELSE
EXECUTE format('ALTER TABLE %I.%I OWNER TO %I', 'identity_provisioner', target.relname, 'identity_provisioner_owner');
END IF;
END LOOP;
END
$ownership$;
-- Default privileges key on the role that CREATES an object, not on the schema
-- owner. Migrations run as the migration role, so objects it creates are owned
-- by it; declaring only FOR ROLE identity_provisioner_owner left the runtime role with no access
-- to any table at all. Both grantors are declared. (isolation-test.sh)
ALTER DEFAULT PRIVILEGES FOR ROLE "identity_provisioner_owner" IN SCHEMA "identity_provisioner"
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "identity_provisioner_app";
ALTER DEFAULT PRIVILEGES FOR ROLE "identity_provisioner_owner" IN SCHEMA "identity_provisioner"
GRANT USAGE, SELECT ON SEQUENCES TO "identity_provisioner_app";
ALTER DEFAULT PRIVILEGES FOR ROLE "identity_provisioner_migrate" IN SCHEMA "identity_provisioner"
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO "identity_provisioner_app";
ALTER DEFAULT PRIVILEGES FOR ROLE "identity_provisioner_migrate" IN SCHEMA "identity_provisioner"
GRANT USAGE, SELECT ON SEQUENCES TO "identity_provisioner_app";
-- Catch objects created before this ran.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "identity_provisioner" TO "identity_provisioner_app";
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA "identity_provisioner" TO "identity_provisioner_app";
-- Resource containment is applied to the DATABASE, not only to the group roles.
-- OpenBao vends short-lived LOGIN roles that merely inherit a group role, and
-- neither `ALTER ROLE ... SET` nor CONNECTION LIMIT passes through membership,
-- so role-level limits alone leave every leased credential unbounded.
-- Database-level settings apply to each session whichever role opens it.
-- (isolation-test.sh)
ALTER DATABASE "identity_provisioner" CONNECTION LIMIT 5;
-- The database-level statement_timeout is the one every leased login actually
-- gets; the group-role setting above does not pass through membership. Where
-- migrationStatementTimeout differs from statementTimeout, the OpenBao
-- migration role's creation statement must carry
-- ALTER ROLE "{{name}}" SET statement_timeout = '30s';
-- on the leased login role itself, or migrations inherit the runtime value.
ALTER DATABASE "identity_provisioner" SET statement_timeout = '5s';
ALTER DATABASE "identity_provisioner" SET idle_in_transaction_session_timeout = '15s';
ALTER DATABASE "identity_provisioner" SET search_path = "identity_provisioner", pg_catalog;

View file

@ -0,0 +1,12 @@
apiVersion: postgresql.cnpg.io/v1
kind: Database
metadata:
name: identity-provisioner
namespace: databases
labels:
rapp-postgres.railiance.io/consumer: identity-provisioner
spec:
cluster:
name: platform-pg-2
name: identity_provisioner
owner: identity_provisioner_owner

View file

@ -0,0 +1,229 @@
{
"references": [
{
"matches_head": true,
"path": "INTENT.md",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:fd2ba8dff9dfd5583ec6d8b0348f273bfe00c59923b5d5d47cd22b1fb4658c54"
},
{
"matches_head": true,
"path": "docs/adr/ADR-0015-netkingdom-railiance-workload-packaging-and-relational-platform.md",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:2000985ef211aeedd3656e15cedb289e655526c2dcc4a161a64ffc27f0289db1"
},
{
"matches_head": true,
"path": "workplans/NK-WP-0048-security-case-types.md",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:b737bfae4802c122b21619695a169d7d082672af96314b1709860dd5aff2a60f"
},
{
"matches_head": true,
"path": "identity-provisioner/group_provenance_postgres.py",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:2a0111e83ad7b611076a1b45634e7f698b3d2e9acc473320b4a8ba009ebd0932"
},
{
"matches_head": true,
"path": "identity-provisioner/migrations/group_journal_postgres_v1.sql",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:3cdf82194d6f1e2dd865b0c7e7b8a14447fda8c49151148134a0d40a80fb46ac"
},
{
"matches_head": true,
"path": "identity-provisioner/server.py",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:b61c83da6c7ce20fa2790d5bb00aeca6a91dccd133526bc559ed26562f90eb29"
},
{
"matches_head": true,
"path": "identity-provisioner/provisioner.py",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:19d1b837cbafeeacb1aa815856cd68091e6702281d72b1d860230fa320e1725b"
},
{
"matches_head": true,
"path": "sso-mfa/k8s/identity-provisioner/deployment.yaml",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:807878e939967c8b88dafd4746c2a321b373d9f552083a82248fa917d4d9ea73"
},
{
"matches_head": true,
"path": "sso-mfa/k8s/lldap/GROUP-MAINTENANCE.md",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:03be1481f387d9fddbdeff550abbc2cbaa120db4105877c909acc7b3f00f8046"
},
{
"matches_head": true,
"path": "sso-mfa/k8s/lldap/ingress.yaml",
"repo": "net-kingdom",
"revision": "70f408ca2389bf3722a91a03832fc6e8587355e5",
"sha256": "sha256:7cb1f0e09f22004adcdd66d617857123d08276aa685d677b0c6e81e0aabe5290"
},
{
"matches_head": true,
"path": "declarations/rapp.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:a5811e9fa994ae5815214e81440b3be2a32b58236c09ec1887c54d0a7f9f3dce"
},
{
"matches_head": true,
"path": "scripts/render_consumers.py",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:5d83e29e5ec675b3c78c0129d9e12213b624146f5883534a7e5c99aaaa057f61"
},
{
"matches_head": true,
"path": "scripts/cell_catalog.py",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:ab3d189df29d479be748175336841749db8a9fbd39d49c4936c260fb1c7df5a3"
},
{
"matches_head": true,
"path": "docs/adr/ADR-0004-platform-pg-cell-ceiling.md",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:1f1eb521f8e6690bfdf650257308a6139540a65ca65d822a8def5f7a90fde82b"
},
{
"matches_head": true,
"path": "wiki/playbooks/database-dynamic-credentials.md",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:76d27e71d4a53f724ad9626afb5dbcae30682822bff9dd55707afc4b4545329b"
},
{
"matches_head": true,
"path": "docs/platform-pg-2-runbook.md",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:177659f5f45dda6b6b609d9e11063765f344662cdd6eb74552a5ed99771b77f8"
},
{
"matches_head": true,
"path": "helm/platform-pg-2-cluster.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:06b92a76189b1a33d1eee3f5c835a3e94269ad7b040383c04e8028c2c3fe766a"
},
{
"matches_head": true,
"path": "helm/platform-pg-2-networkpolicies.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:aa058f37cfff05b20825bd70424283e4510aa1b92dfec0161753e98d865c77cb"
},
{
"matches_head": true,
"path": "helm/platform-pg-2-backup.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:2c23170a8ef019d5ae7c1e9e3203729c7988ee480f0e6ef31420ccbc70cc79d6"
},
{
"matches_head": true,
"path": "consumers/audit-core.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:a2db53f901df056546b2c028f287f8fc50486e6e6cd81026b9e926b6b64272b3"
},
{
"matches_head": true,
"path": "consumers/canned-prompts.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:97d4b439cec7e788b7c1fa2c7181c2606ed098dcf37a38c1f73f7393e6046429"
},
{
"matches_head": true,
"path": "consumers/core-hub.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:8fe3e8b4488548b2f5e01f1d46edd9fd5fe4f0e4f65a3821f172adbfb5ae1d84"
},
{
"matches_head": true,
"path": "consumers/isolation-probe.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:8ea24d3bd04ab683b47ceff2586932ea4fdb0d45c49896167bb5b352a67a5cfb"
},
{
"matches_head": true,
"path": "consumers/sbom-nexus.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:0b21d05fe7b9d21cbc9eb761f455329739ceb71f8dd3d1200971426962c11236"
},
{
"matches_head": true,
"path": "consumers/tenant-engine.yaml",
"repo": "rapp-postgres",
"revision": "a9f569c96d74aa384ac8d3ac4aa960e4061550b5",
"sha256": "sha256:92f36d587f001c86ff401aedd25cb49fa171d49e000b0a6ab551e182e5c11448"
},
{
"matches_head": true,
"path": "docs/rapp-postgres-boundary.md",
"repo": "railiance-platform",
"revision": "08c1f036f2750097750f435efd76e8f6ee6df393",
"sha256": "sha256:6d80877d2eb7cef79a11f1d8ee40e8bb7fabdbdd122494a7aaa39b6d931e610d"
},
{
"matches_head": true,
"path": "credential-grants/catalog.yaml",
"repo": "railiance-platform",
"revision": "08c1f036f2750097750f435efd76e8f6ee6df393",
"sha256": "sha256:cb70165f80c58245d4231b4e712a4b322c51a6b168513dc839ad4c0234027047"
},
{
"matches_head": true,
"path": "bindings/rapps.yaml",
"repo": "reef-railiance",
"revision": "33b840faac109f134bf1115d631d5b1242052d9a",
"sha256": "sha256:796007c68f0eda1d50cebddf9e11a2c123a8814ebaf67f739ed5d2af2d6fa3f1"
},
{
"matches_head": true,
"path": "schemas/rapp.schema.json",
"repo": "railiance-master",
"revision": "a0be0d3142b5392f1fb6271cf91325ce91a0f9d4",
"sha256": "sha256:46c86e8fd391de5e4287dc7053e3d905ca87b5c4a68cd21c76b40cddd26c3ecd"
},
{
"matches_head": true,
"path": "workplans/RMASTER-WP-0025-universal-rapp-workload-coverage.md",
"repo": "railiance-master",
"revision": "a0be0d3142b5392f1fb6271cf91325ce91a0f9d4",
"sha256": "sha256:e56bfcc1377ca4930f89d606c6d6fabbc1309e8f202ac7ff15e22e5d88c2b0ea"
},
{
"matches_head": true,
"path": "declarations/rapp.yaml",
"repo": "rapp-user-engine",
"revision": "a42c68f8701880bfeb93e28dd812fcf3691568a3",
"sha256": "sha256:3d03ba72e6048269c4ab8a1ec6c8bbc4502e2d306941a83d982f748a4f300252"
},
{
"matches_head": true,
"path": "bindings/reef-railiance.yaml",
"repo": "rapp-user-engine",
"revision": "a42c68f8701880bfeb93e28dd812fcf3691568a3",
"sha256": "sha256:97950e49d48577675a0b2aad7f4b143c57acbfb14fdc09d74ecc1b0329ce17ad"
}
],
"scope": "public local Git source bytes; no live readiness or owner approval"
}

View file

@ -0,0 +1,33 @@
{
"candidate_cell": "platform-pg-2",
"candidate_role_connection_limit": 5,
"credential_pool_proposal": {
"migration": 1,
"overlap_runtime_maximum": 4,
"steady_runtime": 2
},
"current_catalog": {
"platform-pg": [
"audit-core",
"core-hub",
"isolation-probe",
"tenant-engine"
],
"platform-pg-2": [
"canned-prompts",
"sbom-nexus"
]
},
"existing_matching_deployable_members": [],
"first_cell_fifth_declaration_refusal": "platform-pg: 5 declarations exceeds the 4-consumer ceiling; place overflow on platform-pg-2 or another reviewed cluster",
"full_catalog_plus_candidate_capacity": "passed",
"knowledge": {
"digest": "sha256:8d1d6a9d4d07fec7b619618de7dfe2be2254c1790f85f4198c7fe19db9751c02",
"local_work_status": "withheld; changed Custodian orientation read directly; no effect authorization",
"version": "0.2.6"
},
"package_declarations_inspected": 14,
"package_normative_json_schema": "passed",
"runtime_authorization": false,
"scope": "read-only source and inert draft render; no DB, lease, native mutation or acceptance"
}