Skip to content

fix(scheduler): Mark write tools as sequential to prevent same-turn list race#497

Merged
dcramer merged 1 commit into
mainfrom
fix/scheduler-sequential-write-tools
Jun 3, 2026
Merged

fix(scheduler): Mark write tools as sequential to prevent same-turn list race#497
dcramer merged 1 commit into
mainfrom
fix/scheduler-sequential-write-tools

Conversation

@sentry-junior

@sentry-junior sentry-junior Bot commented Jun 3, 2026

Copy link
Copy Markdown
Contributor

Problem

When the model emits slackScheduleCreateTask and slackScheduleListTasks in the same response, pi-agent-core executes them concurrently by default (executionMode defaults to "parallel"). The list call can start before the create has written the task to the team index, causing listTasksForTeam to return { tasks: [], truncated: false } even though the create succeeded and returned a valid task ID.

Root cause: pi-agent-core checks whether any tool in the current batch has executionMode: "sequential". If so, the entire batch executes sequentially. The scheduler write tools were missing this flag, so they ran in parallel with any co-emitted list call.

Fix

Add executionMode: "sequential" to the four scheduler write tools: createTask, updateTask, deleteTask, and runTaskNow. The read-only listTasks tool does not need the flag — it inherits the sequential gate from any write tool in the same batch, which is exactly the scenario that triggers the bug.

Verification

  • All 25 existing tests still pass.
  • New test "all write tools have executionMode sequential" explicitly asserts the contract.

Fixes #496


View Session in Sentry

Action taken on behalf of David Cramer.

…ist race

When the model emits slackScheduleCreateTask and slackScheduleListTasks in
the same response, pi-agent-core executes them concurrently by default. If
the list call starts before the create has written the task to the team index,
listTasksForTeam returns an empty result even though the create succeeded.

All scheduler write tools (create, update, delete, runNow) now declare
executionMode: "sequential". pi-agent-core makes the entire tool batch
sequential when any tool in it carries that flag, so a following list call
will always observe the completed write.

Fixes #496

Co-authored-by: David Cramer <noreply>
@vercel

vercel Bot commented Jun 3, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
junior-docs Ready Ready Preview, Comment Jun 3, 2026 12:32pm

Request Review

@dcramer dcramer marked this pull request as ready for review June 3, 2026 12:56
@dcramer dcramer merged commit 2c739a9 into main Jun 3, 2026
16 checks passed
@dcramer dcramer deleted the fix/scheduler-sequential-write-tools branch June 3, 2026 12:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

slackScheduleListTasks returns empty after task creation

1 participant