Skip to content

chore(OMN-19153): the emit daemon stops fanning out the retired omniclaude DoD-verify-completed spelling - #2882

Merged
jonahgabriel merged 15 commits into
devfrom
jonah/omn-19153-retire-duplicate-dod-verify-completed-omnimarket
Sep 25, 2026
Merged

jonahgabriel merged 15 commits into
devfrom
jonah/omn-19153-retire-duplicate-dod-verify-completed-omnimarket

Conversation

@jonahgabriel

@jonahgabriel jonahgabriel commented Sep 25, 2026 •

Copy link
Copy Markdown
Contributor

What and why

OMN-19153, omnimarket half. Two spellings of a DoD-verify-completed topic existed. The surviving one is node_dod_verify's own terminal, which node_projection_dod_verdict stores. The omniclaude-namespace spelling had no consumer anywhere. On the .201 dev lane it had high-watermark 0 and no consumer group. Its flat telemetry payload was incompatible with the verdict, and it carried a duty_critical tier here that a telemetry waiver in omniclaude contradicted. The decision is recorded on the ticket (AC-4) before any merge: the telemetry is deleted, not migrated.

What changed

  • node_emit_daemon/registries/topics.yaml: the event type's fan-out rule is removed.
  • node_emit_daemon/contract.yaml: the publish entry and the externally-consumed escape hatch are removed.
  • durable_outbox.py docstring: the example now names a topic that still exists.
  • .onex_state/dep_health_baseline.json: the orphan finding for the retired topic is removed, because no contract publishes it now.
  • Tests that pinned the retired topic are updated. New guard: tests/test_omn19153_emit_daemon_drops_duplicate_dod_verify_topic.py, where each assertion has a positive control on the sibling dod.guard.fired.
  • scripts/validation/event_registry_drift_baseline.txt gets a two-line transient carve-out. omnimarket's drift gate reads omniclaude's default branch, and omniclaude's projection gate reads omnimarket dev. So whichever half lands first is red against the other. This half lands first, and the carve-out keeps its own gate green until the omniclaude half lands. The follow-up PR removes it.

Proof

  • RED: the new guard fails 3 of 3 on this branch's base.
  • GREEN: new guard, emit-daemon unit tests, the capture-registry contract test and the OMN-18901 contract test all pass locally, 108 passed.
  • Drift validator, run locally both ways: it passes against current omniclaude, where the carve-out absorbs the event, and against the omniclaude half's branch.

Stacking and landing order

This branch is stacked on omnimarket#2779 (OMN-18901), so its diff includes #2779's commits until that lands. Order:

  1. omnimarket#2874 (the 0.4.217 dev-open bump; feat(OMN-18901): publish the DoD verify verdict in a shape the projection accepts #2779 carries it unchanged)
  2. omnimarket#2779
  3. this PR
  4. the omniclaude half (OMN-19153)
  5. the omnimarket carve-out removal (OMN-19153)
  6. the omnibase_core enum member (OMN-19153)

Not runtime-affecting on its own beyond the emit-daemon registry, which the daemon loads at start.

Evidence-Ticket: OMN-19153
Evidence-Source: OCC#11202

jonahgabriel and others added 11 commits September 22, 2026 08:43
…tion accepts

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4
# Conflicts:
#	pyproject.toml
#	uv.lock
Onex-Lane: land-3959-1330
Onex-Session: 825bf9dc4dcf44d4ba2d44657d592eab
…l, 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
…ease tag) into OMN-18901

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4
…anged, so this branch passes the release-identity gate; #2874 lands first

Onex-Lane: jev-dod-producer-2
Onex-Session: e0ac582ced0a487f860f431365ab85f4
…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
…red 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.
…d topic, which no contract publishes any more
@jonahgabriel jonahgabriel added the hold:auto-merge Holds auto-merge (check_auto_merge_hold.py); remove to release label Sep 25, 2026
@github-actions

github-actions Bot commented Sep 25, 2026 •

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

onexbot-occ-writer Bot added a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 25, 2026
…nimarket#2882

The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited.

Ticket: OMN-16859 (AC3b)
Onex-Workflow: OCC Receipt Runner
Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/36086681469
@github-actions

github-actions Bot commented Sep 25, 2026 •

Copy link
Copy Markdown

✅ Hostile Reviewer — PASSED

Blocking findings (critical/error): 0
Total findings: 11
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)

…-duplicate-dod-verify-completed-omnimarket

# Conflicts:
#	pyproject.toml
#	tests/test_omn18901_dod_verify_publishes_completed_event.py
#	uv.lock
onexbot-occ-writer Bot pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 25, 2026
…2882

OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 62f35e627536c656214af2357890b837af21d542.
onexbot-occ-writer Bot added a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 25, 2026
…nimarket#2882

The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited.

Ticket: OMN-16859 (AC3b)
Onex-Workflow: OCC Receipt Runner
Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/36119850360
jonahgabriel pushed a commit to OmniNode-ai/onex_change_control that referenced this pull request Sep 25, 2026
…imarket#2882 (#11202)

* evidence(OMN-19153): author OCC companion for OmniNode-ai/omnimarket#2882

OCC companion by node_pr_lifecycle_fix_effect (OMN-13317 F1 / OMN-13990 / OMN-14285). Product PR head 62f35e627536c656214af2357890b837af21d542.

* evidence(OMN-19153): self-bind OCC#11202 + rebind contract_sha256

* evidence(OMN-16859): executed test_passes receipts for OmniNode-ai/omnimarket#2882

The declared checks were executed for real in the OmniNode-ai/omnimarket checkout at the PR head by the product-repo OCC receipt runner, and the results written append-only into this companion. Producer-minted PENDING receipts are superseded by a net-new record; no existing receipt was edited.

Ticket: OMN-16859 (AC3b)
Onex-Workflow: OCC Receipt Runner
Onex-Run: https://github.com/OmniNode-ai/omnimarket/actions/runs/36119850360

---------

Co-authored-by: omnimarket-bot <bot@omninode.ai>
Co-authored-by: onexbot-occ-writer[bot] <307849072+onexbot-occ-writer[bot]@users.noreply.github.com>
…d-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.
@jonahgabriel
jonahgabriel merged commit 8c82d4a into dev Sep 25, 2026
139 checks passed
@jonahgabriel
jonahgabriel deleted the jonah/omn-19153-retire-duplicate-dod-verify-completed-omnimarket branch September 25, 2026 11:54
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