2.3 KiB
The user asked to continue after committing the paired piker EMS consumer fix. The next isolated Tractor PR 490 item was to clean cancelled-task diagnostics and define zero-buffer broadcast behavior, then review, test and stop at a complete commit plan.
git diff HEAD~1..HEAD -- tractor/trionics/_broadcast.py
Made BroadcastState.cancelled transient: receiver progress and close clear that receiver’s diagnostic, terminal EOC and shared receive failure clear all stale cancelled tasks, and durable EOC prevents peers from re-entering the closed source. broadcast_receiver() now rejects non-positive retention capacity before creating an unusable zero-length deque.
git diff HEAD~1..HEAD -- tractor/_streaming.py
Made explicit MsgStream.aclose() release its internally allocated root broadcaster while preserving graceful receive-internal EOC teardown. Used a task-local marker so the public zero-argument aclose() signature and valid subclass overrides remain compatible.
git diff HEAD~1..HEAD -- tractor/to_asyncio.py
Made LinkedTaskChannel.aclose() release its internally allocated root broadcaster before closing the underlying Trio receive channel.
git diff HEAD~1..HEAD -- tests/test_task_broadcasting.py
Added synchronized regressions for transient child cancellation diagnostics, cross-receiver terminal cleanup, durable EOC peer wakeups, root broadcaster cleanup through both public wrappers, MsgStream.aclose() subclass compatibility, and zero-buffer rejection.
Verification output:
........................... [100%]
27 passed in 5.89s
. [100%]
1 passed in 1.22s
. [100%]
1 passed in 0.88s
The integration runs cover real MsgStream actor fan-out and infected-asyncio LinkedTaskChannel fan-out. Ruff, Python compilation and git diff --check passed. Repeated adversarial review found and resolved root close re-entrancy, cross-receiver terminal retention, durable-EOC and subclass-compatibility issues; final review reported no findings.