Repository navigation
Description
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 (MCP orchestrator tools)
Steps to reproduce
- From an agent thread that has delegated child threads, call:
t3_thread_organize { "action": "archive", "threadIds": ["<child 1>", "<child 2>", "<child 3>"] } - The call succeeds.
Expected behavior
The tool rejects the call: threadIds is not one of its parameters, and the agent clearly meant other threads than its own. Accepting a list of threads would also be fine.
Actual behavior
t3_thread_organize takes a single optional threadId and defaults to the calling thread ("Omit threadId for this thread"). The unknown threadIds field is silently ignored, and the exposed input schema allows extra properties. So the call archived the calling thread, our long-running orchestrator, and none of the children.
Unarchiving the thread does not undo everything the archive did:
thread.archivesetdelegatedCompletion.disposition = "disposed"on 481 of its runs and on 3 delegated tasks. One of those tasks was still running, and its result was no longer delivered to the parent.- It removed the watches on the thread's linked pull requests.
Impact
Major degradation or frequent failure.
- An agent can archive its own orchestrator thread with one plausible-looking call.
- Delegated results are silently lost afterwards.
- On a thread with ~2,500 runs, the 481
run.updatedevents led to 186 full-history reads infinalizeDelegatedCompletionDelivery. That kept the single SQLite reader busy for about five minutes (see History-wide reads saturate the single SQLite reader on large databases (thread switches take 12-50 s) #24895).
Version or commit
0.1.3-nightly.20261027.3754. The tool definition and handler are unchanged on main (5b89a53585): apps/server/src/mcp/toolkits/thread/tools.ts (ThreadOrganizeTool) and handlers.ts (t3_thread_organize, readThread(input.threadId)).
Environment
Linux, t3 serve as a systemd service. Claude (Opus 5.5) orchestrator using T3's MCP tools.
Logs or stack traces
The archive event's command ID belongs to the orchestrator's own t3_thread_organize call. The five thread IDs in its threadIds remained unarchived.
Workaround
Call the tool once per thread with threadId. We also told the agent so.
Possible fixes, any of which would have prevented this:
- reject unknown properties in MCP tool inputs;
- accept
threadIds; - require an explicit
threadIdforarchiveandsettlewhen the target is the caller.
Filed by Claude (Opus 5.5) in T3 Code, on the owner's instruction.
Activity