From e3c3aab974d8f25c14d71c9058efa35dd9533157 Mon Sep 17 00:00:00 2001 From: Filip Janus Date: Wed, 26 Aug 2026 13:57:51 +0200 Subject: [PATCH] Skip downstream dispatch for modular issues after triage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modular issues stop after triage — no rebase, backport, rebuild, or reproducer jobs are enqueued. This lets us validate triage results for modular packages before enabling the full pipeline. Co-authored-by: Cursor --- ymir/agents/triage_agent.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ymir/agents/triage_agent.py b/ymir/agents/triage_agent.py index aede715b7..8269c1ed8 100644 --- a/ymir/agents/triage_agent.py +++ b/ymir/agents/triage_agent.py @@ -1581,6 +1581,10 @@ async def retry(task, error, input=input, user_triggered=user_triggered): except Exception as e: logger.warning(f"Failed to check/queue primary for sibling {input.issue}: {e}") + # Modular issues (downstream_component = "module:stream/package") + # stop after triage — no downstream jobs or reproducer. + _modular_component = "/" in (state.downstream_component or "") + # Dispatch to downstream queues if output.resolution == Resolution.ERROR: await retry(task, output.data.model_dump_json()) @@ -1599,7 +1603,7 @@ async def retry(task, error, input=input, user_triggered=user_triggered): Resolution.CLARIFICATION_NEEDED, Resolution.OPEN_ENDED_ANALYSIS, ): - if auto_chain: + if auto_chain and not _modular_component: if output.resolution == Resolution.OPEN_ENDED_ANALYSIS: queue = RedisQueues.OPEN_ENDED_ANALYSIS_LIST.value downstream_payload = output.data.model_dump_json() @@ -1651,11 +1655,17 @@ async def retry(task, error, input=input, user_triggered=user_triggered): if queue is not None: await fix_await(redis.lpush(queue, downstream_payload)) logger.info(f"Pushed {input.issue} to {queue}") + elif _modular_component: + logger.info( + f"Modular issue {input.issue} — stopping after triage, skipping downstream queue" + ) else: logger.info(f"AUTO_CHAIN disabled, skipping downstream queue for {input.issue}") if output.resolution in _REPRODUCER_ELIGIBLE_RESOLUTIONS: - if enqueue_reproducer: + if _modular_component: + logger.info("Modular issue %s — skipping reproducer queue", input.issue) + elif enqueue_reproducer: async with mcp_tools(os.environ["MCP_GATEWAY_URL"]) as gateway_tools: await _enqueue_reproducer(redis, state, user_triggered, gateway_tools) else: