Repository navigation
fix(OMN-20522): CI Summary holds an L4 red while a newer producer run is unfinished - #1882
Merged
Merged
Conversation
jonahgabriel
enabled auto-merge (squash)
October 4, 2026 10:34
jonahgabriel
pushed a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Oct 4, 2026
…12773) * evidence(OMN-20522): author OCC companion for OmniNode-ai/omnibase_core#1882 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 2e0c3b4604a93f77ecc03475ee56a0f894d96675. * evidence(OMN-20522): self-bind OCC#12773 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
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.
Summary
Ticket OMN-20522, repository omnibase_core. This PR modifies
scripts/ci/ci_summary_gate.py, the CI Summary poller step in.github/workflows/ci.yml,tests/ci/test_ci_summary_l4_wait_omn20522.py, and fixtures intests/ci/fixtures/omn20522/*.json.The defect occurred when the CI Summary read a cancelled DB ownership CI twin (B1) row as a failure while a newer run of the same producer workflow was still running. The fix allows the poller to write
actions/runs?head_sha=<sha>toworkflow_runs.jsonand pass the new optional--workflow-runs-file. The gate maps the stale row's run id (fromdetails_url) to itsworkflow_idand holds the context pending (never green) when a run of the sameworkflow_id, same event, same head, that is not completed is either a higher run id or the stale row's own run id restarted after the row concluded. This applies to cancelled, failure, and skipped rows only;timed_outandaction_requiredremain strict.omnibase_core#1881head4ba4fdba, CI run37191706046, verdict FAILURE at09:28:15Z. The row read was check-run111405107275(run37191600018) cancelled at09:18:11Z, 604 s old againstCANCELLED_SUPERSESSION_GRACE_S = 600. Replacement run37191705833(same workflow, started09:18:02Z) was running; its DB ownership job needs occ-preflight / eligibility (in progress until09:28:55Z), so its row (check-run111406835614) only appeared at09:28:58Zand concluded success at09:29:04Z. The replacement lives in a different check suite, so the existing suite-sibling hold could not see it.omnibase_core#1869headf7402aa6, CI run37178554646attempt 2, verdict FAILURE at05:30:38Z(job ran05:30:30Zto05:30:40Z). Stale row check-run111366443636was the attempt-1 cancelled row of run37178554468(cancelled05:00:34Z). Attempt 2 of the same run started05:30:27Z; its row (111370863248) started05:31:26Zand concluded success.now=09:28:15Z: before (origin/dev gate)failures=[DB ownership CI twin (B1)]; after,pending=[DB ownership CI twin (B1)].now=05:30:38Z: beforefailures; afterpending.scripts/ci/ci_summary_gate.pyandci.ymlrestored toorigin/dev,tests/ci/test_ci_summary_l4_wait_omn20522.py: 56 failed, 5 passed. With the change: 212 passed across that file,tests/ci/test_external_verdict_supersession_omn18807.pyandtests/unit/scripts/ci/test_ci_summary_gate.py.Behaviour kept strict
details_url, a run absent from the list, a run withoutworkflow_idorstatus, another head, another event, another workflow: not held, so the red fails on the poll that observes it, as before.DEADLINE_MINUTES 130) and the exit-2 PENDING handling are untouched, so a sustained hold still becomes FAILURE at the deadline.Lab
Lab: h201 (omninode-pc), lane ci-summary-l4-wait, uv run pytest on the three focused files at 2e0c3b4 exit 0 (212 passed); the live poller path was not exercised on a lab runtime, the replay of the real case A and case B rows is the proof surface.
h201(hostnameomninode-pc)ci-summary-l4-wait2e0c3b4604uv run pytest tests/ci/test_ci_summary_l4_wait_omn20522.py tests/ci/test_external_verdict_supersession_omn18807.py tests/unit/scripts/ci/test_ci_summary_gate.py -q -n 0Not exercised
omnimarket(replacement_run_in_flight, #3039) andomnibase_infra(replacement_run_in_flight) already carry an equivalent hold, so no PR there.pre-commit run --all-filesreports a single-class-per-file violation forSprintRollJournalinsrc/omnibase_core/nodes/node_sprint_roll_apply_effect/runtime_sprint_roll_apply.py;mypyreports one unreachable-statement note at theparser.errorreturn in the gate'smain, present onorigin/devas well.Evidence-Ticket: OMN-20522
Evidence-Source: OCC#12773