Repository navigation
fix(OMN-16700): restore the OCC manual-replay precheck + gate workflow script refs - #196
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. Every manual OCC replay dispatched here died at `[Errno 2] No such file or directory` (run 33001337186) before the precheck could decide anything -- the sanctioned recovery path for a missed mint was a dead end. Two changes: 1. `scripts/ci/occ_manual_replay_precheck.py`, ported from 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.
jonahgabriel
pushed a commit
to OmniNode-ai/onex_change_control
that referenced
this pull request
Aug 27, 2026
…ibase_compat#196 (#7252) * evidence(OMN-16700): author OCC companion for OmniNode-ai/omnibase_compat#196 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 9cb6c54b437018e31973e5c1220346efc02bd5be. * evidence(OMN-16700): self-bind OCC#7252 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
This was referenced Sep 14, 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-16700 — 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.One formatting-only delta from the omniclaude source: this repo's
ruff formatconfig joins the two-line f-string at the end of
main()onto one line. The ASTsare identical (verified with
ast.dump); the alternative was excluding the filefrom the repo's own formatter, which is a bypass. Recorded here so a future
content-drift check has the reason.
This is the repo whose failing run 33001337186 is the filed evidence on OMN-16664.
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-16700 and on OMN-16664.
Evidence-Ticket: OMN-16700
Evidence-Source: OCC#7252