-
Notifications
You must be signed in to change notification settings - Fork 589
feat(frontend): parallel-approval hold, reload integrity, and context-driven config sections #5426
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
11 commits
Select commit
Hold shift + click to select a range
fcc7348
fix(runner): render a deferred parallel-tool sibling as a retry nudge
ardaerzin 7cb1d35
feat(runner): hold parallel approval gates and resume them together
ardaerzin b79dbf9
feat(ui): shared HeightCollapse + config-section animation primitives
ardaerzin 351be6c
feat(config): changed-path + focus primitives for config sections
ardaerzin 2fe28f9
feat(config): context-driven config sections — what-changed focus + i…
ardaerzin bf96673
feat(agent-chat): reduce approval friction — always-allow + batch res…
ardaerzin 9c4ffd1
fix(ui): use size prop for TriggerDeliveriesDrawer width
ardaerzin 4c0af83
fix(runner): don't corrupt a parked+resumed turn's persisted transcript
ardaerzin cfee335
fix(agent-chat): restore a parked+resumed approval correctly on reload
ardaerzin 99ca257
chore(hosting): Claude Code harness config in EE dev compose
ardaerzin b1e05c5
style(runner): prettier-format the rebased parallel-approval port
ardaerzin File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
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
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win
Debounce timer is never cancelled on non-paused turn exit — can destroy a later turn's live session.
pauseTimeris only cleared insidepause()/schedulePause()themselves. If a turn that armed this timer exits via any other path (run-limit trip, thrown error, etc.) before the collect window elapses, the timer keeps running against this now-orphaned controller. Sinceenv(inrun-turn.ts) is a pooled/reused object whoseparkedApprovalsis reset at the top of the nextrunTurncall, the stale timer's eventualpause()call can findenv.parkedApprovals.length === 0and fall through toenv.mcpAbort.abort()+env.sandbox.destroySession?.(env.session.id)— tearing down a completely different, currently-live turn's session.Add a cancellation method that only clears the timer (no side effects), and invoke it from
run-turn.ts's exit paths that did not pause (this requires hoistingpauseout of thetryblock sofinallycan reach it, similar tootel/activeTurn).🔒 Proposed fix
} finally { runLimits.dispose(); + if (pause && !pause.active) pause.cancelSchedule(); await activeTurn?.toolRelay?.stop().catch(() => {}); if (activeTurn) activeTurn.toolRelay = undefined; }Also applies to: 28-58