Repository navigation
fix(OMN-18942): an unchanged finding inside the dedup window does not re-alert - #4000
Conversation
… re-alert Once the channel secrets were set (2026-09-23 10:43Z), every scheduled run of pr-ci-zombie-detector.yml re-posted the same unchanged findings (runs 35850665037, 35851297482, 35852673260): the evaluator posted whenever it had a finding and remembered nothing. - Each finding is keyed (repo, check). Unchanged-or-lower count inside the policy's alert_dedup_window_hours (24) since the last post is suppressed; new, worsened and window-expired findings post. Resolved keys are recorded, not posted, and dropped from state. - Prior state is the `alert_state` block of the previous completed run's nonrequired-check-report artifact, read through the Actions API with the already-minted App token (actions: read on this repo). No new credential. - Absent or unreadable prior state suppresses nothing: every finding posts with a marker, and the summary says why. - Every suppression is logged and tabled in the report and job summary. - A post is recorded only when Slack answers ok:true, so a refused post is retried next run rather than suppressed for a window. - The missing-destination refusal is unchanged and still fires when every finding is suppressed. Onex-Lane: omn18942-failure-sink-2315 Onex-Session: 3ff189d3b9964e82810ccf11dfe66592
…lise the job Self-review findings: an unfiltered lookup let a feature-branch dispatch read or seed the default branch alert state, and overlapping runs could each read the run before the other and re-post. The lookup now filters to GITHUB_REF_NAME and accepts an in-progress run with an uploaded report; the alerter job carries a concurrency group without cancel-in-progress. Onex-Lane: omn18942-failure-sink-2315 Onex-Session: 3ff189d3b9964e82810ccf11dfe66592
|
No OCC evidence companion was minted for this PR. product PR is a draft; companion suppressed (F-17) Matched in the state: 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 |
…ibase_infra#4000 (#10920) * evidence(OMN-18942): author OCC companion for OmniNode-ai/omnibase_infra#4000 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 903934905a120bca41640228d1bc21ae17c3e737. * evidence(OMN-18942): self-bind OCC#10920 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
|
| 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) | No |
Powered by omniintelligence.review_pairing.cli_review — multi-model adversarial review: qwen3-review, qwen3-review-b, glm-review (OMN-8468/OMN-8524/OMN-17492)
…era rows The head 9039349 carries cancelled draft-era check-runs that CI Summary judges before its own replacement jobs exist, twice (attempts 1 and 2 of run 35858399575). No content change. Onex-Lane: omn18942-failure-sink-2315 Onex-Session: 3ff189d3b9964e82810ccf11dfe66592
There was a problem hiding this comment.
Hostile Reviewer — adversarial findings (OMN-17492)
Models succeeded: glm-review
Models failed: codex
New finding threads: 0
Deduped (already posted on this PR): 0
Below quorum (one model only, reported not threaded): 6
Nit-level findings suppressed: 0
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]
scripts/ci/nonrequired_check_failure_rate.py: fetch_prior_alert_state / main(glm-review) — Branch filter keyed on GITHUB_REF_NAME diverges from concurrency ref scoping | The concurrency group serialises on github.ref, but the prior-state fetch filters run history by GITHUB_REF_NAME. For pul - [MAJOR]
scripts/ci/nonrequired_check_failure_rate.py: next_alert_state(glm-review) — Resolved keys are dropped from state even when delivery failed | next_alert_state guards the due findings' entries ondelivered, so a failed Slack post leaves them retried next run. Resolved keys, h - [MAJOR]
tests/ci/test_nonrequired_check_alert_dedup_omn18942.py(glm-review) — ScheduledAlert dedup path untested end to end | Every end-to-end harness run passes --no-scheduled, so the ScheduledAlert half (the 'scheduled|' key namespace, render_scheduled suppression, and the in - [MINOR]
scripts/ci/nonrequired_check_failure_rate.py: REPORT_ARTIFACT; .github/workflows/pr-ci-zombie-detector.yml(glm-review) — Artifact-as-state couples dedup correctness to report upload success | The design stores dedup state inside the report artifact uploaded by a separate workflow step. The script writes the report file, - [MINOR]
scripts/ci/nonrequired_check_failure_rate.py: fetch_prior_alert_state(glm-review) — Artifact zip downloaded without size bound | The artifact listing response includes size_in_bytes, which is not consulted before _gh_bytes pulls the entire zip into memory and json.loads the member. A - [MINOR]
scripts/ci/nonrequired_check_failure_rate.py: post_slack_alert(glm-review) — Lost Slack acknowledgement yields duplicate post, state then suppresses | post_slack_alert returns False on a urlopen exception. If the post actually reached Slack but the response read timed out (tim
…af18d9f4763cd27f__v1__run35849729150-1.yaml) (#10909) * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2765/8476e372f64bd68c670c9410af18d9f4763cd27f__v1__run35849729150-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35849729150-1 * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2767/9822bc67ed0d873afcd2d17b4002d1e7fd0514c8__v1__run35850160051-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35850160051-1 * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2801/370944b2e3e3035d7fb51819f6f6754694a58bac__v1__run35850129385-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35850129385-1 * evidence(OMN-18595): OCC Evidence-Source autobind for OmniNode-ai/omniclaude#2314 (#10906) * evidence(OMN-18595): author OCC companion for OmniNode-ai/omniclaude#2314 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 52e00abbdcecc21f899ee3d926e408f37ec885c5. * evidence(OMN-18595): self-bind OCC#10906 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2781/94aadb47dbe4da21eae3016c722f53b0b9bc61ef__v1__run35850221602-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35850221602-1 * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2802/4a278c06a98161ab5b170daf9d4c811ba9c53151__v1__run35850642935-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35850642935-1 * evidence(OMN-17374): record PR 2259 behavior proof (#10904) * evidence(OMN-17374): record PR 2259 behavior proof Record the existing dev migration and staging readbacks as manual AC4 evidence. Keep the receipt scoped to the recorded controls and checksum; do not claim M3 C19 is clear. * docs(OMN-17374): include reviewed PR body Carry the selfchecked evidence summary in the writer-App branch so the PR opens with the reviewed body. * evidence(OMN-18921): mint the owed OCC self-bind for PR #10904 * docs(OMN-17374): correct PR body paths Keep ticket links in prose while preserving literal repository paths for review. * docs(OMN-17374): correct verification paths in PR body Keep the ticket URL linked in prose while retaining literal contract paths in commands. * chore(OMN-17374): remove transient PR body file The writer App has already copied the reviewed text into the PR description; keep transport-only Markdown out of the repository tree. --------- Co-authored-by: Lakshman Patel <Lakshmanp230@gmail.com> Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com> * evidence(OMN-18955): OCC Evidence-Source autobind for OmniNode-ai/omnimarket#2801 (#10910) * evidence(OMN-18955): author OCC companion for OmniNode-ai/omnimarket#2801 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 370944b2e3e3035d7fb51819f6f6754694a58bac. * evidence(OMN-18955): self-bind OCC#10910 + rebind contract_sha256 * evidence(OMN-16859): executed test_passes receipts for OmniNode-ai/omnimarket#2801 The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited. Ticket: OMN-16859 (AC3b) Onex-Workflow: OCC Receipt Runner Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/35850100160 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com> * evidence(OMN-18595): OCC Evidence-Source autobind for OmniNode-ai/omnibase_infra#3970 (#10821) * evidence(OMN-18595): author OCC companion for OmniNode-ai/omnibase_infra#3970 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 6e6f4600cfd1dac5d59b607b1ff1c54b18a0e663. * evidence(OMN-18595): self-bind OCC#10821 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> * evidence(OMN-13902): OCC Evidence-Source autobind for OmniNode-ai/omniclaude#2313 (#10900) * evidence(OMN-13902): author OCC companion for OmniNode-ai/omniclaude#2313 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head db9673c22c6ed87494834f61f195306b7934248e. * evidence(OMN-13902): self-bind OCC#10900 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> Co-authored-by: jonahgabriel <jonah@omninode.ai> * evidence(OMN-19017): OCC Evidence-Source autobind for OmniNode-ai/omnimarket#2765 (#10911) * evidence(OMN-19017): author OCC companion for OmniNode-ai/omnimarket#2765 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 8476e372f64bd68c670c9410af18d9f4763cd27f. * evidence(OMN-19017): self-bind OCC#10911 + rebind contract_sha256 * evidence(OMN-16859): executed test_passes receipts for OmniNode-ai/omnimarket#2765 The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited. Ticket: OMN-16859 (AC3b) Onex-Workflow: OCC Receipt Runner Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/35850455072 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com> * evidence(OMN-17292): OCC companion for OmniNode-ai/omnibase_infra#3994 (#10901) * evidence: OCC companion pass 1 for OmniNode-ai/omnibase_infra#3994 * evidence: OCC companion self-bind for #10901 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> * evidence(OMN-18595): OCC Evidence-Source autobind for OmniNode-ai/omniintelligence#937 (#10913) * evidence(OMN-18595): author OCC companion for OmniNode-ai/omniintelligence#937 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 5652b4cc4d3a7cebfce8d77aad44a46128fd2c48. * evidence(OMN-18595): self-bind OCC#10913 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> * evidence(OMN-19235): OCC companion for OmniNode-ai/omniclaude#2315 (#10914) * evidence: OCC companion pass 1 for OmniNode-ai/omniclaude#2315 * evidence: OCC companion self-bind for #10914 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> * evidence(OMN-19091): OCC Evidence-Source autobind for OmniNode-ai/omnibase_infra#3946 (#10915) * evidence(OMN-19091): author OCC companion for OmniNode-ai/omnibase_infra#3946 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head d0fb927b221a36a85533f8bee9453ecb066548fb. * evidence(OMN-19091): self-bind OCC#10915 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2803/339fbd49abdf4083dc3c0a7c7f964c907e40f4f9__v1__run35855337780-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35855337780-1 * evidence(OMN-18202): OCC companion for OmniNode-ai/omnibase_infra#3998 (#10917) * evidence: OCC companion pass 1 for OmniNode-ai/omnibase_infra#3998 * evidence: OCC companion self-bind for #10917 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> * build(deps): bump the actions group with 8 updates (#10893) * build(deps): bump the actions group with 8 updates Bumps the actions group with 8 updates: | Package | From | To | | --- | --- | --- | | [OmniNode-ai/omniclaude/.github/workflows/advisory-job-gate-reusable.yml](https://github.com/omninode-ai/omniclaude) | `d062b74b1e60a3c86ec355d8736fa5d76c903c24` | `a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1` | | [actions/checkout](https://github.com/actions/checkout) | `4` | `7` | | [actions/setup-python](https://github.com/actions/setup-python) | `5` | `7` | | [OmniNode-ai/omniclaude/.github/workflows/route-runner-reusable.yml](https://github.com/omninode-ai/omniclaude) | `b6ba84ef6c9ba3f220204c3d672de1da5131132c` | `a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1` | | [OmniNode-ai/omnimarket/.github/workflows/merge-hold-gate-reusable.yml](https://github.com/omninode-ai/omnimarket) | `0.4.101` | `0.4.160` | | [OmniNode-ai/omnibase_core/.github/workflows/validate-docs.yml](https://github.com/omninode-ai/omnibase_core) | `3dc4716019b07b060bb8864fb1ab18ef615ef6a5` | `ad4374f48647fa432ced4cf198f979a097e8ac7c` | | [OmniNode-ai/omniclaude/.github/workflows/kb-doc-gate-reusable.yml](https://github.com/omninode-ai/omniclaude) | `1aaaa9fbd45f10b1e43101174d4adcdbade90761` | `a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1` | | [OmniNode-ai/omniclaude/.github/workflows/public-repo-hygiene-reusable.yml](https://github.com/omninode-ai/omniclaude) | `0e89d098a94680c5d4dd0d43e69b1960dcd86cff` | `a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1` | Updates `OmniNode-ai/omniclaude/.github/workflows/advisory-job-gate-reusable.yml` from d062b74b1e60a3c86ec355d8736fa5d76c903c24 to a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 - [Release notes](https://github.com/omninode-ai/omniclaude/releases) - [Changelog](https://github.com/OmniNode-ai/omniclaude/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omniclaude@d062b74...a58fb5e) Updates `actions/checkout` from 4 to 7 - [Release notes](https://github.com/actions/checkout/releases) - [Commits](actions/checkout@v4...v7) Updates `actions/setup-python` from 5 to 7 - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](actions/setup-python@v5...v7) Updates `OmniNode-ai/omniclaude/.github/workflows/route-runner-reusable.yml` from b6ba84ef6c9ba3f220204c3d672de1da5131132c to a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 - [Release notes](https://github.com/omninode-ai/omniclaude/releases) - [Changelog](https://github.com/OmniNode-ai/omniclaude/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omniclaude@b6ba84e...a58fb5e) Updates `OmniNode-ai/omnimarket/.github/workflows/merge-hold-gate-reusable.yml` from 0.4.101 to 0.4.160 - [Release notes](https://github.com/omninode-ai/omnimarket/releases) - [Commits](OmniNode-ai/omnimarket@71785e6...bf88396) Updates `OmniNode-ai/omnibase_core/.github/workflows/validate-docs.yml` from 3dc4716019b07b060bb8864fb1ab18ef615ef6a5 to ad4374f48647fa432ced4cf198f979a097e8ac7c - [Release notes](https://github.com/omninode-ai/omnibase_core/releases) - [Changelog](https://github.com/OmniNode-ai/omnibase_core/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omnibase_core@3dc4716...ad4374f) Updates `OmniNode-ai/omniclaude/.github/workflows/kb-doc-gate-reusable.yml` from 1aaaa9fbd45f10b1e43101174d4adcdbade90761 to a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 - [Release notes](https://github.com/omninode-ai/omniclaude/releases) - [Changelog](https://github.com/OmniNode-ai/omniclaude/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omniclaude@1aaaa9f...a58fb5e) Updates `OmniNode-ai/omniclaude/.github/workflows/public-repo-hygiene-reusable.yml` from 0e89d098a94680c5d4dd0d43e69b1960dcd86cff to a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 - [Release notes](https://github.com/omninode-ai/omniclaude/releases) - [Changelog](https://github.com/OmniNode-ai/omniclaude/blob/dev/CHANGELOG.md) - [Commits](OmniNode-ai/omniclaude@0e89d09...a58fb5e) --- updated-dependencies: - dependency-name: OmniNode-ai/omniclaude/.github/workflows/advisory-job-gate-reusable.yml dependency-version: a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 dependency-type: direct:production dependency-group: actions - dependency-name: actions/checkout dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: actions/setup-python dependency-version: '7' dependency-type: direct:production update-type: version-update:semver-major dependency-group: actions - dependency-name: OmniNode-ai/omniclaude/.github/workflows/route-runner-reusable.yml dependency-version: a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 dependency-type: direct:production dependency-group: actions - dependency-name: OmniNode-ai/omnimarket/.github/workflows/merge-hold-gate-reusable.yml dependency-version: 0.4.160 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: actions - dependency-name: OmniNode-ai/omnibase_core/.github/workflows/validate-docs.yml dependency-version: ad4374f48647fa432ced4cf198f979a097e8ac7c dependency-type: direct:production dependency-group: actions - dependency-name: OmniNode-ai/omniclaude/.github/workflows/kb-doc-gate-reusable.yml dependency-version: a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 dependency-type: direct:production dependency-group: actions - dependency-name: OmniNode-ai/omniclaude/.github/workflows/public-repo-hygiene-reusable.yml dependency-version: a58fb5eab5ae66a8e7fcb7f6bcac8c3e48632ee1 dependency-type: direct:production dependency-group: actions ... Signed-off-by: dependabot[bot] <support@github.com> * fix(OMN-17427): repin vocabulary_ref to match merge-hold-gate uses: ref The actions-group dependabot bump moved merge-hold-gate-reusable.yml's uses: pin to bf88396b (omnimarket dev, OMN-18205 lineage) but left vocabulary_ref at the prior pin (71785e6e), tripping check-merge-hold-gate-wiring (OMN-15484): uses: and vocabulary_ref must name the same ref. Repin vocabulary_ref to bf88396b, a verified ancestor of omnimarket dev. --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jonah Gray <jonah@omninode.ai> * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2765/98c8bc8bbfd518b69fb895178a735fc8163a0b65__v1__run35857078444-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35857078444-1 * evidence(OMN-18874): OCC companion for OmniNode-ai/omniclaude#2316 (#10919) * evidence: OCC companion pass 1 for OmniNode-ai/omniclaude#2316 * evidence: OCC companion self-bind for #10919 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> * evidence(OMN-18942): OCC Evidence-Source autobind for OmniNode-ai/omnibase_infra#4000 (#10920) * evidence(OMN-18942): author OCC companion for OmniNode-ai/omnibase_infra#4000 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 903934905a120bca41640228d1bc21ae17c3e737. * evidence(OMN-18942): self-bind OCC#10920 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai> * evidence(OMN-19229): OCC companion for OmniNode-ai/omniclaude#2317 (#10921) * evidence: OCC companion pass 1 for OmniNode-ai/omniclaude#2317 * evidence: OCC companion self-bind for #10921 --------- Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2804/c1b2ca1f9d7b107831a077e8c855bc99a121f752__v1__run35859722005-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35859722005-1 * evidence(OMN-15359): retire the four broken supersessions append-only (#10916) * evidence(OMN-15359): retire the four broken supersessions append-only dod_verify on OMN-15359 has failed 4 checks since the 2026-09-05 closeout (Linear comment 585f8390), and none of them are product reds. Three items name supersession targets that were never added to the contract (DANGLING_SUPERSESSION), and dod-occ-evidence-validator-pr-2674 is non-probative, so the supersession it declares never took effect and the original PR #2674 binding, whose open head no longer exists, runs and fails. Editing those items is not an option under the append-only gate. The verifier already provides the repair (OMN-15708): a LATER item that verifies in its own right retires the earlier one, whatever that item's own marker says. So this appends four items, each binding the real final state: PR #2674 merged at head 087567ca / merge 82c6381a (twice, one per stale binding), the source-level proof re-read at the merge commit, and OCC PR #6253 merged at head 0495f7f / merge 8c4bf7f. Each check was run, and fails when one pinned fact is changed. Receipts carry the real probe output. dod_verify: 4 failed -> 0 failed; the retired items stay in the contract for audit. No claim is made about OMN-15359's acceptance criteria. * evidence(OMN-18921): mint the owed OCC self-bind for PR #10916 --------- Co-authored-by: Lakshman Patel <Lakshmanp230@gmail.com> Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com> * evidence(OMN-14888): OCC observation append (8c3b5c30e8a79135ef24451323f9d2f6cb6140e0__v1__run35857095811-1.yaml) (#10918) * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2803/8c3b5c30e8a79135ef24451323f9d2f6cb6140e0__v1__run35857095811-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35857095811-1 --------- Co-authored-by: node-occ-observation-effect <occ-observation-effect@omninode.ai> * evidence(OMN-14888): OCC observation append drift/occ_observations/OmniNode-ai__omnimarket/pr-2805/c8b19453c42e7e4273c249d75ed82b1afd0a4032__v1__run35864001256-1.yaml * evidence(OMN-14888): OCC observation self-bind occ-observation-run35864001256-1 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: node-occ-observation-effect <occ-observation-effect@omninode.ai> Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com> Co-authored-by: omnimarket-bot <bot@omninode.ai> Co-authored-by: Lakshman Patel <Lakshmanp230@gmail.com> Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com> Co-authored-by: jonahgabriel <jonah@omninode.ai> Co-authored-by: node-occ-companion-effect <occ-companion-effect@omninode.ai> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Summary
OMN-18942, the dedup-window acceptance criterion (AC-3).
Measured 2026-09-23.
SLACK_BOT_TOKEN/SLACK_CHANNEL_IDwere set on this repository at 10:43Z. After that, every scheduled run ofpr-ci-zombie-detector.ymlre-posted the same unchanged findings to the channel (runs 35850665037 10:46Z, 35851297482 10:53Z, 35852673260 11:07Z). Atorigin/devc159b71 the evaluator calledpost_slack_alert(combined_alerts)whenever there was a finding. It kept no prior-alert state, had no window, and recorded no suppression.Behaviour
(repo, check)for the pull-request half ((repo, workflow)for the scheduled half, which this job does not run).alert_dedup_window_hours. Each suppression is logged (SUPPRESSED <key> failures=... window until ...), listed underdedup.suppressedin the report artifact, and shown as a row in a "Alert dedup (OMN-18942)" job-summary table. It also raises no::warningannotation.worsened a->b), or an expired window. The message names how many unchanged findings it suppressed.route.nonrequired_check_alert.alert_dedup_window_hours(rule 8, no default). The justification is in the policy comment: an unchanged non-required-check failure is a triage item, not a page. Once a day keeps it visible, and any worsening re-posts at once. 6h (the.201reporter's cadence) would put four copies a day in the channel for a class that blocks nothing.State store and failure direction
nonrequired-check-reportartifact. Each report now carriesalert_state. The next run lists this workflow's runs on its own ref (GITHUB_REF_NAME) through the Actions API, skips itself, takes the newest run with an unexpired report artifact, downloads the zip, and readsalert_state. The read usesGH_TOKEN, the App token the job already mints withpermission-actions: readon this repository. There is no new credential and no workflowpermissions:change. The same file that suppresses also records the suppression, so no second store can drift from the evidence.::warningannotation, and the summary says why. A duplicate post is noise; a wrongly suppressed one is the silent-gate defect.ok:false. The post now counts only onok:true. Otherwise the state is not advanced and the finding is retried on the next run instead of being suppressed for a window.resolve_destinationis checked whenever there is a finding, including when every finding is suppressed, so findings with no destination still exit 1.Out of scope
Classification: not runtime-affecting
This is CI tooling: one workflow, one
scripts/cievaluator, and a policy key read only by that evaluator and the.201probe (which readsfailure_thresholdonly). I asked the rebuild trigger itself (trigger_rebuild_on_merge.py --dry-runover this diff's files):No rebuild trigger: no runtime_change label or runtime path changes detected.The positive control onsrc/omnibase_infra/runtime/service_kernel.pyreturnsRuntime change detected. So rule 24's lab pass does not apply. The proof is the focused tests plus a live read-only run against the real Actions API, below, and the post-merge scheduled runs.Lab readback
OmniNode-ai/omnibase_infra, read-only,--dry-run(no post).GITHUB_REF_NAME=dev GITHUB_REPOSITORY=OmniNode-ai/omnibase_infra GITHUB_RUN_ID=0 uv run python scripts/ci/nonrequired_check_failure_rate.py --owner OmniNode-ai --repo omnibase_infra --no-scheduled --policy config/runner_routing_policy.yaml --report <scratch>/report.json --prior-state-workflow pr-ci-zombie-detector.yml --dry-runabsent: prior report predates alert state (no alert_state key). Three live findings were markedduewith reasonprior_state_absent. The summary renderedDelivered: dry run, nothing sent and no state advancedand aDUEtable with|escaped.absentand posts once. That post is the first carryingalert_state. Every later run inside 24h with unchanged counts should logSUPPRESSEDand post nothing.Tests
tests/ci/test_nonrequired_check_alert_dedup_omn18942.py: 26 tests, written RED first againstorigin/devc159b71 (20 of 20 failed at the time of writing). They drive the realmain()with_gh_json,_gh_bytesandurlopenreplaced at the module boundary:worsened 3->4.absent.ok:falsefrom Slack does not advance the state; a missing destination still exits 1 when everything is suppressed.|.--prior-state-workflow, scopes to the ref, is serialised, and rides the App token withactions: read.Focused run, all evaluator suites:
uv run pytest tests/ci/test_nonrequired_check_alert_dedup_omn18942.py tests/ci/test_nonrequired_check_failure_rate_omn18254.py tests/ci/test_scheduled_run_failure_rate_omn18322.py tests/unit/scripts/test_fleet_failure_sink_omn18942.py tests/ci/test_alert_token_source_omn18254.py tests/ci/test_incident_replay_omn18254.py tests/ci/test_ci_evidence_policy.py: 152 passed.mypy --strictis clean on the script, andpre-commit run --all-filesis clean.Evidence-Ticket: OMN-18942
Evidence-Source: OCC#10920