Repository navigation
chore(OMN-18202): bump omnibase-core pin to 0.47.12 and carry the three version-bookkeeping surfaces - #3448
Conversation
…ee version-bookkeeping surfaces The published omnibase-infra 0.38.22 pins omnibase-core==0.47.9. omnimarket 0.4.62 requires omnibase-core>=0.47.11, so omnimarket's release run failed its PyPI pin-resolvability step: omnibase-infra>=0.38.22 and omnimarket==0.4.62 are mutually unsatisfiable from the real index. infra dev already carried 0.47.10 from the v0.47.10 cascade but no release had been cut since, and core 0.47.12 is now published (2026-09-12T01:30:49Z). This bumps the pin to 0.47.12 and carries all three version-bookkeeping surfaces the cascade generator omits, in the same commit as the lockfile: - docker/runners/runner-image.lock.json regenerated via scripts/ci/runner_image_identity.py --mode generate (deterministic; the digest binds pyproject.toml and uv.lock as version components). - src/omnibase_infra/runtime/version_compatibility.py _FALLBACK_MATRIX min_version, confirmed in sync by scripts/update_version_matrix.py --check. - tests/fixtures/seams/core_release/0.46.11_expected_symbols.json core_version. Each surface was proven to bind: with all three reverted to 0.47.10 the focused suites fail 3 of 15 with one named failure per surface, and with all three correct they pass 15 of 15.
There was a problem hiding this comment.
Hostile Reviewer — adversarial findings (OMN-17492)
Models succeeded: glm-review
Models failed: codex
New finding threads: 5
Deduped (already posted on this PR): 0
Nit-level findings suppressed: 1
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.
Findings demoted from threads (anchor rejected)
-
[MAJOR] hostile-reviewer (glm-review)
Fixture filename and recorded core_version diverge | The fixture file is named 0.46.11_expected_symbols.json but its internal core_version now reads 0.47.12. The update procedure embedded in the fixture's own comments says to bump core, re-run the seam test, and record the new surface 'here', implying the filename should track the version it snapshots. Either the filename is stale from a prior bump (suggesting the seam surface was never actually re-derived against 0.47.12) or the convention is inconsistent.
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MAJOR] hostile-reviewer (glm-review)
Symbol surface unchanged across core bump without justification | The diff modifies core_version in the fixture but shows no change to any entry under 'modules'. Core 0.47.10 to 0.47.12 spans at least one release (0.47.11) plus the pre-release merge referenced in pyproject.toml comments (terminal delegation classes from #1439 and runtime_fanout_resolver from #1440). A two-version jump in a fast-moving dependency with zero delta in the expected public surface is implausible unless the fixture only pins a sub
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (glm-review)
Fallback matrix max_version left at 0.48.0 | The fallback constraint raises min_version to 0.47.12 but keeps max_version at 0.48.0. This is likely intentional (semver next-minor ceiling), but the fallback matrix is a duplicate of truth derived from pyproject; the diff does not show any consistency check between the two. If _build_matrix_from_pyproject fails at runtime, the hardcoded fallback silently governs and any drift between it and pyproject produces confusing behavior. | Evidence: _FALLBACK_MATRIX: mi
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (glm-review)
No test changes accompany the dependency bump | The diff bumps omnibase-core by two patch versions including newly merged runtime delegation and fanout resolver code, yet contains no new or updated tests exercising the changed behavior. Passing existing tests does not demonstrate the #1440 runtime_fanout_resolver path is used correctly, only that old tests still pass. | Evidence: pyproject.toml comment: 'pulls the merged core #1439 (terminal delegation classes) AND the merged core #1440 (runtime_fanout_reso
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492). -
[MINOR] hostile-reviewer (glm-review)
Lockfile digests and image_version not cross-verified | runner-image.lock.json updates identity_digest and shared_env_digest but keeps base_image_digest, gh_version, kubectl_version, and image_version unchanged. The digests were presumably recomputed from the new dependency set, but nothing in the diff shows how they were derived, and image_version 7 is unchanged despite the runner image content changing. If image_version gates cache invalidation or deployment pinning downstream, stale consumers may reuse t
Resolve this thread when addressed — the
Hostile Review Thread Gateblocks while hostile-reviewer threads are unresolved (OMN-17492).
|
| 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)
…ibase_infra#3448 (#9184) * evidence(OMN-18202): author OCC companion for OmniNode-ai/omnibase_infra#3448 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head f85fbdebb62aedc9d0725dce5e933934038c32de. * evidence(OMN-18202): self-bind OCC#9184 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
…ed-supersession predicate (#3465) * fix(OMN-18233): closer ignores a closed cascade bump only on a verified-supersession predicate The cited-PR merge conjunct reads merged_at and refuses anything without one. That is right for an OPEN pull request, which can still merge, and permanently wrong for a CLOSED one, which cannot. Cascade bump pull requests carry the releasing ticket's id, so every ticket whose release opens downstream bumps inherits a permanent block: OMN-18201 has all four criteria evidenced and is refused because omnibase_infra#3446 closed unmerged in favour of #3448. Ignoring closed bumps outright is what the plan review refused. A closed bump with no replacement is abandoned work and must keep blocking. So the bump is ignorable only when supersession is PROVEN by four clauses: the closed pull request declares cascade provenance naming a source package and a required version; a merged pull request in the same repository moved that package's pin or lockfile entry; the delivered version is at or above the required one, compared as a version rather than as a string; and the delivered version is readable from the repository's own default branch. Nothing reads a title, and ordering is not a clause -- on the real pair the replacement merged about three hours before the superseded bump was closed, so a merge-after-close requirement would refuse the one case this was built for. Every clause fails closed. * fix(OMN-18233): move the supersession predicate out of handlers/, it is not a handler The handler contract compliance scanner audits every module under a node's handlers/ directory as a handler and requires each one to appear in the contract's handler_routing. This module is routed by nothing and is called as a function by the sweep handler, so satisfying that rule was impossible and exempting it from the rule would have been a lie about what it is. Moved to the node root, which is where non-handler node modules already live (node_chain_canary_effect carries its lane transport the same way), and the infra node-handler ownership allowlist entry it needed under handlers/ is removed rather than left stale. The docstring now says why it sits there so a later edit does not move it back. * fix(OMN-18233): sync autoclose contract for supersession predicate * fix(OMN-18233): compare cascade pins by source * fix(OMN-18233): pin the gap fingerprint to the contract version it now declares The node contract moved to 1.12.2 for this change while the fingerprint constant still read 1.12.1, and the test that exists to stop exactly that drift went red. The constant follows the contract: the version is part of the gap-comment fingerprint, so a stale one would keep de-duplicating comments against a rule the closer no longer applies.
…ibase_infra#3448 (#9184) * evidence(OMN-18202): author OCC companion for OmniNode-ai/omnibase_infra#3448 OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head f85fbdebb62aedc9d0725dce5e933934038c32de. * evidence(OMN-18202): self-bind OCC#9184 + rebind contract_sha256 --------- Co-authored-by: omnimarket-bot <bot@omninode.ai>
…ee version-bookkeeping surfaces (#3448) The published omnibase-infra 0.38.22 pins omnibase-core==0.47.9. omnimarket 0.4.62 requires omnibase-core>=0.47.11, so omnimarket's release run failed its PyPI pin-resolvability step: omnibase-infra>=0.38.22 and omnimarket==0.4.62 are mutually unsatisfiable from the real index. infra dev already carried 0.47.10 from the v0.47.10 cascade but no release had been cut since, and core 0.47.12 is now published (2026-09-12T01:30:49Z). This bumps the pin to 0.47.12 and carries all three version-bookkeeping surfaces the cascade generator omits, in the same commit as the lockfile: - docker/runners/runner-image.lock.json regenerated via scripts/ci/runner_image_identity.py --mode generate (deterministic; the digest binds pyproject.toml and uv.lock as version components). - src/omnibase_infra/runtime/version_compatibility.py _FALLBACK_MATRIX min_version, confirmed in sync by scripts/update_version_matrix.py --check. - tests/fixtures/seams/core_release/0.46.11_expected_symbols.json core_version. Each surface was proven to bind: with all three reverted to 0.47.10 the focused suites fail 3 of 15 with one named failure per surface, and with all three correct they pass 15 of 15.
…ed-supersession predicate (#3465) * fix(OMN-18233): closer ignores a closed cascade bump only on a verified-supersession predicate The cited-PR merge conjunct reads merged_at and refuses anything without one. That is right for an OPEN pull request, which can still merge, and permanently wrong for a CLOSED one, which cannot. Cascade bump pull requests carry the releasing ticket's id, so every ticket whose release opens downstream bumps inherits a permanent block: OMN-18201 has all four criteria evidenced and is refused because omnibase_infra#3446 closed unmerged in favour of #3448. Ignoring closed bumps outright is what the plan review refused. A closed bump with no replacement is abandoned work and must keep blocking. So the bump is ignorable only when supersession is PROVEN by four clauses: the closed pull request declares cascade provenance naming a source package and a required version; a merged pull request in the same repository moved that package's pin or lockfile entry; the delivered version is at or above the required one, compared as a version rather than as a string; and the delivered version is readable from the repository's own default branch. Nothing reads a title, and ordering is not a clause -- on the real pair the replacement merged about three hours before the superseded bump was closed, so a merge-after-close requirement would refuse the one case this was built for. Every clause fails closed. * fix(OMN-18233): move the supersession predicate out of handlers/, it is not a handler The handler contract compliance scanner audits every module under a node's handlers/ directory as a handler and requires each one to appear in the contract's handler_routing. This module is routed by nothing and is called as a function by the sweep handler, so satisfying that rule was impossible and exempting it from the rule would have been a lie about what it is. Moved to the node root, which is where non-handler node modules already live (node_chain_canary_effect carries its lane transport the same way), and the infra node-handler ownership allowlist entry it needed under handlers/ is removed rather than left stale. The docstring now says why it sits there so a later edit does not move it back. * fix(OMN-18233): sync autoclose contract for supersession predicate * fix(OMN-18233): compare cascade pins by source * fix(OMN-18233): pin the gap fingerprint to the contract version it now declares The node contract moved to 1.12.2 for this change while the fingerprint constant still read 1.12.1, and the test that exists to stop exactly that drift went red. The constant follows the contract: the version is part of the gap-comment fingerprint, so a stale one would keep de-duplicating comments against a rule the closer no longer applies.
Summary
The published
omnibase-infra0.38.22 pinsomnibase-core==0.47.9.omnimarket0.4.62 requires
omnibase-core>=0.47.11, so omnimarket's release run34667694260
failed its PyPI pin-resolvability step (OMN-18034) with the two constraints
mutually unsatisfiable from the real index:
infra
devalready carried 0.47.10 from the v0.47.10 cascade (#3437) but norelease has been cut since, so the published artifact still carries 0.47.9.
omnibase-core0.47.12 is now on PyPI (uploaded 2026-09-12T01:30:49Z), so thisbumps the pin straight to 0.47.12 rather than to 0.47.11 with a second bump to
follow.
This PR exists because the release dependency-cascade generator does not carry
omnibase_infra's version bookkeeping — OMN-18202 AC2. All three surfaces named
there are updated in the same commit as the lockfile:
docker/runners/runner-image.lock.jsonscripts/ci/runner_image_identity.py --mode generate— deterministic; the digest bindspyproject.tomlanduv.lockas version componentssrc/omnibase_infra/runtime/version_compatibility.py_FALLBACK_MATRIXscripts/update_version_matrix.py --check(exit 0, "Fallback matrix is already up to date")tests/fixtures/seams/core_release/0.46.11_expected_symbols.jsoncore_versionVerification
Focused suites over the three affected surfaces, with a negative control proving
each one actually binds to the version rather than passing vacuously:
surface —
test_recorded_identity_matches_recomputed_identity,test_update_version_matrix_check_passes,test_seam_released_core_pin_importable_and_typed.Regenerated digests: identity
9d792733f04ae323f11610aefdffd328->d1eac15983c9c8f03033b9bb3a31bd26, shared enve5b91f9191f06a0d66dcf5cf->387313789eda85dd7acdf46b.image_versionunchanged at 7.Governed pre-push ran clean (check-only hooks; the repo's local test leg was
retired in #3415). It reported the deploy-scoped surface
src/omnibase_infra/runtime/version_compatibility.pyand that OMN-18202 had noOCC contract at push time — the companion supplies it.
Follow-on
Once this lands,
omnibase_infrav0.38.23 is cut so the published artifactcarries the corrected pin, then omnimarket 0.4.62 is re-run. 0.4.62 never
published: its tag-creation and publish steps were skipped, and PyPI still
serves 0.4.61 as
info.versionwith 0.4.62 absent fromreleases.Test plan
uv lock --upgrade-package omnibase_coreresolved cleanly (0.47.10 -> 0.47.12)Evidence-Ticket: OMN-18202
Evidence-Source: OCC#9184