[Bug]: A child run started with `t3 thread send` from a shell never notifies the parent

未关闭 适合新手
#33,432 0 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
74/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
typescript
领域
backend

调研方向

从 apps/server/src/orchestration-v2/Orchestrator.ts 中的 recordSubagentFollowup 开始,然后阅读 DelegatedCompletionDelivery.test.ts 中相关的用例和测试。Issue 描述了一个针对条件判断的单行修改提议,以及一个复现后续跟进缺失问题的测试。完成标准是:回归测试在修改前失败、修改后通过,同时来自其他线程的发送仍被排除。

由索引模型根据 Issue 内容生成。

描述

Before submitting
  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.
Area

apps/server

Steps to reproduce
  1. In thread P, call delegate_task to start child C. Let its first run finish.
  2. With P idle, run t3 thread send <C thread id> - from a shell with a short prompt.
  3. Wait for C's new run to finish.
Expected behavior

P gets a completion notice and a new run, as it does for a later run that P sends itself with t3_thread_send.

Actual behavior

P gets no notice and no run until something else wakes it. From T3's state DB (read-only), 2026-10-25 to 2026-11-09 13:44 UTC: 731 completed child runs were started this way, and 420 ended with the parent idle and no parent run within 10 s. Of 433 idle-parent runs that did get a delegated task, 2 had no parent run within 10 s.

Root cause: recordSubagentFollowup (apps/server/src/orchestration-v2/Orchestrator.ts) creates the follow-up task, which carries the notice, when the send is a notification, has createdBy: user, continues a usage-limit stop, or has senderThreadId equal to the parent. t3 thread send signs in as an MCP client with no thread, so its send is createdBy: agent with no senderThreadId and matches none of those. The gate is the same in 0.1.8-nightly.20261109.4399 and main (4f0b74e). #31707 reports the same symptom for remote children.

Proposed fix: count a send with no sender thread like a user send: (command.senderThreadId ?? parentThreadId) !== parentThreadId in that gate. A send from a different thread stays excluded. A patch is ready: one line plus a test in DelegatedCompletionDelivery.test.ts that fails before and passes after. Sending T3CODE_THREAD_ID from the CLI would hit assertLiveCaller, which refuses a thread with no active run, and the parent is idle by then.

Impact

Major degradation or frequent failure

Version or commit

0.1.8-nightly.20261105.4218

Environment

macOS 26.6.1 arm64, Claude provider. Checked with the new unit test and with t3_thread_send through the MCP toolkit with no thread scope against a replayed Codex provider (no follow-up task before, one after). The t3 binary and a live provider were not run.

主要语言
TypeScript
星标
24.8k
派生
6.4k
平均合并
8 小时 26 分钟
30 天内合并 PR
133

环境准备

在 Codespaces 中打开

在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

pingdotgg/t3code 的其他 Issue

查看 pingdotgg/t3code 的全部 Issue

相似的 Issue

更多 TypeScript Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。