66 lines
2.7 KiB
Markdown
66 lines
2.7 KiB
Markdown
# policy-nexus production release
|
|
|
|
`railiance-apps` owns only the approved production binding for
|
|
`policy.coulomb.social`. Policy sources and the OCI artifact belong to
|
|
`policy-nexus`; the Helm chart, hardening, verification, and rollback belong to
|
|
`rapp-policy-nexus`. This repository must not copy either the generated site or
|
|
the chart.
|
|
|
|
## Binding a release
|
|
|
|
The source-controlled binding is
|
|
`bindings/policy-nexus-production.json`. Before deployment, record all four
|
|
candidate identities and set `status` to `release-approved`:
|
|
|
|
- `image_digest`: the registry-resolved `sha256:...` digest of the image
|
|
published by `policy-nexus`;
|
|
- `publication_manifest_digest`: the 64-hex SHA-256 printed by the release
|
|
verifier for the exact `publication-manifest.json` in that image.
|
|
- `source_inventory_digest`: the 64-hex SHA-256 of the exact
|
|
`source-inventory.json` in that image;
|
|
- `source_set_digest`: the deterministic 64-hex digest of every upstream
|
|
repository revision audited for that candidate.
|
|
|
|
Tags are not accepted as production identity. All four identities must be
|
|
reviewed in the same change; this binds runtime bytes to policy source
|
|
provenance without making this repository a second policy authority.
|
|
|
|
## Preflight and deployment
|
|
|
|
With sibling checkouts of `railiance-apps` and `rapp-policy-nexus`:
|
|
|
|
```sh
|
|
make policy-nexus-check-binding
|
|
make policy-nexus-check-image
|
|
make policy-nexus-render
|
|
make policy-nexus-server-dry-run
|
|
make policy-nexus-deploy
|
|
make policy-nexus-status
|
|
make policy-nexus-smoke
|
|
```
|
|
|
|
Production deployment is an operator action. The current Forgejo build runner
|
|
has registry-publication authority but intentionally has no cluster-deploy
|
|
authority, kubeconfig, or SSH lane. Do not add those credentials to make this
|
|
release automatic. The guarded Make targets refuse the current
|
|
`approved-awaiting-artifact` binding and provide the reviewed execution path
|
|
from an authorized operator workstation.
|
|
|
|
## Rollback
|
|
|
|
Find the last known-good Helm revision with `make policy-nexus-status`, then:
|
|
|
|
```sh
|
|
make policy-nexus-rollback POLICY_NEXUS_REVISION=<revision>
|
|
make policy-nexus-smoke
|
|
```
|
|
|
|
After an emergency rollback, restore the binding file to the four immutable
|
|
identities actually serving and capture the smoke output. The package promises
|
|
restart recovery on the single-node reef, not multi-node high availability.
|
|
|
|
The rollback path was exercised on 2026-08-18: release 2 deployed as Helm
|
|
revision 2, rollback to release 1 created revision 3 and verified the prior
|
|
image/publication identities, and restoring release 2 created deployed revision
|
|
4 and passed all four current identity checks. Durable evidence is stored in
|
|
`../rapp-policy-nexus/evidence/live/2026-08-18-railiance01-release2-rollback.json`.
|