Skip to content

chore(OMN-16205): prod-promotion grant PREP — onex-prod ingress swap + omniweb digest pin - #7084

Merged
github-actions[bot] merged 3 commits into
mainfrom
hotfix/omn-16205-prod-promotion-grant
Aug 25, 2026
Merged

github-actions[bot] merged 3 commits into
mainfrom
hotfix/omn-16205-prod-promotion-grant

Conversation

@jonahgabriel

Copy link
Copy Markdown
Contributor

Summary

PREP ONLY. Opened by an agent session on 2026-08-25 per the operator's
option-2 cutover ruling (docs/tracking/2026-08-24-cutover-options-brief.md,
decision rows (a)/(b)). This PR must NOT be merged by any agent — it
becomes effective only when a human operator lands it on
onex_change_control@main as the explicit approval act.

Two grant entries under one promotion_batch_id (batch-ac0ff5ab-ac14-4907-9ae5-0a25a8a84bc6), both same-digest authorizations — no new image content:

grant_id image digest authorizes
grant-5f94d77d-b4f0-4f64-a67f-a35cde0f9124 omninode-runtime sha256:13c96028... onex-prod runtime plane (currently running this digest) + explicit scope: the ingress-host swap itself (no independent digest of its own)
grant-a1257e52-dd17-4650-b42a-49444b83f634 omniweb sha256:eef16942... pinning k8s/onex-prod/omniweb/deployment.yaml to what customers are currently served, superseding the stale a5ce53bd pin that reintroduces OMN-15294

Both digests confirmed ACTIVE in ECR via live aws ecr describe-images (tags pinned-onex-prod-live-13c96028 / pinned-onex-prod-live-eef16942).

Requester / approver

  • requested_by is deliberately not a YAML field (schema, see file header). Intended dispatcher: Daniyal (daniyalabbas96) — verified admin permission on omninode_infra 2026-08-25 via gh api repos/OmniNode-ai/omninode_infra/collaborators/daniyalabbas96/permission (write+ requirement satisfied).
  • approved_by: jonahgabriel on both entries, so approved_by != requested_by holds against omninode_infra/scripts/validate_prod_promotion_grant.py's anti-self-approval check — the k3s/EKS cloud-plane consumer for this grant (OMN-14209 scope decision: matches only runtime_lane + image_digest, not promotion_batch_id). This is a separate consumer of this same trust-anchor file from the .201 compose-lane node_redeploy_orchestrator path in the OMN-13418 plan.

Doc-drift flagged for the approver

This repo's main branch has not absorbed OMN-14814 (commit f2b49416f is dev-only) — the file header on main still reads "the approver MUST differ from the PR author," unlike dev's updated sole-CODEOWNER self-approval carve-out. Not resolved by this PR; flagging for the operator's own judgment at merge time.

Why a hotfix/* PR, not a dev promotion PR

main-target-guard accepts a hotfix/* PR carrying hotfix-evidence: OCC-<n> + backmerge: #<n> — precedented by hotfix/omn-15181-prod-grant-restart-20260817 (#6599, same file/schema, same pattern).

Cross-reference — Keycloak window

This promotion window must not overlap any OMN-16385 Keycloak DB migration. Separate comment posted on OMN-16385 asking its owner to confirm no such migration runs in the next 48h — see that ticket for current state (a config-prerequisite PR, omninode_infra#962, merged to dev minutes before this PR was opened; the actual Keycloak DB-content migration + helm upgrade remain a separate, not-yet-executed manual step per that PR's own body).

Test plan

  • uv run pytest tests/test_prod_promotion_grants.py -v — 18/18 passed
  • pre-commit run --files grants/prod_promotion_grants.yaml — all hooks passed (yamlfmt reflowed the reason blocks; content re-verified post-reflow)
  • CI green (watching)
  • Operator review + merge (the approval act)

No raw SSH/kubectl retag/recreate path used or implied. NO PROD MUTATION HAS OCCURRED OR IS AUTHORIZED BY THIS PR — it lands only the trust-anchor grant entries. The actual workflow_dispatch run is a separate, explicit, subsequent action per the operator's HARD SCOPE ruling (no dev→main promotion, no deploy dispatch, no ingress mutation, no window execution performed by any agent).

hotfix-evidence: OCC-16205
backmerge: #6717

Evidence-Ticket: OMN-16205

…+ omniweb digest pin

PREP ONLY, opened by an agent session on 2026-08-25 per the operator's
option-2 cutover ruling (docs/tracking/2026-08-24-cutover-options-brief.md,
decision rows (a)/(b)). This PR is NOT to be merged by any agent — it
becomes effective ONLY when a human operator lands it on
onex_change_control@main on explicit operator word.

Two grant entries under one promotion_batch_id, both same-digest
authorizations (no new image content):

- grant-5f94d77d...: runtime_lane=prod, image_digest sha256:13c96028...
  (omninode-runtime, the digest onex-prod is CURRENTLY running, ECR-verified
  ACTIVE under pinned-onex-prod-live-13c96028). Explicit scope statement:
  also authorizes the ingress-host swap action itself (app.omninode.ai /
  omninode.ai / www.omninode.ai: onex-dev -> onex-prod namespace on public
  cluster i-0e596e8b557e27785), which has no independent digest of its own
  and travels in the same deploy-onex-prod.yml run.
- grant-a1257e52...: runtime_lane=prod, image_digest sha256:eef16942...
  (omniweb, what customers are currently served, ECR-verified ACTIVE under
  pinned-onex-prod-live-eef16942) — makes the onex-prod git pin match live,
  superseding the stale a5ce53bd pin that reintroduces OMN-15294.

requested_by is deliberately not a YAML field (schema, see file header).
Intended dispatcher: Daniyal (daniyalabbas96), verified admin permission on
omninode_infra 2026-08-25 (gh api .../collaborators/daniyalabbas96/permission)
-- write+ requirement satisfied. approved_by: jonahgabriel on both entries so
approved_by != requested_by holds against omninode_infra's own
validate_prod_promotion_grant.py anti-self-approval check (that k3s-lane
consumer matches only on runtime_lane+image_digest, per its OMN-14209 scope
decision -- a SEPARATE consumer of this file from the .201 compose-lane
node_redeploy_orchestrator path).

Doc-drift flagged for the approver: this repo's main branch has NOT
absorbed OMN-14814 (commit f2b4941 is dev-only) -- the file header here
still states "the approver MUST differ from the PR author," unlike dev's
updated sole-CODEOWNER carve-out. Not resolved by this PR; noted for the
operator's own judgment at merge time.

expires_at is a ~30h PROPOSAL from PR-open; the approver may shorten it.
Cross-reference: this promotion window must NOT overlap any OMN-16385
Keycloak DB migration -- separate comment posted on OMN-16385 asking its
owner to confirm.

No raw SSH/kubectl retag/recreate path used or implied. NO PROD MUTATION
HAS OCCURRED OR IS AUTHORIZED BY THIS PR -- lands only the trust-anchor
grant entries; the actual workflow_dispatch run is a separate, explicit,
subsequent action per the operator's HARD SCOPE ruling (no dev->main
promotion, no deploy dispatch, no ingress mutation, no window execution
performed by any agent).

hotfix-evidence: OCC-16205
backmerge: #6717

Evidence-Ticket: OMN-16205
@coderabbitai

coderabbitai Bot commented Aug 25, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 98e480c5-0943-481b-a02d-d81c7005a9cb

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Comment @coderabbitai help to get the list of available commands.

Adds contracts/OMN-16205.yaml and 4 drift/dod_receipts/OMN-16205/*
receipts so validator_occ_merge_eligibility resolves this ticket as
PR-bound. Fixes occ-preflight/eligibility, verify/verify (Receipt
Gate), and call-reject-skip-token/occ-preflight/eligibility, which
were all failing missing_contract (OCC self-change invariant I3 — a
PR touching onex_change_control needs the ticket's contract + DoD
receipts in-tree, same pattern OCC#6599/#7078 used).

Three dod_evidence items document real, reproducible facts about
this grant PR (grant registry values, local test/pre-commit
validation, no-raw-deploy disclosure), plus occ-self-bind-pr-7084
binding the evidence to this PR by pr_number.

Verified locally before push:
- validator_occ_merge_eligibility: eligible=true, reason=eligible
- validator_receipt_honesty: 0 violations, 4 receipts
- uv run pytest tests/test_prod_promotion_grants.py -v: 18/18 passed
- pre-commit run --files <new files>: all hooks passed

No grant entries in grants/prod_promotion_grants.yaml touched. This
PR remains draft; still requires the operator's own ready+merge as
the approval act.

Evidence-Ticket: OMN-16205
…ventory

Migration Inventory Sync (a required check) was failing UNLISTED_FILE
for two migration files that already exist on their source repos'
main branches, unrelated to this PR's grant content — pre-existing
cross-repo registry drift, confirmed absent from OCC main before this
push:

- omnibase_infra/docker/migrations/forward/100_create_gateway_link_health.sql
  (OMN-15570) -> omninode_internal.gateway_link_health table +
  gateway_link_health_status view.
- omninode_infra/db/migrations/20260825_gateway_workflows_result_content.sql
  (OMN-16510) -> adds result_content to gateway_workflows.

Registers both in migration_inventory.yaml with the tables they
create/modify. This is a required, systemic check that was blocking
every PR against main, not something specific to the grant content —
fixing it in place rather than deferring, per repo policy against
carrying pre-existing red checks.

Verified locally: uv run check-migration-inventory --repos-root
<omni_home clones> exits 0 (only a WARNING for a repo not cloned
locally, unrelated); uv run pytest
tests/unit/scripts/test_check_migration_inventory.py -q: 4/4 passed;
pre-commit run --files <file>: all hooks passed.

Evidence-Ticket: OMN-16205
@onexbot-occ-writer

Copy link
Copy Markdown
Contributor

OCC autobind stood down for OmniNode-ai/omninode_infra#992 (OMN-16205): this PR (hand_authored) already carries evidence for that ticket, so no competing companion was minted (OMN-15247 defer-on-contention).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant