Add crates/taskito-core/src/worker/transport.rs (a Transport trait over Read + Write, with UDS and TCP impls) and crates/taskito-core/src/worker/remote.rs (RemoteDispatcher impl WorkerDispatcher plus the attached-executor registry).
WorkerDispatcher (crates/taskito-core/src/worker/mod.rs:19) needs one method — run(job_rx, result_tx) — so the scheduler is untouched. crates/taskito-python/src/prefork/child.rs:105 already splits the connection into a Write half and a Read half; only the concrete stream changes.
Dispatch only task names an attached executor advertised in hello. Advertised slot counts feed the existing max_in_flight / claim_execution_batch gating rather than a parallel limiter.
Done when an in-memory transport test dispatches a job and returns a result, plus a test showing an executor drop leaves the job to the dead-owner reaper. Depends on the protocol module. Plan: tasks/executor-attach.md.
Add
crates/taskito-core/src/worker/transport.rs(aTransporttrait overRead + Write, with UDS and TCP impls) andcrates/taskito-core/src/worker/remote.rs(RemoteDispatcher impl WorkerDispatcherplus the attached-executor registry).WorkerDispatcher(crates/taskito-core/src/worker/mod.rs:19) needs one method —run(job_rx, result_tx)— so the scheduler is untouched.crates/taskito-python/src/prefork/child.rs:105already splits the connection into aWritehalf and aReadhalf; only the concrete stream changes.Dispatch only task names an attached executor advertised in
hello. Advertised slot counts feed the existingmax_in_flight/claim_execution_batchgating rather than a parallel limiter.Done when an in-memory transport test dispatches a job and returns a result, plus a test showing an executor drop leaves the job to the dead-owner reaper. Depends on the protocol module. Plan:
tasks/executor-attach.md.