Skip to content

chore(OMN-18010): post-release dev version bump to 0.4.217 [release-on-merge] - #2874

Merged
jonahgabriel merged 2 commits into
devfrom
automation/omn-18010-post-release-dev-bump-0.4.217
Sep 25, 2026
Merged

jonahgabriel merged 2 commits into
devfrom
automation/omn-18010-post-release-dev-bump-0.4.217

Conversation

@onexbot-occ-writer

Copy link
Copy Markdown
Contributor

Summary

Automated post-release disarm step (OMN-18010, porting OMN-13912). Publishing v0.4.216 left dev's [project].version equal to the highest published tag, which ARMS the OMN-16344 release-identity gate (scripts/check_release_identity.py) against every subsequent dev PR that touches src/**.

This PR bumps [project].version to 0.4.217 and re-locks uv.lock, so the gate is disarmed by the same flow that armed it rather than by whichever unrelated PR trips it first.

The title carries the release-on-merge marker on purpose: this commit touches pyproject.toml, so without the marker its own merge would re-enter the release workflow and publish an empty version.

Ticket

OMN-18010 — release on merge for every publishing repo.

Triggered by

https://github.com/OmniNode-ai/omnimarket/actions/runs/36050759868

Test plan

  • the release-identity gate is green on this PR (that IS the behaviour under test)
  • CI passes (lockfile resolves)

Disarms the OMN-16344 release-identity gate that publishing
v0.4.216 armed against dev.

Triggered-by: https://github.com/OmniNode-ai/omnimarket/actions/runs/36050759868
@onexbot-occ-writer
onexbot-occ-writer Bot enabled auto-merge (squash) September 24, 2026 22:40
@github-actions

Copy link
Copy Markdown

✅ Architectural Review — PASSED

Errors: 0
Warnings: 0

What this checks

Rule Description
ARCH-TOPIC-001 No hardcoded Kafka topic strings in handler code
ARCH-DI-001 No event_bus=None bypass
ARCH-DI-002 No direct Handler instantiation outside workflow_runner/adapters
ARCH-DI-003 No reinvented DI containers
ARCH-TOPIC-002 contract.yaml topics follow `onex.{cmd

No architectural violations found.

Static architectural lint — no model inference (OMN-14176).

@github-actions

Copy link
Copy Markdown

✅ Hostile Reviewer — PASSED

Blocking findings (critical/error): 0
Total findings: 2
Models succeeded: qwen3-review,qwen3-review-b


Gate semantics

Verdict Meaning Blocks merge?
passed >=2 models succeeded, no critical/error findings No
blocked CRITICAL or ERROR findings found Yes
degraded Fewer than 2 models succeeded (infra unavailable/timeout) Yes (OMN-15110)

Powered by omniintelligence.review_pairing.cli_review — node-based adversarial review via HandlerLlmCliSubprocess (OMN-8524)

@jonahgabriel jonahgabriel added the hold:auto-merge Holds auto-merge (check_auto_merge_hold.py); remove to release label Sep 25, 2026
jonahgabriel pushed a commit that referenced this pull request Sep 25, 2026
…anged, so this branch passes the release-identity gate; #2874 lands first

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4
@jonahgabriel
jonahgabriel merged commit b64a48e into dev Sep 25, 2026
138 checks passed
@jonahgabriel
jonahgabriel deleted the automation/omn-18010-post-release-dev-bump-0.4.217 branch September 25, 2026 01:59
jonahgabriel added a commit that referenced this pull request Sep 25, 2026
…tion accepts (#2779)

* feat(OMN-18901): publish the DoD verify verdict in a shape the projection accepts

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): fresh head for the first non-draft CI run

Onex-Lane: land-3959-1330
Onex-Session: 825bf9dc4dcf44d4ba2d44657d592eab

* fix(OMN-18901): unroute the pure fold, let the fold decide a rehearsal, and require the run window

- Contract: the pure fold is no longer a handler_routing entry. With no
  event_model it was dispatched on the verdict topic beside the writer and
  failed every dispatch (22 validation errors for the request model), so each
  stored verdict was also dead-lettered, replayed five times and quarantined
  on the .201 dev lane (2026-09-24T22:56Z). Even with the bare dict accepted,
  a reducer's returned model becomes a projection intent the auto-wired
  applier has no effect for (RuntimeHostError, probed in-container). The
  writer calls the fold in-process.
- Rule 7a: the dry-run decision moves from the writer into the pure fold
  (row=None); the writer persists only what the fold hands it.
- A declined rehearsal reports rows_refused_by_ordering_guard=1 beside
  rows_upserted=0, so the runtime logs it as expected (OMN-18992) instead of
  the 'wrote zero rows' ERROR, and its apply counter does not score it as a
  silent write-path gap. Pinned against real Postgres.
- ModelDodVerifyState.started_at/completed_at are required: no defaulted,
  construction-time window the projection would store as history.
- make_completed_event drops its caller-supplied started_at: one source for
  the window.
- The dod_verify contract's dry_run description says what a rehearsal does.

Onex-Lane: dod-verdict-publisher-2779
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): carry omnimarket#2874's v0.4.217 dev-open bump unchanged, so this branch passes the release-identity gate; #2874 lands first

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* fix(OMN-18901): the routing check counts a canonical fold the node's routed writer constructs as reachable

The rule-7a projection split leaves the pure fold unrouted and runs it inside
the writer. The missing-routing check read that as an undispatchable handler
and flagged node_projection_dod_verdict. A routed module in the node's own
package that imports AND calls the canonical class now proves reachability;
an import alone, or a writer in another node, still fires.

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

---------

Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com>
jonahgabriel added a commit that referenced this pull request Sep 25, 2026
…laude DoD-verify-completed spelling (#2882)

* feat(OMN-18901): publish the DoD verify verdict in a shape the projection accepts

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): fresh head for the first non-draft CI run

Onex-Lane: land-3959-1330
Onex-Session: 825bf9dc4dcf44d4ba2d44657d592eab

* fix(OMN-18901): unroute the pure fold, let the fold decide a rehearsal, and require the run window

- Contract: the pure fold is no longer a handler_routing entry. With no
  event_model it was dispatched on the verdict topic beside the writer and
  failed every dispatch (22 validation errors for the request model), so each
  stored verdict was also dead-lettered, replayed five times and quarantined
  on the .201 dev lane (2026-09-24T22:56Z). Even with the bare dict accepted,
  a reducer's returned model becomes a projection intent the auto-wired
  applier has no effect for (RuntimeHostError, probed in-container). The
  writer calls the fold in-process.
- Rule 7a: the dry-run decision moves from the writer into the pure fold
  (row=None); the writer persists only what the fold hands it.
- A declined rehearsal reports rows_refused_by_ordering_guard=1 beside
  rows_upserted=0, so the runtime logs it as expected (OMN-18992) instead of
  the 'wrote zero rows' ERROR, and its apply counter does not score it as a
  silent write-path gap. Pinned against real Postgres.
- ModelDodVerifyState.started_at/completed_at are required: no defaulted,
  construction-time window the projection would store as history.
- make_completed_event drops its caller-supplied started_at: one source for
  the window.
- The dod_verify contract's dry_run description says what a rehearsal does.

Onex-Lane: dod-verdict-publisher-2779
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): carry omnimarket#2874's v0.4.217 dev-open bump unchanged, so this branch passes the release-identity gate; #2874 lands first

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* fix(OMN-18901): the routing check counts a canonical fold the node's routed writer constructs as reachable

The rule-7a projection split leaves the pure fold unrouted and runs it inside
the writer. The missing-routing check read that as an undispatchable handler
and flagged node_projection_dod_verdict. A routed module in the node's own
package that imports AND calls the canonical class now proves reachability;
an import alone, or a writer in another node, still fires.

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-19153): the emit daemon stops fanning out omniclaude's retired DoD-verify-completed spelling

Removes the registry rule, the contract publish entry and its externally
consumed escape hatch, and the tests pinning them. The surviving spelling is
node_dod_verify's own terminal. The two repos check each other's registries,
so this lands first with a two-line transient drift carve-out; the omniclaude
half lands second, and a follow-up removes the carve-out.

* chore(OMN-19153): drop the dep-health baseline finding for the retired topic, which no contract publishes any more

* test(OMN-19153): step the emit parity ratchet down for the retired dod-verify kind

The registry drops one event type (67 -> 66) that fanned out to one keyed
topic, so published and enriched records go 70 -> 69 and keyed 68 -> 67.

---------

Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com>
jonahgabriel added a commit that referenced this pull request Sep 27, 2026
)

* feat(OMN-18901): publish the DoD verify verdict in a shape the projection accepts

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): fresh head for the first non-draft CI run

Onex-Lane: land-3959-1330
Onex-Session: 825bf9dc4dcf44d4ba2d44657d592eab

* fix(OMN-18901): unroute the pure fold, let the fold decide a rehearsal, and require the run window

- Contract: the pure fold is no longer a handler_routing entry. With no
  event_model it was dispatched on the verdict topic beside the writer and
  failed every dispatch (22 validation errors for the request model), so each
  stored verdict was also dead-lettered, replayed five times and quarantined
  on the .201 dev lane (2026-09-24T22:56Z). Even with the bare dict accepted,
  a reducer's returned model becomes a projection intent the auto-wired
  applier has no effect for (RuntimeHostError, probed in-container). The
  writer calls the fold in-process.
- Rule 7a: the dry-run decision moves from the writer into the pure fold
  (row=None); the writer persists only what the fold hands it.
- A declined rehearsal reports rows_refused_by_ordering_guard=1 beside
  rows_upserted=0, so the runtime logs it as expected (OMN-18992) instead of
  the 'wrote zero rows' ERROR, and its apply counter does not score it as a
  silent write-path gap. Pinned against real Postgres.
- ModelDodVerifyState.started_at/completed_at are required: no defaulted,
  construction-time window the projection would store as history.
- make_completed_event drops its caller-supplied started_at: one source for
  the window.
- The dod_verify contract's dry_run description says what a rehearsal does.

Onex-Lane: dod-verdict-publisher-2779
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): carry omnimarket#2874's v0.4.217 dev-open bump unchanged, so this branch passes the release-identity gate; #2874 lands first

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* fix(OMN-18901): the routing check counts a canonical fold the node's routed writer constructs as reachable

The rule-7a projection split leaves the pure fold unrouted and runs it inside
the writer. The missing-routing check read that as an undispatchable handler
and flagged node_projection_dod_verdict. A routed module in the node's own
package that imports AND calls the canonical class now proves reachability;
an import alone, or a writer in another node, still fires.

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* feat(OMN-19514): a DoD verdict names the delegation run it judged

The verifier's correlation_id identifies the verification run, not the
delegated attempt whose work it judged, so no verdict row could be joined to
a delegation_events row. Stacked on OMN-18901 (omnimarket#2779), which makes
the verdict reach the projection at all.

- ModelDodVerifyStartCommand accepts delegation_correlation_id (optional,
  omitted from serialisation when unset); the contract declares the input
- the state the runtime publishes, and its completed-event twin, carry it
- the projection wire, the pure fold and the row carry it; the writer
  upserts it as bind $20
- migration 0002 adds nullable dod_verify_runs.delegation_correlation_id
  with a partial index for the join from delegation_events
- the two sibling real-Postgres tests apply 0002 too, and the bind-name list
  in the OMN-18900 unit test names the new bind

Onex-Lane: dod-loop-join
Onex-Session: 1662aee51b0e49eb829a6db24bac70b8

* test(OMN-19514): the stand-in join keeps the lab's TEXT correlation_id, and the migration names the cast

Onex-Lane: dod-loop-join
Onex-Session: 1662aee51b0e49eb829a6db24bac70b8

* fix(OMN-19514): regenerate the checked-in application relation inventory

The branch had fallen behind dev, which had accumulated changes the
inventory generator now derives differently. Regenerating picks up
this PR's own node_dod_verify and node_projection_dod_verdict entries
and the new delegation_correlation_id index, matching what
scripts/generate_application_relation_inventory.py --check expects.

Onex-Lane: dod-loop-join
Onex-Session: 1662aee51b0e49eb829a6db24bac70b8

* chore(release): open dev for v0.4.234 [release-on-merge]

Disarms the OMN-16344 release-identity gate that publishing
v0.4.233 armed against dev.

Triggered-by: https://github.com/OmniNode-ai/omnimarket/actions/runs/36265839055

---------

Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com>
jonahgabriel added a commit that referenced this pull request Sep 27, 2026
…DoD pass rate, on the deployed lane too (#2887)

* feat(OMN-18901): publish the DoD verify verdict in a shape the projection accepts

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): fresh head for the first non-draft CI run

Onex-Lane: land-3959-1330
Onex-Session: 825bf9dc4dcf44d4ba2d44657d592eab

* fix(OMN-18901): unroute the pure fold, let the fold decide a rehearsal, and require the run window

- Contract: the pure fold is no longer a handler_routing entry. With no
  event_model it was dispatched on the verdict topic beside the writer and
  failed every dispatch (22 validation errors for the request model), so each
  stored verdict was also dead-lettered, replayed five times and quarantined
  on the .201 dev lane (2026-09-24T22:56Z). Even with the bare dict accepted,
  a reducer's returned model becomes a projection intent the auto-wired
  applier has no effect for (RuntimeHostError, probed in-container). The
  writer calls the fold in-process.
- Rule 7a: the dry-run decision moves from the writer into the pure fold
  (row=None); the writer persists only what the fold hands it.
- A declined rehearsal reports rows_refused_by_ordering_guard=1 beside
  rows_upserted=0, so the runtime logs it as expected (OMN-18992) instead of
  the 'wrote zero rows' ERROR, and its apply counter does not score it as a
  silent write-path gap. Pinned against real Postgres.
- ModelDodVerifyState.started_at/completed_at are required: no defaulted,
  construction-time window the projection would store as history.
- make_completed_event drops its caller-supplied started_at: one source for
  the window.
- The dod_verify contract's dry_run description says what a rehearsal does.

Onex-Lane: dod-verdict-publisher-2779
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* chore(OMN-18901): carry omnimarket#2874's v0.4.217 dev-open bump unchanged, so this branch passes the release-identity gate; #2874 lands first

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* fix(OMN-18901): the routing check counts a canonical fold the node's routed writer constructs as reachable

The rule-7a projection split leaves the pure fold unrouted and runs it inside
the writer. The missing-routing check read that as an undispatchable handler
and flagged node_projection_dod_verdict. A routed module in the node's own
package that imports AND calls the canonical class now proves reachability;
an import alone, or a writer in another node, still fires.

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4

* feat(OMN-19514): a DoD verdict names the delegation run it judged

The verifier's correlation_id identifies the verification run, not the
delegated attempt whose work it judged, so no verdict row could be joined to
a delegation_events row. Stacked on OMN-18901 (omnimarket#2779), which makes
the verdict reach the projection at all.

- ModelDodVerifyStartCommand accepts delegation_correlation_id (optional,
  omitted from serialisation when unset); the contract declares the input
- the state the runtime publishes, and its completed-event twin, carry it
- the projection wire, the pure fold and the row carry it; the writer
  upserts it as bind $20
- migration 0002 adds nullable dod_verify_runs.delegation_correlation_id
  with a partial index for the join from delegation_events
- the two sibling real-Postgres tests apply 0002 too, and the bind-name list
  in the OMN-18900 unit test names the new bind

Onex-Lane: dod-loop-join
Onex-Session: 1662aee51b0e49eb829a6db24bac70b8

* test(OMN-19514): the stand-in join keeps the lab's TEXT correlation_id, and the migration names the cast

Onex-Lane: dod-loop-join
Onex-Session: 1662aee51b0e49eb829a6db24bac70b8

* feat(OMN-19528): delegation routing reads the per-(task type, model) DoD pass rate, on the deployed lane too

The OMN-14001 overlay seam is the one place a stored outcome steers a
delegation routing decision. Its source, context_roi_scores, holds no rows on
the lab, and only the bus-less local port read it; the deployed-lane routing
consumer passed no overlay at all.

routing/dod_overlay.py feeds the same seam from the join OMN-19514 made
possible: delegation_events (task type, tier, model) joined to
omninode_internal.dod_verify_runs on delegation_correlation_id.

- build_dod_overlay: a pure fold. A sample is a run whose verdict decided it
  (verified or failed); a pass is outcome done; the latest decided verdict per
  run wins; the OMN-14019 recency window applies per tier; a tier is
  suppressed at or above the minimum sample with a pooled rate below the
  floor. Per-(tier, model) rates ride beside the tier signals.
- PostgresDodOutcomeReader: one transaction per read, app.tenant_id set and
  tenant_id filtered explicitly. Missing tenant under enforcement raises
  before any SQL; an unmapped tenant or any read failure returns None, so
  routing stays static.
- HandlerRoutingIntent (deployed lane) threads it into delta() and logs one
  line citing each (tier, model) rate; the local port selector wires the same
  read. No DSN, no reader: decisions are byte-identical to before.
- roi_overlay.apply_recency_window is public so both reads share one
  definition of recent.

Onex-Lane: dod-loop-route
Onex-Session: 6d9b43ae347b42dc801f7efc8fb638cb

* fix(OMN-19528): read the two tables under the two roles that may read them, and join in Python

On the .201 dev lane no single runtime principal can read both sides of the
join. The projection DSN's role (OMNIDASH_ANALYTICS_DB_URL) reads
public.delegation_events and has no USAGE on omninode_internal; the internal
DSN's role (OMNINODE_INTERNAL_DB_URL, omninode_runtime) reads
omninode_internal.dod_verify_runs (migration 0001) and not delegation_events.
A SQL join would have failed open to static routing on every request.

The reader now makes two reads, each under the least privilege that can make
it: the verdicts that name a delegation run (internal DSN), then only those
runs' delegation rows for one task type and one tenant (projection DSN, tenant
transaction unchanged). join_delegations_to_verdicts is the pure join, keyed on
the lower-cased run id so the lab's TEXT correlation_id meets the UUID column.
The live reader needs both DSNs; either missing means no reader and static
routing.

Onex-Lane: dod-loop-route
Onex-Session: 6d9b43ae347b42dc801f7efc8fb638cb

* feat(OMN-19528): the DoD routing line counts joined verdicts that decided nothing

On the .201 dev lane every joined verdict was skipped (the deployed verifier
found no DoD contract), so the line read "no decided DoD verdicts" and gave no
sign the read had found anything. It now names how many verdicts joined to
the task type and how many of them decided nothing.

Onex-Lane: dod-loop-route
Onex-Session: 6d9b43ae347b42dc801f7efc8fb638cb

---------

Co-authored-by: onexbot-occ-writer[bot] <onexbot-occ-writer[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hold:auto-merge Holds auto-merge (check_auto_merge_hold.py); remove to release

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant