--- model: openai/gpt-5.6-sol service: opencode timestamp: 2026-08-12T03:06:08Z git_ref: 1095e7f7 diff_cmd: git diff HEAD~1..HEAD --- 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: ```text ............. [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.