Repository navigation
feat(OMN-18601): stage the replacement prod-promotion manifest grant at ad45e2cc - #10454
Merged
Merged
Conversation
…at ad45e2cc grant-aeae215d-d796-4141-a0a9-7b5fd0c22055 authorizes k8s/keycloak-seed/overlays/prod at omninode_infra ad45e2cc into onex-prod, replacing the revoked grant-90f8e729 whose render production refused at admission. Two fields move and no others: manifest_ref 8279e2ca to ad45e2cc, rendered_digest sha256:33b54afe to sha256:976ef4de, both tracing to the one securityContext block omninode_infra#1580 put on main. Five evidence items, each measured with a control. The admissibility item is the check whose absence cost the last dispatch: the render at the grant's own manifest_ref admits under restricted, while the same checker REFUSES the same Job at 8279e2ca naming both absent fields, and the recomputed digest equals the declared one so identity and admissibility were measured on the same bytes. The staging premise is met rather than assumed: run 35458357503 at ref main recorded verdict=GREEN at sha ad45e2cc with the applied mapping naming k8s/keycloak-seed, fresh until 2026-09-20T17:38:11Z. The schema suite caught a missing required reason field during authoring. OMN-18764 stays open: the staging premise proves an overlay APPLIED, not that a Job RAN, and staging enforces no pod-security profile at all. The admissibility item covers that gap by hand, for this dispatch only. Verified before pushing: all 14 declared check_values execute, every contract_entry_sha256 equals the recomputed per-entry hash, the nine pre-existing entries still bind their merged receipts after yamlfmt, honesty rules clean, no corruption sentinel. Refs: OMN-18601, OMN-18566, OMN-18764 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P5jA4UseYGEptrKijm4X9g
The eligibility gate binds a ticket's evidence to the PR under review by pr_number. No contract entry changes, so every per-entry hash stays valid. Refs: OMN-18601 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P5jA4UseYGEptrKijm4X9g
… grant legitimately inverts it Contract Compliance returned 13/14 with one BLOCK: dod-omn18601-grant-revoked asserts an empty entries list on the LIVE registry, and this PR stages the replacement grant, so the assertion stops holding. That is the registry working, not a regression. This is the mirror image of the inversion OCC#10302 fixed in the other direction, and the two staged-state items on this contract already carry a warning about the class. The remedy is the same: the check reads the receipt that holds the measurement and its 6c54c74 control, and the description narrows the claim to what is true — the revocation WAS measured, not that the file is at rest now. The receipt records the pattern in both directions so the next author does not rediscover it. Re-minted the receipt's contract_entry_sha256 for the changed entry, since a changed check_value changes the per-entry hash and that check is strict. The other thirteen entry hashes are untouched, which is what per-entry hashing is for. Verified: all 14 entry hashes bind, every check_value executes, honesty rules clean, no corruption sentinel. Refs: OMN-18601, OMN-13888 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01P5jA4UseYGEptrKijm4X9g
jake-b-omni
enabled auto-merge (squash)
September 19, 2026 19:23
jonahgabriel
approved these changes
Sep 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stages
grant-aeae215d-d796-4141-a0a9-7b5fd0c22055, the replacement prod-promotion manifest grant, at a treeonex-prodcan admit.Jonah — this needs your approval.
grants/prod_promotion_grants.yamlis owned by@OmniNode-ai/platform-leads, GitHub refuses an author's own approval, andapproved_bynames you. You are the only person who can land it, which is the property the registry exists to have.What changed since the revoked grant
Two fields, and no others:
grant-90f8e729manifest_ref8279e2caad45e2ccrendered_digestsha256:33b54afe…sha256:976ef4de…Both trace to one file —
k8s/keycloak-seed/base/seed-keycloak-clients-job.yamlnow declaresallowPrivilegeEscalation: false,capabilities.drop: [ALL],runAsNonRoot: true,seccompProfile: RuntimeDefault. It reached main asomninode_infra#1580, a narrow hotfix carrying the two files ofb4eac797rather than a promotion of all of dev, because#1565is red on a dev-only hook-topic mirror drift that has nothing to do with Keycloak. Path, subtree, lane and approver are unchanged.The check whose absence cost the last dispatch
Run 35392020746 passed every identity premise, applied all three objects to
onex-prodwith a live readback, and then Jobseed-keycloak-clientshitDeadlineExceededwith zero pods. So this time admissibility was measured, with a control:Same checker, both refs. One that was silently broken would have admitted both. The digest recomputed at
ad45e2ccequals therendered_digestthis entry declares, so the tree proven admissible is the tree the grant authorizes.manifest_subtreeis declared wider thanmanifest_pathbecause the overlay's kustomization names../../base: the transitive tree is six files acrossbase/andoverlays/prod/.The stability premise is met, not assumed
deploy-onex-stagingrun 35458357503, dispatched at refmainafter #1580 merged:GREEN, recorded at the promoted commit, and the mapping names the subtree — so
resolve_staging_applybinds it instead of readingSUBTREE_UNBOUND. Fresh until 2026-09-20T17:38:11Z.What is still not proven
Staging enforces no pod-security profile on any of its namespaces, so a GREEN apply establishes that the overlay APPLIED, not that the Job RAN — it went green for the revoked grant's manifest too. That is OMN-18764, it is open, and the admissibility item above covers the gap by hand, for this dispatch only. The gate still cannot ask that question itself.
Nothing in production is mutated by merging this
The merge adds an authorization, not a workload. No dispatch, deploy, rollback or restart happens, and
onex-prodkeeps running exactly what it runs now. The inertDeadlineExceededJob left by the failed reconcile is untouched.Prune it once consumed
It expires 2026-09-20T17:44:56Z, and the OMN-13424 at-rest invariant FAILS on any expired entry left in the file — reddening every subsequent PR to this repository, which is the trap that put a clock on OCC#10302. Remove it after the dispatch settles, whichever way it settles.
Verification before pushing
All 14 declared
check_values execute; everycontract_entry_sha256equals the recomputed per-entry hash; the nine pre-existing entries still bind their already-merged receipts after yamlfmt; honesty rules clean; no corruption sentinel. The schema suite (44 tests) passes and earned its keep — it caught thatreasonis a required field the entry was drafted without.hotfix-evidence: OCC-10440
backmerge: #1580
Evidence-Class: hotfix
Evidence-Ticket: OMN-18601
🤖 Generated with Claude Code
https://claude.ai/code/session_01P5jA4UseYGEptrKijm4X9g