tractor/ai/prompt-io/opencode/20260812T030608Z_1095e7f7_p...

2.0 KiB

The user requested the second iterative refinement for Tractor PR 490: ensure non-EOC failures from a shared underlying broadcast receiver do not leave peer subscribers blocked forever, then stop for a complete commit plan.

git diff HEAD~1..HEAD -- tractor/trionics/_broadcast.py

Added shared terminal failure publication for ordinary Exception values. The receive owner gets the original exception; peers may drain retained values and then get a fresh BroadcastReceiveError chained from the original. Late subscribers observe the same terminal state without retrying the failed underlying receiver. Process-control and cancellation-like BaseException values wake peers but are re-raised without becoming durable channel state.

git diff HEAD~1..HEAD -- tractor/trionics/__init__.py

Exported BroadcastReceiveError as the public peer-delivery exception.

git diff HEAD~1..HEAD -- docs/api/trionics.rst

Documented BroadcastReceiveError and the owner-versus-peer delivery contract, including retained-value draining and late subscribers.

git diff HEAD~1..HEAD -- tests/test_task_broadcasting.py

Added deterministic bounded regressions. One scripts a successful receive followed by RuntimeError, proving the root drains retained data, all current and late receivers observe terminal failure, and the source is not retried. The second scripts a custom BaseException, proving peers wake and take over the next source receive without retaining control-flow state.

Verification output:

.............                                                            [100%]
13 passed in 5.62s

Python compilation and git diff --check passed. Iterative adversarial review drove independent peer exception wrappers, ordinary-versus-control-flow classification, bounded test completion, public docs, and the final catch-all peer wake. Final review found no issues.