Skip to content

Follow-up turns sent to completed delegated child threads stay queued forever after a T3 restart #42

Closed

Description

@tannerpolley

Observed (2026-10-14/15, ePC-SAFT repository-managed project, root thread 9354899b)

T3 restarted at about 23:22 UTC on 2026-10-14; it cancelled two running delegated review tasks. Right after it came back I continued two completed delegated child threads with t3_thread_send (mode auto), the documented way to give a finished child a follow-up turn:

Child thread Queued run requestedAt startedAt
thread:delegated-task:command%3Amcp%3A68b37636-…%3Adelegate-task%3A504-ignore-stray-ipopt-opt-20261014-sol ordinal 2 2026-10-14T23:26:12Z null (still queued at 02:00Z)
thread:delegated-task:milestone-issue%3A9354899b-…%3A6%3A5856556250%3Afirst ordinal 3 2026-10-14T23:25:33Z null (still queued at 02:00Z)
  • Both threads showed status queued, activeRunId: null, pendingRequestCount: 0, for about 2.5 hours.
  • Nothing else in the project was running; the repository's 4 worker slots were free. The repository was not paused.
  • Cancelling the queued run (t3_queue_cancel) and resending with t3_thread_send mode auto returned delivery: "started", but the new run (ordinal 3) also stayed queued with startedAt: null.
  • A fresh delegate_task (with issue) started a new child immediately (status: running).

get_repository_orchestration also reported milestones 6 and 22 as awaiting_approval throughout, with no pending request visible to the orchestrator. Milestone 22 has an eligible unclaimed issue (pingdotgg#494) that never auto-started. This may be the same stuck dispatcher.

Expected

A follow-up turn on a completed child thread starts when capacity is free, as it did before the restart (the same pattern worked repeatedly earlier on 2026-10-14).

Workaround

Cancel the queued run and start a fresh delegate_task whose prompt carries the needed context. This loses the child's conversation context and, for managed issue workers, means a new worktree, so the worker has to cherry-pick the old branch's commit.

Activity

  1. tannerpolley commented on Oct 15, 2026

    @tannerpolley
    OwnerAuthor

    Follow-up, 2026-10-15 (on main as f5fce3c, not yet in a build):

    • Retry leak in the milestone-retry fix (bdce311): reconcile runs about once a minute and gave every rejected milestone start a new attempt id. A start that kept failing (for example a deleted model role, or no available provider for the role) added one rejected receipt per pass, forever. It also broke the existing test "keeps invalid-request on rejected start replay so milestone reconciliation awaits the owner". Fixed in faaeb32: a new attempt waits 1 minute after a rejection, doubling up to a day.
    • Deleted milestones: ePC-SAFT's plan list still had milestones 23 and 24 after they were deleted on GitHub, so T3 re-read them every minute and showed them as unreadable. Fixed in ec59c62 and f5fce3c: work_through_milestone refuses a milestone that doesn't exist, and reconcile drops a plan once GitHub confirms its milestone is gone (a 404 from the milestone itself, since a 422 on the issue list can also be GitHub's spam guard).

    Both were reviewed by GPT-6.1 Sol (two rounds), and each has a test that fails without it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions