Skip to content

chore(OMN-18202): bump omnibase-core pin to 0.47.12 and carry the three version-bookkeeping surfaces - #3448

Merged
jonahgabriel merged 1 commit into
devfrom
jonah/omn-18202-infra-core-pin-0-47-12
Sep 12, 2026
Merged

jonahgabriel merged 1 commit into
devfrom
jonah/omn-18202-infra-core-pin-0-47-12

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Sep 12, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

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
34667694260
failed its PyPI pin-resolvability step (OMN-18034) with the two constraints
mutually unsatisfiable from the real index:

Because omnibase-infra>=0.38.22 depends on omnibase-core==0.47.9 and
omnimarket==0.4.62 depends on omnibase-core>=0.47.11, we can conclude
that omnibase-infra>=0.38.22 and omnimarket==0.4.62 are incompatible.

infra dev already carried 0.47.10 from the v0.47.10 cascade (#3437) but no
release has been cut since, so the published artifact still carries 0.47.9.
omnibase-core 0.47.12 is now on PyPI (uploaded 2026-09-12T01:30:49Z), so this
bumps 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:

Surface How it was produced
docker/runners/runner-image.lock.json 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 confirmed in sync by scripts/update_version_matrix.py --check (exit 0, "Fallback matrix is already up to date")
tests/fixtures/seams/core_release/0.46.11_expected_symbols.json core_version bumped 0.47.10 -> 0.47.12

Verification

Focused suites over the three affected surfaces, with a negative control proving
each one actually binds to the version rather than passing vacuously:

  • All three reverted to 0.47.10: 3 failed, 12 passed, one named failure per
    surface — test_recorded_identity_matches_recomputed_identity,
    test_update_version_matrix_check_passes,
    test_seam_released_core_pin_importable_and_typed.
  • All three correct: 15 passed.
uv run pytest tests/ci/test_runner_image_identity.py \
  tests/unit/runtime/test_fallback_matrix_sync.py \
  tests/unit/runtime/test_seam_released_core_pin.py -q

Regenerated digests: identity 9d792733f04ae323f11610aefdffd328 ->
d1eac15983c9c8f03033b9bb3a31bd26, shared env e5b91f9191f06a0d66dcf5cf ->
387313789eda85dd7acdf46b. image_version unchanged 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.py and that OMN-18202 had no
OCC contract at push time — the companion supplies it.

Follow-on

Once this lands, omnibase_infra v0.38.23 is cut so the published artifact
carries 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.version with 0.4.62 absent from releases.

Test plan

  • Focused suites over the three bookkeeping surfaces, with negative control
  • uv lock --upgrade-package omnibase_core resolved cleanly (0.47.10 -> 0.47.12)
  • CI green on the live head

Evidence-Ticket: OMN-18202
Evidence-Source: OCC#9184

…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.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 Gate blocks 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 Gate blocks 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 Gate blocks 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 Gate blocks 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 Gate blocks while hostile-reviewer threads are unresolved (OMN-17492).

@github-actions

Copy link
Copy Markdown
Contributor

⚠️ Hostile Reviewer — DEGRADED (informational)

Critical findings: 0
Major findings: 2
Total findings: 6
Models succeeded: glm-review

Note: Fewer than 2 reviewer models succeeded. Degraded results are informational (OMN-8468/OMN-8524) and do not block merge. Error: cli_review exit 2 (fewer than 2 models succeeded — partial/total outage)


Semantics (OMN-17492 — the model finds, thread resolution gates)

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)

jonahgabriel pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 12, 2026
…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>
@jonahgabriel
jonahgabriel merged commit 4957250 into dev Sep 12, 2026
196 of 202 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-18202-infra-core-pin-0-47-12 branch September 12, 2026 03:14
jonahgabriel added a commit that referenced this pull request Sep 12, 2026
…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.
Patel230 pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 16, 2026
…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>
Patel230 pushed a commit that referenced this pull request Sep 16, 2026
…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.
Patel230 pushed a commit that referenced this pull request Sep 16, 2026
…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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant