Repository navigation
chore(OMN-16702): re-stage the staging-namespace authorization after the 16:00Z expiry - #7731
Merged
Merged
Conversation
…the 16:00Z expiry
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Comment |
jonahgabriel
enabled auto-merge (squash)
August 30, 2026 17:24
This was referenced Sep 1, 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.
Re-stages the OMN-16702 staging-namespace authorization on
main— the ref the omninode_infra gate resolves from — after the first entry expired unconsumed.Why
grant-00ba7b7e-fc60-4938-9a32-70f9df9a9c7a(landed by #7662) carried an approver-set absoluteexpires_at: 2026-08-30T16:00:00Z. No dispatch was ever performed under it. The blocker was upstream, not authorization: theconverge-public-stagingjob with the staging gate existed only onomninode_infradev, and the workflow refuses to run offmain. That promotion (omninode_infra#1086) merged at 16:59:12Z — 59 minutes after the grant window closed. The grant expired with the run it was minted for still un-dispatched.Per this file's own LIFECYCLE section an expired entry must be pruned, so
grant-00ba7b7eis removed here rather than left to rot, and replaced by a fresh entry.What changed — three fields, nothing else
grant_idgrant-00ba7b7e-…grant-2840de81-b6de-4963-bb7e-ab022b2d0cc9created_at2026-08-30T10:30:00Z2026-08-30T17:20:00Zexpires_at2026-08-30T16:00:00Z2026-08-31T02:00:00Zcluster,namespaces: [dev, onex-dev],authorization,operator_quote,operator_quote_at,authorization_recordandapproved_byare byte-identical to the pruned entry.The quote is still fresh, and the new expiry sits strictly inside its window
The gate's freshness window is 24h (
_DEFAULT_MAX_QUOTE_AGE_HOURS = 24.0), so the quote stays usable until2026-08-31T05:30:00Z. The new approver-set absoluteexpires_atis2026-08-31T02:00:00Z— inside that window, not at its edge.authorization_record: omni_home@e72943be6d7d27e69d00a017511a41fe3a7ac9a6is unchanged and still an ancestor ofomni_home@main; the quote is readable twice in that commit's own diff (CLAUDE.md§2a and §12), which is what the gate'sUNRECORDED_QUOTEcheck resolves against.approved_by: jonahgabrielstill equals the dispatcher on purpose. That relaxation is the whole point of this anchor and applies here only.Verified live against this exact file, before pushing
Schema validator (
onex_change_control, fromdev):The consuming gate (
omninode_infra@mainscripts/validate_staging_namespace_grant.py), fed the real scope report rendered fromomninode_infra@main16725bddbyscripts/assert_staging_namespace_scope.py --tree k8s/onex-public --tree k8s/onex-public/runtime --tree k8s/onex-public/network(PASS: 28 object(s) render only into ['onex-dev']):Negative control — this anchor still cannot reach prod:
Blast radius
Unchanged from #7662. This file is read only by
omninode_infra'sscripts/validate_staging_namespace_grant.py, which matchesruntime_lane: staging-namespaceand refuses any namespace outside{dev, onex-dev}.scripts/validate_prod_promotion_grant.pyreadsgrants/prod_promotion_grants.yamland only that path; it is byte-unchanged. The run this authorizes isdeploy_target=public-only, which skipspromote-to-prodentirely.Lifecycle
PRUNE this entry once consumed, or set
consumed: true. Absolute expiry2026-08-31T02:00:00Z.Ticket: OMN-16702 (also unblocks OMN-17153 / OMN-17155)
hotfix-evidence: OCC-7649
backmerge: #7649
Second commit — OCC self-bind (
81b2acf7c)occ-preflight / eligibilityandverify / verifyboth failed the first push withmissing_occ_self_bind/pr_ticket_mismatch: OMN-16702's evidence verifies, but no PASS receipt bound to this PR. Fixed exactly as the gate's owndetailfield prescribed:contracts/OMN-16702.yamlgains one appendeddod_evidenceentryocc-self-bind-pr-7731;drift/dod_receipts/OMN-16702/occ-self-bind-pr-7731/command.yamlis a PASS receipt withpr_number: 7731.Hashes recomputed against the post-
yamlfmtbytes, not the pre-format draft:contract_sha256: sha256:04b0dae8…=sha256(contracts/OMN-16702.yaml)after the hook reflow.contract_entry_sha256: sha256:ca448ad1…= the OMN-13888 canonical per-entry hash ({"header":{ticket_id,schema_version},"entry":<this item>}, sorted keys, no whitespace). Appending an entry leaves entries 1..N untouched, so no existing OMN-16702 receipt is edited — same shape as chore(OMN-16702): staging-namespace authorization for the public-cluster convergence + dev-valkey roll #7662.Third + fourth commits — the expired prod grants had to be pruned too
Tests(andContract Compliance Check) went red on the second push, and not because of anything this PR added.TestGrantFileAtRest::test_grant_file_entries_are_empty_or_well_formed_and_unexpiredfails onmainfor every PR, because six prod-promotion grants were sitting ingrants/prod_promotion_grants.yamlpast their absolute expiry:Same 16:00Z cliff that stranded the staging grant, on the prod anchor. All six unconsumed — no
deploy-onex-prod.ymldispatch ran under any of them.Testsis not itself a branch-protection context, but it rolls into the requiredCI Summary, so this was a hard block, not cosmetics.Pruned to
entries: [], which is what this file's own header and OMN-13424 call the at-rest state, and what OCC#7554 did tobatch-af8142c0under exactly these circumstances.Direction of travel matters here: pruning REMOVES prod authorization and creates none. After this PR,
mainauthorizes zero prod promotions; the next one needs a fresh, CODEOWNERS-approved, digest-pinned entry, unchanged.validate_prod_promotion_grant.pyis byte-untouched.dod-prod-promotion-grant-values-omn16702asserted the presence of the fourbatch-48e48b4cids, so pruning them would have falsified it. Re-pointed at the pruned state (grep -Fq 'entries: []' && grep -Fq 'PRUNED 2026-08-30') — the second time this item has been re-pointed after a batch lapsed, the same operation #7561 performed. Its receipt is rewritten in place with the newcontract_entry_sha256andpr_number: 7731, mirroring #7561's edit of the same file.Both live receipts carry
contract_sha256: sha256:558244469f..., the hash ofcontracts/OMN-16702.yamlas it stands after the finalyamlfmtpass.