openbao: make the parity gate actually work, and run it nightly #143
No reviewers
Labels
No labels
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: Jinemi/thermograph#143
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/openbao-parity-gate"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Three fixes on the path between "the migration looks ready" and "the migration is ready".
verify-parity.shcould not verify beta or dev. It never sourcedenv-topology.sh, soTG_BAO_APPROLEwas unset andrender-secrets-openbao.sh:41fell through to the bare default — prod's credential — for every environment. On vps2 that made--env betaauthenticate astg-prodand take a 403 fromtg-host-prod.hclonthermograph/data/env/beta;--allfailed the same way and took dev with it.deploy.shanddeploy-stack.shalways sourced it. Only the verifier did not — the worst place for the omission, since the tool whose job is to notice divergence was itself diverging from the path it verifies. README.md asserted the property was already true.infra-sync.ymlwould not have followed a cutover. It re-renders all three env files on every push touchinginfra/**, and none of its three jobs sourcedenv-topology.sh, soTG_SECRETS_BACKENDwas unset andrender-secrets.sh:44defaulted tosops. Flipping the selector would have changeddeploy.shanddeploy-stack.shbut not this workflow — silent while parity holds, hard failure once the SOPS files are retired. The one-line cutover README.md describes was never sufficient alone.The nightly gate did not exist. README.md called 7 consecutive green parity runs the gate for a cutover and said they should run from
ops-cron.yml. Nothing implemented it. Added as asecrets-parityjob: prod and beta from vps2, dev from vps1, failing loudly on mismatch. It grants CI no vault access — the host renders, CI only asks it to.First measured run, immediately after the fix
The same three keys on both:
THERMOGRAPH_S3_SECRET_KEY,THERMOGRAPH_LAKE_S3_SECRET_KEY,THERMOGRAPH_VAPID_CONTACT. All three live incommon.yaml, which was seeded 2026-07-31 02:30Z — before the Contabo rotation landed. dev passes because dev never layerscommon.Before merging this, or at least before the first nightly run:
seed-from-sops.sh --env commonneeds running by the operator (it reads production secrets in plaintext and inherits the not-for-an-agent rule). One re-seed fixes beta and prod together. The 7-day clock starts after that, not before — otherwise the job is scheduled red on day one.