Repository navigation
fix(OMN-16845): export OMNI_HOME in evidence-autoclose-sweep.yml so cwd-anchored dod_verify checks resolve - #2970
Conversation
…wd-anchored dod_verify checks resolve
The job never exported OMNI_HOME, so EvidenceCollector._resolve_cwd rendered
every `cwd: "${OMNI_HOME}/omnibase_infra"` check to `/omnibase_infra` (which
never exists) and recorded it FAILED instead of verified. Proven by execution
both directions: `env -u OMNI_HOME` against the job's env shape reproduces
`failed: 3, behavior_proving_count: 0`; the same run with OMNI_HOME set
reproduces `verified, failed: 0, behavior_proving_count: 3`.
GitHub Actions checks a repo out to `<work>/<repo>/<repo>` (the documented
github.workspace convention), so github.workspace's own parent directory
already satisfies `${OMNI_HOME}/omnibase_infra == github.workspace` with the
real checkout — no symlink (which _resolve_cwd's containment check would
reject anyway) and no second checkout. A new step derives and exports that
path via GITHUB_ENV, fail-fast: it asserts the derived path actually places
omnibase_infra at github.workspace before exporting, erroring loudly instead
of exporting an unverified guess.
Adds a workflow-lint test (mirroring test_omn_16792_kill_switch_wiring.py)
asserting a step exports OMNI_HOME to $GITHUB_ENV before every dod_verify /
evidence_autoclose_sweep invocation, and that the export step fails fast
rather than silently defaulting. Confirmed RED against the unfixed workflow,
GREEN after.
OMN-16845
|
Warning Review limit reachedNext included review available in 9 minutes. View limit detailsLimit details: You’ve used the included review currently available. Your 131 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 (2)
Comment |
|
| Verdict | Meaning | Blocks merge? |
|---|---|---|
passed |
No critical findings | No |
blocked |
CRITICAL findings found | Yes |
degraded |
All models unavailable (infra) | No (pilot) |
Powered by omniintelligence.review_pairing.cli_review — multi-model adversarial review (OMN-8468/OMN-8524)
…ibase_infra#2970 (#7426) * evidence(OMN-16845): author OCC companion for OmniNode-ai/omnibase_infra#2970 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 5d5abc052fafe7924b4d344dda9756ff4b6680b5. * evidence(OMN-16845): self-bind OCC#7426 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
… block on infra (#2973) OMN-16876 census item 2. Both checks ran on every omnibase_infra PR and could not block a merge. That is sharper here than in any other repo: `dev` requires exactly ONE status check, "CI Summary" (the OMN-4497 single-umbrella design), so EXPECTED_EXTERNAL_CONTEXTS in scripts/ci/ci_summary_gate.py IS the entire external enforcement surface. A context missing from that tuple has no second surface to fall back on and no branch-protection signal that it is missing. Both entries close a Done ticket that live state contradicts: - OMN-13328 ("receipt-honesty REQUIRED on all repos that produce receipts") -- its OCC contract asserted omnibase_infra, omniclaude and omnimarket "were already flipped". Live readback 2026-08-28: none of the three was enforced on any surface. - OMN-13326 ("contract-validation REQUIRED across all 6 repos") -- genuinely required on omnibase_core, omnibase_compat, omnibase_spi, omniintelligence and omnidash; wired on neither omnibase_infra nor omniclaude. Admission, measured not assumed: - #2955..#2970 (2026-08-28): 16/16 present, 16/16 green for both. - Backfilled BOTH existing merge-time fixtures with real API reads under the fixtures own merge-time filter (started_at <= mergedAt), not synthesised rows: omn15496 (#2546..#2567) and omn15979 (#2705..#2720). The second window independently measured 32/32 present, 32/32 green across both contexts. Three independent windows agree; no freeze-baseline ratchet is indicated. Non-vacuity (OMN-16876 finding 5) -- 16/16 green is also exactly the vacuous pass shape, so each was proven able to FAIL on real input: receipt-honesty gamed receipt (verifier == runner) -> exit 1; real -> 0 contract-validation schema-invalid contract -> exit 1; OMN-10041.yaml -> 0 Both producers declare pull_request AND merge_group and carry no `needs:` and no job-level `if:`, so no upstream failure can skip them; and this layer admits only "success", so a skip fails closed rather than passing. Evidence-Source: OCC#7433
Summary
evidence-autoclose-sweep.ymlnever exportedOMNI_HOME.EvidenceCollector._resolve_cwd(omnimarket) renders${OMNI_HOME}from the process environment and requires the rendered path to exist, so every check pinnedcwd: "${OMNI_HOME}/omnibase_infra"rendered to/omnibase_infra(never exists) and was recorded FAILED instead of verified — silently, sinceONEX_CC_REPO_PATHwas already set, so contract resolution itself never surfaced as broken.Proven by execution, both directions, against the job's own env shape:
Same invocation with
OMNI_HOMEset:status: verified failed: 0 behavior_proving_count: 3.This is load-bearing right now: OMN-16434 (merged 2026-08-28) made
render_behavior_proof_dod_evidence_itemmint diff-derived behavior checks automatically withcwd: "${OMNI_HOME}/<product repo>"on every future OCC companion, so the rate of contracts carrying this exact guaranteed-CI-failing check goes up from here, not down.Fix
GitHub Actions checks a repo out to
<runner-work-dir>/<repo>/<repo>(the documentedgithub.workspaceconvention — GitHub's own docs give/home/runner/work/my-repo-name/my-repo-nameas the canonical example). Sogithub.workspace's own parent directory already satisfies${OMNI_HOME}/omnibase_infra == github.workspaceexactly, using the real checkout — no symlink, no second checkout.A symlink farm was considered and rejected:
_resolve_cwd's containment check (candidate.is_relative_to(OMNI_HOME), evaluated afterPath.resolve()) follows a symlink to its real target and rejects it if that target sits outsideOMNI_HOME. A fabricatedOMNI_HOMEcontaining a symlink pointing at the real checkout (which would live outside it) would fail that check.A new step derives and exports
OMNI_HOME=$(dirname "$GITHUB_WORKSPACE")via$GITHUB_ENV, placed right after the initial checkout so every later step (including the diagnose step and the sweep step, which shells out touv run onex skill dod_verify <ticket>per bound ticket) inherits it. Fail-fast, not a silent default (CLAUDE.md rule 8): the step asserts the derived path actually placesomnibase_infraatgithub.workspacebefore exporting, and errors loudly (::error::+exit 1) instead of exporting an unverified guess.Tests
Adds
tests/unit/nodes/node_evidence_autoclose_sweep_effect/test_omn_16845_omni_home_wiring.py, mirroring the existingtest_omn_16792_kill_switch_wiring.pypattern (this class of defect is only visible by parsing the committed workflow — it's wiring, not behavior):OMNI_HOMEto$GITHUB_ENVdod_verify/evidence_autoclose_sweepexit 1) rather than exporting an unverified guessConfirmed RED against the unfixed workflow file, GREEN after the fix (both runs captured in-session).
Verification
uv run pytest tests/unit/nodes/node_evidence_autoclose_sweep_effect/ -v— 92 passed (89 pre-existing + 3 new)uv run mypy tests/unit/nodes/node_evidence_autoclose_sweep_effect/test_omn_16845_omni_home_wiring.py --strict— no issuespre-commit run --all-files— all hooks passed, zero failuresactionlint .github/workflows/evidence-autoclose-sweep.yml— same pre-existing shellcheck style note as the unmodified file (unrelated to this change), no new findings.github/workflows/*.yml+ test change) — 6067 passed, 3 skipped, 0 failedOMN-16845 (scoped to the mechanical env-wiring fix — AC3 SKIPPED-not-FAILED reclassification and AC5 live-dispatch-dry-run proof are separate follow-on work per the ticket's own scope note).
Test plan
uv run pytest tests/unit/nodes/node_evidence_autoclose_sweep_effect/ -vpre-commit run --all-filesworkflow_dispatchwithdiagnose_ticketsset) showsbehavior_proving_count > 0and zerocwd does not existfor OMN-16759 / OMN-16790 / OMN-16784 / OMN-16785Evidence-Ticket: OMN-16845
Evidence-Source: OCC#7426