Fix web wake respawn dedupe to only block concurrent creates.

Drop the one-shot requested flag so later worktree wake clicks can respawn a terminal after the in-flight create finishes.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jinwoo-H
2026-06-07 15:56:34 -07:00
co-authored by Cursor
parent 5c86f88a0f
commit b2f79f8f6d
2 changed files with 5 additions and 13 deletions
@@ -12,14 +12,13 @@ describe('web-runtime-wake-terminal-respawn', () => {
resetWebRuntimeWakeTerminalRespawnForTests()
})
it('dedupes wake respawn requests for the same worktree', () => {
it('dedupes concurrent wake respawn requests for the same worktree', () => {
expect(beginWebRuntimeWakeTerminalRespawn('wt-1')).toBe(true)
expect(shouldSkipWebRuntimeWakeTerminalRespawn('wt-1')).toBe(true)
expect(beginWebRuntimeWakeTerminalRespawn('wt-1')).toBe(false)
endWebRuntimeWakeTerminalRespawn('wt-1')
// Why: beginWebRuntimeWakeTerminalRespawn is one request per worktree;
// endWebRuntimeWakeTerminalRespawn only clears the in-flight bit.
expect(shouldSkipWebRuntimeWakeTerminalRespawn('wt-1')).toBe(true)
expect(shouldSkipWebRuntimeWakeTerminalRespawn('wt-1')).toBe(false)
expect(beginWebRuntimeWakeTerminalRespawn('wt-1')).toBe(true)
})
it('clears wake respawn tracking for a removed worktree', () => {
@@ -1,18 +1,13 @@
const wakeTerminalRespawnRequestedByWorktree = new Set<string>()
const wakeTerminalRespawnInFlightByWorktree = new Set<string>()
export function shouldSkipWebRuntimeWakeTerminalRespawn(worktreeId: string): boolean {
return (
wakeTerminalRespawnRequestedByWorktree.has(worktreeId) ||
wakeTerminalRespawnInFlightByWorktree.has(worktreeId)
)
return wakeTerminalRespawnInFlightByWorktree.has(worktreeId)
}
export function beginWebRuntimeWakeTerminalRespawn(worktreeId: string): boolean {
if (shouldSkipWebRuntimeWakeTerminalRespawn(worktreeId)) {
if (wakeTerminalRespawnInFlightByWorktree.has(worktreeId)) {
return false
}
wakeTerminalRespawnRequestedByWorktree.add(worktreeId)
wakeTerminalRespawnInFlightByWorktree.add(worktreeId)
return true
}
@@ -22,12 +17,10 @@ export function endWebRuntimeWakeTerminalRespawn(worktreeId: string): void {
}
export function clearWebRuntimeWakeTerminalRespawnForWorktree(worktreeId: string): void {
wakeTerminalRespawnRequestedByWorktree.delete(worktreeId)
wakeTerminalRespawnInFlightByWorktree.delete(worktreeId)
}
export function clearAllWebRuntimeWakeTerminalRespawn(): void {
wakeTerminalRespawnRequestedByWorktree.clear()
wakeTerminalRespawnInFlightByWorktree.clear()
}