Skip to content

Plan step timeouts do not interrupt hung tools #312

Description

@Calmingstorm

Failure scenario

Create a plan step whose tool awaits forever or sleeps for 60 seconds, with timeout: 1.

StepExecutor awaits the tool without any deadline. It compares elapsed time only after the tool returns. A hung tool therefore hangs the entire plan forever, and a 60-second tool performs all of its work before the planner finally labels it a one-second timeout. Because the planner waits for each ready batch with asyncio.gather, one such step also prevents completion/reporting of every sibling in that batch.

Sites

  • src/odin/executor.py:38-45 awaits the tool with no asyncio.timeout()/wait_for() enforcement and checks elapsed time only afterward.
  • src/odin/planner.py:118-121 waits for the entire concurrent batch, so a non-returning timed step stalls plan progress.

Expected result

Apply the configured deadline around each attempt, cancel and cleanly settle timed-out work, return StepStatus.TIMEOUT at the deadline, and define whether timeout attempts are retryable without letting an abandoned attempt continue mutating state.

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions