- Add default_dispatch_node_factory() to coordinator.py: reads AGENT_TEAM_REPO_OWNER / AGENT_TEAM_REPO_NAME / AGENT_TEAM_BASE_BRANCH from env; fails closed (RuntimeError) if required vars absent; delegates to make_dispatch_node with owner/repo fixed at factory time. Added to __all__. - Add tests/test_ws3_dispatch_invoker.py (25 tests): make_dispatch_node happy path + fail-closed paths (missing thread_id/diff/scope/plan, DispatcherError, unexpected exception); owner/repo injection from factory args; scope list flattening; DispatchNodeFactory export; graph DISPATCH_NODE constant; build_graph ValueError when dispatch_node given without build_verify; env-var binding for default_dispatch_node_factory; Coordinator.dispatch_node_wiring seam (ValueError when wired without build_verify_wiring). All 1069 tests pass; ruff clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0155wSD9kKFjnTMNNsDT3tiW |
||
|---|---|---|
| .. | ||
| db | ||
| nodes | ||
| transport | ||
| __init__.py | ||
| billing.py | ||
| ci_fetcher.py | ||
| ci_gate.py | ||
| coordinator.py | ||
| deadline_timer.py | ||
| dispatcher.py | ||
| graph.py | ||
| invoker.py | ||
| ledger.py | ||
| operator_cli.py | ||
| recovery.py | ||
| responder.py | ||
| resume_worker.py | ||
| state_store.py | ||
| task_model.py | ||