1.8 KiB
The user asked for a Tractor fix in a new isolated worktree after a live piker failure reported:
tractor.trionics._broadcast.Lagged:
Task `piker.brokers.ib.broker.handle_order_requests` overrun and
dropped `0` values
Inspection showed the lag exception was valid but its count was off by one. BroadcastReceiver.receive_nowait() treats seq as a deque index. With a one-entry queue, index zero is the only retained value and seq == 1 already means one value was displaced. The old seq - maxlen calculation therefore reported zero instead of one.
git diff HEAD~1..HEAD -- tractor/trionics/_broadcast.py
Adjusted the lag count to seq - maxlen + 1 and documented why the first invalid deque index must be included. The existing Tokio-style cursor reset remains unchanged.
git diff HEAD~1..HEAD -- tests/test_task_broadcasting.py
Added a deterministic parameterized regression covering a one-slot queue with one dropped value and a three-slot queue with two dropped values. The test keeps the root receiver idle while a child subscriber synchronously drains each produced value, asserts the exact Lagged message, and proves the next receive resumes at the oldest retained item.
Verification output:
.. [100%]
2 passed in 0.04s
.......... [100%]
10 passed in 4.65s
The targeted import resolved to the new Tractor worktree. Python compilation and git diff --check passed. Adversarial review found no actionable issues; zero-capacity channels remain a pre-existing untested edge outside this fix.