From d5458cc85d7d199a54e97b12a149646dba206361 Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 10:32:00 -0400 Subject: [PATCH 1/7] feat(OMN-11998): add 082_swarm_runs migration for swarm dispatch projection table Promotes the swarm_runs table from dev-lane direct SQL to a proper forward migration so migration-gate applies it automatically on all lanes. --- docker/migrations/forward/082_swarm_runs.sql | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 docker/migrations/forward/082_swarm_runs.sql diff --git a/docker/migrations/forward/082_swarm_runs.sql b/docker/migrations/forward/082_swarm_runs.sql new file mode 100644 index 0000000000..f8b0e01adc --- /dev/null +++ b/docker/migrations/forward/082_swarm_runs.sql @@ -0,0 +1,33 @@ +-- Swarm dispatch projection table (OMN-11998) +-- Owned by node_projection_swarm in omnimarket +CREATE TABLE IF NOT EXISTS swarm_runs ( + run_id TEXT PRIMARY KEY, + correlation_id TEXT NOT NULL, + status TEXT NOT NULL, + task_hash TEXT NOT NULL DEFAULT '', + subtask_count INTEGER NOT NULL DEFAULT 0, + succeeded_count INTEGER NOT NULL DEFAULT 0, + failed_count INTEGER NOT NULL DEFAULT 0, + skipped_count INTEGER NOT NULL DEFAULT 0, + models_used TEXT[] DEFAULT '{}', + machines_used TEXT[] DEFAULT '{}', + total_cost_usd DOUBLE PRECISION DEFAULT 0.0, + cloud_equivalent_cost_usd DOUBLE PRECISION DEFAULT 0.0, + savings_usd DOUBLE PRECISION DEFAULT 0.0, + parallelism_speedup_ratio DOUBLE PRECISION DEFAULT 1.0, + decomposition_latency_ms INTEGER DEFAULT 0, + dispatch_wall_latency_ms INTEGER DEFAULT 0, + aggregation_latency_ms INTEGER DEFAULT 0, + total_latency_ms INTEGER DEFAULT 0, + endpoint_registry_hash TEXT DEFAULT '', + registry_schema_version TEXT DEFAULT '', + projection_cursor TEXT DEFAULT '', + source_event_id TEXT DEFAULT '', + source_topic TEXT DEFAULT '', + source_partition INTEGER DEFAULT 0, + source_offset INTEGER DEFAULT 0, + reducer_version TEXT DEFAULT '1.0.0', + freshness_state TEXT DEFAULT 'fresh', + observed_at TIMESTAMPTZ, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); From d99c75e553b84654d1083dd36dae2c85d4f23910 Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 11:02:37 -0400 Subject: [PATCH 2/7] chore(OMN-11998): update schema fingerprint for 082_swarm_runs migration New migration file changes the migration set hash; stamp updated via check_schema_fingerprint.py stamp. --- docker/migrations/schema_fingerprint.sha256 | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docker/migrations/schema_fingerprint.sha256 b/docker/migrations/schema_fingerprint.sha256 index 13267e172c..de0546d705 100644 --- a/docker/migrations/schema_fingerprint.sha256 +++ b/docker/migrations/schema_fingerprint.sha256 @@ -1,6 +1,6 @@ # Schema migration fingerprint for omnibase_infra (auto-generated) # Regenerate: python scripts/check_schema_fingerprint.py stamp # Verify: python scripts/check_schema_fingerprint.py verify -sha256:c73231978c0c8ef7b567c7fccf2918c291869f831da9039da48de3e207f158af -generated_at: 2026-05-22T14:49:20Z -migration_file_count: 67 +sha256:1f9089477a08750f5b925e291252c2090e591b09593617793b5eb0f837130de7 +generated_at: 2026-05-25T15:02:15Z +migration_file_count: 68 From 68324e109431f4682e2bb8dd680fa3663d69e1ea Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 11:06:50 -0400 Subject: [PATCH 3/7] fix(OMN-11998): use generated delegate skill topics --- src/omnibase_infra/runtime/service_kernel.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/omnibase_infra/runtime/service_kernel.py b/src/omnibase_infra/runtime/service_kernel.py index 97be126aa6..0c90919b28 100644 --- a/src/omnibase_infra/runtime/service_kernel.py +++ b/src/omnibase_infra/runtime/service_kernel.py @@ -2012,13 +2012,14 @@ async def _savings_on_message( # node_delegate_skill_orchestrator publishes completed/failed to omnimarket topics. # Without this applier the handler result is silently discarded and the CLI adapter # times out waiting for onex.evt.omnimarket.delegate-skill-completed.v1 (OMN-11996). - _DSO_COMPLETED = "onex.evt.omnimarket.delegate-skill-completed.v1" # onex-topic-allow: declared in node_delegate_skill_orchestrator contract - _DSO_FAILED = "onex.evt.omnimarket.delegate-skill-failed.v1" # onex-topic-allow: declared in node_delegate_skill_orchestrator contract auto_wiring_result_appliers["node_delegate_skill_orchestrator"] = ( DispatchResultApplier( event_bus=event_bus, - output_topic=_DSO_COMPLETED, - allowed_output_topics=[_DSO_COMPLETED, _DSO_FAILED], + output_topic=EnumOmnimarketTopic.EVT_DELEGATE_SKILL_COMPLETED_V1.value, + allowed_output_topics=[ + EnumOmnimarketTopic.EVT_DELEGATE_SKILL_COMPLETED_V1.value, + EnumOmnimarketTopic.EVT_DELEGATE_SKILL_FAILED_V1.value, + ], ) ) logger.info( From ed5cee1cb1aeb3be96ea962da4a246723e96bf1d Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 11:24:33 -0400 Subject: [PATCH 4/7] fix(OMN-11998): declare delegate skill terminal topics --- .../enums/generated/enum_omnimarket_topic.py | 2 ++ src/omnibase_infra/event_bus/topic_constants.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/omnibase_infra/enums/generated/enum_omnimarket_topic.py b/src/omnibase_infra/enums/generated/enum_omnimarket_topic.py index c6915cad2a..90e745db0f 100644 --- a/src/omnibase_infra/enums/generated/enum_omnimarket_topic.py +++ b/src/omnibase_infra/enums/generated/enum_omnimarket_topic.py @@ -19,3 +19,5 @@ class EnumOmnimarketTopic(str, Enum): Members are sorted by (kind, event_name, version). """ EVT_BUILD_LOOP_ORCHESTRATOR_COMPLETED_V1 = "onex.evt.omnimarket.build-loop-orchestrator-completed.v1" # onex.evt.omnimarket.build-loop-orchestrator-completed.v1 + EVT_DELEGATE_SKILL_COMPLETED_V1 = "onex.evt.omnimarket.delegate-skill-completed.v1" # onex.evt.omnimarket.delegate-skill-completed.v1 + EVT_DELEGATE_SKILL_FAILED_V1 = "onex.evt.omnimarket.delegate-skill-failed.v1" # onex.evt.omnimarket.delegate-skill-failed.v1 diff --git a/src/omnibase_infra/event_bus/topic_constants.py b/src/omnibase_infra/event_bus/topic_constants.py index 37b449aa01..2051a05c23 100644 --- a/src/omnibase_infra/event_bus/topic_constants.py +++ b/src/omnibase_infra/event_bus/topic_constants.py @@ -517,8 +517,18 @@ def derive_dlq_topic_for_event_type( ) """Command topic for baseline comparison compute from the delegation orchestrator.""" +TOPIC_DELEGATE_SKILL_COMPLETED: Final[str] = ( + "onex.evt.omnimarket.delegate-skill-completed.v1" +) +"""Event topic for successful delegate-skill terminal responses.""" + +TOPIC_DELEGATE_SKILL_FAILED: Final[str] = "onex.evt.omnimarket.delegate-skill-failed.v1" +"""Event topic for failed delegate-skill terminal responses.""" + __all__ = [ + "TOPIC_DELEGATE_SKILL_COMPLETED", + "TOPIC_DELEGATE_SKILL_FAILED", "TOPIC_DELEGATION_COMPLETED", "TOPIC_DELEGATION_FAILED", "TOPIC_DELEGATION_AGENT_TASK_LIFECYCLE", From 76ac700091d93fb6a7a6f227278cfe3d1488f42f Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 12:07:32 -0400 Subject: [PATCH 5/7] test(OMN-11513): provide required LLM endpoint for adapter tests --- .../adapters/llm/adapter_llm_provider_openai.py | 4 ++-- tests/unit/adapters/llm/test_adapter_llm_provider_openai.py | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/omnibase_infra/adapters/llm/adapter_llm_provider_openai.py b/src/omnibase_infra/adapters/llm/adapter_llm_provider_openai.py index 952de0e775..e8c0b0f1b2 100644 --- a/src/omnibase_infra/adapters/llm/adapter_llm_provider_openai.py +++ b/src/omnibase_infra/adapters/llm/adapter_llm_provider_openai.py @@ -203,8 +203,8 @@ def __init__( """Initialize the OpenAI-compatible provider adapter. Args: - base_url: Base URL of the LLM endpoint. Defaults to - ``LLM_CODER_URL`` env var, falling back to ``http://localhost:8000``. + base_url: Base URL of the LLM endpoint. Defaults to the required + ``LLM_CODER_URL`` env var. default_model: Default model identifier. api_key: Optional API key for Bearer token auth. provider_name: Provider identifier for logging/routing. diff --git a/tests/unit/adapters/llm/test_adapter_llm_provider_openai.py b/tests/unit/adapters/llm/test_adapter_llm_provider_openai.py index f72f216cb9..a69ab9b07f 100644 --- a/tests/unit/adapters/llm/test_adapter_llm_provider_openai.py +++ b/tests/unit/adapters/llm/test_adapter_llm_provider_openai.py @@ -26,6 +26,12 @@ ) +@pytest.fixture(autouse=True) +def _llm_coder_url(monkeypatch: pytest.MonkeyPatch) -> None: + """Provide the required contract-driven LLM endpoint for adapter unit tests.""" + monkeypatch.setenv("LLM_CODER_URL", "http://10.0.0.1:8000") + + class TestAdapterLlmProviderOpenaiProperties: """Tests for provider properties.""" From ae937096520efc6d9af39e710d6349304c44c09b Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 12:51:15 -0400 Subject: [PATCH 6/7] chore(OMN-11998): retrigger after runner disk cleanup From 53859c28ae64795910e4c3b14d61d1dbf5945c24 Mon Sep 17 00:00:00 2001 From: jonahgabriel Date: Mon, 25 May 2026 13:13:08 -0400 Subject: [PATCH 7/7] chore(OMN-11998): retrigger after runner network cleanup