Repository navigation
fix(OMN-16697): restore the OCC manual-replay precheck + gate workflow script refs - #280
Merged
Merged
Conversation
…w script refs `.github/workflows/call-occ-autobind.yml` and `call-occ-companion-effect.yml` both run `python3 scripts/ci/occ_manual_replay_precheck.py pr_state.json`, and that script has never existed in this repo. Any manual OCC replay dispatched here dies at `[Errno 2] No such file or directory` before the precheck can decide anything -- the sanctioned recovery path for a missed mint is a dead end here. Two changes: 1. `scripts/ci/occ_manual_replay_precheck.py`, byte-identical to the canonical omniclaude copy (OMN-14993 origin in omnibase_infra#2411, hardened by OMN-15393 in omniclaude#1962). 2. A standing guard -- `tests/ci/test_workflow_script_refs_exist.py` plus the `Workflow Script Reference Gate` CI job and a matching pre-commit hook -- asserting that every `scripts/**` path a `run:` step executes from the repo root exists in the tree. Detection alone would not have prevented this; the gate is wired on both surfaces in this PR (Operating Rule #5).
|
Warning Review limit reachedNext included review available in 51 minutes. View limit detailsLimit details: You’ve used the included review currently available. Your 126 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 |
The gate job runs in a bare env with only pytest and pyyaml. Two repo-level pytest settings broke it for reasons unrelated to workflow script paths: tests/conftest.py imports omnibase_core (ModuleNotFoundError, exit 4), and pyproject combines --strict-config with pytest-asyncio config keys, so zero tests run while collection still reports 12. --noconftest and -c /dev/null detach both. The module resolves its repo root from __file__, so nothing it checks changes.
onexbot-occ-writer Bot
pushed a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Aug 27, 2026
…i#280 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head b2bf26415541b321d5a9e09b461eed0040804d03.
jonahgabriel
pushed a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Aug 27, 2026
…ibase_spi#280 (#7250) * evidence(OMN-16697): author OCC companion for OmniNode-ai/omnibase_spi#280 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head b2bf26415541b321d5a9e09b461eed0040804d03. * evidence(OMN-16697): self-bind OCC#7250 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
This was referenced Sep 15, 2026
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.
OMN-16697 — the OCC manual-replay entrypoint is a dead end in this repo
Parent: OMN-16664. Split per-repo because OMN-16664 already carries a merged OCC
companion (onex_change_control#7242, for omnimemory#449); a second PR citing it
would re-mint into the same
contracts/OMN-16664.yamlcohort, which is thecollision that closed OCC#7240 CONFLICTING on 2026-08-27.
Observed
.github/workflows/call-occ-autobind.ymlandcall-occ-companion-effect.ymleach run:
scripts/ci/occ_manual_replay_precheck.pydoes not exist anywhere in thisrepo's
dev. Live shape from the sibling repos where it was dispatched:(omnibase_compat run 33001337186; omnimemory run 33019346585.)
It fails CLOSED — the publish step never runs, so nothing bad reaches the bus —
but the only sanctioned recovery path when the OCC born path misses a mint has
been unavailable in this repo since the OMN-15017 fan-out, which copied the
workflow files without carrying the script they call.
Change 1 — the script (AC1)
Ported from omniclaude@dev
scripts/ci/occ_manual_replay_precheck.py(blob
3d53ed9, sha2560a9899f5f9c44785...).Provenance, since four divergent copies exist across the org and the parent
ticket asks which is canonical:
ManualReplayInputError: a malformed or truncatedpr_state.jsonexits 2 instead of reading as OPEN-and-non-draft and publishing--allow-merged-replayomniclaude's is the port source: it descends from the OMN-14993 original, is a
strict superset on the fail-closed axis, and takes the same single positional
argument this repo's workflows pass. omnimemory's
--allow-merged-replayisdeliberately not carried — the workflows here expose no such input, so its
refusal text would tell an operator to set a flag that does not exist.
Change 2 — the standing guard (AC4)
A gate, not a one-time fan-out.
tests/ci/test_workflow_script_refs_exist.pystatically asserts that every
scripts/**path arun:step executes fromthe repository root exists in the tree, wired on both surfaces in this same
PR (Operating Rule #5):
.github/workflows/workflow-script-refs.yml, jobWorkflow Script Reference Gate. Unconditional: nopaths:filter and noif:, so it is eligible to be added torequired_status_checksondev.workflow-script-refs, on^(\.github/workflows/.*\.ya?ml|scripts/.*)$.Two blind spots are deliberate, unit-tested, and printed on every run rather
than left silent:
working-directory(the OCC publish step runsscripts/publish_occ_autobind_command.pyinside the.occ-autobind-srccheckout of omnimarket — a claim about omnimarket's tree, not this one);
actions/checkoutthat names arepository:and lands atthe workspace root (
cr-thread-gate.ymlchecks omniclaude out at root and thenruns
scripts/check-unresolved-threads.sh, which is omniclaude's file). Thiscase was found because the first draft of the gate flagged it as a violation;
the extractor was corrected rather than the finding suppressed.
The extractor is unit-tested against synthetic workflows with known answers,
positive and negative, and a vacuity test fails if the real tree yields zero
references — a silently-non-matching extractor would otherwise pass every
existence assertion forever, the same shape as the bug it guards against.
Local proof (RED, then GREEN)
The pre-commit hook was exercised the same way and refused in the same
direction.
pre-commit run --all-filesgreen.The copy is byte-identical to the omniclaude source (sha256 match verified after
this repo's own ruff and SPDX hooks ran).
dod_evidence
defect and passes once the script is present.
workflow_dispatchreplay reaching the precheck and deciding,rather than dying on a missing file) is executed against this repo after this
PR lands; the run link is recorded on OMN-16697 and on OMN-16664.
Evidence-Ticket: OMN-16697
Evidence-Source: OCC#7250