Skip to content

ci(OMN-19640): cancel superseded pull request runs in 5 workflows - #4142

Merged
jonahgabriel merged 2 commits into
devfrom
jonah/omn-19640-cancel-superseded-pr-runs
Sep 26, 2026
Merged

jonahgabriel merged 2 commits into
devfrom
jonah/omn-19640-cancel-superseded-pr-runs

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Sep 25, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Adds PR-scoped concurrency to 5 workflows. Pull-request runs group by PR number with SHA fallback; only pull-request runs cancel superseded work. Push, merge-group, scheduled, and manually dispatched runs remain non-cancelling.

Ticket: OMN-19640
Ruling: 2026-09-25T17:30:10Z

Workflows changed

  • .github/workflows/contract-topic-graph.yml
  • .github/workflows/governed-helper-primitive-gate.yml
  • .github/workflows/kb-doc-gate.yml
  • .github/workflows/public-repo-hygiene.yml
  • .github/workflows/runner-route-probe.yml

Workflows skipped

  • docker-build.yml — aggregator (build-summary); deferred to the own-job cancelled-supersession grace wave.
  • arm64-verify-runner-proof.yml — existing top-level concurrency block; semantics preserved.
  • artifact-reconciliation-webhook.yml — existing top-level concurrency block; semantics preserved.
  • auto-tag-on-merge.yml — existing top-level concurrency block; semantics preserved.
  • contractor-integration-note.yml — existing top-level concurrency block; semantics preserved.
  • delegation-consumer-kwarg-parity.yml — existing top-level concurrency block; semantics preserved.
  • delegation-seam-gate.yml — existing top-level concurrency block; semantics preserved.
  • dispatch-parity-gate.yml — existing top-level concurrency block; semantics preserved.
  • runner-image-build-smoke.yml — existing top-level concurrency block; semantics preserved.
  • s6-runtime-seam-gate.yml — existing top-level concurrency block; semantics preserved.
  • shared-env-runner-parity.yml — existing top-level concurrency block; semantics preserved.

Verification

  • actionlint: passed on every changed workflow.
  • Repository-configured yamllint: not present.
  • No repository-local focused workflow-shape test matched these five workflows.
  • Changed-file pre-commit: passed.
  • Commit hooks: passed.
  • Pre-push hooks: passed.
  • Touched-file actionlint cleanup was included where required.

Evidence-Ticket: OMN-19640
Evidence-Source: OCC#11368

@jonahgabriel jonahgabriel added the hold:auto-merge Holds auto-merge (check_auto_merge_hold.py); remove to release label Sep 25, 2026
@onexbot-occ-writer

Copy link
Copy Markdown
Contributor

No OCC evidence companion was minted for this PR.

product PR is a draft; companion suppressed (F-17)

Matched in the state: draft

To clear this: Mark the PR ready for review. The ready_for_review trigger re-fires the born path and the companion mints then.

Reported by node_occ_companion_effect (decline code pr_draft, OMN-16665). This decision was made against the PR's LIVE state at compute time, not at publish time — a green publisher job only means the command reached the broker.

@jonahgabriel
jonahgabriel marked this pull request as ready for review September 25, 2026 21:25
@onexbot-occ-writer

Copy link
Copy Markdown
Contributor

OCC autobind did not mint a companion for this PR: no changed-file candidate could be proven RED against the merge base, and emitting a PR-existence probe instead would be non-falsifiable evidence (OMN-15247). Hand-authored evidence is required.

jonahgabriel pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 25, 2026
#11368)

* evidence: OCC companion pass 1 for OmniNode-ai/omnibase_infra#4142

* evidence: OCC companion self-bind for #11368

---------

Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai>

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hostile Reviewer — adversarial findings (OMN-17492)

Models succeeded: qwen3-review, qwen3-review-b, glm-review
Models failed: none
New finding threads: 3
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 3
Nit-level findings suppressed: 4

The model is the FINDER, never the gate: merge is gated only by the
deterministic Hostile Review Thread Gate, which blocks while
hostile-reviewer threads are unresolved. Resolve each thread after
addressing (or rejecting, with a reply) its finding.

Below quorum: 3 finding(s) raised by one model only (OMN-18479)

These are reported and NOT dropped, but they get no thread and do not block: a single model's finding no other model reproduced is not evidence enough to stop a merge. Read them; act on them if they are right.

  • [MAJOR] .github/workflows/contract-topic-graph.yml, governed-helper-primitive-gate.yml, kb-doc-gate.yml, public-repo-hygiene.yml, runner-route-probe.yml (glm-review) — Push events to PR branches are never cancelled | The concurrency group key falls back to github.sha for non-pull_request events, so every push to a PR source branch receives a unique group and cancel-
  • [MINOR] .github/workflows/ (qwen3-review-b) — Concurrency block not added to all workflows that trigger on pull_request | The diff adds the concurrency block to five workflow files. If there are other workflow files in the repository that trigger
  • [MINOR] .github/workflows/runner-route-probe.yml, lines ~116-124 (glm-review) — Fallback block writes decision=hosted regardless of captured rc | Within the changed hunk, rc is captured via || rc=$? but the fallback block unconditionally writes decision=hosted and reason=probe_

Findings not anchored to a changed file

  • [MAJOR] hostile-reviewer (qwen3-review)

    Concurrency group collides across distinct PRs on push events | The concurrency group expression uses github.event.pull_request.number || github.sha. For push events, github.event.pull_request.number is empty, so the group resolves to <workflow-name>-<sha>. If two different pull requests are merged into the same branch (or if a push is made to a branch that is also targeted by an open PR), the resulting SHA is identical, causing the concurrency group to collide. This means a push-triggered run could

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MAJOR] hostile-reviewer (qwen3-review)

    cancel-in-progress is true for all pull_request events, not just superseded ones | The cancel-in-progress expression evaluates to true for any pull_request event. This means that when a new commit is pushed to an existing PR, the previous run is cancelled. However, if a PR is opened and then a different PR is opened against the same branch, the concurrency group for the new PR (based on its own number) will not cancel the old PR's run, which is correct. But the expression does not distinguish between

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MAJOR] hostile-reviewer (qwen3-review-b)

    Concurrency group key collision between push and pull_request events | The concurrency group is constructed as ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}. For push events, github.event.pull_request.number is empty, so the key falls back to github.sha. For pull_request events, the key is the PR number. This means a push to a branch and a pull request from that same branch will have different concurrency groups, which is intended. However, the cancel-in-progress e

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

Findings demoted from threads (anchor rejected)

  • [MINOR] hostile-reviewer (qwen3-review)

    Grouped echo to GITHUB_OUTPUT may be less readable but is functionally equivalent | The change from three separate echo ... >> "${GITHUB_OUTPUT}" statements to a single grouped { echo ...; echo ...; echo ...; } >> "${GITHUB_OUTPUT}" is functionally equivalent in bash. However, the grouped form is less common and may reduce readability. More importantly, if any of the echo commands fail (e.g., due to a broken pipe or permission issue), the grouped form will still redirect the entire block's output, whi

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MINOR] hostile-reviewer (qwen3-review-b)

    Grouped echo to GITHUB_OUTPUT may produce malformed output on some runners | The change in runner-route-probe.yml replaces three separate echo ... >> "${GITHUB_OUTPUT}" statements with a single grouped block { echo ...; echo ...; echo ...; } >> "${GITHUB_OUTPUT}". While functionally equivalent in bash, the grouped form writes all three lines in a single redirection. If the shell implementation or runner environment has any buffering or atomicity differences, this could theoretically affect how GitHub Ac

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MINOR] hostile-reviewer (glm-review)

    Concurrency cancellation can truncate the runner-route-probe fallback path mid-write | The runner-route-probe workflow is now subject to cancel-in-progress. If a run is cancelled between the probe failing and the fallback block appending to GITHUB_OUTPUT, or mid-job after routing outputs are written but before the refusal exit is honored, downstream consumer jobs get skipped rather than completing with an explicit refusal. For workflows whose outputs feed routing decisions, silent cancellation substitutes '

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

✅ Hostile Reviewer — REVIEWED

Critical findings: 0
Major findings: 3
Total findings: 12
Models succeeded: qwen3-review,qwen3-review-b,glm-review

Action required: findings were posted as review threads. Address or reject each one, then resolve its thread — the Hostile Review Thread Gate fails while hostile-reviewer threads are unresolved (OMN-17492).


Semantics (OMN-17492 — the model finds, thread resolution gates)

Surface Meaning Blocks merge?
Review threads Per-finding, posted by the reviewer No (informational)
Hostile Review Thread Gate Deterministic: unresolved hostile-reviewer threads exist Fails until resolved (not yet a required context)
degraded verdict Fewer than 2 models succeeded (infra) Fails this job with a named reason

Powered by omniintelligence.review_pairing.cli_review — multi-model adversarial review: qwen3-review, qwen3-review-b, glm-review (OMN-8468/OMN-8524/OMN-17492)

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hostile Reviewer — adversarial findings (OMN-17492)

Models succeeded: qwen3-review, qwen3-review-b, glm-review
Models failed: none
New finding threads: 0
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 6
Nit-level findings suppressed: 4

The model is the FINDER, never the gate: merge is gated only by the
deterministic Hostile Review Thread Gate, which blocks while
hostile-reviewer threads are unresolved. Resolve each thread after
addressing (or rejecting, with a reply) its finding.

Below quorum: 6 finding(s) raised by one model only (OMN-18479)

These are reported and NOT dropped, but they get no thread and do not block: a single model's finding no other model reproduced is not evidence enough to stop a merge. Read them; act on them if they are right.

  • [MAJOR] .github/workflows/contract-topic-graph.yml, .github/workflows/governed-helper-primitive-gate.yml, .github/workflows/kb-doc-gate.yml, .github/workflows/public-repo-hygiene.yml, .github/workflows/runner-route-probe.yml (qwen3-review) — Concurrency group lacks workflow isolation, causing cross-workflow cancellation | The concurrency group is defined as ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}. Th
  • [MINOR] .github/workflows/contract-topic-graph.yml, .github/workflows/governed-helper-primitive-gate.yml, .github/workflows/kb-doc-gate.yml, .github/workflows/public-repo-hygiene.yml, .github/workflows/runner-route-probe.yml (qwen3-review-b) — Concurrency group does not include branch, allowing cross-branch cancellation | The concurrency group is ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}. For pull_reques
  • [MINOR] .github/workflows/runner-route-probe.yml (qwen3-review-b) — Shell block for GITHUB_OUTPUT may not handle multi-line values correctly | The change in runner-route-probe.yml replaces three separate echo commands with a single shell block `{ echo ...; echo ..
  • [MINOR] .github/workflows/contract-topic-graph.yml, governed-helper-primitive-gate.yml, kb-doc-gate.yml, public-repo-hygiene.yml, runner-route-probe.yml (glm-review) — Concurrency group conflates trigger semantics via fallback | The group expression github.event.pull_request.number || github.sha gives PR runs a per-PR group and all other events a per-SHA group. Be
  • [MINOR] .github/workflows/kb-doc-gate.yml, .github/workflows/public-repo-hygiene.yml (glm-review) — Cancellation can interrupt runs whose artifacts gate merges | cancel-in-progress: true on pull_request cancels any in-flight run for the same PR number when a new event (synchronize, edited, labeled,
  • [MINOR] .github/workflows/runner-route-probe.yml, probe fallback block (glm-review) — Runner probe fallback refactor untested for output atomicity | The refactor of the three echo >> ${GITHUB_OUTPUT} statements into a brace group changes failure semantics: previously, if the first ec

Findings not anchored to a changed file

  • [MAJOR] hostile-reviewer (qwen3-review)

    Shell redirection precedence causes unintended file overwrite | In the runner-route-probe.yml change, the block { echo ...; echo ...; echo ...; } >> "${GITHUB_OUTPUT}" is used. In POSIX shell, the redirection operator >> applies to the entire compound command block. This means the shell will open the file, truncate it (or append, depending on the exact semantics, but typically >> appends), and then execute the commands. However, the critical issue is that if this block is intended to append to a file

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

  • [MAJOR] hostile-reviewer (qwen3-review-b)

    Concurrency group collision between push and PR events | The concurrency group uses github.event.pull_request.number || github.sha. For push events, github.event.pull_request.number is null, so the group becomes <workflow>-<sha>. For pull_request events, it becomes <workflow>-<pr_number>. This is correct for isolation. However, the cancel-in-progress expression is ${{ github.event_name == 'pull_request' }}. This evaluates to the string true or false. GitHub Actions expects a boolean. While Y

    Resolve this thread when addressed — the Hostile Review Thread Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

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

Labels

hold:auto-merge Holds auto-merge (check_auto_merge_hold.py); remove to release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant