fix(scheduler): Mark write tools as sequential to prevent same-turn list race#497
Merged
Merged
Conversation
…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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
When the model emits
slackScheduleCreateTaskandslackScheduleListTasksin the same response, pi-agent-core executes them concurrently by default (executionModedefaults to"parallel"). The list call can start before the create has written the task to the team index, causinglistTasksForTeamto 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, andrunTaskNow. The read-onlylistTaskstool 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 write tools have executionMode sequential"explicitly asserts the contract.Fixes #496
View Session in Sentry
Action taken on behalf of David Cramer.