Repository navigation
chore(OMN-16702): staging-namespace authorization for the public-cluster convergence + dev-valkey roll - #7662
Conversation
…ter convergence + dev-valkey roll
Adds grants/staging_namespace_grants.yaml to main (the ref both gates resolve
from) carrying ONE live authorization under the 2026-08-30 in-session operator
ruling, quoted verbatim in the entry:
"Amend doctrine: in-session operator 'go' counts" (2026-08-30T05:30:00Z)
Scope, namespaces [dev, onex-dev] on omninode-k3s-system-public, covers BOTH
halves of OMN-16702: the k8s/onex-public convergence (onex-dev) and the
dev-valkey --requirepass roll with its Infisical consumer (dev).
approved_by == the dispatcher on purpose. That is the relaxation the ruling
granted and it applies to THIS anchor only.
THIS FILE CANNOT AUTHORIZE A PROD RUNTIME PROMOTION. Proven live, all three
directions, against this exact file before this commit:
validate_staging_namespace_grant.py --requested-by jonahgabriel
--namespaces dev,onex-dev --grants-file <this file>
-> [staging-auth] PASS (resolved): grant grant-00ba7b7e... approved_by=jonahgabriel
covers ['dev', 'onex-dev'] expires_at=2026-08-30T16:00:00Z (exit 0)
... --namespaces onex-dev,onex-prod
-> [staging-auth] BLOCKED (scope_exceeded): run requests namespaces
['onex-prod'] outside the staging-class allowlist ['dev', 'onex-dev'].
There is no override.
validate_prod_promotion_grant.py --target-digest sha256:aaaa...
--requested-by jonahgabriel --health-status healthy # SAME actor
-> [prod-grant] BLOCKED (self_granted): approved_by == requested_by
('jonahgabriel') -- self-approval is rejected. (exit 1)
The authorization_record omni_home@e72943be6d7d27e69d00a017511a41fe3a7ac9a6 is
an ancestor of omni_home@main and its diff contains the quote verbatim (twice),
so the gate's UNRECORDED_QUOTE check resolves against a landed record rather
than against this file's own assertion.
PRUNE after use, or set consumed: true. Absolute expiry 2026-08-30T16:00:00Z.
|
Warning Review limit reachedNext included review available in 29 minutes. View limit detailsLimit details: You’ve used the included review currently available. Your 136 included PR review attempts over the past 7 days set your current allowance at 1 review per hour. Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. Review configuration: ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (4)
Comment |
occ-preflight/eligibility reported reason=missing_occ_self_bind on the
staging-namespace grant PR: the OMN-16702 evidence on main verifies
(receipts PASS, hashes bound) but nothing bound to this PR itself.
check_value uses the canonical ${PR_NUMBER} placeholder -- main's
lint-contract-check-values (OMN-9350) rejects a hardcoded integer PR
number, which is stricter than the same hook on dev.
|
@coderabbitai review |
|
jonahgabriel
left a comment
There was a problem hiding this comment.
OMN-17146 verification trigger: re-exercising gate / CodeRabbit Thread Check on this PR now that omniclaude#2078 (merge 0452f946e) landed the no-op reusable on omniclaude main. This PR is the failure instance cited in OMN-17146 (run 33307000219, chmod: cannot access 'scripts/check-unresolved-threads.sh'). A GitHub re-run replays the original reusable resolution, so a fresh event is required to prove the fix; this review submission is that event.
Adds
grants/staging_namespace_grants.yamltomain— the ref both gates resolve from — carrying one live authorization under the 2026-08-30 in-session operator ruling.The ruling, quoted verbatim in the entry
operator_quotein the entry is that exact string, byte for byte.operator_quote_atis that timestamp.Scope
namespaces: [dev, onex-dev]oncluster: omninode-k3s-system-public. That covers both halves of OMN-16702:onex-dev— thek8s/onex-publicconvergence (include_onex_public), i.e. the omnidash session-store repoint to the authenticated data-plane Valkey.dev— thedev-valkey --requirepassroll and its Infisical consumer.approved_by: jonahgabrielequals the dispatcher on purpose. That is the relaxation the ruling granted, and it applies to this anchor only.This file cannot authorize a prod runtime promotion — proven live against this exact file
The same actor that this staging authorization accepts is still refused for a PROD runtime promotion. Side by side, live, at the same moment.
The record is landed, not asserted
authorization_record: omni_home@e72943be6d7d27e69d00a017511a41fe3a7ac9a6— verified an ancestor ofomni_home@main(compare/main...<sha>→behind), and the quote appears twice in that commit's own diff (CLAUDE.md§2a and §12). The gate'sUNRECORDED_QUOTEcheck therefore resolves against a landed durable record, not against this file's own claim.Why a separate anchor, not a
scope:field inprod_promotion_grants.yamlA staging entry inside the prod anchor would brick prod promotion:
omninode_infra'sscripts/validate_prod_promotion_grant.py:168raisesValueErrorfor any entry missingimage_digest/promotion_batch_id→MALFORMED→ exit 1 for every prod promotion while the entry exists. Andvalidate_prod_promotion_grants._validate_entrywould rejectscope/namespaces/operator_quote/… asunexpected fields. Two anchors, two validators, zero coupling.Lifecycle
PRUNE this entry once consumed, or set
consumed: true. Absolute expiry2026-08-30T16:00:00Z. The anchor's at-rest state isentries: [], and an expired entry failsvalidate-staging-namespace-grants— the same prune discipline the prod anchor carries (cf. OMN-15010).Note: the schema validator and its CI job land on
devviaonex_change_control#7649(merged). This PR puts the anchor and the live entry onmainso the runtime gate can read them, following the same main-targeted pattern as#7464/#7561for prod grants.Ticket: OMN-16702
hotfix-evidence: OCC-7649
backmerge: #7649