Commit e616f38
* fix(server): fail in-flight bindings on same-token reconnect (#365)
When a daemon reconnects with the same CLIENT_TOKEN, `registerAgent`
closes the old WS and immediately swaps the `agents` map to the new
connection. The old socket's `close` handler eventually calls
`unregisterAgent(agentId, oldWs)`, but by then the map points at the
new conn, so the ws-identity guard (`existing.ws !== ws`) makes it a
no-op — and the displaced connection's in-flight task bindings are
never failed. Those tasks' HTTP streams hang forever, since the bound
sink's `finish()` (which closes `AsyncEventQueue.iterate()`) is never
called, and the new daemon process never knew the old taskId so it
can't complete them either.
Extract the binding-fail loop from `unregisterAgent` into a reusable
`failBindingsForAgent` helper and invoke it from the reconnect
replacement branch *before* the map swap (while the bindings still
belong to the old conn). Superseded tasks now receive a terminal
`failed` status with a `superseded` error code; the normal disconnect
path keeps its existing `disconnected` code and message verbatim.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* test(server): strengthen #365 reconnect test (multi-binding + messageId)
Per code review: assert the per-path messageId suffix
(`-superseded`) that failBindingsForAgent wires through, and cover
the multiple-in-flight-binding case so a future early-return in the
fail loop regresses loudly.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent 5988023 commit e616f38
2 files changed
Lines changed: 142 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
401 | 401 | | |
402 | 402 | | |
403 | 403 | | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
| 455 | + | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
| 464 | + | |
| 465 | + | |
| 466 | + | |
| 467 | + | |
| 468 | + | |
| 469 | + | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
| 473 | + | |
| 474 | + | |
| 475 | + | |
| 476 | + | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
| 482 | + | |
| 483 | + | |
| 484 | + | |
| 485 | + | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
404 | 509 | | |
405 | 510 | | |
406 | 511 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
88 | 88 | | |
89 | 89 | | |
90 | 90 | | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
91 | 103 | | |
92 | 104 | | |
93 | 105 | | |
| |||
139 | 151 | | |
140 | 152 | | |
141 | 153 | | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
142 | 175 | | |
143 | 176 | | |
144 | 177 | | |
| |||
154 | 187 | | |
155 | 188 | | |
156 | 189 | | |
157 | | - | |
| 190 | + | |
158 | 191 | | |
159 | | - | |
| 192 | + | |
160 | 193 | | |
161 | 194 | | |
162 | | - | |
163 | | - | |
| 195 | + | |
| 196 | + | |
164 | 197 | | |
165 | 198 | | |
166 | 199 | | |
| |||
0 commit comments