2a61fe69f1
captureBaseline stored the raw, unclipped last-assistant block while resolve() compares against clip(...) capped at MAX_SCRAPE_CHARS. For a block longer than 4000 chars the two capped representations never match even when the pane is unchanged, defeating the CB-115 misattribution guard and letting a stale completion resolve a rapid back-to-back send. Clip the baseline identically. Regression test: an unchanged >cap block stays suppressed. Surfaced by the fan-out issue-hunt E2E (1 primary -> 3 concurrent workers, e2e/issue_hunt_test.py, added here). The same hunt's WorkerService.stop() and Rendezvous.complete() findings were verified as false positives (locatePane is already guarded; the sender's finally-close already removes the waiter). Closes #2
3 lines
19 B
Plaintext
3 lines
19 B
Plaintext
__pycache__/
|
|
*.pyc
|