docs: preserve reviewed NetKingdom session artifacts
This commit is contained in:
parent
5f86a2f1f9
commit
a99b47b95f
48 changed files with 4476 additions and 0 deletions
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"schema": "railiance-cluster.review-source-integration-patch.v1",
|
||||
"supersedes_pending_patch": "own-record-t01-r5-evidence.patch; do not apply both",
|
||||
"files": {
|
||||
"AGENTS.md": {
|
||||
"before_sha256": "sha256:6f99f5e5624b8f8bd31a2177e67fabf978f737913a2e4d61d2d3767cf1cd4faa",
|
||||
"after_sha256": "sha256:5cc7808a6d0e5cdebc7b3f13a0d7dce9cee5441ed6de4703b67cf3fe1800d45b"
|
||||
},
|
||||
"workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md": {
|
||||
"before_sha256": "sha256:e2d37d001809322725fe14862f7b62dd38f9e959ab6250aa78d8b4932e4ea595",
|
||||
"after_sha256": "sha256:e16724c6418de2e0a16d9763df28b300e1f84e607b780c210c480f9a1e7f0264"
|
||||
}
|
||||
},
|
||||
"patch_sha256": "sha256:532fe971ec9b9b0bbe2975a6c703f81b71b734ae02543b1c50c4cc4af00f021a",
|
||||
"task_statuses": {
|
||||
"T01": "progress",
|
||||
"T02": "todo",
|
||||
"T03": "todo"
|
||||
},
|
||||
"workplan_status": "active authorized source work only",
|
||||
"all_projection_uuids_preserved": true,
|
||||
"canonical_mutated": false,
|
||||
"native_approval": false
|
||||
}
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
--- a/AGENTS.md
|
||||
+++ b/AGENTS.md
|
||||
@@ -7,7 +7,7 @@
|
||||
**Domain:** financials
|
||||
**Repo slug:** railiance-cluster
|
||||
**Topic ID:** `ca369340-a64e-442e-98f1-a4fa7dc74a38`
|
||||
-**Workplan prefix:** `RAIL-BS-WP-`
|
||||
+**Workplan prefix:** `RCLUSTER-WP-`
|
||||
|
||||
---
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
|
||||
```yaml
|
||||
---
|
||||
-id: RAIL-BS-WP-NNNN
|
||||
+id: RCLUSTER-WP-NNNN
|
||||
type: workplan
|
||||
title: "..."
|
||||
domain: financials
|
||||
@@ -208,7 +208,7 @@
|
||||
## Task Title
|
||||
|
||||
` ` `task
|
||||
-id: RAIL-BS-WP-NNNN-T01
|
||||
+id: RCLUSTER-WP-NNNN-T01
|
||||
status: wait | todo | progress | done | cancel
|
||||
priority: high | medium | low
|
||||
state_hub_task_id: "<uuid>" # written by fix-consistency — do not edit
|
||||
--- a/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
+++ b/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
@@ -4,7 +4,7 @@
|
||||
title: "Review NetKingdom signer runtime and node-local storage readiness"
|
||||
domain: financials
|
||||
repo: railiance-cluster
|
||||
-status: proposed
|
||||
+status: active
|
||||
owner: codex
|
||||
topic_slug: railiance
|
||||
created: "2026-10-16"
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
# RCLUSTER-WP-0017 — NetKingdom runtime/storage review
|
||||
|
||||
-This proposed record is limited to railiance-cluster INTENT: verified healthy
|
||||
+This source-review work record is limited to railiance-cluster INTENT: verified healthy
|
||||
runtime, scheduling headroom, admission/storage constraints and node-local
|
||||
failure-domain facts for the retained flex-auth signer successor. It does not
|
||||
own the Access workload, chart, Helm values or release; Platform OpenBao/ESO or
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
```task
|
||||
id: RCLUSTER-WP-0017-T01
|
||||
-status: todo
|
||||
+status: progress
|
||||
priority: high
|
||||
state_hub_task_id: "6ee408cd-c055-532d-bc80-f64c9bdf143b"
|
||||
```
|
||||
@@ -57,6 +57,43 @@
|
||||
`docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`.
|
||||
Those observations are dated and must be refreshed at the actual native window.
|
||||
No formal review or native result is backfilled from this preparation.
|
||||
+
|
||||
+2026-10-16 formal source reviews, performed from the ownrepo checkout under
|
||||
+RCLUSTER-WP-0017-T01 after the record's canonical creation:
|
||||
+
|
||||
+- Reviewer railiance-cluster-owner (agent railiance-cluster, codex), decision
|
||||
+ approved for exact Platform R5 source owner-boundary correction only. Platform
|
||||
+ Git revision 84c529f239c81e6d3ca337015700b03e3a862f53;
|
||||
+ manifest sha256:78003b1b4da481ce20b194062ddde10fa94147dbffc4c8e74a42850bf1dacfe0.
|
||||
+ INTENT Runtime Not Workloads supports cluster-runtime-storage-owner for
|
||||
+ runtime/storage/headroom/PV retention, preserving separate Access release and
|
||||
+ Platform Applications/freeze responsibilities. Six source hashes match; R5's
|
||||
+ typed public metadata retains the R4 executor/tests independently checked by54
|
||||
+ focused tests.
|
||||
+- Same reviewer, decision approved for exact Access rollout R2 runtime/storage
|
||||
+ and maintenance source proposal only, manifest
|
||||
+ sha256:5be7a7f438624dcb35b7dbc96e7c9e5a8e2d5d1b1966cb4338aa5aecbe3a8b59.
|
||||
+ Chart Git revision dc042022f7c30671cf0a7605cf43ef6d96d04242;
|
||||
+ image source Git revision 84c78e072c8f3daf2bc3b90f8efc8fbeb16c3cf0.
|
||||
+ Independently reproduced exact retained/stopped/ready Helm renders, full
|
||||
+ Deployment equality except replicas0/1, immutable source projection, source
|
||||
+ hook absence and unsafe replica refusals. Stop uses reset-values/no-hooks,
|
||||
+ wait=false/no atomic because WaitForFirstConsumer can leave the PVC Pending;
|
||||
+ automatic rollback to running predecessor would break the intended fence.
|
||||
+ Ready atomic is conditional on the exact newly established stopped revision
|
||||
+ being authenticated as rollback target. Neither command success nor source
|
||||
+ projection proves actual native exclusion/defaulted projection.
|
||||
+
|
||||
+Full bounded source reviews and independent checks are in Custodian
|
||||
+`docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`:
|
||||
+formal-platform-r5-source-review.json, formal-rollout-r2-source-review.json and
|
||||
+rollout-r2-independent-verification.json. These are not completed native-scope
|
||||
+reviews, CCR/read-lane approvals, founder decisions or another owner's assent.
|
||||
+The plan is active for authorized source review only. T01 remains progress until
|
||||
+the exact custody-packet successor is reviewed against these source joins; frozen
|
||||
+P2 remains historical. T02/T03 remain todo: fresh native preflight/window/fence,
|
||||
+actual binding and exact PV Retain are unverified. Historical18:02UTC metadata
|
||||
+is not current native acceptance. No live action occurred.
|
||||
|
||||
## Review the bounded native preflight and storage action
|
||||
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"schema": "railiance-cluster.final-source-review-integration.v1",
|
||||
"supersedes_all_pending_patches": [
|
||||
"own-record-t01-r5-evidence.patch",
|
||||
"own-record-cumulative-r5-rollout-r2.patch"
|
||||
],
|
||||
"apply_only": "own-record-final-r5-rollout-r2-packet-p4.patch",
|
||||
"files": {
|
||||
"AGENTS.md": {
|
||||
"before_sha256": "sha256:6f99f5e5624b8f8bd31a2177e67fabf978f737913a2e4d61d2d3767cf1cd4faa",
|
||||
"after_sha256": "sha256:5cc7808a6d0e5cdebc7b3f13a0d7dce9cee5441ed6de4703b67cf3fe1800d45b"
|
||||
},
|
||||
"workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md": {
|
||||
"before_sha256": "sha256:e2d37d001809322725fe14862f7b62dd38f9e959ab6250aa78d8b4932e4ea595",
|
||||
"after_sha256": "sha256:bd925a81a111f79022a1d510edf5395ca90e45c78c32b237195e50d65a4494ee"
|
||||
}
|
||||
},
|
||||
"patch_sha256": "sha256:e9f9ab901512af08d502b20f2ad996295d59e426edbbfae4284c76602bd14681",
|
||||
"workplan_status": "active; source completed, native tasks remain open",
|
||||
"task_statuses": {
|
||||
"T01": "done source only",
|
||||
"T02": "todo native preflight",
|
||||
"T03": "todo approved actual verification"
|
||||
},
|
||||
"all_projection_uuids_preserved": true,
|
||||
"canonical_mutated": false,
|
||||
"native_approval": false
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
--- a/AGENTS.md
|
||||
+++ b/AGENTS.md
|
||||
@@ -7,7 +7,7 @@
|
||||
**Domain:** financials
|
||||
**Repo slug:** railiance-cluster
|
||||
**Topic ID:** `ca369340-a64e-442e-98f1-a4fa7dc74a38`
|
||||
-**Workplan prefix:** `RAIL-BS-WP-`
|
||||
+**Workplan prefix:** `RCLUSTER-WP-`
|
||||
|
||||
---
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
|
||||
```yaml
|
||||
---
|
||||
-id: RAIL-BS-WP-NNNN
|
||||
+id: RCLUSTER-WP-NNNN
|
||||
type: workplan
|
||||
title: "..."
|
||||
domain: financials
|
||||
@@ -208,7 +208,7 @@
|
||||
## Task Title
|
||||
|
||||
` ` `task
|
||||
-id: RAIL-BS-WP-NNNN-T01
|
||||
+id: RCLUSTER-WP-NNNN-T01
|
||||
status: wait | todo | progress | done | cancel
|
||||
priority: high | medium | low
|
||||
state_hub_task_id: "<uuid>" # written by fix-consistency — do not edit
|
||||
--- a/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
+++ b/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
@@ -4,7 +4,7 @@
|
||||
title: "Review NetKingdom signer runtime and node-local storage readiness"
|
||||
domain: financials
|
||||
repo: railiance-cluster
|
||||
-status: proposed
|
||||
+status: active
|
||||
owner: codex
|
||||
topic_slug: railiance
|
||||
created: "2026-10-16"
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
# RCLUSTER-WP-0017 — NetKingdom runtime/storage review
|
||||
|
||||
-This proposed record is limited to railiance-cluster INTENT: verified healthy
|
||||
+This source-review work record is limited to railiance-cluster INTENT: verified healthy
|
||||
runtime, scheduling headroom, admission/storage constraints and node-local
|
||||
failure-domain facts for the retained flex-auth signer successor. It does not
|
||||
own the Access workload, chart, Helm values or release; Platform OpenBao/ESO or
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
```task
|
||||
id: RCLUSTER-WP-0017-T01
|
||||
-status: todo
|
||||
+status: done
|
||||
priority: high
|
||||
state_hub_task_id: "6ee408cd-c055-532d-bc80-f64c9bdf143b"
|
||||
```
|
||||
@@ -57,6 +57,52 @@
|
||||
`docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`.
|
||||
Those observations are dated and must be refreshed at the actual native window.
|
||||
No formal review or native result is backfilled from this preparation.
|
||||
+
|
||||
+2026-10-16 formal source review completed from this ownrepo checkout under
|
||||
+RCLUSTER-WP-0017-T01 after canonical record creation. Reviewer for each entry:
|
||||
+railiance-cluster-owner (agent railiance-cluster, codex), decision approved for
|
||||
+the exact bounded source scope only, based on INTENT Runtime Not Workloads and
|
||||
+Healthy by Verification:
|
||||
+
|
||||
+- Platform R5 owner-boundary correction, Platform Git revision
|
||||
+ 84c529f239c81e6d3ca337015700b03e3a862f53, manifest
|
||||
+ sha256:78003b1b4da481ce20b194062ddde10fa94147dbffc4c8e74a42850bf1dacfe0.
|
||||
+ Precise cluster-runtime-storage-owner replaces the conflated role; six source
|
||||
+ hashes match. R5 typed public metadata preserves R4 executor/tests independently
|
||||
+ checked by54 focused tests. Platform Applications/freeze and Access workload/
|
||||
+ Helm remain independently owned; cluster does not review for either role.
|
||||
+- Access rollout R2 runtime/storage and maintenance source proposal, manifest
|
||||
+ sha256:5be7a7f438624dcb35b7dbc96e7c9e5a8e2d5d1b1966cb4338aa5aecbe3a8b59.
|
||||
+ Chart Git revision dc042022f7c30671cf0a7605cf43ef6d96d04242;
|
||||
+ image source Git revision 84c78e072c8f3daf2bc3b90f8efc8fbeb16c3cf0.
|
||||
+ Exact archived retained/stopped/ready Helm renders independently reproduced;
|
||||
+ full Deployment differs only replicas0/1 and encoded source projection matches.
|
||||
+ Source hooks absent; unsafe replica inputs refused. Stop uses reset-values/
|
||||
+ no-hooks, wait=false/no atomic: WaitForFirstConsumer may leave the claim Pending
|
||||
+ and automatic rollback to the running predecessor would break the intended
|
||||
+ fence. Ready atomic requires the exact newly established stopped revision be
|
||||
+ authenticated as rollback target. Command success and source projection are
|
||||
+ insufficient to prove actual generation/pod exclusion or admitted projection.
|
||||
+- Platform custody packet P4 source-selection/ownership join, manifest
|
||||
+ sha256:9eec861838a8e9138f2c821cff3014998fbe74bb01447642bf50d44e8b3b7cb3.
|
||||
+ All packet hashes, exact Git source bundle/plan, execution-bundle digest and
|
||||
+ rollout R2 projection join verified. Eight disposable assembler tests passed.
|
||||
+ P4 corrects frozen P3 controller-ownership prose; no predecessor is rewritten.
|
||||
+ Workload/Helm rollback remains Access-owned, Application freeze/restoration
|
||||
+ Platform-owned, consumer/trust Secrets-owned and runtime/storage/PV retention
|
||||
+ cluster-owned. Actual held window/fence, founder entity, absolute expiry,
|
||||
+ approved/binding-confirmed CCR and native dispositions remain absent.
|
||||
+
|
||||
+Full bounded reviews and verification:
|
||||
+`the-custodian/docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`
|
||||
+formal-platform-r5-source-review.json, formal-rollout-r2-source-review.json,
|
||||
+formal-packet-p4-source-review.json and rollout-r2-independent-verification.json.
|
||||
+These source entries cannot fill the completed native-scope review slot or be
|
||||
+recorded as CCR/read-lane/custody approval, founder decision or another owner's
|
||||
+assent. T01 is done for exact source review only; the active plan retains T02/T03
|
||||
+for fresh native preflight/held window/exclusion and approved actual binding/PV
|
||||
+Retain verification. Dated18:02UTC observations remain historical. No live action
|
||||
+occurred and no source review promotes native readiness or spend/risk authority.
|
||||
|
||||
## Review the bounded native preflight and storage action
|
||||
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
--- a/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
+++ b/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
```task
|
||||
id: RCLUSTER-WP-0017-T01
|
||||
-status: todo
|
||||
+status: progress
|
||||
priority: high
|
||||
state_hub_task_id: "6ee408cd-c055-532d-bc80-f64c9bdf143b"
|
||||
```
|
||||
@@ -57,6 +57,25 @@
|
||||
`docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`.
|
||||
Those observations are dated and must be refreshed at the actual native window.
|
||||
No formal review or native result is backfilled from this preparation.
|
||||
+
|
||||
+2026-10-16 source-only owner review: railiance-cluster-owner (agent
|
||||
+railiance-cluster, codex), decision approved for exact Platform R5 owner-boundary
|
||||
+source correction only, under RCLUSTER-WP-0017-T01. INTENT principles Runtime,
|
||||
+Not Workloads and Healthy by Verification support cluster-runtime-storage-owner
|
||||
+for runtime/storage/headroom/PV retention; Platform Applications/freeze and
|
||||
+Access release/workload remain separate owner responsibilities. Reviewed exact
|
||||
+Platform Git revision 84c529f239c81e6d3ca337015700b03e3a862f53,
|
||||
+manifest sha256:78003b1b4da481ce20b194062ddde10fa94147dbffc4c8e74a42850bf1dacfe0 and patch
|
||||
+sha256:43264f13da5ff20267dea424a7c7d8d911f7601edca6871f31394e0c292fcd59.
|
||||
+Six source hashes match; R5's typed public Git/OCI references preserve the R4
|
||||
+executor/tests independently verified by54 focused tests. Full review:
|
||||
+Custodian access-native-admission/cluster-review-r1/
|
||||
+formal-platform-r5-source-review.json (within the NetKingdom2026-10-16 artifacts).
|
||||
+This source review is not a completed native-scope disposition, CCR approval,
|
||||
+founder decision or another owner's assent. Task remains progress pending exact
|
||||
+Access stopped-render/rollout successor review; T02/T03 stay open for later exact
|
||||
+native preflight and approved actual storage verification. Dated18:02UTC runtime
|
||||
+observations remain historical and are not refreshed or promoted here.
|
||||
|
||||
## Review the bounded native preflight and storage action
|
||||
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"canonical_before_sha256": "sha256:e2d37d001809322725fe14862f7b62dd38f9e959ab6250aa78d8b4932e4ea595",
|
||||
"proposed_after_sha256": "sha256:212b6acf50740c9c6e3f59a64542cd855820d3d7b46e46931312bbb7ca43a970",
|
||||
"patch_sha256": "sha256:47713971a7dd808262521152d278415eb24176ce9e3913b4cf15be0caadd3ab3",
|
||||
"canonical_mutated": false,
|
||||
"task_status": "progress",
|
||||
"workplan_status_unchanged": true,
|
||||
"assigned_uuids_preserved": true,
|
||||
"canonical_prefix_assessment": "prefix-identity-assessment.json"
|
||||
}
|
||||
|
|
@ -0,0 +1,98 @@
|
|||
--- /dev/null
|
||||
+++ b/workplans/RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md
|
||||
@@ -0,0 +1,95 @@
|
||||
+---
|
||||
+id: RCLUSTER-WP-0017
|
||||
+type: workplan
|
||||
+title: "Review NetKingdom signer runtime and node-local storage readiness"
|
||||
+domain: financials
|
||||
+repo: railiance-cluster
|
||||
+status: proposed
|
||||
+owner: codex
|
||||
+topic_slug: railiance
|
||||
+created: "2026-10-16"
|
||||
+updated: "2026-10-16"
|
||||
+flavor: implementation
|
||||
+related:
|
||||
+ - CUST-WP-0080
|
||||
+ - FLEX-WP-0024
|
||||
+ - RPF-WP-0035
|
||||
+ - RCLUSTER-WP-0014
|
||||
+ - RAIL-BS-WP-0014
|
||||
+---
|
||||
+
|
||||
+# RCLUSTER-WP-0017 — NetKingdom runtime/storage review
|
||||
+
|
||||
+This proposed record is limited to railiance-cluster INTENT: verified healthy
|
||||
+runtime, scheduling headroom, admission/storage constraints and node-local
|
||||
+failure-domain facts for the retained flex-auth signer successor. It does not
|
||||
+own the Access workload, chart, Helm values or release; Platform OpenBao/ESO or
|
||||
+ArgoCD Applications; Enablement ArgoCD installation; Secrets public trust; or
|
||||
+founder approval. It neither reopens completed capacity work nor duplicates
|
||||
+Access implementation. Current single-node storage remains a single failure
|
||||
+domain; ThreePhoenix/Longhorn is not a prerequisite or current capability.
|
||||
+
|
||||
+Origin: CUST-WP-0080 request for independent runtime/storage review of
|
||||
+CCR-2026-0050 and the Access signer rollout. Custodian-side read-only preparation
|
||||
+is historical input, not a prior formal owner disposition. The conflated legacy
|
||||
+cluster-gitops-owner role cannot be accepted by this repo; review the precise
|
||||
+successor source role independently. Founder human approval and distinct owner
|
||||
+reviews remain necessary before every live action.
|
||||
+
|
||||
+## Review exact runtime and storage source boundary
|
||||
+
|
||||
+```task
|
||||
+id: RCLUSTER-WP-0017-T01
|
||||
+status: todo
|
||||
+priority: high
|
||||
+```
|
||||
+
|
||||
+Read exact successor source/CCR/rollout/custody revisions against this repo's
|
||||
+INTENT; record a formal runtime/storage-only review under delegated-owner-review
|
||||
+canon once this work record exists in the ownrepo checkout. Authenticate the
|
||||
+actual Platform Applications and Access release responsibilities. Retain source
|
||||
+hashes and current metadata evidence, and keep changes requested visible. A
|
||||
+role rename alone does not supply native acceptance or another owner's assent.
|
||||
+
|
||||
+Preparation evidence: Custodian
|
||||
+`docs/changes/netkingdom-target-2026-10-16/access-native-admission/cluster-review-r1/`.
|
||||
+Those observations are dated and must be refreshed at the actual native window.
|
||||
+No formal review or native result is backfilled from this preparation.
|
||||
+
|
||||
+## Review the bounded native preflight and storage action
|
||||
+
|
||||
+```task
|
||||
+id: RCLUSTER-WP-0017-T02
|
||||
+status: todo
|
||||
+priority: high
|
||||
+```
|
||||
+
|
||||
+Given actual exact successor owner dispositions and window, independently review
|
||||
+cluster identity, node health/requested/observed headroom, quota/LimitRange,
|
||||
+local-path behavior, admission-defaulted stopped projection and exclusion
|
||||
+checks. Access owns workload stop/start and release rollback; Platform owns any
|
||||
+Application writer freeze. Require exact caller/source/image/fence/expiry pins,
|
||||
+Ready120seconds, recovery decision600seconds, founder abort ownership and
|
||||
+explicit local-storage/outage/loss disposition. This task prepares review and
|
||||
+records unresolved gates; it does not grant execute authority.
|
||||
+
|
||||
+## Verify the approved runtime and storage result
|
||||
+
|
||||
+```task
|
||||
+id: RCLUSTER-WP-0017-T03
|
||||
+status: todo
|
||||
+priority: high
|
||||
+```
|
||||
+
|
||||
+Only after separately approved native action, verify the actual bound1Gi PVC
|
||||
+UID, PV UID/name/claimRef/capacity/node affinity and exact Retain readback;
|
||||
+refresh node health/headroom and non-overlap observations. Any runtime/storage
|
||||
+mutation must have its own exact founder approval and scoped executor. The
|
||||
+future bound PV cannot be selected or mutated in advance. Retain is not backup,
|
||||
+node-loss protection or a filesystem quota. Preserve unknown outcomes and the
|
||||
+original evidence; do not reset cursor/outbox, delete PVC/PV or remint custody.
|
||||
+
|
||||
+If native action is not approved, keep this task open with its concrete
|
||||
+unresolved gates. Do not imply rollout/custody/trust acceptance. Complete this
|
||||
+workplan only after source review, bounded preflight disposition and actual
|
||||
+approved runtime/storage result are evidenced, or explicit scope cancellation.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"manifest_sha256": "sha256:835b00b582e3cdd56a4a2aa45e803dd8f619e4c53cd2e3b3997053fc1c5926f4",
|
||||
"artifact_hashes_verified": true,
|
||||
"exact_base_apply_and_source_hashes_verified": true,
|
||||
"temporary_source": "/tmp/cluster-r4-review-yxv848pd"
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
{
|
||||
"schema": "railiance-cluster.owner-boundary-source-assessment.v1",
|
||||
"reviewed_proposal_id": "RPF35-PDP-SIGNER-OWNER-BOUNDARY-20261016-R4",
|
||||
"reviewed_manifest_sha256": "sha256:835b00b582e3cdd56a4a2aa45e803dd8f619e4c53cd2e3b3997053fc1c5926f4",
|
||||
"reviewed_full_patch_sha256": "sha256:25bbff23421121836625e0081213fa2d1535e69a6123fbac21b62163b94293db",
|
||||
"assessment": "Role correction matches cluster INTENT; source assessment supports integration with scope limits. No formal owner review exists until proposed ownrepo record is integrated and reviewer works in that checkout.",
|
||||
"formal_owner_review": false,
|
||||
"proposed_own_work_item": "RCLUSTER-WP-0017-T01",
|
||||
"native_scope_disposition": null,
|
||||
"native_approval": false,
|
||||
"other_owner_assent": false,
|
||||
"source_findings": [
|
||||
"Exact REVIEWS set replaces cluster-gitops-owner with cluster-runtime-storage-owner and refuses legacy/missing/extra roles; no permissive fallback or legacy alias.",
|
||||
"Plan explicitly allocates cluster identity/runtime/storage/headroom/PV retention to this repo and excludes workload/GitOps Application ownership; exact fit to INTENT Runtime Not Workloads.",
|
||||
"Access remains workload/chart/Helm semantics owner. Platform owns existing Applications/sync-freeze integration. Enablement required only for separately proposed ArgoCD installation/controller change; fixed action excludes that.",
|
||||
"CCR remains proposed and bindings unconfirmed; no review comment/status/grant authority added. Bootstrap/recovery/fence/timing code unaffected beyond review role set.",
|
||||
"Current package d52 local draft and published candidate84 facts reconcile prior stale claims without asserting placement/native adoption. Frozen R1/P2 remain frozen and successor pins/fresh exact dispositions are required.",
|
||||
"Full6file patch reproduced from exact a3e8 base and all target source hashes match frozen manifest; no future rollover source or completed scope approved."
|
||||
],
|
||||
"remaining_gates": [
|
||||
"Canonical ownrepo work record and own-checkout formal source review; proposed record is not actual current work authorization.",
|
||||
"Access rollout successor render/projection exact review; current R1 cannot render stopped maintenance through normal Helm.",
|
||||
"Platform authenticated actual GitOps/manual competing-writer inventory/freeze; no assumption from status refs.",
|
||||
"Completed successor scope and actual current native fence/storage/headroom/source hashes, absolute expiry, independent owner dispositions and founder exact approval."
|
||||
],
|
||||
"independent_tests": {
|
||||
"command": "uv run --project /tmp/cluster-r4-review-yxv848pd pytest -q tests/test_flex_auth_signer_native.py tests/test_flex_auth_signer_custody.py",
|
||||
"result": "54 passed in39.29s",
|
||||
"scope": "disposable local source tests, no native acceptance",
|
||||
"prior_attempt": "Canonical .venv/bin/python absent; no tests ran in first attempt."
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T18:02:04.834187+00:00",
|
||||
"mode": "read-only",
|
||||
"observations": {
|
||||
"helm_history": {
|
||||
"read_ok": true,
|
||||
"data": [
|
||||
{
|
||||
"revision": 1,
|
||||
"updated": "2026-09-06T19:40:09.536566173+02:00",
|
||||
"status": "superseded",
|
||||
"chart": "flex-auth-0.2.0",
|
||||
"app_version": "0.1.0",
|
||||
"description": "Install complete"
|
||||
},
|
||||
{
|
||||
"revision": 2,
|
||||
"updated": "2026-09-06T21:28:22.953268141+02:00",
|
||||
"status": "superseded",
|
||||
"chart": "flex-auth-0.2.0",
|
||||
"app_version": "0.1.0",
|
||||
"description": "Upgrade complete"
|
||||
},
|
||||
{
|
||||
"revision": 3,
|
||||
"updated": "2026-09-06T23:23:16.220263862+02:00",
|
||||
"status": "superseded",
|
||||
"chart": "flex-auth-0.2.0",
|
||||
"app_version": "0.1.0",
|
||||
"description": "Upgrade complete"
|
||||
},
|
||||
{
|
||||
"revision": 4,
|
||||
"updated": "2026-09-14T00:46:30.759520357+02:00",
|
||||
"status": "deployed",
|
||||
"chart": "flex-auth-0.2.0",
|
||||
"app_version": "0.1.0",
|
||||
"description": "Upgrade complete"
|
||||
}
|
||||
]
|
||||
},
|
||||
"storage_free": {
|
||||
"read_ok": true,
|
||||
"data": "1B-blocks Used Avail Use% Mounted on\n206900281344 81056149504 125827354624 40% /"
|
||||
},
|
||||
"node_usage": {
|
||||
"read_ok": true,
|
||||
"data": "239.62.205.92.host.secureserver.net 2129m 53% 8933Mi 55%"
|
||||
},
|
||||
"node_allocated": {
|
||||
"read_ok": true,
|
||||
"data": "Allocated resources:\n (Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu 3580m (89%) 37500m (937%)\n memory 9760Mi (61%) 34242Mi (214%)\n ephemeral-storage 256Mi (0%) 1Gi (0%)\n hugepages-1Gi 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"posted": true,
|
||||
"id": "31a29d89-3afc-46d9-bdac-675f6808e16b",
|
||||
"summary": "CUST-WP-0080 independent railiance-cluster runtime/storage review retained at access-native-admission/cluster-review-r1. Read-only node identity, Helm revision4, HPA/quota/limits/PVC, local-path metadata, Argo refs and resource/disk snapshots recorded. Combined cluster/GitOps role exceeds INTENT: Platform Applications and Access release reviews required. No native action or scope approval; frozen R1/P2 unchanged."
|
||||
}
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
{
|
||||
"schema": "railiance-cluster.netkingdom-source-review.v1",
|
||||
"review_id": "NETKINGDOM-CLUSTER-REVIEW-20261016-R1",
|
||||
"owner_role": "railiance-cluster-runtime-storage-only",
|
||||
"disposition": "source-preparation-conditional-native-admission-withheld",
|
||||
"existing_work": "CUST-WP-0080-T03/T04 coordination; FLEX-WP-0024-T06 Access; RPF-WP-0035-T12 Platform. These are not ownrepo review authorization.",
|
||||
"scope_bound_native_approval": false,
|
||||
"cluster_gitops_combined_assent": false,
|
||||
"founder_approval": false,
|
||||
"native_mutations": false,
|
||||
"future_chart_patch_approved": false,
|
||||
"required_other_owner": "railiance-platform Applications/GitOps; Access release; enablement only for controller installation changes",
|
||||
"input_hashes": {
|
||||
"docs/netkingdom-target-security-architecture.md": "sha256:3a74cbd71dc22514033906f6029de1d3e113640bc5faab94f8d58c62e0c86203",
|
||||
"docs/netkingdom-target-implementation.md": "sha256:c36670cb76fa414389b006a56913ad73c891b5b5da20c9b96e54029ba8a703bd",
|
||||
"docs/agent-environment-orientation.md": "sha256:6eb712593adaeb2efd8c69edb22b02662e6c9b155f84f1559e7bdaeb76730439",
|
||||
"/home/worsch/railiance-cluster/AGENTS.md": "sha256:6f99f5e5624b8f8bd31a2177e67fabf978f737913a2e4d61d2d3767cf1cd4faa",
|
||||
"/home/worsch/railiance-cluster/INTENT.md": "sha256:a00fe12563c77734e19b538ca8307d44fcfae9f040bec284c705146f99bb3490",
|
||||
"/home/worsch/railiance-platform/credential-change-requests/CCR-2026-0050-flex-auth-envelope-signing.yaml": "sha256:72fd6e84e866a72f4768dabd66326aebe1fdd00013b2314de961ca72a632679f",
|
||||
"docs/changes/netkingdom-target-2026-10-16/access-native-admission/rollout-r1/manifest.json": "sha256:6b9292aab59f9ca8012be00f50027ded6a12018a3b36b011ef953d448e75e3dc",
|
||||
"docs/changes/netkingdom-target-2026-10-16/access-native-admission/rollout-r1/exclusive-window.proposed.json": "sha256:98ad9c7a5661ce7b3a47cad061a03c6d55ca200b54c96c3f257b644c0739bd19",
|
||||
"docs/changes/netkingdom-target-2026-10-16/platform-signer-custody/native-adapter-r2/manifest.json": "sha256:697a3d23cde5cd96c09c2edfb4187a0a42965d65932543b82bd4ac0ec3f617d9",
|
||||
"docs/changes/netkingdom-target-2026-10-16/platform-signer-custody/native-adapter-r2/native-packet-p2/manifest.json": "sha256:1a4c0efbacaf361ae85da9042aebe4e49bc3f879a59b81902ba235b00ea38431"
|
||||
},
|
||||
"artifact_hashes": {
|
||||
"progress-receipt.json": "sha256:b177b530235eb5f4a2fd4d8138d2bdcb78d5c6681ddb104175c323b54465f999",
|
||||
"README.md": "sha256:909741593f4a49bfc8454d71eb489f6cea596f9cf3834fd52dac448c1c9400e8",
|
||||
"RCLUSTER-WP-0017-netkingdom-signer-runtime-storage-review.md.proposed": "sha256:91121c972379fbaf92a4fa66e01bef9a36a7aea11986168a0fdc79f7cce9422f",
|
||||
"own-work-record.patch": "sha256:40313328d2fd67496705b7369d56f072020222929e91942626ebb9cb82acc7ac",
|
||||
"platform-r4-reconstruction.json": "sha256:398c844559c366f60499a64f434ed98ea6992c0a9dc1d44ad0f42a285a96dc6b",
|
||||
"runtime-observation.json": "sha256:63a637ea32aadc3358ba55dc5b46f86c67df3d6c80ea00e3aee68bfa38fd3e58",
|
||||
"platform-r4-source-assessment.json": "sha256:0e869c253c13edc75049c230fb6d1b14424d9bd79f43046cb1ead8b5bf8b5adc",
|
||||
"prechange-resources.json": "sha256:4886fe8a899e949c17464a8271b09830917dd3e9251fb97e17076291d8f4842d"
|
||||
},
|
||||
"formal_owner_review": false,
|
||||
"owner_work_record_status": "none suitable open; proposed RCLUSTER-WP-0017 draft prepared for coordinator review, not canonical"
|
||||
}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
{
|
||||
"rollout_manifest_sha256": "sha256:5be7a7f438624dcb35b7dbc96e7c9e5a8e2d5d1b1966cb4338aa5aecbe3a8b59",
|
||||
"all_manifest_and_archive_input_hashes_verified": true,
|
||||
"actual_independent_helm_renders_byte_equal": [
|
||||
"retained",
|
||||
"stopped",
|
||||
"activation"
|
||||
],
|
||||
"ready_stopped_only_deployment_replicas_differ": true,
|
||||
"exact_native_algorithm_projection_equal": "sha256:8ce375f065552c551538f3acc7300c427407057eeff1d0b43755bfdf8a46169c",
|
||||
"no_secret_ingress_hpa_generated": true,
|
||||
"no_source_hooks": true,
|
||||
"invalid_replicas_refused": [
|
||||
"true",
|
||||
"false",
|
||||
"\"0\"",
|
||||
"\"1\"",
|
||||
"-1",
|
||||
"2",
|
||||
"0.5",
|
||||
"1.5"
|
||||
],
|
||||
"native_execution": false
|
||||
}
|
||||
|
|
@ -0,0 +1,860 @@
|
|||
{
|
||||
"schema": "railiance-cluster.netkingdom-runtime-observation.v1",
|
||||
"observed_at": "2026-10-16T18:01:45.960225+00:00",
|
||||
"mode": "read-only-no-secret-objects",
|
||||
"observations": {
|
||||
"nodes": {
|
||||
"read_ok": true,
|
||||
"data": [
|
||||
{
|
||||
"name": "239.62.205.92.host.secureserver.net",
|
||||
"namespace": null,
|
||||
"uid": "0659e49e-6539-480a-8b0f-2969dd88cb05",
|
||||
"generation": null,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"addresses": [
|
||||
{
|
||||
"address": "92.205.62.239",
|
||||
"type": "InternalIP"
|
||||
},
|
||||
{
|
||||
"address": "2a00:1169:111:6d70::",
|
||||
"type": "InternalIP"
|
||||
},
|
||||
{
|
||||
"address": "239.62.205.92.host.secureserver.net",
|
||||
"type": "Hostname"
|
||||
}
|
||||
],
|
||||
"allocatable": {
|
||||
"cpu": "4",
|
||||
"ephemeral-storage": "196555267123",
|
||||
"hugepages-1Gi": "0",
|
||||
"hugepages-2Mi": "0",
|
||||
"memory": "16377032Ki",
|
||||
"pods": "110"
|
||||
},
|
||||
"conditions": [
|
||||
{
|
||||
"type": "EtcdIsVoter",
|
||||
"status": "True"
|
||||
},
|
||||
{
|
||||
"type": "MemoryPressure",
|
||||
"status": "False"
|
||||
},
|
||||
{
|
||||
"type": "DiskPressure",
|
||||
"status": "False"
|
||||
},
|
||||
{
|
||||
"type": "PIDPressure",
|
||||
"status": "False"
|
||||
},
|
||||
{
|
||||
"type": "Ready",
|
||||
"status": "True"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"kube_system": {
|
||||
"read_ok": true,
|
||||
"data": {
|
||||
"name": "kube-system",
|
||||
"namespace": null,
|
||||
"uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||
"generation": null,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": []
|
||||
}
|
||||
},
|
||||
"deployment": {
|
||||
"read_ok": true,
|
||||
"data": {
|
||||
"name": "flex-auth-secrets-engine",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "f83a5f5c-7dd7-4aac-bc02-d447e423e6ae",
|
||||
"generation": 4,
|
||||
"ownerReferences": null,
|
||||
"managed_by": "Helm",
|
||||
"helm_release": "flex-auth-secrets-engine",
|
||||
"helm_namespace": "flex-auth",
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"replicas": 1,
|
||||
"strategy": {
|
||||
"rollingUpdate": {
|
||||
"maxSurge": "25%",
|
||||
"maxUnavailable": "25%"
|
||||
},
|
||||
"type": "RollingUpdate"
|
||||
},
|
||||
"status": {
|
||||
"observedGeneration": 4,
|
||||
"replicas": 1,
|
||||
"readyReplicas": 1,
|
||||
"updatedReplicas": 1,
|
||||
"availableReplicas": 1,
|
||||
"unavailableReplicas": null
|
||||
},
|
||||
"service_account": "flex-auth-secrets-engine",
|
||||
"containers": [
|
||||
{
|
||||
"name": "flex-auth",
|
||||
"image": "forgejo.coulomb.social/coulomb/flex-auth@sha256:05a03a8790c2210c48ea92391441c77ddf640d0cd32f5ec09838f5393171fcbd",
|
||||
"resources": {
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"replicasets": {
|
||||
"read_ok": true,
|
||||
"data": [
|
||||
{
|
||||
"name": "flex-auth-secrets-engine-5c569d7797",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "96d591e7-febf-4533-b285-7b71f1e70247",
|
||||
"generation": 2,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "Deployment",
|
||||
"name": "flex-auth-secrets-engine",
|
||||
"uid": "f83a5f5c-7dd7-4aac-bc02-d447e423e6ae"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": "flex-auth-secrets-engine",
|
||||
"helm_namespace": "flex-auth",
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"replicas": 0,
|
||||
"status_replicas": 0
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-secrets-engine-6467b96c6f",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "4728ef1c-a963-4a80-a585-4741fba45a15",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "Deployment",
|
||||
"name": "flex-auth-secrets-engine",
|
||||
"uid": "f83a5f5c-7dd7-4aac-bc02-d447e423e6ae"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": "flex-auth-secrets-engine",
|
||||
"helm_namespace": "flex-auth",
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"replicas": 1,
|
||||
"status_replicas": 1
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-secrets-engine-65c74d4858",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "c897fd28-0ab8-45b1-9372-2f6047174d81",
|
||||
"generation": 2,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "Deployment",
|
||||
"name": "flex-auth-secrets-engine",
|
||||
"uid": "f83a5f5c-7dd7-4aac-bc02-d447e423e6ae"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": "flex-auth-secrets-engine",
|
||||
"helm_namespace": "flex-auth",
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"replicas": 0,
|
||||
"status_replicas": 0
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-secrets-engine-67b87fb4f8",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "41946bce-0b18-4a8d-8316-3504af3e7590",
|
||||
"generation": 2,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "Deployment",
|
||||
"name": "flex-auth-secrets-engine",
|
||||
"uid": "f83a5f5c-7dd7-4aac-bc02-d447e423e6ae"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": "flex-auth-secrets-engine",
|
||||
"helm_namespace": "flex-auth",
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"replicas": 0,
|
||||
"status_replicas": 0
|
||||
}
|
||||
]
|
||||
},
|
||||
"hpa": {
|
||||
"read_ok": true,
|
||||
"data": []
|
||||
},
|
||||
"quota": {
|
||||
"read_ok": true,
|
||||
"data": []
|
||||
},
|
||||
"limits": {
|
||||
"read_ok": true,
|
||||
"data": []
|
||||
},
|
||||
"storageclass": {
|
||||
"read_ok": true,
|
||||
"data": {
|
||||
"name": "local-path",
|
||||
"namespace": null,
|
||||
"uid": "db77292f-e67a-4032-95b4-a88d3321185b",
|
||||
"generation": null,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"provisioner": "rancher.io/local-path",
|
||||
"reclaimPolicy": "Delete",
|
||||
"volumeBindingMode": "WaitForFirstConsumer",
|
||||
"allowVolumeExpansion": null
|
||||
}
|
||||
},
|
||||
"pvc": {
|
||||
"read_ok": true,
|
||||
"data": []
|
||||
},
|
||||
"argocd_apps": {
|
||||
"read_ok": true,
|
||||
"data": [
|
||||
{
|
||||
"name": "activity-core",
|
||||
"namespace": "argocd",
|
||||
"uid": "cd179999-852d-4d70-9017-29e867475bff",
|
||||
"generation": 8972,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "activity-core",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"CreateNamespace=false",
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true",
|
||||
"FailOnSharedResource=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "bao-notice",
|
||||
"namespace": "argocd",
|
||||
"uid": "3fc0375f-c3c6-487b-bad1-84ba2e805431",
|
||||
"generation": 10445,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "bao-notice",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "OutOfSync",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "eso-token-renewer",
|
||||
"namespace": "argocd",
|
||||
"uid": "b10d1e31-08da-4364-b537-4e166eeeb25e",
|
||||
"generation": 10451,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "external-secrets",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "informed-decision",
|
||||
"namespace": "argocd",
|
||||
"uid": "499868f2-eabc-4df4-ae31-b89ce58d750d",
|
||||
"generation": 5469,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "informed-decision",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"ApplyOutOfSyncOnly=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "OutOfSync",
|
||||
"resource_refs": [
|
||||
{
|
||||
"kind": "NetworkPolicy",
|
||||
"namespace": "flex-auth",
|
||||
"name": "informed-decision-lifecycle-ingress"
|
||||
},
|
||||
{
|
||||
"kind": "NetworkPolicy",
|
||||
"namespace": "flex-auth",
|
||||
"name": "informed-decision-review-ingress"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "informed-decision-requester",
|
||||
"namespace": "argocd",
|
||||
"uid": "0c0ee821-0ba4-43f7-9b65-52ef98de1ea5",
|
||||
"generation": 5443,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "informed-decision",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"ApplyOutOfSyncOnly=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "openbao-secretstore",
|
||||
"namespace": "argocd",
|
||||
"uid": "f2932505-e649-4b99-b505-4789ed21301f",
|
||||
"generation": 11485,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "external-secrets",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"CreateNamespace=true",
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "railiance-apps-root",
|
||||
"namespace": "argocd",
|
||||
"uid": "3078d1f5-07c2-44cc-bff7-c2ee2a2c9e7c",
|
||||
"generation": 11484,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "argocd",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"CreateNamespace=false",
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "OutOfSync",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "secret-annotation-guard",
|
||||
"namespace": "argocd",
|
||||
"uid": "666115be-f428-435b-8d5f-f0f26bfee693",
|
||||
"generation": 8301,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "default",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "state-hub-memo-dispatch",
|
||||
"namespace": "argocd",
|
||||
"uid": "098f4323-c4cc-4767-a78a-6073be92f5ef",
|
||||
"generation": 5437,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "state-hub",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"ApplyOutOfSyncOnly=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
},
|
||||
{
|
||||
"name": "target-revenue",
|
||||
"namespace": "argocd",
|
||||
"uid": "42285c08-97c6-452f-ad8a-4f46d9691bc9",
|
||||
"generation": 11465,
|
||||
"ownerReferences": null,
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"destination": {
|
||||
"namespace": "target-revenue",
|
||||
"server": "https://kubernetes.default.svc"
|
||||
},
|
||||
"sync_policy": {
|
||||
"syncOptions": [
|
||||
"CreateNamespace=true",
|
||||
"ApplyOutOfSyncOnly=true",
|
||||
"PruneLast=true"
|
||||
]
|
||||
},
|
||||
"sync_status": "Synced",
|
||||
"resource_refs": []
|
||||
}
|
||||
]
|
||||
},
|
||||
"namespace_pods": {
|
||||
"read_ok": true,
|
||||
"data": [
|
||||
{
|
||||
"name": "flex-auth-application-readback-5d58d48ff7-h5mm8",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "a58e03ff-9c39-4ce0-be58-5e6a58df22b1",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-application-readback-5d58d48ff7",
|
||||
"uid": "94fe25f7-09ba-42ce-835d-c9b8b6b7c87a"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-application-readback",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "5m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-informed-decision-lifecycle-7cb5869d7d-f5rk9",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "8a1cf44e-4fc5-48ac-9564-cd507fe89cd0",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-informed-decision-lifecycle-7cb5869d7d",
|
||||
"uid": "dcf367d2-5216-44bc-9837-8a2669ae5b63"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-informed-decision-lifecycle",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "5m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-informed-decision-sitting-7b6d95b4f6-52z2j",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "ba3b21f5-f15d-4e8c-910b-8ebc6ecd4ba0",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-informed-decision-sitting-7b6d95b4f6",
|
||||
"uid": "95272d3b-ba0b-4192-bb5d-9209bdbdf4ca"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-informed-decision-sitting",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "5m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-informed-decision-t03-869546497b-4zfzk",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "8986de19-4d58-45b1-807f-70003525e657",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-informed-decision-t03-869546497b",
|
||||
"uid": "2bc5cdee-58e6-4b05-a40e-4bf7e4b87f71"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-informed-decision-t03",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "5m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-ops-warden-9bcc5b79c-wgr5p",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "98b8c2ed-af62-4825-9e64-bc52be5a959f",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-ops-warden-9bcc5b79c",
|
||||
"uid": "0770e7c5-a123-4370-bd55-afde59f03cbc"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-ops-warden",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-ops-warden-fetch-57f8fcd9dc-54cj6",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "1ec9beda-ff7c-42bb-84e0-c0eb8cde2474",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-ops-warden-fetch-57f8fcd9dc",
|
||||
"uid": "ced2ddd2-5dc2-40df-8138-928c842eabcd"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-ops-warden-fetch",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-secrets-engine-6467b96c6f-ncl5t",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "f9598eac-6db2-41a5-8054-fb35bb5c0861",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-secrets-engine-6467b96c6f",
|
||||
"uid": "4728ef1c-a963-4a80-a585-4741fba45a15"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-secrets-engine",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-tenant-engine-bfd95cfd6-c56nd",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "5c6afebd-c764-4be4-81b5-dc202aab252c",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-tenant-engine-bfd95cfd6",
|
||||
"uid": "534d506e-2db2-4d53-9bf6-bbad116923da"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-tenant-engine",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "flex-auth-user-engine-b745b6b5c-zhsfv",
|
||||
"namespace": "flex-auth",
|
||||
"uid": "e465a32b-5eb0-4a53-94e5-0453faf3b960",
|
||||
"generation": 1,
|
||||
"ownerReferences": [
|
||||
{
|
||||
"apiVersion": "apps/v1",
|
||||
"blockOwnerDeletion": true,
|
||||
"controller": true,
|
||||
"kind": "ReplicaSet",
|
||||
"name": "flex-auth-user-engine-b745b6b5c",
|
||||
"uid": "cae7a3dd-db37-4d9d-bdab-033371cf4127"
|
||||
}
|
||||
],
|
||||
"managed_by": null,
|
||||
"helm_release": null,
|
||||
"helm_namespace": null,
|
||||
"argocd_instance": null,
|
||||
"field_managers": [],
|
||||
"phase": "Running",
|
||||
"deletionTimestamp": null,
|
||||
"service_account": "flex-auth-user-engine",
|
||||
"secret_mount_names": [],
|
||||
"resources": [
|
||||
{
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
},
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
"namespace_scan_limit": "ReplicaSets retained only when ownerReference UID equals signer Deployment; namespace-wide Pod, HPA, quota, LimitRange and PVC scans retained."
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
"""Read only exact public runtime/storage metadata; no Secret/log/exec/env reads."""
|
||||
import datetime,json,subprocess
|
||||
from pathlib import Path
|
||||
queries={
|
||||
'nodes':['kubectl','get','nodes','-o','jsonpath={range .items[*]}{.metadata.name}{" "}{.status.addresses}{" "}{.status.allocatable}{"\\n"}{end}'],
|
||||
'deployment':['kubectl','-n','flex-auth','get','deployment','flex-auth-secrets-engine','-o','jsonpath={.metadata.name}{"\\n"}{.metadata.uid}{"\\n"}{.metadata.labels.helm\\.sh/chart}{"\\n"}{.metadata.generation}{" "}{.status.observedGeneration}{"\\n"}{.spec.replicas}{" "}{.spec.strategy}{"\\n"}{.spec.template.spec.serviceAccountName}{"\\n"}{.spec.template.spec.containers[0].image}{"\\n"}{.spec.template.spec.containers[0].args}{"\\n"}{.spec.template.spec.containers[0].volumeMounts}{"\\n"}{.spec.template.spec.volumes}{"\\n"}{.spec.template.spec.securityContext}{"\\n"}{.spec.template.spec.containers[0].resources}{"\\n"}{.status.availableReplicas}{"\\n"}'],
|
||||
'pods':['kubectl','-n','flex-auth','get','pods','-l','app.kubernetes.io/name=flex-auth-secrets-engine','-o','jsonpath={range .items[*]}{.metadata.name}{" "}{.metadata.uid}{" "}{.status.phase}{" "}{.spec.nodeName}{" "}{.status.containerStatuses[0].imageID}{"\\n"}{end}'],
|
||||
'service':['kubectl','-n','flex-auth','get','service','flex-auth-secrets-engine','-o','jsonpath={.metadata.name}{" "}{.spec.clusterIP}{" "}{.spec.selector}{" "}{.spec.ports}{"\\n"}'],
|
||||
'pvcs':['kubectl','-n','flex-auth','get','pvc','-o','jsonpath={range .items[*]}{.metadata.name}{" "}{.spec.accessModes}{" "}{.spec.storageClassName}{" "}{.spec.volumeName}{" "}{.spec.resources.requests.storage}{" "}{.status.capacity}{" "}{.status.phase}{"\\n"}{end}'],
|
||||
'storage_classes':['kubectl','get','storageclass','-o','jsonpath={range .items[*]}{.metadata.name}{" "}{.provisioner}{" "}{.volumeBindingMode}{" "}{.reclaimPolicy}{" "}{.allowVolumeExpansion}{"\\n"}{end}'],
|
||||
'namespace_serviceaccounts':['kubectl','-n','flex-auth','get','serviceaccount','-o','jsonpath={range .items[*]}{.metadata.name}{" "}{.automountServiceAccountToken}{"\\n"}{end}'],
|
||||
}
|
||||
results={}
|
||||
for name,args in queries.items():
|
||||
r=subprocess.run(args,capture_output=True,text=True,timeout=20)
|
||||
results[name]={'command':args,'exit_code':r.returncode,'output':r.stdout if r.returncode==0 else None,'stderr_present':bool(r.stderr)}
|
||||
if name=='nodes' and (r.returncode or '92.205.62.239' not in r.stdout):raise RuntimeError('expected railiance01 node identity not confirmed; no follow-on reads')
|
||||
p=Path(__file__).with_name('runtime-metadata.json');p.write_text(json.dumps({'observed_at':datetime.datetime.now(datetime.timezone.utc).isoformat(),'scope':'metadata-only; no credentials, Secret objects, logs, exec or writes','queries':results},indent=2)+'\n')
|
||||
print(json.dumps({k:{'exit_code':v['exit_code'],'output':v['output']} for k,v in results.items()},indent=2))
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T15:25:14.114537+00:00",
|
||||
"query": "kubectl describe exact previously verified railiance01 node; output allowlisted allocated-resources block only",
|
||||
"exit_code": 0,
|
||||
"allocated_resources": "Allocated resources:\n (Total limits may be over 100 percent, i.e., overcommitted.)\n Resource Requests Limits\n -------- -------- ------\n cpu 3580m (89%) 37500m (937%)\n memory 9760Mi (61%) 34242Mi (214%)\n ephemeral-storage 256Mi (0%) 1Gi (0%)\n hugepages-1Gi 0 (0%) 0 (0%)\n hugepages-2Mi 0 (0%) 0 (0%)",
|
||||
"raw_stderr_suppressed": false
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
The local OCI export at `/tmp/access-hardening-image-0a05383.oci.tar` was built from the exact published Access `0a05383195213e7eaacd08388ce1d7892ce756df` archive using the owner Containerfile. It is retained outside Git. Its index digest is `sha256:1318339e44b518f206a77cf50636bbc6f772c173e20c6fc8dd2d91d8e2895e91`. The artifact is local-only, not a Forgejo published candidate.
|
||||
|
||||
Run `python3 verify_local_oci.py --export /tmp/access-hardening-image-0a05383.oci.tar --source-repo /home/worsch/access-engine` from this artifact directory to verify archive/source/OCI blob integrity, platform/config/revision/default user and packaged bytes. `local-provenance.json` records source, base-image, package and binary hashes. Container checks use networknone/read-only/cap-dropALL/no-new-privileges and synthetic bundled requests, with no credentials or protected effects.
|
||||
|
||||
Earlier failed attempts remain in `prior-attempts.json` and `prior-missing-containerfile.log`; the corrected Containerfile build log is separate. No failures are represented as successful published builds. `published-metadata.json` preserves anonymous API404 and registry401 evidence.
|
||||
|
||||
The minimum next step is an existing owner/runner metadata read for the ordinary main-push run at this exact revision, returning run status and sanitized final publisher revision/legacy RepoDigest receipt. No new public package, workflow dispatch, admin credential fetch or native rollout is required to collect that evidence. Published and local image digests may differ because the local preparation label/BuildKit metadata differ. The frozen package extraction source2b/current05a remains unchanged; adopting the future signer image is a separate exact reviewed package revision.
|
||||
|
|
@ -0,0 +1,118 @@
|
|||
{
|
||||
"id": "decision:414734bb30381ff7",
|
||||
"contract_version": "flex-auth.decision-record.v1",
|
||||
"request_id": "check:secrets-engine-rotate",
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched",
|
||||
"matched_policy_version": "v2",
|
||||
"matched_rule": "catalog_lane_policy_matched",
|
||||
"resource": {
|
||||
"id": "lane:glas-primary",
|
||||
"type": "secret-catalog-lane",
|
||||
"system": "secrets-engine",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"auth_targets": [],
|
||||
"fields": [
|
||||
"password"
|
||||
],
|
||||
"policy_targets": [],
|
||||
"stage": "prod"
|
||||
}
|
||||
},
|
||||
"subject": {
|
||||
"id": "secrets-engine",
|
||||
"type": "service",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"description": "secrets-engine's own service identity, the single calling identity for the twelve gated catalog-lane actions it sends to POST /v1/check. Because it is the only subject, the package has no action_not_granted branch (FLEX-WP-0021-T02); registering a second identity is the revisit trigger.",
|
||||
"display_name": "secrets-engine service principal",
|
||||
"groups": [
|
||||
"group:secrets-engine-lane-operators"
|
||||
],
|
||||
"organization_relation": "ServiceProvider",
|
||||
"roles": [
|
||||
"Operator"
|
||||
]
|
||||
}
|
||||
},
|
||||
"binding": {
|
||||
"tenant": "tenant:platform",
|
||||
"subject": {
|
||||
"id": "secrets-engine",
|
||||
"type": "service",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"description": "secrets-engine's own service identity, the single calling identity for the twelve gated catalog-lane actions it sends to POST /v1/check. Because it is the only subject, the package has no action_not_granted branch (FLEX-WP-0021-T02); registering a second identity is the revisit trigger.",
|
||||
"display_name": "secrets-engine service principal",
|
||||
"groups": [
|
||||
"group:secrets-engine-lane-operators"
|
||||
],
|
||||
"organization_relation": "ServiceProvider",
|
||||
"roles": [
|
||||
"Operator"
|
||||
]
|
||||
}
|
||||
},
|
||||
"action": "rotate",
|
||||
"resource": {
|
||||
"id": "lane:glas-primary",
|
||||
"type": "secret-catalog-lane",
|
||||
"system": "secrets-engine",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"auth_targets": [],
|
||||
"fields": [
|
||||
"password"
|
||||
],
|
||||
"policy_targets": [],
|
||||
"stage": "prod"
|
||||
}
|
||||
},
|
||||
"request_digest": "sha256:de67324f54187055307a833235f83ced9fcd3a20952a27b3d19493ed39734345",
|
||||
"submitted_request_digest": "sha256:41c8fc084e58c46554ccb6afe9943a99906e5986668c923811721f66d9b30a6a"
|
||||
},
|
||||
"lifetime": {
|
||||
"kind": "ttl",
|
||||
"ttl": "15m",
|
||||
"not_before": "2026-10-16T16:55:43Z",
|
||||
"expires_at": "2026-10-16T17:10:43Z"
|
||||
},
|
||||
"diagnostics": {
|
||||
"action": "rotate",
|
||||
"matched_relationship": "",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_status": "ready",
|
||||
"registry_overrode": [],
|
||||
"registry_resource": false,
|
||||
"registry_subject": true
|
||||
},
|
||||
"provenance": {
|
||||
"evaluator": "flex-auth/local",
|
||||
"mode": "standalone",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_version": "v2",
|
||||
"policy_package_digest": "sha256:bd11c5fe77ce6439c65fea225ad6b71d2110efc5e7b5bc9b499c59cd0a53b8b4",
|
||||
"registry_snapshot_digest": "sha256:f5a309bc0b36721fd6d9ad7f53eb21222162bc2eac62a0ab0802a9a1d51340bb",
|
||||
"decision_time": "2026-10-16T16:55:43Z",
|
||||
"caller": {
|
||||
"mode": "disabled"
|
||||
}
|
||||
},
|
||||
"signature": {
|
||||
"mode": "unsigned"
|
||||
},
|
||||
"caring": {
|
||||
"profile": "caring-0.4.0-rc2",
|
||||
"conformance_findings": [
|
||||
{
|
||||
"code": "CARING-DESCRIPTOR-MISSING",
|
||||
"severity": "warning",
|
||||
"message": "no CARING descriptor matched the request",
|
||||
"fields": [
|
||||
"caring_context"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
{
|
||||
"id": "decision:7d56b7fc274ddfd6",
|
||||
"contract_version": "flex-auth.decision-record.v1",
|
||||
"request_id": "check:secrets-engine-wrong-tenant",
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant",
|
||||
"matched_policy_version": "v2",
|
||||
"matched_rule": "wrong_tenant",
|
||||
"resource": {
|
||||
"id": "lane:glas-primary",
|
||||
"type": "secret-catalog-lane",
|
||||
"system": "secrets-engine",
|
||||
"tenant": "tenant:coulomb",
|
||||
"attributes": {
|
||||
"auth_targets": [],
|
||||
"fields": [
|
||||
"password"
|
||||
],
|
||||
"policy_targets": [],
|
||||
"stage": "prod"
|
||||
}
|
||||
},
|
||||
"subject": {
|
||||
"id": "secrets-engine",
|
||||
"type": "service",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"description": "secrets-engine's own service identity, the single calling identity for the twelve gated catalog-lane actions it sends to POST /v1/check. Because it is the only subject, the package has no action_not_granted branch (FLEX-WP-0021-T02); registering a second identity is the revisit trigger.",
|
||||
"display_name": "secrets-engine service principal",
|
||||
"groups": [
|
||||
"group:secrets-engine-lane-operators"
|
||||
],
|
||||
"organization_relation": "ServiceProvider",
|
||||
"roles": [
|
||||
"Operator"
|
||||
]
|
||||
}
|
||||
},
|
||||
"binding": {
|
||||
"tenant": "tenant:coulomb",
|
||||
"subject": {
|
||||
"id": "secrets-engine",
|
||||
"type": "service",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"description": "secrets-engine's own service identity, the single calling identity for the twelve gated catalog-lane actions it sends to POST /v1/check. Because it is the only subject, the package has no action_not_granted branch (FLEX-WP-0021-T02); registering a second identity is the revisit trigger.",
|
||||
"display_name": "secrets-engine service principal",
|
||||
"groups": [
|
||||
"group:secrets-engine-lane-operators"
|
||||
],
|
||||
"organization_relation": "ServiceProvider",
|
||||
"roles": [
|
||||
"Operator"
|
||||
]
|
||||
}
|
||||
},
|
||||
"action": "rotate",
|
||||
"resource": {
|
||||
"id": "lane:glas-primary",
|
||||
"type": "secret-catalog-lane",
|
||||
"system": "secrets-engine",
|
||||
"tenant": "tenant:coulomb",
|
||||
"attributes": {
|
||||
"auth_targets": [],
|
||||
"fields": [
|
||||
"password"
|
||||
],
|
||||
"policy_targets": [],
|
||||
"stage": "prod"
|
||||
}
|
||||
},
|
||||
"request_digest": "sha256:c9c6e6f8713266e9e95ae1443a395a3a1f965ba95469dea747645f0437bb0d20",
|
||||
"submitted_request_digest": "sha256:9aab6de9069e1e811a52835ca00bc5e9cb38166444df068eb60a26923b1c9175"
|
||||
},
|
||||
"diagnostics": {
|
||||
"action": "rotate",
|
||||
"matched_relationship": "",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_status": "ready",
|
||||
"registry_overrode": [],
|
||||
"registry_resource": false,
|
||||
"registry_subject": true
|
||||
},
|
||||
"provenance": {
|
||||
"evaluator": "flex-auth/local",
|
||||
"mode": "standalone",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_version": "v2",
|
||||
"policy_package_digest": "sha256:bd11c5fe77ce6439c65fea225ad6b71d2110efc5e7b5bc9b499c59cd0a53b8b4",
|
||||
"registry_snapshot_digest": "sha256:f5a309bc0b36721fd6d9ad7f53eb21222162bc2eac62a0ab0802a9a1d51340bb",
|
||||
"decision_time": "2026-10-16T16:55:44Z",
|
||||
"caller": {
|
||||
"mode": "disabled"
|
||||
}
|
||||
},
|
||||
"signature": {
|
||||
"mode": "unsigned"
|
||||
},
|
||||
"caring": {
|
||||
"profile": "caring-0.4.0-rc2",
|
||||
"conformance_findings": [
|
||||
{
|
||||
"code": "CARING-DESCRIPTOR-MISSING",
|
||||
"severity": "warning",
|
||||
"message": "no CARING descriptor matched the request",
|
||||
"fields": [
|
||||
"caring_context"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
{
|
||||
"allow": {
|
||||
"exit": 0,
|
||||
"effect": "allow",
|
||||
"binding": {
|
||||
"tenant": "tenant:platform",
|
||||
"subject": {
|
||||
"id": "secrets-engine",
|
||||
"type": "service",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"description": "secrets-engine's own service identity, the single calling identity for the twelve gated catalog-lane actions it sends to POST /v1/check. Because it is the only subject, the package has no action_not_granted branch (FLEX-WP-0021-T02); registering a second identity is the revisit trigger.",
|
||||
"display_name": "secrets-engine service principal",
|
||||
"groups": [
|
||||
"group:secrets-engine-lane-operators"
|
||||
],
|
||||
"organization_relation": "ServiceProvider",
|
||||
"roles": [
|
||||
"Operator"
|
||||
]
|
||||
}
|
||||
},
|
||||
"action": "rotate",
|
||||
"resource": {
|
||||
"id": "lane:glas-primary",
|
||||
"type": "secret-catalog-lane",
|
||||
"system": "secrets-engine",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"auth_targets": [],
|
||||
"fields": [
|
||||
"password"
|
||||
],
|
||||
"policy_targets": [],
|
||||
"stage": "prod"
|
||||
}
|
||||
},
|
||||
"request_digest": "sha256:de67324f54187055307a833235f83ced9fcd3a20952a27b3d19493ed39734345",
|
||||
"submitted_request_digest": "sha256:41c8fc084e58c46554ccb6afe9943a99906e5986668c923811721f66d9b30a6a"
|
||||
},
|
||||
"provenance": {
|
||||
"evaluator": "flex-auth/local",
|
||||
"mode": "standalone",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_version": "v2",
|
||||
"policy_package_digest": "sha256:bd11c5fe77ce6439c65fea225ad6b71d2110efc5e7b5bc9b499c59cd0a53b8b4",
|
||||
"registry_snapshot_digest": "sha256:f5a309bc0b36721fd6d9ad7f53eb21222162bc2eac62a0ab0802a9a1d51340bb",
|
||||
"decision_time": "2026-10-16T16:55:43Z",
|
||||
"caller": {
|
||||
"mode": "disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"deny": {
|
||||
"exit": 0,
|
||||
"effect": "deny",
|
||||
"binding": {
|
||||
"tenant": "tenant:coulomb",
|
||||
"subject": {
|
||||
"id": "secrets-engine",
|
||||
"type": "service",
|
||||
"tenant": "tenant:platform",
|
||||
"attributes": {
|
||||
"description": "secrets-engine's own service identity, the single calling identity for the twelve gated catalog-lane actions it sends to POST /v1/check. Because it is the only subject, the package has no action_not_granted branch (FLEX-WP-0021-T02); registering a second identity is the revisit trigger.",
|
||||
"display_name": "secrets-engine service principal",
|
||||
"groups": [
|
||||
"group:secrets-engine-lane-operators"
|
||||
],
|
||||
"organization_relation": "ServiceProvider",
|
||||
"roles": [
|
||||
"Operator"
|
||||
]
|
||||
}
|
||||
},
|
||||
"action": "rotate",
|
||||
"resource": {
|
||||
"id": "lane:glas-primary",
|
||||
"type": "secret-catalog-lane",
|
||||
"system": "secrets-engine",
|
||||
"tenant": "tenant:coulomb",
|
||||
"attributes": {
|
||||
"auth_targets": [],
|
||||
"fields": [
|
||||
"password"
|
||||
],
|
||||
"policy_targets": [],
|
||||
"stage": "prod"
|
||||
}
|
||||
},
|
||||
"request_digest": "sha256:c9c6e6f8713266e9e95ae1443a395a3a1f965ba95469dea747645f0437bb0d20",
|
||||
"submitted_request_digest": "sha256:9aab6de9069e1e811a52835ca00bc5e9cb38166444df068eb60a26923b1c9175"
|
||||
},
|
||||
"provenance": {
|
||||
"evaluator": "flex-auth/local",
|
||||
"mode": "standalone",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_version": "v2",
|
||||
"policy_package_digest": "sha256:bd11c5fe77ce6439c65fea225ad6b71d2110efc5e7b5bc9b499c59cd0a53b8b4",
|
||||
"registry_snapshot_digest": "sha256:f5a309bc0b36721fd6d9ad7f53eb21222162bc2eac62a0ab0802a9a1d51340bb",
|
||||
"decision_time": "2026-10-16T16:55:44Z",
|
||||
"caller": {
|
||||
"mode": "disabled"
|
||||
}
|
||||
}
|
||||
},
|
||||
"hardening_limit_refusal": {
|
||||
"exit": 1,
|
||||
"expected_reason": true,
|
||||
"effect_released": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,67 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T16:58:39.528692+00:00",
|
||||
"routes": [
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/access-engine",
|
||||
"status": 200,
|
||||
"final_url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/access-engine",
|
||||
"content_type": "application/json;charset=utf-8",
|
||||
"repo_metadata": {
|
||||
"full_name": "coulomb/access-engine",
|
||||
"private": false,
|
||||
"html_url": "https://forgejo.coulomb.social/coulomb/access-engine",
|
||||
"default_branch": "main",
|
||||
"has_actions": true,
|
||||
"archived": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/coulomb/access-engine/actions",
|
||||
"status": 200,
|
||||
"final_url": "https://forgejo.coulomb.social/coulomb/access-engine/actions",
|
||||
"content_type": "text/html; charset=utf-8",
|
||||
"run_links": [
|
||||
"/coulomb/access-engine/actions/runs/371",
|
||||
"/coulomb/access-engine/actions/runs/372",
|
||||
"/coulomb/access-engine/actions/runs/373",
|
||||
"/coulomb/access-engine/actions/runs/374",
|
||||
"/coulomb/access-engine/actions/runs/375",
|
||||
"/coulomb/access-engine/actions/runs/376",
|
||||
"/coulomb/access-engine/actions/runs/377",
|
||||
"/coulomb/access-engine/actions/runs/378",
|
||||
"/coulomb/access-engine/actions/runs/379",
|
||||
"/coulomb/access-engine/actions/runs/380",
|
||||
"/coulomb/access-engine/actions/runs/381",
|
||||
"/coulomb/access-engine/actions/runs/382",
|
||||
"/coulomb/access-engine/actions/runs/383",
|
||||
"/coulomb/access-engine/actions/runs/384",
|
||||
"/coulomb/access-engine/actions/runs/385",
|
||||
"/coulomb/access-engine/actions/runs/386",
|
||||
"/coulomb/access-engine/actions/runs/387",
|
||||
"/coulomb/access-engine/actions/runs/388",
|
||||
"/coulomb/access-engine/actions/runs/389",
|
||||
"/coulomb/access-engine/actions/runs/390",
|
||||
"/coulomb/access-engine/actions/runs/391",
|
||||
"/coulomb/access-engine/actions/runs/392",
|
||||
"/coulomb/access-engine/actions/runs/393",
|
||||
"/coulomb/access-engine/actions/runs/394",
|
||||
"/coulomb/access-engine/actions/runs/395",
|
||||
"/coulomb/access-engine/actions/runs/396",
|
||||
"/coulomb/access-engine/actions/runs/397",
|
||||
"/coulomb/access-engine/actions/runs/398",
|
||||
"/coulomb/access-engine/actions/runs/399",
|
||||
"/coulomb/access-engine/actions/runs/400"
|
||||
],
|
||||
"mentions_exact_revision": true,
|
||||
"page_title": [
|
||||
"Actions - coulomb/access-engine - Forgejo: Beyond coding. We Forge."
|
||||
]
|
||||
},
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/coulomb/access-engine/archive/0a05383195213e7eaacd08388ce1d7892ce756df.tar.gz",
|
||||
"status": 200,
|
||||
"final_url": "https://forgejo.coulomb.social/coulomb/access-engine/archive/0a05383195213e7eaacd08388ce1d7892ce756df.tar.gz",
|
||||
"content_type": "application/octet-stream"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.index.v1+json",
|
||||
"manifests": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"digest": "sha256:9a15481c60a04de794de9acf32ef9c97188e017e74344c5156948c6cf28b01ef",
|
||||
"size": 3318,
|
||||
"platform": {
|
||||
"architecture": "amd64",
|
||||
"os": "linux"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"digest": "sha256:8b6e4527c066e2e6b0bb636819920fd1302706d305c32302d241115bb0d85043",
|
||||
"size": 566,
|
||||
"annotations": {
|
||||
"vnd.docker.reference.digest": "sha256:9a15481c60a04de794de9acf32ef9c97188e017e74344c5156948c6cf28b01ef",
|
||||
"vnd.docker.reference.type": "attestation-manifest"
|
||||
},
|
||||
"platform": {
|
||||
"architecture": "unknown",
|
||||
"os": "unknown"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,91 @@
|
|||
{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"config": {
|
||||
"mediaType": "application/vnd.oci.image.config.v1+json",
|
||||
"digest": "sha256:0385550b638baf4d1ece5c40120a94e034dbde68c56b40a32f24daa893997d84",
|
||||
"size": 4250
|
||||
},
|
||||
"layers": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:a5789fc40e828c4e7467626e3f69ec5dea8e5da22fe660db8ae6d16f777b0bbf",
|
||||
"size": 83900
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:990a9c434e5e0f11549a8d4a41a1991e621b04e30cd63269adbc97b1dc38fd7e",
|
||||
"size": 12481
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:39dc083afc39bd8dc43d456fe7ff7d39292e593bb2769972c11bb2e5f9119386",
|
||||
"size": 445709
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:bf7a4185f01524837d19abde915ffde84e64368b250f5b5e9f6f75aea62a11d4",
|
||||
"size": 29005
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:2780920e5dbfbe103d03a583ed75345306e572ec5a48cb10361f046767d9f29a",
|
||||
"size": 67
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:7c12895b777bcaa8ccae0605b4de635b68fc32d60fa08f421dc3818bf55ee212",
|
||||
"size": 188
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3214acf345c0cc6bbdb56b698a41ccdefc624a09d6beb0d38b5de0b2303ecaf4",
|
||||
"size": 123
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:52630fc75a18675c530ed9eba5f55eca09b03e91bd5bc15307918bbc1a7e7296",
|
||||
"size": 162
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:dd64bf2dd177757451a98fcdc999a339c35dee5d9872d8f4dc69c8f3c4dd0112",
|
||||
"size": 80
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:b839dfae01f66e15c6a8b63520557ed315bdfe036342fa7a0c537259f10d7a9a",
|
||||
"size": 351
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:dcaa5a89b0ccda4b283e16d0b4d0891cd93d5fe05c6798f7806781a6a2d84354",
|
||||
"size": 314
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:96ed2737ae312e0bc637b40783f7c2f23416cb72ca957aa01855f1614278e64b",
|
||||
"size": 143347
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:e39b9a153cc14633dfd6ee0559a7bd5d5ac42ee0fd3457465ecf64d5483e58bf",
|
||||
"size": 7762649
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:e12f8962ffa71d71573cf1b8f420c465e01cbb54ec6ebb54c028bb647aa0f74f",
|
||||
"size": 720625
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:3ae207931a7a56008e33a9d99ab3bfd3d50be49e01fb776a0151fc7f44adff47",
|
||||
"size": 95921
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
|
||||
"digest": "sha256:ca7afdae31acacf0bce8677167728cfc79356b60c55a72d8819b259d3d7353c9",
|
||||
"size": 95933
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"schema": "access-engine.local-image-evidence-manifest.v1",
|
||||
"files_sha256": {
|
||||
"README.md": "bdfc67c74fa0d181f1ede20ab50f3853f5962154a8cd7c2a00c42f59d2de7df3",
|
||||
"container-allow.json": "a86064aacffe42930254fb455e25803574418891952f9538d23fe6011d9d5dc3",
|
||||
"container-deny.json": "f5b5daa033945dd4e8a070fbc8ba069a9c41e73ba01d5d701bd476f83e93b9f0",
|
||||
"container-smoke.json": "aaf45ae6d03333c6e6cdf9b48f03f9b527709cb2fa2cca0eaeee1c7277c51d57",
|
||||
"image-index.json": "1318339e44b518f206a77cf50636bbc6f772c173e20c6fc8dd2d91d8e2895e91",
|
||||
"linux-amd64-manifest.json": "9a15481c60a04de794de9acf32ef9c97188e017e74344c5156948c6cf28b01ef",
|
||||
"local-build.log": "25218c4bff9a40356a6f54e82d0bd5fa5a716fe4826e262f2a4ff18be33f8ac4",
|
||||
"local-provenance.json": "925bbb9b834dab82933ae3b1f0b71cf002530101a6f4b1fc27a027b2b13acd23",
|
||||
"offline-verification.json": "904992348c3c830bb81e8c455b95b5f07b270a429bc550f11e576f7be3c7b638",
|
||||
"owner-review.json": "a5f8140f90b131c4a8cc456d71fc99cbb0b9c26c45f3512001452ffbeec68ca4",
|
||||
"packaged-policy-check.json": "4f5d7bd2b9778e04298c5444dce266538bc63bdaaee344d86386608dffa6f93b",
|
||||
"prior-attempts.json": "712df64c61b4835b4d427ac1d23009ca966a3649ce176d8f29a465b315d22462",
|
||||
"prior-missing-containerfile.log": "7f5564b9e745617382afa8f5492c4fbf642a011cf0aa28a0e71b33c37367a488",
|
||||
"published-metadata.json": "99fca94c8a877182b38e3874989696393d9410e6b8ba22da9340012229da7b8d",
|
||||
"verify_local_oci.py": "53f1851fa99673836940e6d87ee109b59f52d2e901ec0fbb8c260fd51bda2c13"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T16:59:17.530264+00:00",
|
||||
"public_metadata": [
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/access-engine/commits/0a05383195213e7eaacd08388ce1d7892ce756df/statuses",
|
||||
"status": 200,
|
||||
"root_type": "list",
|
||||
"statuses": [
|
||||
{
|
||||
"id": 6,
|
||||
"state": null,
|
||||
"status": "failure",
|
||||
"context": "Build and Publish Container Image / build-and-push (push)",
|
||||
"description": "Failing after 1m1s",
|
||||
"target_url": "/coulomb/access-engine/actions/runs/400/jobs/0",
|
||||
"created_at": "2026-10-16T16:47:59Z",
|
||||
"updated_at": "2026-10-16T16:47:59Z"
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"state": null,
|
||||
"status": "success",
|
||||
"context": "CI Smoke / container-smoke (push)",
|
||||
"description": "Successful in 3s",
|
||||
"target_url": "/coulomb/access-engine/actions/runs/399/jobs/1",
|
||||
"created_at": "2026-10-16T16:46:58Z",
|
||||
"updated_at": "2026-10-16T16:46:58Z"
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"state": null,
|
||||
"status": "success",
|
||||
"context": "CI Smoke / host-smoke (push)",
|
||||
"description": "Successful in 0s",
|
||||
"target_url": "/coulomb/access-engine/actions/runs/399/jobs/0",
|
||||
"created_at": "2026-10-16T16:46:54Z",
|
||||
"updated_at": "2026-10-16T16:46:54Z"
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"state": null,
|
||||
"status": "pending",
|
||||
"context": "CI Smoke / host-smoke (push)",
|
||||
"description": "Waiting to run",
|
||||
"target_url": "/coulomb/access-engine/actions/runs/399/jobs/0",
|
||||
"created_at": "2026-10-16T16:46:52Z",
|
||||
"updated_at": "2026-10-16T16:46:52Z"
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"state": null,
|
||||
"status": "pending",
|
||||
"context": "CI Smoke / container-smoke (push)",
|
||||
"description": "Waiting to run",
|
||||
"target_url": "/coulomb/access-engine/actions/runs/399/jobs/1",
|
||||
"created_at": "2026-10-16T16:46:52Z",
|
||||
"updated_at": "2026-10-16T16:46:52Z"
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"state": null,
|
||||
"status": "pending",
|
||||
"context": "Build and Publish Container Image / build-and-push (push)",
|
||||
"description": "Waiting to run",
|
||||
"target_url": "/coulomb/access-engine/actions/runs/400/jobs/0",
|
||||
"created_at": "2026-10-16T16:46:52Z",
|
||||
"updated_at": "2026-10-16T16:46:52Z"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/coulomb/access-engine/actions/runs/400/jobs/0",
|
||||
"error": "JSONDecodeError"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"url": "https://forgejo.coulomb.social/coulomb/access-engine/actions/runs/400/jobs/0/logs",
|
||||
"bounded_read": true,
|
||||
"categories": {
|
||||
"oom_or_killed": false,
|
||||
"go_sum_missing": false,
|
||||
"go_version_incompatible": false,
|
||||
"source_archive_download_failed": false,
|
||||
"docker_auth_failed": false,
|
||||
"docker_daemon_failed": false,
|
||||
"source_compile_error": false,
|
||||
"disk_full": false,
|
||||
"network_error": false,
|
||||
"go_package_absent": false,
|
||||
"containerfile_missing": false,
|
||||
"publisher_success_receipt": false,
|
||||
"go_mod_readonly": false,
|
||||
"build_context_missing": false
|
||||
},
|
||||
"exit_codes": [],
|
||||
"raw_log_retained": false
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T17:01:04.866247+00:00",
|
||||
"source_revision": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"run_url": "https://forgejo.coulomb.social/coulomb/access-engine/actions/runs/400",
|
||||
"public_logs_url": "https://forgejo.coulomb.social/coulomb/access-engine/actions/runs/400/jobs/0/logs",
|
||||
"job_conclusion": "failure",
|
||||
"exact_failure": "buildctx/tools/publish-runtime-images.sh: line31: python3: command not found",
|
||||
"failed_stage": "metadata validation after legacy pushes and authenticated pull",
|
||||
"sanitized_facts": [
|
||||
{
|
||||
"timestamp": "\u001b[13Bmain-0a05383:",
|
||||
"digests": [
|
||||
"sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e"
|
||||
],
|
||||
"legacy_image": false,
|
||||
"python3_missing": false
|
||||
},
|
||||
{
|
||||
"timestamp": "\u001b[2Blatest:",
|
||||
"digests": [
|
||||
"sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e"
|
||||
],
|
||||
"legacy_image": false,
|
||||
"python3_missing": false
|
||||
},
|
||||
{
|
||||
"timestamp": "2026-10-16T16:47:59.2382001Z",
|
||||
"digests": [
|
||||
"sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e"
|
||||
],
|
||||
"legacy_image": false,
|
||||
"python3_missing": false
|
||||
},
|
||||
{
|
||||
"timestamp": "2026-10-16T16:47:59.2382269Z",
|
||||
"digests": [],
|
||||
"legacy_image": true,
|
||||
"python3_missing": false
|
||||
},
|
||||
{
|
||||
"timestamp": "2026-10-16T16:47:59.2680478Z",
|
||||
"digests": [],
|
||||
"legacy_image": false,
|
||||
"python3_missing": true
|
||||
}
|
||||
],
|
||||
"raw_log_retained": false,
|
||||
"published_acceptance": "Failed verification run is not promoted to fully verified candidate. Digest facts retain actual publication progress and need revision-label readback or corrected normal CI."
|
||||
}
|
||||
|
|
@ -0,0 +1 @@
|
|||
{"local_oci_index_digest": "sha256:1318339e44b518f206a77cf50636bbc6f772c173e20c6fc8dd2d91d8e2895e91", "published_registry_provenance": false, "source_revision": "0a05383195213e7eaacd08388ce1d7892ce756df", "verified": true}
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
{
|
||||
"schema": "access-engine.local-image-owner-review.v1",
|
||||
"work_item": "FLEX-WP-0024-T06",
|
||||
"source_revision": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"disposition": "Local image/source preparation verified; not published or native admitted",
|
||||
"local_oci_index_digest": "sha256:1318339e44b518f206a77cf50636bbc6f772c173e20c6fc8dd2d91d8e2895e91",
|
||||
"proven": [
|
||||
"All547 archived source files match disposable build context; exact published full revision label.",
|
||||
"All22 exported OCI blobs content hashes verify; linux/amd64 image manifest/config and default UID65532 verify.",
|
||||
"Both retained and renamed packaged lifecycle policy/registry paths equal exact source bytes; binaries have recorded hashes.",
|
||||
"Actual container with networknone/read-only/cap-dropALL/no-new-privileges passes28 lifecycle policy tests and32 fixtures.",
|
||||
"Actual container current lifecycle rotate ALLOW and wrong-tenant DENY preserve expected package/provenance.",
|
||||
"Actual container serve rejects outbox limit67108865 before serving/effect release."
|
||||
],
|
||||
"limits": [
|
||||
"Disposable local preparation image includes an extra local scope label; do not expect its digest to equal future normal CI artifact.",
|
||||
"Actual OCI integrity and source inclusion do not prove published Forgejo provenance, native signer mount, caller authentication, durable PVC behavior, independently admitted public trust or execution authority.",
|
||||
"CLI local checks are unsigned standalone fixtures, not native signed acceptance.",
|
||||
"Normal anonymous Actions API404 and registry/package401 do not establish absent build; they establish missing metadata access in this preparation context.",
|
||||
"No credential values read; route/plan only found existing high-risk admin proxy with failed token lookup, which was not used for fetch/login/exec."
|
||||
],
|
||||
"smallest_next_step": {
|
||||
"owner": "existing Forgejo/container-build pipeline operator with already admitted runner/CI access",
|
||||
"operation": "Read only the ordinary0a053831 main-push build status and sanitized publisher receipt; no new workflow dispatch, credential grant or package publication.",
|
||||
"receipt_fields": [
|
||||
"run id/url/status/conclusion",
|
||||
"head/source revision0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"publisher modelegacy and repositoryforgejo.coulomb.social/coulomb/flex-auth",
|
||||
"registry top-level manifest digest from authenticated runner pull/RepoDigests",
|
||||
"image revision label equal exact source",
|
||||
"packaged lifecycle policy/registry hashes"
|
||||
],
|
||||
"acceptance": "Only then bind the published digest in a separately reviewed native signer package successor; retain extraction baseline2b/current05a unchanged. If no successful normal run exists, report its actual failure before proposing a bounded pipeline correction."
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,503 @@
|
|||
{
|
||||
"valid": true,
|
||||
"tests": [
|
||||
{
|
||||
"name": "test_absent_tenant_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_apply_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_compromise_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_deactivate_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_approved_but_not_valid_now_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_consumed_claim_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_foreign_issuer_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_insufficient_approvers_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_revoked_claim_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_with_dual_control_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_without_claim_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_destroy_wrong_kind_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_exec_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_handoff_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_provision_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_reactivate_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_revoke_is_not_an_action",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_rotate_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_suspend_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_ungated_surfaces_are_not_actions",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_unknown_subject_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_verify_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_wrap_allowed",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_wrong_resource_type_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_wrong_subject_type_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_wrong_system_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_wrong_tenant_denied",
|
||||
"passed": true
|
||||
},
|
||||
{
|
||||
"name": "test_wrong_tenant_outranks_dual_control",
|
||||
"passed": true
|
||||
}
|
||||
],
|
||||
"fixtures": [
|
||||
{
|
||||
"id": "fixture:secrets-engine-apply-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-provision-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-rotate-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-verify-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-handoff-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-wrap-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-exec-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-deactivate-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-suspend-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-compromise-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-reactivate-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-dual-control-allow",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "allow",
|
||||
"reason": "catalog_lane_policy_matched"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-no-claim-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-insufficient-approvers-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-consumed-claim-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-revoked-claim-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-approved-not-valid-now-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-foreign-issuer-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-destroy-wrong-kind-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "dual_control_required"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-revoke-not-an-action-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-ungated-plan-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-ungated-route-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-ungated-audit-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-ungated-catalog-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-ungated-evidence-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_action"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-unknown-subject-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_subject"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "unknown_subject"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-wrong-subject-type-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_subject_type"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_subject_type"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-wrong-system-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_system"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_system"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-wrong-resource-type-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_resource_type"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_resource_type"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-wrong-tenant-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-absent-tenant-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant"
|
||||
}
|
||||
},
|
||||
{
|
||||
"id": "fixture:secrets-engine-wrong-tenant-with-valid-claim-deny",
|
||||
"passed": true,
|
||||
"expected": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant"
|
||||
},
|
||||
"actual": {
|
||||
"effect": "deny",
|
||||
"reason": "wrong_tenant"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"attempt1": {
|
||||
"result": "failed before build",
|
||||
"observed_error": "failed to update builder last activity time: open /home/worsch/.docker/buildx/activity/.tmp-default707917045: read-only file system",
|
||||
"evidence": "Exact error captured in tool result before the subsequent retry overwrote the original log; this JSON is a transcription, not an original log."
|
||||
},
|
||||
"attempt2": {
|
||||
"result": "failed before build",
|
||||
"reason": "Missing explicit -f Containerfile; Docker looked for absent Dockerfile.",
|
||||
"log": "prior-missing-containerfile.log"
|
||||
},
|
||||
"attempt3": {
|
||||
"result": "success",
|
||||
"correction": "Use the owner Containerfile explicitly, same published source, local-only tag.",
|
||||
"log": "local-build.log"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T17:01:57.705150+00:00",
|
||||
"url": "https://forgejo.coulomb.social/coulomb/-/packages/container/flex-auth/main-0a05383",
|
||||
"status": 200,
|
||||
"final_url": "https://forgejo.coulomb.social/coulomb/-/packages/container/flex-auth/main-0a05383",
|
||||
"mentions_revision": true,
|
||||
"digests": [
|
||||
"sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e"
|
||||
],
|
||||
"page_title": [
|
||||
"flex-auth - Forgejo: Beyond coding. We Forge."
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,41 @@
|
|||
{
|
||||
"schema": "access-engine.published-image-candidate-observation.v1",
|
||||
"observed_at": "2026-10-16T17:03:02.075463+00:00",
|
||||
"source_revision": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"repository": "forgejo.coulomb.social/coulomb/flex-auth",
|
||||
"tag": "main-0a05383",
|
||||
"manifest_digest": "sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e",
|
||||
"immutable_reference": "forgejo.coulomb.social/coulomb/flex-auth@sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e",
|
||||
"independent_public_package_observation": {
|
||||
"url": "https://forgejo.coulomb.social/coulomb/-/packages/container/flex-auth/main-0a05383",
|
||||
"http_status": 200,
|
||||
"response_sha256": "b25eff0fda847c7d45fffe0023717771c00889621d2c694655eb53ce4019b498",
|
||||
"sole_reported_manifest_digest": "sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e",
|
||||
"explicit_revision_label": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"source": "Public registry package metadata from existing TLS origin; no credential or token exchange."
|
||||
},
|
||||
"ordinary_ci": {
|
||||
"run_url": "https://forgejo.coulomb.social/coulomb/access-engine/actions/runs/400",
|
||||
"commit_status": "failure",
|
||||
"push_digest_and_authenticated_pull_digest": "sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e",
|
||||
"exact_failure": "tools/publish-runtime-images.sh line31 python3: command not found after push and pull",
|
||||
"receipt": "normal-ci-run400-failure.json",
|
||||
"no_fabrication": "Publication is observed; terminal workflow success is not claimed. Existing CI Smoke run399 jobs pass."
|
||||
},
|
||||
"local_build": {
|
||||
"index_digest": "sha256:1318339e44b518f206a77cf50636bbc6f772c173e20c6fc8dd2d91d8e2895e91",
|
||||
"scope": "Independent exact-source disposable build, not the published image; different labels/timestamps/attestation explain distinct digest.",
|
||||
"receipt": "local-provenance.json"
|
||||
},
|
||||
"admission": {
|
||||
"state": "observed published candidate; native acceptance withheld",
|
||||
"required": [
|
||||
"Independent coordinator review of publisher fix and explicit CI failure disposition or successful reviewed successor normal CI receipt.",
|
||||
"Exact native candidate policy/registry/binary/config/mount/caller/trust/record/PVC runtime verification under separately approved scope.",
|
||||
"Package authoritative declaration commit/review/resolution and Platform custody/consumer trust admission."
|
||||
],
|
||||
"no_actions": [
|
||||
"No manual push, workflow rerun, paired/public package creation, deploy, credential fetch, key or trust mutation occurred."
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
{
|
||||
"observed_at": "2026-10-16T16:54:27.746757+00:00",
|
||||
"scope": "Anonymous metadata-only reads; no credential/header acquisition, no body logs",
|
||||
"source_revision": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"routes": [
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/api/v1/repos/coulomb/access-engine/actions/runs?limit=5",
|
||||
"status": 404,
|
||||
"auth_challenge_present": false
|
||||
},
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/v2/coulomb/flex-auth/manifests/main-0a05383",
|
||||
"status": 401,
|
||||
"auth_challenge_present": true
|
||||
},
|
||||
{
|
||||
"url": "https://forgejo.coulomb.social/api/v1/packages/coulomb?type=container&q=flex-auth&limit=50",
|
||||
"status": 401,
|
||||
"auth_challenge_present": false
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,97 @@
|
|||
diff --git a/tools/publish-runtime-images.sh b/tools/publish-runtime-images.sh
|
||||
--- a/tools/publish-runtime-images.sh
|
||||
+++ b/tools/publish-runtime-images.sh
|
||||
@@ -27,8 +27,22 @@
|
||||
digests=()
|
||||
for image in "${images[@]}"; do
|
||||
docker pull "$image:main-$short"
|
||||
- raw=$(docker image inspect --format '{{json .RepoDigests}}' "$image:main-$short")
|
||||
- digest=$(printf '%s' "$raw" | python3 -c 'import json,re,sys; x=json.load(sys.stdin); assert isinstance(x,list); matches=[v.removeprefix(sys.argv[1]+"@") for v in x if isinstance(v,str) and v.startswith(sys.argv[1]+"@")]; assert len(matches)==1 and re.fullmatch(r"sha256:[a-f0-9]{64}",matches[0]); print(matches[0])' "$image")
|
||||
+ # The existing container-build runner supplies Bash and Docker, not Python.
|
||||
+ # Capture inspect first so command failure is not hidden by process substitution.
|
||||
+ raw=$(docker image inspect --format '{{range .RepoDigests}}{{println .}}{{end}}' "$image:main-$short")
|
||||
+ digest=""
|
||||
+ matches=0
|
||||
+ while IFS= read -r reference; do
|
||||
+ if [[ "$reference" == "$image@"* ]]; then
|
||||
+ candidate=${reference#"$image@"}
|
||||
+ [[ "$candidate" =~ ^sha256:[a-f0-9]{64}$ ]] || { echo 'invalid published registry manifest digest' >&2; exit 1; }
|
||||
+ digest=$candidate
|
||||
+ matches=$((matches + 1))
|
||||
+ fi
|
||||
+ done <<< "$raw"
|
||||
+ [[ "$matches" == 1 ]] || { echo 'expected exactly one published repository digest' >&2; exit 1; }
|
||||
+ actual_revision=$(docker image inspect --format '{{index .Config.Labels "org.opencontainers.image.revision"}}' "$image:main-$short")
|
||||
+ [[ "$actual_revision" == "$revision" ]] || { echo 'published image revision differs from exact source' >&2; exit 1; }
|
||||
digests+=("$digest")
|
||||
done
|
||||
if [[ "$mode" == paired && "${digests[0]}" != "${digests[1]}" ]]; then
|
||||
diff --git a/tests/test_image_publisher.py b/tests/test_image_publisher.py
|
||||
new file mode 100644
|
||||
--- /dev/null
|
||||
+++ b/tests/test_image_publisher.py
|
||||
@@ -0,0 +1,64 @@
|
||||
+"""Execute publisher against a Docker metadata fixture with no Python on PATH."""
|
||||
+import os
|
||||
+from pathlib import Path
|
||||
+import subprocess
|
||||
+import tempfile
|
||||
+import unittest
|
||||
+
|
||||
+ROOT = Path(__file__).resolve().parents[1]
|
||||
+REVISION = '0a05383195213e7eaacd08388ce1d7892ce756df'
|
||||
+DIGEST = 'sha256:' + 'a'*64
|
||||
+DOCKER = '''#!/bin/bash
|
||||
+set -eu
|
||||
+if [[ "$1" == image && "$2" == inspect ]]; then
|
||||
+ [[ "${CASE:-}" != inspect_error ]] || exit 29
|
||||
+ if [[ "$4" == *RepoDigests* ]]; then
|
||||
+ image=${5%:main-*}
|
||||
+ case "${CASE:-}" in
|
||||
+ missing) printf '%s@sha256:%064d\\n' other/repository 0 ;;
|
||||
+ duplicate) printf '%s@%s\\n%s@%s\\n' "$image" "$DIGEST" "$image" "$DIGEST" ;;
|
||||
+ malformed) printf '%s@sha256:BAD\\n' "$image" ;;
|
||||
+ prefix_collision) printf '%s-extra@%s\\n' "$image" "$DIGEST" ;;
|
||||
+ mismatch) if [[ "$image" == */access-engine ]]; then printf '%s@sha256:%064d\\n' "$image" 0; else printf '%s@%s\\n' "$image" "$DIGEST"; fi ;;
|
||||
+ *) printf '%s@%s\\n' "$image" "$DIGEST" ;;
|
||||
+ esac
|
||||
+ else
|
||||
+ if [[ "${CASE:-}" == wrong_revision ]]; then printf '%040d\\n' 0; else printf '%s\\n' "$REVISION"; fi
|
||||
+ fi
|
||||
+fi
|
||||
+'''
|
||||
+
|
||||
+
|
||||
+class PublisherMetadataChecks(unittest.TestCase):
|
||||
+ def invoke(self, case='', mode='legacy'):
|
||||
+ with tempfile.TemporaryDirectory() as tmp:
|
||||
+ docker = Path(tmp)/'docker'
|
||||
+ docker.write_text(DOCKER)
|
||||
+ docker.chmod(0o755)
|
||||
+ env = {'PATH':tmp, 'CASE':case, 'REVISION':REVISION, 'DIGEST':DIGEST}
|
||||
+ return subprocess.run(['/bin/bash',str(ROOT/'tools/publish-runtime-images.sh'),
|
||||
+ REVISION,mode,tmp],env=env,capture_output=True,text=True)
|
||||
+
|
||||
+ def test_existing_bash_docker_only_runner_and_exact_receipt(self):
|
||||
+ for mode,count in [('legacy',1),('paired',2)]:
|
||||
+ result = self.invoke(mode=mode)
|
||||
+ self.assertEqual(result.returncode,0,result.stderr)
|
||||
+ self.assertIn('manifest_digest='+DIGEST,result.stdout)
|
||||
+ self.assertIn('verified_repositories='+str(count),result.stdout)
|
||||
+
|
||||
+ def test_missing_duplicate_malformed_foreign_revision_and_inspect_failure_refuse(self):
|
||||
+ for case in ('missing','duplicate','malformed','prefix_collision','wrong_revision','inspect_error'):
|
||||
+ with self.subTest(case=case):
|
||||
+ result = self.invoke(case)
|
||||
+ self.assertNotEqual(result.returncode,0)
|
||||
+ self.assertNotIn('publication mode=',result.stdout)
|
||||
+
|
||||
+ def test_existing_paired_digest_equality_is_preserved(self):
|
||||
+ result = self.invoke('mismatch','paired')
|
||||
+ self.assertNotEqual(result.returncode,0)
|
||||
+ self.assertIn('manifest digests differ',result.stderr)
|
||||
+ self.assertNotIn('publication mode=',result.stdout)
|
||||
+
|
||||
+
|
||||
+if __name__ == '__main__':
|
||||
+ unittest.main()
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"base": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"patch_sha256": "faeb1cfd83b087f6bfbeed1e6bfc871ce79e233bb9c4ee9ec024355e23a663d9",
|
||||
"files_sha256": {
|
||||
"tools/publish-runtime-images.sh": "1e95ed70e55b04943613f89e241ad4c25094a26cabefbed6c1bdedb8deedf630",
|
||||
"tests/test_image_publisher.py": "d5a95cfd0923f9b899ef795d9cd34dee698b0846c831bd3124cb7707c5bfaa91"
|
||||
},
|
||||
"scope": "Existing publisher metadata parsing only; no new workflow, package, runtime, credential or deployment scope.",
|
||||
"actual_trigger": "Normal main push tools/publish-runtime-images.sh path triggers existing legacy build-and-publish workflow. Do not dispatch paired publication.",
|
||||
"cause": "Actual normal run400 published and pulled legacy manifest, then failed because runner lacks python3.",
|
||||
"change": "Docker native Go-template RepoDigests output plus Bash strict exact-repository/one digest/full SHA check; preserve existing paired digest equality and add exact pulled source revision-label check.",
|
||||
"checks": {
|
||||
"bash_syntax": "pass",
|
||||
"unittest": "3 pass, includes Bash+Docker-only PATH, metadata refusal and paired equality; no real publication in tests."
|
||||
},
|
||||
"owner_disposition": "Source preparation complete; coordinator independent review/integration required."
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
{
|
||||
"session_id": 52971,
|
||||
"exit_code": 0,
|
||||
"source_revision": "84c78e072c8f3daf2bc3b90f8efc8fbeb16c3cf0",
|
||||
"summary": {
|
||||
"fail": 0,
|
||||
"automation_error": 0,
|
||||
"warn": 10,
|
||||
"info": 0
|
||||
},
|
||||
"fixes_applied": [
|
||||
"bindings: synced 38/38",
|
||||
"C-17 cleared: pushed 1 backlogged commit(s)",
|
||||
"C-22 fixed: task 7f785b52… description updated",
|
||||
"push: pushed"
|
||||
]
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"schema": "access-engine.image-evidence-successor.v1",
|
||||
"historical_local_manifest_sha256": "d914af7ae5846b2a14ec617b2f7288ee2942268bfc9970e325b224abbd9bffad",
|
||||
"state": "Public HTML/commit-status/package routes discovered after unsupported actions API404; actual publisher post-push dependency failure classified, not an absent-credentials claim.",
|
||||
"files_sha256": {
|
||||
"extra-public-ci-metadata.json": "f05be27aa0e1594b5c31db759ebb4cf87a914bee96dcc3cd80a10e1dd401b027",
|
||||
"public-package-metadata.json": "2b9cf2f1d08f6d165f48be2644923718af00e9cc19560ed48834c8f0e8156400",
|
||||
"normal-ci-run400-failure.json": "d787908afa557e6f373e737cdd777cc6c17b10e1ab854d209534f55c01b7a002",
|
||||
"normal-ci-commit-status.json": "071e92d96ca275383900c3b12b152ee2d8e19ab1d006522c98e9ac0eac9aac84",
|
||||
"normal-ci-initial-classification.json": "e8fc00020f980dcecb107754fa9025e2a3541b4ef918107d5dc88f2714f2fd0c",
|
||||
"published-candidate.json": "03d43c59a834cb67d69b77aa30fb6ac2955bf99225332c6970953c6d85d5d2e0",
|
||||
"publisher-fix/implementation.patch": "faeb1cfd83b087f6bfbeed1e6bfc871ce79e233bb9c4ee9ec024355e23a663d9",
|
||||
"publisher-fix/manifest.json": "5eb57ffec82a8c2232fabed23cfa08b9f403194ab7968af2867d371b0fb3f222",
|
||||
"publisher-fix/tests.log": "9790ba7e875812a014965ac9f857ecd20fa511da909fda8adbc9855e858db05e"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env python3
|
||||
"""Offline integrity/source check of this local OCI export; no registry access."""
|
||||
import argparse
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import tarfile
|
||||
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--export', required=True, type=Path)
|
||||
parser.add_argument('--source-repo', required=True, type=Path)
|
||||
args = parser.parse_args()
|
||||
receipt = json.loads((Path(__file__).parent/'local-provenance.json').read_text())
|
||||
assert hashlib.sha256(args.export.read_bytes()).hexdigest() == receipt['export']['sha256']
|
||||
source = subprocess.run(['git','-C',str(args.source_repo),'archive',receipt['source_revision']],
|
||||
check=True,capture_output=True).stdout
|
||||
assert hashlib.sha256(source).hexdigest() == receipt['source_archive_sha256']
|
||||
with tarfile.open(args.export) as archive:
|
||||
def read(digest):
|
||||
algorithm, value = digest.split(':')
|
||||
assert algorithm == 'sha256'
|
||||
raw = archive.extractfile('blobs/sha256/'+value).read()
|
||||
assert hashlib.sha256(raw).hexdigest() == value
|
||||
return raw
|
||||
for member in archive.getmembers():
|
||||
if member.isfile() and member.name.startswith('blobs/sha256/'):
|
||||
read('sha256:'+member.name.rsplit('/',1)[1])
|
||||
root = json.load(archive.extractfile('index.json'))
|
||||
assert root['manifests'][0]['digest'] == receipt['local_oci_index_digest']
|
||||
index = json.loads(read(receipt['local_oci_index_digest']))
|
||||
platform = next(x for x in index['manifests'] if x.get('platform',{}).get('os')=='linux'
|
||||
and x['platform']['architecture']=='amd64')
|
||||
assert platform['digest'] == receipt['linux_amd64_manifest_digest']
|
||||
image = json.loads(read(platform['digest']))
|
||||
assert image['config']['digest'] == receipt['config_digest']
|
||||
config = json.loads(read(image['config']['digest']))
|
||||
assert config['config']['Labels']['org.opencontainers.image.revision'] == receipt['source_revision']
|
||||
assert config['config']['User'] == '65532'
|
||||
packaged = {}
|
||||
for layer in image['layers']:
|
||||
with tarfile.open(fileobj=io.BytesIO(read(layer['digest'])),mode='r:*') as files:
|
||||
for member in files.getmembers():
|
||||
name = member.name.removeprefix('./')
|
||||
if name in receipt['packaged_file_sha256']:
|
||||
assert member.isfile()
|
||||
packaged[name] = hashlib.sha256(files.extractfile(member).read()).hexdigest()
|
||||
assert packaged == receipt['packaged_file_sha256']
|
||||
print(json.dumps({'verified':True,'source_revision':receipt['source_revision'],
|
||||
'local_oci_index_digest':receipt['local_oci_index_digest'],
|
||||
'published_registry_provenance':False},sort_keys=True))
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"schema": "access-engine.ordinary-ci-candidate-manifest.v1",
|
||||
"source_revision": "84c78e072c8f3daf2bc3b90f8efc8fbeb16c3cf0",
|
||||
"immutable_image": "forgejo.coulomb.social/coulomb/flex-auth@sha256:09a83b273740133518cc7e7915fb211381e06545d347d2dd1974042525ac981f",
|
||||
"files_sha256": {
|
||||
"candidate-receipt.json": "af8e032d28776722ccf2bfe0f884577e568d8d0fb3713aa869e1d7d1c77c576f",
|
||||
"source-facts.json": "7a9d0b2de1aef344f1ab25cf30640709a13de39403799701e220db32855154aa",
|
||||
"status-history.json": "fe10d700543cf49c0b10fc7e92df0d2af8abb722093b287804f7be669c5a19f4"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
{
|
||||
"scope": "existing /home/worsch/rapp-*/declarations/rapp.yaml only",
|
||||
"rapp_directories_examined": 14,
|
||||
"matches": [
|
||||
{
|
||||
"path": "/home/worsch/rapp-qonto/declarations/rapp.yaml",
|
||||
"text": "kind: managed-workload-package\nrepo_family: rapp\nrapp_id: rapp-qonto\nrepo: rapp-qonto\nownership_repo: qonto-assistant\ncontract_version: 1.0.0\nreadiness_state: verified\nworkload_identity:\n name: qonto\n package_type: knative-managed-service\n principal: rapp-qonto\n service_account: rapp-qonto\n tenant: tenant:friendly:binky\n note: Tenant identifier remains subject to the open NetKingdom canon alignment.\ndata_classification: restricted\ncriticality: critical\nprimary_rail: rail-knative\nsupported_rails:\n - rail-knative\nbound_reefs:\n - reef-railiance\nruntime_dependencies:\n - key-cape-oidc\n - flex-auth\n - openbao\n - qonto-api\n - knative-serving\nsecret_references:\n - tenants/binky/qonto-api\ncomposition:\n purpose: Package the Qonto assistant as one Knative-managed financial workload.\n member_repos:\n - repo: rapp-qonto\n role: Knative runtime package, dependency binding, and live verification\n deployables:\n - rapp-qonto\nrollout_contract:\n default_mode: revision-canary\n production_gate: reef-production-approved\nsmoke_contract:\n required:\n - authenticated-activation-from-zero\n - wrong-tenant-denied\n - openbao-positive-and-negative\n - qonto-egress-only\n - audit-delivery\nrollback_contract:\n order:\n - previous-verified-knative-revision\n - temporary-minimum-scale\n - unavailable\n fallback: exceptional-expiring-only\nsource_documents:\n - repo: qonto-assistant\n path: docs/knative-runtime-and-rapp-handoff.md\n - repo: railiance-master\n path: docs/qonto-knative-runtime-contract.md\n"
|
||||
},
|
||||
{
|
||||
"path": "/home/worsch/rapp-secrets-engine/declarations/rapp.yaml",
|
||||
"text": "kind: managed-workload-package\nrepo_family: rapp\nrapp_id: rapp-secrets-engine\nrepo: rapp-secrets-engine\nownership_repo: secrets-engine\ncontract_version: 1.0.0\nreadiness_state: retired\n\nworkload_identity:\n name: secrets-engine\n package_type: grouped-composition\n\ndata_classification: restricted\ncriticality: high\nprimary_rail: rail-kubernetes\nsupported_rails:\n - rail-kubernetes\nbound_reefs: []\n\nruntime_dependencies:\n - openbao\n - flex-auth\n - state-hub\n\ncomposition:\n purpose: Record the retired standalone wrapper for the secrets-engine capability.\n member_repos:\n - repo: secrets-engine\n role: Secrets workflow CLI and future service implementation\n deployables:\n - secrets-engine-cli\n\nrollout_contract:\n default_mode: retired-no-rollout\n notes:\n - This declaration is a family-prefix tombstone, not production admission.\n\nsmoke_contract:\n required:\n - no-independent-managed-runtime\n notes:\n - The secrets-engine owner repo tests its CLI; this wrapper has no live smoke.\n\nrollback_contract:\n order:\n - not-applicable-retired-package\n notes:\n - No reef binding or independently managed runtime exists to roll back.\n\nsource_documents:\n - repo: secrets-engine\n path: INTENT.md\n - repo: railiance-master\n path: docs/rapp-first-wave-candidates.md\n - repo: railiance-master\n path: schemas/rapp.schema.json\n"
|
||||
},
|
||||
{
|
||||
"path": "/home/worsch/rapp-tenant-engine/declarations/rapp.yaml",
|
||||
"text": "kind: managed-workload-package\nrepo_family: rapp\nrapp_id: rapp-tenant-engine\nrepo: rapp-tenant-engine\nownership_repo: tenant-engine\ncontract_version: 1.0.0\nreadiness_state: verified\nworkload_identity:\n name: tenant-engine\n package_type: manifest-managed-platform-service\ndata_classification: confidential\ncriticality: high\nprimary_rail: rail-kubernetes\nsupported_rails:\n - rail-kubernetes\nbound_reefs: []\nruntime_dependencies:\n - kubernetes-api\n - openbao-database-secrets-engine\n - postgres\n - flex-auth\ncomposition:\n purpose: Package and operate the tenant-engine authority on Railiance.\n member_repos:\n - repo: rapp-tenant-engine\n role: managed runtime package\n deployables:\n - tenant-engine\nrollout_contract:\n default_mode: kubectl-server-side-apply\n commands:\n - make render\n - make prerequisites-dry-run\n - make prerequisites\n - make server-dry-run\n - make migration-dry-run\n - make migrate\n - make deploy\nsmoke_contract:\n required:\n - healthz-ok\n - live-image-digest-match\n - cluster-ready\n commands:\n - make verify-live\nrollback_contract:\n order:\n - previous-immutable-image-digest\n - apply-reviewed-git-revision\n commands:\n - make rollback DIGEST=<previous-image-digest>\n"
|
||||
},
|
||||
{
|
||||
"path": "/home/worsch/rapp-user-engine/declarations/rapp.yaml",
|
||||
"text": "kind: managed-workload-package\nrepo_family: rapp\nrapp_id: rapp-user-engine\nrepo: rapp-user-engine\nownership_repo: user-engine\ncontract_version: 1.0.0\nreadiness_state: verified\nworkload_identity:\n name: user-engine\n package_type: manifest-managed-platform-service\n app_version: 0.1.0\ndata_classification: confidential\ncriticality: high\nprimary_rail: rail-kubernetes\nsupported_rails:\n - rail-kubernetes\nbound_reefs:\n - reef-railiance\nruntime_dependencies:\n - kubernetes-api\n - helm-apply-path\n - forgejo-oci-registry\n - pvc-storage\n - keycape-oidc\n - flex-auth\n - openbao\n - audit-core\n - tenant-engine\nsecret_references:\n - platform/workloads/user-engine/runtime\ncomposition:\n purpose: Package and operate the user-engine identity-domain service on Railiance.\n member_repos:\n - repo: rapp-user-engine\n role: Kubernetes manifests, smoke, and rollback for the user-engine runtime\n deployables:\n - user-engine\n - user-engine-pg\n upstream_components:\n - name: user-engine\n source: forgejo.coulomb.social/coulomb/user-engine\n version: sha256:c501aeb204154d85017565a87fd34cff12e5c48f600d124d3f8c82f11bb9d59c\n - name: postgresql\n source: ghcr.io/cloudnative-pg/postgresql\n version: \"17.5\"\nrollout_contract:\n default_mode: kubectl-server-side-apply\n commands:\n - make render\n - make server-dry-run\n - make deploy\n production_gate: reef-production-approved\nsmoke_contract:\n required:\n - healthz-ok\n - readyz-ok-when-store-ready\n - metrics-requires-proxy-marker\n - live-image-digest-match\n - cluster-ready\n commands:\n - make verify-live\nrollback_contract:\n order:\n - previous-immutable-image-digest\n - apply-reviewed-git-revision\n commands:\n - make rollback DIGEST=<previous-image-digest>\nsource_documents:\n - repo: user-engine\n path: INTENT.md\n - repo: user-engine\n path: docs/configuration.md\n - repo: user-engine\n path: docs/operability.md\n - repo: net-kingdom\n path: sso-mfa/k8s/user-engine/README.md\n - repo: railiance-master\n path: schemas/rapp.schema.json\n - repo: repo-manager\n path: docs/RailianceAppDeploymentGuide.md\n"
|
||||
}
|
||||
],
|
||||
"result": "Matches require owner review; do not infer admission"
|
||||
}
|
||||
|
|
@ -0,0 +1,194 @@
|
|||
{
|
||||
"schema": "access-engine.native-lifecycle-admission-proposal.v1",
|
||||
"proposal_id": "FLEX24-LIFECYCLE-SIGNER-20261016-R1",
|
||||
"state": "source-and-metadata preparation; not execution or trust admission",
|
||||
"owner_work": "FLEX-WP-0024-T06; bounded outbox prerequisite demanded by CUST-WP-0080 goal, not general activation of residual FLEX-WP-0031",
|
||||
"exact_scope": {
|
||||
"cluster": "railiance01",
|
||||
"node_internal_ip": "92.205.62.239",
|
||||
"kube_system_uid": "a553c742-0115-43d4-99a4-a5ca56fe0786",
|
||||
"namespace": "flex-auth",
|
||||
"release": "flex-auth-secrets-engine",
|
||||
"deployment": "flex-auth-secrets-engine",
|
||||
"existing_deployment_uid": "f83a5f5c-7dd7-4aac-bc02-d447e423e6ae",
|
||||
"service": "flex-auth-secrets-engine",
|
||||
"service_ip": "10.43.40.221",
|
||||
"port": 8080,
|
||||
"signer_principal": "system:serviceaccount:flex-auth:flex-auth-secrets-engine",
|
||||
"caller_principal": "system:serviceaccount:secrets-engine:secrets-engine",
|
||||
"caller_audience": "flex-auth",
|
||||
"caller_mode": "enforce",
|
||||
"policy_package": "secrets-engine.catalog-lane.lifecycle",
|
||||
"policy_version": "v2",
|
||||
"policy_digest": "sha256:bd11c5fe77ce6439c65fea225ad6b71d2110efc5e7b5bc9b499c59cd0a53b8b4",
|
||||
"evaluator": "flex-auth/local",
|
||||
"mode": "standalone",
|
||||
"policy_path": "/opt/flex-auth/examples/secrets-engine/policy_package.md",
|
||||
"registry_path": "/opt/flex-auth/examples/secrets-engine/registry_snapshot.json",
|
||||
"registry_file_sha256": "37fba44ec0e0fd9b1e17a05ad1b7e4f9bb6ec9e0fc0bb3133e8af2ac6f832d7c",
|
||||
"task_policy": "No service/human task policy selected; producer generic execute-ccr refuses even if lifecycle policy itself would return unknown_action. No trusted task runtime source/Approval reader configuration is enabled."
|
||||
},
|
||||
"currently_observed": {
|
||||
"image": "forgejo.coulomb.social/coulomb/flex-auth@sha256:05a03a8790c2210c48ea92391441c77ddf640d0cd32f5ec09838f5393171fcbd",
|
||||
"pod": "flex-auth-secrets-engine-6467b96c6f-ncl5t",
|
||||
"pod_uid": "f9598eac-6db2-41a5-8054-fb35bb5c0861",
|
||||
"deployment_generation": 4,
|
||||
"replicas": 1,
|
||||
"strategy": "RollingUpdate",
|
||||
"signer_mounted": false,
|
||||
"outbox_mounted": false,
|
||||
"namespace_pvc_count": 0,
|
||||
"cpu_requests_node": "3580m/4000m (89%)",
|
||||
"memory_requests_node": "9760Mi (61%)",
|
||||
"pin_resources": {
|
||||
"requests": {
|
||||
"cpu": "25m",
|
||||
"memory": "32Mi"
|
||||
},
|
||||
"limits": {
|
||||
"cpu": "300m",
|
||||
"memory": "192Mi"
|
||||
}
|
||||
},
|
||||
"metadata_receipts": [
|
||||
"runtime-metadata.json",
|
||||
"headroom-metadata.json"
|
||||
]
|
||||
},
|
||||
"immutable_candidate_gate": {
|
||||
"state": "Published hardening0a candidate observed through normal CI push/pull and independent public package metadata: digest2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e, explicit exact revision label. Run400 terminal failure retained: post-push parser requires missing python3. Publisher correction pending review; no native acceptance or successful workflow claim.",
|
||||
"repository": "forgejo.coulomb.social/coulomb/flex-auth",
|
||||
"pipeline": "Existing ordinary main push .forgejo/workflows/image.yaml, container-build runner, full40hex GITHUB_SHA archive, tools/publish-runtime-images.sh legacy mode",
|
||||
"required_receipt": [
|
||||
"exact full canonical revision including approved outbox hardening",
|
||||
"existing CI run id/url and successful build/publish status",
|
||||
"registry-reported top-level sha256 manifest digest after authenticated runner pull",
|
||||
"org.opencontainers.image.revision equals exact canonical revision",
|
||||
"packaged unchanged lifecycle policy/registry and owner helper hashes",
|
||||
"independently verified chart/values/image digest match"
|
||||
],
|
||||
"publication_scope": "Already admitted legacy flex-auth package only; no new access-engine public package or workflow dispatch inferred.",
|
||||
"binding_action": "After coordinator publishes reviewed hardening, capture existing main-push CI receipt and authenticated runner image revision/RepoDigest. Never promote mutable main/latest or locally built fixture binary.",
|
||||
"published_predecessor": "2b064eee510640224274ccdc7cefceb1ae13162e",
|
||||
"published_hardening_revision": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"local_preparation_evidence": "image-0a05383/manifest.json",
|
||||
"observed_published_candidate": {
|
||||
"image": "forgejo.coulomb.social/coulomb/flex-auth@sha256:2dff23c4b4834a8296ad9d958505d6efc1449443dc0f90a763858f7bbbd1030e",
|
||||
"source_revision": "0a05383195213e7eaacd08388ce1d7892ce756df",
|
||||
"receipt": "image-0a05383/published-candidate.json",
|
||||
"workflow_status": "failure-after-push-and-pull",
|
||||
"admitted": false
|
||||
}
|
||||
},
|
||||
"managed_package_disposition": {
|
||||
"classification": "Existing Helm-managed deployable; pre-rapp migration debt resolves unknown under security-zones_v0.1 section6.",
|
||||
"search": "14 real rapp declarations examined; four flex-auth strings are dependencies, no authoritative Access workload tuple established.",
|
||||
"cannot_substitute": [
|
||||
"rapp-secrets-engine is retired consumer wrapper, not this PDP",
|
||||
"direct tenancy identity declaration is owner evidence, not a fabricated managed-package tuple",
|
||||
"rename/runtime namespace/public OCI package are not required to classify existing release"
|
||||
],
|
||||
"required_owner_disposition": "Repo Manager/control owner must bind existing release to authoritative managed package tuple, or explicitly record the applicable versioned build-mode unknown control treatment/valid exception under its actual authority. No new approval/exception is fabricated by this package.",
|
||||
"source_evidence": [
|
||||
"managed-package-search.json",
|
||||
"access-engine/tenancy.yaml#/workload_identity",
|
||||
"access-engine/docs/native-signer-workload.json"
|
||||
],
|
||||
"owner_selected_draft_reference": {
|
||||
"rapp_id": "rapp-flex-auth-secrets-engine",
|
||||
"name": "flex-auth-secrets-engine",
|
||||
"deployable": "flex-auth-secrets-engine",
|
||||
"ownership_repo": "access-engine",
|
||||
"declaration_ref": "rapp-flex-auth-secrets-engine/declarations/rapp.yaml",
|
||||
"artifact": "../access-package-identity/extraction/manifest.json",
|
||||
"state": "Draft source validated locally; current authoritative custody identity remains unknown until required package review/commit/availability and exact runtime join."
|
||||
}
|
||||
},
|
||||
"signer_custody_interface": {
|
||||
"platform_candidate": "RPF35-PDP-SIGNER-NATIVE-20261016-R1 / CCR-2026-0050; prepared unapproved native plan, not frozen writerR3 activation",
|
||||
"key_generation": "One attended Platform protected CAS0 in-memory seed bootstrap after exact scope/fence; no agent key generation/read or standing writer grant.",
|
||||
"kid_proposed": "flex-auth-lifecycle-20261016-r1",
|
||||
"kv_data_path": "platform/data/workloads/flex-auth/envelope-signing",
|
||||
"delivery_sa": "flex-auth/flex-auth-envelope-signing-eso",
|
||||
"delivery_role": "external-secrets-flex-auth-envelope-signing",
|
||||
"secret_store": "openbao-flex-auth-envelope-signing",
|
||||
"secret": "flex-auth/flex-auth-secrets-engine-envelope-signing",
|
||||
"secret_key": "seed",
|
||||
"private_field": "ED25519_PRIVATE_KEY",
|
||||
"mount": "/var/run/secrets/decision-envelope-signing/seed",
|
||||
"mode": "0440",
|
||||
"format": "strict unpadded base64url32-byte Ed25519 seed; loaded only at startup; group-write/other access refused",
|
||||
"public_admission": "Only independently authenticated Platform public receipt after exact custody readback; kid/publickey/fingerprint/source/custody version authenticated separately from responder. No private KV read by consumer and no responder discovery.",
|
||||
"fingerprint_convention": "sha256 lowercase hex of canonical unpadded public-key base64url ASCII43bytes, explicitly not decoded raw32bytes; convention agreement does not admit a key.",
|
||||
"materialization_rule": "Actual public material does not exist yet. The approved procedure, if granted later, must verify owner public receipt and exact kid/encoding/correspondence before independent consumer trust installation. No invented publickey/fingerprint/current custody success.",
|
||||
"rotation": "Startup-only: stop/fence affected acceptance; exact-version forward new key/custody action, independently admit new public key/pins, restart candidate, prove key-id change/old-key refusal according reviewed overlap policy. Compromise removes old online trust immediately; never restore compromised seed."
|
||||
},
|
||||
"durable_record_interface": {
|
||||
"prerequisite": "OS process exclusion + bounded capacity/startup source hardening reviewed and included in exact published candidate; Recreate and RWO alone insufficient.",
|
||||
"design": "outbox-hardening-design.json",
|
||||
"deployment_strategy": "Recreate replicas1; no rolling surge",
|
||||
"new_pvc": "flex-auth/flex-auth-secrets-engine-outbox",
|
||||
"storage_class": "local-path",
|
||||
"requested_storage": "1Gi",
|
||||
"access_mode": "ReadWriteOnce",
|
||||
"helm_keep": true,
|
||||
"required_pv_disposition": "Explicit actual provisioned PV Retain before durable acceptance; current StorageClass is Delete. Never delete PVC/PV/evidence during rollback.",
|
||||
"outbox_mount": "/var/lib/flex-auth/outbox",
|
||||
"outbox_source": "flex-auth.secrets-engine",
|
||||
"source_hard_ceiling_bytes_proposed": 67108864,
|
||||
"fs_identity": "runAsUser65532/runAsGroup65532/fsGroup65532; existing readOnlyRootFilesystem remains",
|
||||
"limits": "Local-path requested1Gi is not quota, snapshot, backup or node-loss durability. Source ceiling64MiB and OS lock are separate required controls. Acknowledged events remain; no compaction/automatic deletion. Single-node host/disk failure remains declared risk.",
|
||||
"audit_delivery": "Disabled in initial signer/local durability slice. No sender credential, audit-core registration, independent receipt custody or G2 completeness closure inferred.",
|
||||
"release_rule": "Current GH-DEC-2026-024 requires every effect record to commit before release. Capacity/write/fsync failures withhold ALLOW and restrictive responses; historical released_uncommitted counters do not authorize uncommitted releases."
|
||||
},
|
||||
"consumer_session_contract": {
|
||||
"owner": "Secrets Engine (existing11serving sites/10handlers)",
|
||||
"transport": "Operator-authorized named-pod kubectl port-forward after exact node/deployment/pod/image verification, bound literal127.0.0.1 orIPv6loopback; no service DNS/localhost search ambiguity/proxy/redirect.",
|
||||
"caller": "LocalCLI is not the Kubernetes SA. Its authenticated bearer representsSA only after separately owner-authorized bounded TokenRequest for secrets-engine/secrets-engine, audienceflex-auth,duration10m per existing source procedure.",
|
||||
"custody": "No current callerfile custody delivery selected/admitted. Future exact session uses private temporary0700 directory outsideGit, tokenfile0600, no output/logs/env values, no rolebinding; shred/end port-forward on completion. This preparation does not mint/read a token.",
|
||||
"installed_bundle": "Secrets owner provides exact wheel/helper/bundle/source manifest and operator controlled absolute trust file. Editable .venv/source checkout is not admission. Mandatory signature verification and exact lifecycle/evaluator pins unchanged.",
|
||||
"independent_trust": "Public admission owner is Secrets; this producer proposal cannot register its own key or grant consumer acceptance."
|
||||
},
|
||||
"bounded_proposed_sequence": [
|
||||
"Finish source hardening, owner reviews, real immutable CI candidate and managed-package/control disposition; validate exact source/platform CCR/native writer/consumer bundle hashes.",
|
||||
"Before live work, founder decides exact combined scopes (custody writer/readlane/delivery/retainedrelease/newPVC+retention/consumer installation+session) and executor/abort owner; no current authority inferred.",
|
||||
"Refresh node/cluster/backend/deployment identity and headroom, exact server dry-run/client diff under approved action, save prior image/values/policy/source metadata. Keep consumers fenced; pause other release writers under approved ownership.",
|
||||
"Under exact owner scope fence signer/consumers; Platform attended protected writer CAS0+readback gives durable independently authenticated public receipt; uncertain result stays fenced, no retry/remint.",
|
||||
"Install exact reviewed delivery projection and proposed new PVC. With consumers fenced, allow the admitted WaitForFirstConsumer binding step, capture exact dynamically provisioned PV UID and set its reviewed reclaim policy to Retain before durable acceptance. Render candidate release same lifecycle policy/registry, samecaller/SA, signer0440, hard bounded outbox, Recreate1. Do not enable task source/auditDelivery.",
|
||||
"Under approved rollout apply exact immutable values/image. Abort and hold fence if Ready not achieved within120s or identity/source/volume/key/caller/policy checks differ; restore prior workload only by reviewed rollback while consumer remains failclosed.",
|
||||
"Secrets independently installs exact reviewed bundle/trust from public receipt, then exact bounded caller session and native allow/deny/signature/record/outbox/restart/negative checks. No protected backend effect in initial lifecycle authorization proof.",
|
||||
"Accept only exact owner receipts linking source/image/config/policy/registry/key/trust/helper/caller/record/PVC and rollback result. Preserve unverified/failure evidence; no task execution or complete audit-emission acceptance is implied."
|
||||
],
|
||||
"required_native_negative_checks": [
|
||||
"Actual missing caller401 and wrong/expired audience/principal401or403 before any decision; retained propercaller signs expected lifecycle ALLOW and expected lifecycle DENY.",
|
||||
"Foreign tenant denies; unknown/lifecycle taskexecute cannot produce ALLOW; no policy substitution to task source.",
|
||||
"Consumer rejects unsigned, tampered, wrongkid/key, wrong evaluator/mode/policy/version/digest and wrong original submitted/context bindings using independent public trust.",
|
||||
"Missing/malformed/unsafe-mode signer seed fails startup closed; no credential bytes/errors printed.",
|
||||
"Actual signed response matches original durable outbox record; restart retains old signatures/sequence/cursor and sameowner source.",
|
||||
"Second actual process on same outbox fails before mutation; capacity/unwritable/fsync failure withholds ALLOW; all restrictive responses also withheld; no uncommitted release is counted.",
|
||||
"Mounted source/key/image/SA/deployment/PVC identities match exact reviewed proposal; no second pod/HPA/writer and no task source args.",
|
||||
"Old/current pin trust rollout and abort rollback produce explicit expected failure/success receipts; no unsigned fallback or compromised seed restoration."
|
||||
],
|
||||
"rollback": {
|
||||
"before_custody_write": "Abort with prior lifecycle deployment unchanged; no seed minted.",
|
||||
"unknown_custody": "Keep signer/consumers fenced; independent attended Platform reconciliation of exact version/public correspondence, no CAS0 retry/remint.",
|
||||
"failed_candidate": "Keep consumer strictfailclosed; stop candidate writer, preserve PVC/log/cursor/receipts, revert exact previous image/values only after owner-reviewed format compatibility and lock release. No second writer and no Helm uninstall/PVC deletion.",
|
||||
"previous_unsigned_image": "Old05a03a... may restore evaluator availability but does not satisfy newly installed strict signed trust; consumer cannot accept unsigned fallback. Accept outage until prior admitted consumer/PDP state can be restored by explicit reviewed scope.",
|
||||
"key_compromise": "Withdraw old online public trust and fence signer; forward-only separately reviewed newkey action, never oldseed restoration."
|
||||
},
|
||||
"cost_and_risk": {
|
||||
"preparation_incremental_spend_eur": 0,
|
||||
"proposed_new_resource": "one1Gi local-path PVC on existing node; no new cloud infrastructure/public package/paid CI scope",
|
||||
"native_spend_authority": "Not granted; founder decides exact resource/risk scope, not inferred from approved shell prefixes.",
|
||||
"outage_budget_proposed": "Recreate1 requires short outage; candidate readiness120s abort, maximum attended recovery window10m before holdfenced/escalate.",
|
||||
"material_risks": [
|
||||
"Signer compromise can forge lifecycle decisions until independent key withdrawal",
|
||||
"single-node local-path failure can lose local audit evidence",
|
||||
"strict consumer trust may expose existing CLI sites to planned failclosed outage",
|
||||
"unbounded/dualwriter outbox is an activation blocker until hardening"
|
||||
]
|
||||
},
|
||||
"execution_authorized": false,
|
||||
"keys_read_or_created": false,
|
||||
"live_writes": false
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
{
|
||||
"schema": "access-engine.outbox-hardening-design.v1",
|
||||
"work_item": "FLEX-WP-0024-T06",
|
||||
"scope": "Minimal existing-outbox prerequisites for retained lifecycle signer admission; no new service, native action or complete audit-emission adoption",
|
||||
"observed_gaps": [
|
||||
"Recreate replicaCount1 and RWO do not enforce process exclusion; same-node RWO can be mounted by more than one pod.",
|
||||
"Published R3 Open uses no OS lock before reading/truncating/recovering the shared journal.",
|
||||
"Published R3 append has no byte ceiling; local-path PVC requested1Gi is not a filesystem quota.",
|
||||
"Published R3 startup reads the whole journal into memory; acknowledged entries never compact."
|
||||
],
|
||||
"source_design": {
|
||||
"os_single_writer": {
|
||||
"primitive": "Linux nonblocking exclusive flock on retained writer.lock file under exact outbox directory, acquired before cursor/log load or recovery",
|
||||
"lifetime": "Hold open lock FD until Outbox.Close; release on orderly close/process death; never unlink lock file.",
|
||||
"failure": "Any contender or unsupported lock platform refuses startup before HTTP serving or journal mutation.",
|
||||
"boundary": "Protects competing admitted producer processes on this mounted filesystem; malicious same-UID unlink/rename or privileged host tampering remains outside the trusted workload boundary. No HA/fencing service invented.",
|
||||
"files": "Lock, journal and cursor use nonblocking no-follow opens, single-link regular files, exact current UID and current GID when group bits exist, with no other-access. This supports native fsGroup widening to 0660 without admitting foreign writers or hardlink aliases; startup FIFO/device paths refuse without blocking."
|
||||
},
|
||||
"capacity": {
|
||||
"native_selected_max_bytes": 67108864,
|
||||
"source_hard_max_bytes": 67108864,
|
||||
"default_max_bytes": 67108864,
|
||||
"cli": "--outbox-max-bytes 67108864",
|
||||
"chart": "Mathematically integral numeric YAML values or canonical decimal strings, range 1..67108864; no float truncation or boolean/container acceptance.",
|
||||
"admission_basis": "64MiB append-only payload ceiling is explicitly reviewed inside proposed1Gi new PVC and192MiB process limit, not a claim the PVC enforces quota.",
|
||||
"append": "Bound each encoded journal line and aggregate batch to 2MiB before any write; refuse projected committed size above configured ceiling. Preserve prior bytes/cursor; unconfirmed rollback permanently fences this process until close/restart and independent recovery.",
|
||||
"startup": "Fstat size <=configured ceiling; stream existing lines with fixed2MiB entry ceiling, strict sequence/source checks and existing torn-final-line repair while holding OS lock. Never read entire file; refuse oversized/corrupt state without truncating committed evidence.",
|
||||
"recovery": "Existing oversized state refuses startup; capacity cannot be raised above hard maximum through runtime flags. No auto-delete, auto-truncate acknowledged events, compaction, remint or silent rollover.",
|
||||
"status": "Existing emission status exposes max_bytes, committed_bytes, remaining_bytes, capacity_exhausted and writer_fenced without record payloads.",
|
||||
"closed_effect": "Current GH-DEC-2026-024 requires every effect record to commit. Capacity/write/fsync failure withholds ALLOW and restrictive responses; no released_uncommitted success is manufactured. Legacy counters remain readable only as historical evidence."
|
||||
},
|
||||
"packaging": "Same existing Linux image and chart; no dependency service, parallel source, namespace rename, receiver registration or custody grant. Final immutable candidate must include reviewed source successor.",
|
||||
"retention": "Never delete acknowledged entries automatically. At75% request reviewed owner export/retention disposition; at90% stop initiating protected work; source ceiling remains fail-closed. Export/compaction/removal requires its own exact reviewed action. No forecast pretends unlimited availability."
|
||||
},
|
||||
"required_disposable_tests": [
|
||||
"Actual two OS processes contend for same directory: exactly one opens, other fails before load/recovery/write; different directories work.",
|
||||
"Orderly close and process death release lock; retained lock file does not cause stale denial.",
|
||||
"Exact byte boundary succeeds, one-byte-over/batch-over/entry-over refuses without any write or cursor advance; previous records verify unchanged.",
|
||||
"Restart at capacity, corrupt/oversized/torn final entry, and wrong source/sequence preserve existing documented recovery behavior under lock.",
|
||||
"Bounded startup reader rejects oversized line/file without allocating whole log or silently dropping committed bytes.",
|
||||
"HTTP ALLOW fails closed at capacity; all effect responses withheld and uncommitted release counters stay zero; no new false record/durability claim.",
|
||||
"Chart renders exact maxBytes plus Recreate1 and refuses noninteger/out-of-range settings; full affected Go/race tests pass."
|
||||
],
|
||||
"native_proposal": {
|
||||
"pvc": "flex-auth/flex-auth-secrets-engine-outbox",
|
||||
"new_resource": true,
|
||||
"requested_capacity": "1Gi",
|
||||
"storage_class": "local-path",
|
||||
"access_mode": "ReadWriteOnce",
|
||||
"helm_resource_policy": "keep",
|
||||
"pv_reclaim": "Explicit Retain disposition required before accepting durable evidence; current StorageClass defaultDelete must not be represented as retention.",
|
||||
"deployment": "Recreate replicas1, fsGroup65532, same retained SA/namespace/resources; source flock is additional runtime exclusion.",
|
||||
"outbox_source": "flex-auth.secrets-engine",
|
||||
"mount_path": "/var/lib/flex-auth/outbox",
|
||||
"audit_delivery": "Disabled for initial signer/local-record slice; local persistence does not close G2 or prove independent receiver custody.",
|
||||
"authorization": "Proposal only; zero namespace PVCs currently exist. No provisioning, storage spend, deployment or native admission authorized by this design."
|
||||
},
|
||||
"approval_state": "Isolated source implemented at exact published 2b064eee510640224274ccdc7cefceb1ae13162e base; coordinator review, integration, successor publication and native acceptance remain separate."
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
The patch applies only to published Access `2b064eee510640224274ccdc7cefceb1ae13162e`. The manifest records the 14 changed files and source hashes; no earlier frozen package is modified. The source checkout is `/tmp/access-outbox-hardening-20261016` and a separate reconstruction at `/tmp/access-outbox-hardening-reconstruct` passed apply-check and every file hash.
|
||||
|
||||
Run `go test -p 2 ./...`, `go test -race -p 2 ./internal/emission ./internal/decision ./cmd/access-engine`, `go vet -p 2 ./...`, `python3 tests/test_outbox_chart.py` and `python3 tests/test_runtime_twins.py` with the existing owner Go/cache environment. Attached logs record successful checks. Final targeted tests follow the final wording cleanup; race/full checks used identical behavior.
|
||||
|
||||
The source adds one Linux flock held for the Outbox lifetime, bounded append/recovery, and a persistent writer fault fence after unconfirmed rollback. It preserves current all-effect durable-commit requirements and append-only evidence. Linux filesystem locking/fsync/permissions, exact new PVC/PV Retain disposition and failure/restart checks still require actual native proof before acceptance. Neither local tests nor a requested volume size supply that proof.
|
||||
|
||||
The existing ordinary main-push image workflow is the only proposed build route. Its `internal/**` and `cmd/**` triggers cover this patch and publish only the already admitted legacy image package. Record the exact successor full revision, successful CI run and authenticated runner immutable RepoDigest/revision label after normal publication. No workflow dispatch or native deployment was performed.
|
||||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,113 @@
|
|||
{
|
||||
"schema": "access-engine.outbox-hardening-review.v1",
|
||||
"base_commit": "2b064eee510640224274ccdc7cefceb1ae13162e",
|
||||
"source_checkout": "/tmp/access-outbox-hardening-20261016",
|
||||
"patch_sha256": "52c0ff3f62056bafe141d74baf2c79f7cfab8f5d5c674ac85cedd24bb07d5ee4",
|
||||
"files": [
|
||||
{
|
||||
"path": "charts/access-engine/templates/deployment.yaml",
|
||||
"sha256": "155310e75e3883fc25d9c9dcf79650a8216cf6fd09902421b856cdfeab5e4cc3",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "charts/access-engine/values.yaml",
|
||||
"sha256": "01dafea0b6f4752081ff9dcc10a1bd315c28ac7111fbd7802b2b8e76f1a91b0f",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "charts/flex-auth/templates/deployment.yaml",
|
||||
"sha256": "b347614283e65d9e8006a93dfbdfec15360632f6c318761e245213460e158666",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "charts/flex-auth/values.yaml",
|
||||
"sha256": "0d5c3fa0c52d87ff6350d8f92527814b74bb8b7adadc92ded71856d9c83b1b03",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "cmd/access-engine/main.go",
|
||||
"sha256": "da6d185ac971aaa652a6b242f5c46007f8b0089e71e6d6b499bd7925b1377758",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "cmd/access-engine/outbox_capacity_test.go",
|
||||
"sha256": "b50bc34c9b759f32744237f7f029e34c6c5c2611c0377b86569fa123dafa7c6e",
|
||||
"new_file": true
|
||||
},
|
||||
{
|
||||
"path": "docs/decision-emission-operations.md",
|
||||
"sha256": "b78d54bef54f1a93868a3ced9427297092448d19d26c57148ec56b64f4ff7d2f",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "internal/emission/delivery.go",
|
||||
"sha256": "9bd2147108fafade36850ec2e00f0fe602471748af7d94c7b2f54e69658f95f1",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "internal/emission/hardening_linux_test.go",
|
||||
"sha256": "1b9389db04080e413a62ead05370ff0281bca35c54e091d2d4dc855fd3d82662",
|
||||
"new_file": true
|
||||
},
|
||||
{
|
||||
"path": "internal/emission/lock_linux.go",
|
||||
"sha256": "604743d6d2427ae8cc8f64cc5fae4934a4c1cf0ed24fbae171bea270ed668f6f",
|
||||
"new_file": true
|
||||
},
|
||||
{
|
||||
"path": "internal/emission/lock_other.go",
|
||||
"sha256": "271a879de3d43036ce69a5db0f8c2ad401d7cce5ceab1fa721959516a1576493",
|
||||
"new_file": true
|
||||
},
|
||||
{
|
||||
"path": "internal/emission/outbox.go",
|
||||
"sha256": "10b7ffa6899d2e89c4c36150f063a348eaf15cfce7a95e814af71b6ffd511ba0",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "tests/test_outbox_chart.py",
|
||||
"sha256": "9c839f485e463ad2e84f6d948c81bdd912871efd8fdf54b6dfdf95bd22ef0f6e",
|
||||
"new_file": false
|
||||
},
|
||||
{
|
||||
"path": "workplans/FLEX-WP-0024-decision-envelope-authenticity.md",
|
||||
"sha256": "23911caf0fe743b24680ccfc8223a5894c2f8bf382eb61426100310488b42e28",
|
||||
"new_file": false
|
||||
}
|
||||
],
|
||||
"source_scope": "Existing outbox/serve flag and twin charts only; API/sign, lifecycle policy, registry, source task gate and Approval helper unchanged.",
|
||||
"native_authority": false,
|
||||
"review_state": "owner source preparation complete; independent coordinator review required",
|
||||
"tests": {
|
||||
"full-go": {
|
||||
"log": "full-tests.log",
|
||||
"sha256": "ea983b5e3304a22963ed9da3129afd4328fb6a13a94a95e25b8791d60bddf4b6",
|
||||
"result": "pass"
|
||||
},
|
||||
"race-emission-decision-command": {
|
||||
"log": "race-tests.log",
|
||||
"sha256": "75f8af919c7ec2ee6eb6aa8e8edda26f0873bc59b1a8be78fccfde950272b585",
|
||||
"result": "pass"
|
||||
},
|
||||
"vet": {
|
||||
"log": "vet.log",
|
||||
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
|
||||
"result": "pass"
|
||||
},
|
||||
"chart": {
|
||||
"log": "chart-tests.log",
|
||||
"sha256": "2736b427508ba7214cf2e585ef9cd1bb995943ce9f6a5701e68007704ab7ca9e",
|
||||
"result": "pass"
|
||||
},
|
||||
"runtime-twins": {
|
||||
"log": "twin-tests.log",
|
||||
"sha256": "0b775380fb45e68c3d5741f50d5be8e5f225d5c12c0bbcb1733414a731947547",
|
||||
"result": "pass"
|
||||
},
|
||||
"final-targeted": {
|
||||
"log": "final-targeted.log",
|
||||
"sha256": "263c5d28fa637a845ac1a39e2bb08bd1e75fe37f120b2ba5e3ff7a7b957479f1",
|
||||
"result": "pass"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
{
|
||||
"schema": "access-engine.owner-source-review.v1",
|
||||
"owner": "Access Engine",
|
||||
"work_item": "FLEX-WP-0024-T06",
|
||||
"base_commit": "2b064eee510640224274ccdc7cefceb1ae13162e",
|
||||
"reviewed_patch_sha256": "52c0ff3f62056bafe141d74baf2c79f7cfab8f5d5c674ac85cedd24bb07d5ee4",
|
||||
"disposition": "source_preparation_complete_pending_independent_coordinator_review",
|
||||
"proven": [
|
||||
"Actual separate OS writers exclude before journal/cursor inspection; orderly close and SIGKILL release held lock without deleting lock inode.",
|
||||
"Exact capacity and aggregate/entry overflow preserve prior journal bytes, sequence and cursor; streaming startup is bounded by 64MiB file, 2MiB frame and 4KiB cursor ceilings.",
|
||||
"No-follow, nonblocking, single-link owner/current-group regular-file checks refuse journal/cursor aliases and FIFOs; same UID/GID fsGroup widening to 0660 remains compatible.",
|
||||
"Real ENOSPC and fsync error tests with unconfirmed rollback fence later appends; actual HTTP ALLOW and DENY are both withheld at capacity under existing GH-DEC-2026-024.",
|
||||
"All Go tests, affected race suites, vet, both charts and runtime-twin checks pass. Exact-base patch reconstruction and all 14 source hashes pass."
|
||||
],
|
||||
"limitations": [
|
||||
"Disposable Linux process/device tests do not prove actual native PVC flock/fsync/disk-full/retention behavior or node-loss recovery.",
|
||||
"Trusted admitted workload filesystem boundary excludes malicious same-UID rename/unlink and privileged host tampering. RWO/Recreate are additional limits, not OS exclusion.",
|
||||
"Append-only evidence is never automatically deleted or compacted. Capacity exhaustion deliberately stops responses; owner-reviewed retention/export remains required.",
|
||||
"This is not native signer, public-key admission, custody, managed-package disposition, deployment, storage spend, or task-service execution approval."
|
||||
],
|
||||
"unchanged": [
|
||||
"api/sign bytes and verifier algorithms",
|
||||
"lifecycle policy and registry",
|
||||
"trusted task source/policy gates",
|
||||
"Approval helper and precise timestamp semantics"
|
||||
],
|
||||
"ci_successor": "After coordinator integrates and normally publishes this patch, existing main push internal/** and cmd/** trigger Build and Publish Container Image on container-build, legacy coulomb/flex-auth only. Obtain that exact run success, full revision label and authenticated runner RepoDigest; do not use predecessor R3 image or invoke paired publication.",
|
||||
"native_package": "../native-lifecycle-admission-proposal.json"
|
||||
}
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"workplan_id": "90577acd-6910-548d-a13e-1dbfdfb8ed27",
|
||||
"id": "a20f508d-56ec-45f3-b29f-a7df850a5fa3",
|
||||
"topic_id": null,
|
||||
"task_id": "7f785b52-bf62-5884-8d34-670d70bc9023",
|
||||
"decision_id": null,
|
||||
"event_type": "note",
|
||||
"summary": "Access FLEX-WP-0024-T06 isolated outbox hardening prepared at published 2b064ee: process-held Linux flock, bounded journal/startup/batch, alias refusal and rollback fault fencing; full Go/race/vet/chart checks pass. Patch 52c0ff3f62056bafe141d74baf2c79f7cfab8f5d5c674ac85cedd24bb07d5ee4 handed to coordinator for independent review. Native lifecycle package remains proposal only; no keys, grants, storage/deployment mutation or trust admission.",
|
||||
"detail": null,
|
||||
"author": "codex",
|
||||
"session_id": null,
|
||||
"created_at": "2026-10-16T15:49:01.570958Z",
|
||||
"workstream_id": "90577acd-6910-548d-a13e-1dbfdfb8ed27"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue