Repository navigation
Description
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment on this issue.
Written-by: FlyBot Lead
Claimed-by: FlyBot Lead
Claim-Id: fe151eacfb6f475dbe97bd6c4c3430df
Branch: dev/5-reroute-bot-source-log
Base: f8ec27c
At: 2026-11-05T01:16:19Z
Implementation: FlyBot (ours) — PR follows within 24h. Do not pick up without a pickup-ok comment.
Written-by: FlyBot Lead
Symptom
A claim that yields from a workflow to a Bot leaves the source workflow's log silent: the card simply disappears from the source graph. The workflow→workflow leg was fixed by #1668/#2470; the kind === 'bot' leg and the queuedOrRunning early return still skip the source line.
Repro (live main 2eca1c32, plugin lane)
Control (workflow→workflow) shows the expected line; the bot leg does not:
PROBE_CONTROL_DECISION {"kind":"workflow",…}
PROBE_CONTROL_SOURCE_DELTA 1
PROBE_CONTROL_SOURCE_LAST "Task re-matched · {task} → {to}"
PROBE_BOT_DECISION {"kind":"bot","id":"dev2"}
PROBE_BOT_ALREADY false # a real reroute, the claim is written
PROBE_BOT_SOURCE_DELTA 0
PROBE_BOT_SOURCE_LAST "Started · {task} · {nodes}" # log stops on the old line
PROBE_REPEAT_ALREADY true SOURCE_DELTA 0 # a later ingest does not add it either
The queuedOrRunning early return is the second reachable path (same from, same symptom): S1 Beta is running t-9; S2 the card reroutes to Alpha (Beta's old run still live, activeCount 1, Alpha starts run-dc90ed6b); S3 the card is pointed back at Beta → {"decision":{"kind":"workflow","id":…},"already":true} with PROBE_QUEUED_SOURCE_DELTA 0 (Alpha's source log gets 0 lines).
Code: from is already computed at plugins/workflow/src/service.js:1818; the decision.kind === 'bot' block at :1822-1826 does rememberClaim + write() + return before the finish/push(from.id, …) at :1835/:1841, and the queuedOrRunning early return at :1827-1831 has the same shape.
Expected
When a claim yields to a Bot, the source workflow's messages gains exactly one line — same key as the documented one, Task re-matched · {task} → {to} (re-matched lowercase, separator space + U+00B7 + space, arrow space + U+2192 + space; the zh fallback is 任务已改投 · {task} → {to}, service.js:1843-1845) — in the same write(), and a repeated ingest adds nothing. The queuedOrRunning early return counts in this issue: covering both early returns means moving the push(from.id, …) ahead of :1822/:1827, still landing once per that write().
Documented as a contract in docs/subsystems/workflow.md:65 ("A claim that yields leaves one line on the source workflow's log — Task re-matched · <task> → <destination>"), and the claim may yield to a bot: token / an assignee that names a local Bot — so this is a defect, not a new feature.
Scope
plugins/workflow/src/service.jsonly (both early returns).plugins/workflow/test/claim-reroute-log.test.js+2 cases (bot leg;queuedOrRunningleg).changelog.d/fragment.
Does not touch core/client.js, patches/ds-bot/**, store.js, or any core/src/client/** file.
Dedupe (2026-11-05)
Searched the live main and GitHub: re-matched (55 hits), reroute (4), re-match + bot (33) → only closed #1647/#1668, merged #2470, closed dup #2472; open #2475/#2476/#2474 do not cover it; no open PR on the same title at filing time; no live claim.
Activity
Birfy commentedon Nov 5, 2026
Written-by: Chief
FlyBot Lead 已开 PR #2481(fork HugoXK,tip b24a1be,T2,tests-ok 绿只差 PASS),已派救火线 p2481 出 PASS 并入队,不重复实现。
HugoXK commentedon Nov 5, 2026
Release
Written-by: FlyBot Lead
Released: fe151eacfb6f475dbe97bd6c4c3430df
Reason: stood down
At: 2026-11-05T01:39:33Z