INFD-WP-0010-T02: pin service image ca75f0be (main-c228583) for the v14 release
Owner CI run 6 built forgejo.coulomb.social/coulomb/informed-decision @sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b fromc228583. Verified read-only: - zlib 1.3.2-r1 (floor check passes) - installed modules equal the source atc228583- 13/13 container checks - Trivy 0 HIGH/CRITICAL; 2 UNKNOWN musl findings, the same as the live image Pinned in admission.candidate.json and re-rendered service.candidate.json. The runtime ConfigMap is unchanged (informed-decision-runtime-b488b96a0953). This commit is the release's RELEASE_SHA. Nothing applied. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Assistant: claude-code Assistant-Model: opus Assistant-Process: 5502@bnt-lap001 Assistant-Session: 68b3b02f-5d0f-4e71-8421-796f62e50196
This commit is contained in:
parent
c228583b60
commit
005709a372
7 changed files with 125 additions and 11 deletions
|
|
@ -216,7 +216,9 @@ retaining the current schema-5 database. Evidence: docs/evidence/2026-10-05-life
|
||||||
INFD-WP-0010-T02, together with access-engine compact-sitting v14. The candidate files carry the v14 review pin
|
INFD-WP-0010-T02, together with access-engine compact-sitting v14. The candidate files carry the v14 review pin
|
||||||
(`sha256:8911458f…fc300fde`), the `nk-bind-executor` present_existing registry row (daily limit 10) and an 8081
|
(`sha256:8911458f…fc300fde`), the `nk-bind-executor` present_existing registry row (daily limit 10) and an 8081
|
||||||
ingress peer for exactly `sso` + `app.kubernetes.io/name=bounded-executor`. The state-hub row is unchanged and
|
ingress peer for exactly `sso` + `app.kubernetes.io/name=bounded-executor`. The state-hub row is unchanged and
|
||||||
outcome_read stays off. **The image pin is still the live `f5588f49…`, because no owner-CI full-service image
|
outcome_read stays off. The service image is pinned to owner-CI `main-c228583`,
|
||||||
exists yet. Do not sync this candidate until it is replaced:** the live image rejects the new registry row,
|
`sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b`. Verified: zlib 1.3.2-r1, installed source
|
||||||
which would fail all intake. Founder runbook, verification and rollback:
|
equal to c228583, 13/13 container checks, 0 HIGH/CRITICAL. The runtime ConfigMap is `informed-decision-runtime-b488b96a0953`.
|
||||||
|
Never pair these registries with the old image: it rejects the new row, so all intake would fail. Founder runbook,
|
||||||
|
verification and rollback:
|
||||||
[RELEASE-INFD-WP-0010-T02.md](RELEASE-INFD-WP-0010-T02.md).
|
[RELEASE-INFD-WP-0010-T02.md](RELEASE-INFD-WP-0010-T02.md).
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,23 @@ Founder approval (2026-11-01, relayed by the net-kingdom coordinator): release p
|
||||||
access-engine compact-sitting v14. Every command below is founder-run, with
|
access-engine compact-sitting v14. Every command below is founder-run, with
|
||||||
`export KUBECONFIG=$HOME/.kube/config-railiance01`.
|
`export KUBECONFIG=$HOME/.kube/config-railiance01`.
|
||||||
|
|
||||||
## Status: blocked on the service image (gate G0)
|
## Status: image pinned (gate G0 closed 2026-11-01)
|
||||||
|
|
||||||
|
Owner CI (`service-image.yaml`, run 6, source `c228583`) published `main-c228583`, digest
|
||||||
|
`forgejo.coulomb.social/coulomb/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b`. The owner verified it read-only:
|
||||||
|
|
||||||
|
- the label revision is `c228583`, and the user is 10001
|
||||||
|
- `apk info --exists 'zlib>=1.3.2-r1'` passes; zlib is 1.3.2-r1 (runtime 1.3.2), libuuid is 2.42.3-r1, and pip is absent
|
||||||
|
- the runtime smoke passes, and the installed modules equal the source at `c228583`
|
||||||
|
- `tools/smoke_container.py --workload` passes 13/13
|
||||||
|
- Trivy (the same pinned scanner as earlier releases, DB of 2026-11-01) finds **0 HIGH/CRITICAL**. It reports
|
||||||
|
2 UNKNOWN: CVE-2026-107891 in musl/musl-utils 1.2.6-r2, fixed in 1.2.6-r3. The live `f5588f49` image carries
|
||||||
|
the same musl, so this is not a regression.
|
||||||
|
|
||||||
|
Evidence: `docs/evidence/2026-11-01-present-existing-release/`. RELEASE_SHA is the commit that pinned this digest:
|
||||||
|
`git -C ~/informed-decision log -1 --format=%H -- deploy/lifecycle/admission.candidate.json` on main.
|
||||||
|
|
||||||
|
### History: why the gate existed
|
||||||
|
|
||||||
No CI image exists for current `main`. This repository has no Forgejo workflow that builds the full service
|
No CI image exists for current `main`. This repository has no Forgejo workflow that builds the full service
|
||||||
image. Its two workflows build single-purpose overlays on fixed base digests:
|
image. Its two workflows build single-purpose overlays on fixed base digests:
|
||||||
|
|
@ -43,8 +59,8 @@ included. It also does not send `approval_action`.
|
||||||
|
|
||||||
| | Current, live (rollback target) | Candidate |
|
| | Current, live (rollback target) | Candidate |
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| Argo `informed-decision` targetRevision | `312ab97e876e17341bf16f9e95397e14c2ac2720` | `<RELEASE_SHA>` (step 0) |
|
| Argo `informed-decision` targetRevision | `312ab97e876e17341bf16f9e95397e14c2ac2720` | RELEASE_SHA (the image-pin commit, see Status) |
|
||||||
| Service image | `…/informed-decision@sha256:f5588f496b1f267d07cdc9f5208e6f2f241f74b739c23924b03702dec13a5c23` | `<IMAGE_DIGEST>` (G0) |
|
| Service image | `…/informed-decision@sha256:f5588f496b1f267d07cdc9f5208e6f2f241f74b739c23924b03702dec13a5c23` | `…/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b` (`main-c228583`) |
|
||||||
| Runtime ConfigMap | `informed-decision-runtime-6c221878d051` | `informed-decision-runtime-b488b96a0953` |
|
| Runtime ConfigMap | `informed-decision-runtime-6c221878d051` | `informed-decision-runtime-b488b96a0953` |
|
||||||
| Review policy pin | compact-sitting `v13` `sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873` | `v14` `sha256:8911458f36f1a60598aa19592a2d752a74dffe2617fd86238407ac87bc300fde` |
|
| Review policy pin | compact-sitting `v13` `sha256:31be5985c0c1e6b0c3a039ed7310d1e94daf523a94f6d926e6e8d759d3711873` | `v14` `sha256:8911458f36f1a60598aa19592a2d752a74dffe2617fd86238407ac87bc300fde` |
|
||||||
| Helm `flex-auth-informed-decision-sitting` (access-engine) | revision 13, image `6c6dc263…`, v13 policy path | access-engine's v14 release (`2de0f86`), prepared in parallel |
|
| Helm `flex-auth-informed-decision-sitting` (access-engine) | revision 13, image `6c6dc263…`, v13 policy path | access-engine's v14 release (`2de0f86`), prepared in parallel |
|
||||||
|
|
@ -63,7 +79,7 @@ Candidate source changes in this commit:
|
||||||
`net-kingdom-admins`, `daily_limit: 10`, `present_existing {approval_actor: service:nk-bind-executor, actions:
|
`net-kingdom-admins`, `daily_limit: 10`, `present_existing {approval_actor: service:nk-bind-executor, actions:
|
||||||
[bounded-execution]}`. The state-hub row is byte-identical, and `outcome_read` stays off (T05 waits for STATE-WP-0101).
|
[bounded-execution]}`. The state-hub row is byte-identical, and `outcome_read` stays off (T05 waits for STATE-WP-0101).
|
||||||
|
|
||||||
## Step 0: pin the image (after G0; owner agent or founder)
|
## Step 0: pin the image (DONE 2026-11-01, owner agent; kept for reference)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd ~/informed-decision
|
cd ~/informed-decision
|
||||||
|
|
@ -75,7 +91,8 @@ python3 tools/render_deployment.py --input deploy/lifecycle/admission.candidate.
|
||||||
python3 tools/smoke_container.py --image forgejo.coulomb.social/coulomb/informed-decision@<IMAGE_DIGEST> \
|
python3 tools/smoke_container.py --image forgejo.coulomb.social/coulomb/informed-decision@<IMAGE_DIGEST> \
|
||||||
--receipt docs/evidence/<date>-present-existing-release/container.json --workload
|
--receipt docs/evidence/<date>-present-existing-release/container.json --workload
|
||||||
git commit -am "INFD-WP-0010-T02: pin service image <IMAGE_DIGEST> for the v14 release" && git push
|
git commit -am "INFD-WP-0010-T02: pin service image <IMAGE_DIGEST> for the v14 release" && git push
|
||||||
RELEASE_SHA=$(git rev-parse HEAD)
|
# Founder, before step 1:
|
||||||
|
RELEASE_SHA=$(git -C ~/informed-decision log -1 --format=%H -- deploy/lifecycle/admission.candidate.json)
|
||||||
```
|
```
|
||||||
|
|
||||||
Only the image line and the re-rendered `service.candidate.json` change. The runtime ConfigMap name stays
|
Only the image line and the re-rendered `service.candidate.json` change. The runtime ConfigMap name stays
|
||||||
|
|
@ -172,7 +189,7 @@ Possible without the executor:
|
||||||
409. No memo is stored, no budget is spent, and nothing is created, entered or consumed in approval-engine.
|
409. No memo is stored, no budget is spent, and nothing is created, entered or consumed in approval-engine.
|
||||||
```bash
|
```bash
|
||||||
cd ~/informed-decision
|
cd ~/informed-decision
|
||||||
IMAGE=forgejo.coulomb.social/coulomb/informed-decision@<IMAGE_DIGEST>
|
IMAGE=forgejo.coulomb.social/coulomb/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b
|
||||||
NAME=infd-probe-$(date -u +%H%M%S) # --overrides (merge patch) replaces the generated container: it carries name and image
|
NAME=infd-probe-$(date -u +%H%M%S) # --overrides (merge patch) replaces the generated container: it carries name and image
|
||||||
OVR='{"spec":{"serviceAccountName":"nk-bind-executor","automountServiceAccountToken":false,
|
OVR='{"spec":{"serviceAccountName":"nk-bind-executor","automountServiceAccountToken":false,
|
||||||
"securityContext":{"runAsNonRoot":true,"runAsUser":10001,"seccompProfile":{"type":"RuntimeDefault"}},
|
"securityContext":{"runAsNonRoot":true,"runAsUser":10001,"seccompProfile":{"type":"RuntimeDefault"}},
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:f5588f496b1f267d07cdc9f5208e6f2f241f74b739c23924b03702dec13a5c23",
|
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b",
|
||||||
"policy": {
|
"policy": {
|
||||||
"origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080",
|
"origin": "http://flex-auth-informed-decision-sitting.flex-auth.svc.cluster.local:8080",
|
||||||
"package": "informed-decision.compact-sitting",
|
"package": "informed-decision.compact-sitting",
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@
|
||||||
"containers": [
|
"containers": [
|
||||||
{
|
{
|
||||||
"name": "informed-decision",
|
"name": "informed-decision",
|
||||||
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:f5588f496b1f267d07cdc9f5208e6f2f241f74b739c23924b03702dec13a5c23",
|
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b",
|
||||||
"securityContext": {
|
"securityContext": {
|
||||||
"allowPrivilegeEscalation": false,
|
"allowPrivilegeEscalation": false,
|
||||||
"readOnlyRootFilesystem": true,
|
"readOnlyRootFilesystem": true,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"status": "passed",
|
||||||
|
"image_id": "sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b",
|
||||||
|
"repo_digests": [
|
||||||
|
"forgejo.coulomb.social/coulomb/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b"
|
||||||
|
],
|
||||||
|
"checks_passed": 13,
|
||||||
|
"checks": [
|
||||||
|
"installed container entrypoint serves with projected configuration",
|
||||||
|
"non-root read-only runtime has no external network or published port",
|
||||||
|
"private config/database modes enforced; package installer absent",
|
||||||
|
"configured review refuses anonymous access and reports audit-unready status",
|
||||||
|
"private listener refuses anonymous lifecycle access and exposes no browser routes",
|
||||||
|
"public listener exposes no private workload route",
|
||||||
|
"a second writer cannot acquire the active evidence volume",
|
||||||
|
"synthetic uncertain intent and undelivered evidence remain explicit",
|
||||||
|
"consistent backup created while serving; overwrite refused",
|
||||||
|
"SIGTERM closes the serving writer without forced kill",
|
||||||
|
"restart preserves immutable content and unresolved submission without retry",
|
||||||
|
"separate restored volume preserves exact content and unresolved state",
|
||||||
|
"incomplete owner configuration exits before serving"
|
||||||
|
],
|
||||||
|
"fixture_only": true,
|
||||||
|
"external_network": "none",
|
||||||
|
"content_snapshot_sha256": "7c377d9159da33bdc491f81a3444d3d581c1711664dcfbb6df2a6f899b49f425",
|
||||||
|
"native_identity_policy_audit_proven": false,
|
||||||
|
"published": false,
|
||||||
|
"deployed": false,
|
||||||
|
"factory_attempts": 0,
|
||||||
|
"paid_model_calls": 0,
|
||||||
|
"cleanup_complete": true
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"image": "forgejo.coulomb.social/coulomb/informed-decision@sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b",
|
||||||
|
"tag": "main-c228583",
|
||||||
|
"source_revision": "c228583b609aaa7f0e45ea1fcda4f26e121ad2c5",
|
||||||
|
"built_by": "owner CI service-image.yaml run 6 (success)",
|
||||||
|
"verified_read_only_2026-11-01": {
|
||||||
|
"label_revision_matches": true,
|
||||||
|
"user": "10001:10001",
|
||||||
|
"zlib_floor": "apk info --exists 'zlib>=1.3.2-r1' passed; zlib-1.3.2-r1, runtime 1.3.2",
|
||||||
|
"libuuid": "2.42.3-r1",
|
||||||
|
"pip_absent": true,
|
||||||
|
"runtime_smoke": {
|
||||||
|
"uid": 10001,
|
||||||
|
"zlib_runtime_version": "1.3.2",
|
||||||
|
"compression_vectors_pass": 4,
|
||||||
|
"malformed_zlib_refusals": 3,
|
||||||
|
"crypto_jwt_waitress_smoke": true,
|
||||||
|
"network_accessed": false,
|
||||||
|
"database_opened": false
|
||||||
|
},
|
||||||
|
"installed_modules_equal_source_at_c228583": true,
|
||||||
|
"container_checks": "13/13 passed (tools/smoke_container.py --workload), see container.json"
|
||||||
|
},
|
||||||
|
"scan": {
|
||||||
|
"scanner": "aquasec/trivy@sha256:62b1e65e8869bc4b4c6aa4fa2b21595256c7c2f6018a9d9ad61caf87187c1969",
|
||||||
|
"scanners": "vuln",
|
||||||
|
"os": {
|
||||||
|
"Family": "alpine",
|
||||||
|
"Name": "3.24.1"
|
||||||
|
},
|
||||||
|
"db_updated_at": "2026-11-01T07:08:40Z",
|
||||||
|
"high_critical_findings": 0,
|
||||||
|
"findings": [
|
||||||
|
{
|
||||||
|
"id": "CVE-2026-107891",
|
||||||
|
"package": "musl",
|
||||||
|
"installed": "1.2.6-r2",
|
||||||
|
"fixed": "1.2.6-r3",
|
||||||
|
"severity": "UNKNOWN"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "CVE-2026-107891",
|
||||||
|
"package": "musl-utils",
|
||||||
|
"installed": "1.2.6-r2",
|
||||||
|
"fixed": "1.2.6-r3",
|
||||||
|
"severity": "UNKNOWN"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"exit_code": 0,
|
||||||
|
"report_sha256": "72a31d2435ac8b65925ffc5548d72419492334426f0b91ff5b9d707618485ca6",
|
||||||
|
"note": "The two UNKNOWN musl findings are also present in the live image f5588f49 (musl 1.2.6-r2): not a regression."
|
||||||
|
},
|
||||||
|
"deployed": false
|
||||||
|
}
|
||||||
|
|
@ -111,6 +111,15 @@ Same day, step 0 in source: `.forgejo/workflows/service-image.yaml` builds the f
|
||||||
publishes `main-<short sha>`. The `Containerfile` builds the wheel in-image and installs the overlay's hash-pinned
|
publishes `main-<short sha>`. The `Containerfile` builds the wheel in-image and installs the overlay's hash-pinned
|
||||||
zlib-1.3.2-r1 offline, failing the build below 1.3.2-r1. A local build passed 13/13 container checks. The image pin
|
zlib-1.3.2-r1 offline, failing the build below 1.3.2-r1. A local build passed 13/13 container checks. The image pin
|
||||||
waits for the digest from CI.
|
waits for the digest from CI.
|
||||||
|
**Image pinned (2026-11-01):** CI run 6 published `main-c228583` =
|
||||||
|
`sha256:ca75f0be03af0bd96a66b08d2949bdc2d16365a93ffabcd6593074b565e8f01b`. Verified read-only:
|
||||||
|
- zlib 1.3.2-r1 (and the floor check passes)
|
||||||
|
- installed modules equal the source at c228583
|
||||||
|
- 13/13 container checks
|
||||||
|
- Trivy 0 HIGH/CRITICAL; 2 UNKNOWN in musl, the same as live
|
||||||
|
|
||||||
|
It is pinned in `admission.candidate.json` and `service.candidate.json`. The runtime ConfigMap is unchanged
|
||||||
|
(`…b488b96a0953`). The pin commit is RELEASE_SHA. The release itself is founder-run.
|
||||||
|
|
||||||
Then here: the policy pin, a registry row, a release, and a native proof with synthetic BEA content. Optional: for
|
Then here: the policy pin, a registry row, a release, and a native proof with synthetic BEA content. Optional: for
|
||||||
`bounded-execution`, require a packet item whose digest equals `target.admission_digest`, once the admission
|
`bounded-execution`, require a packet item whose digest equals `target.admission_digest`, once the admission
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue