-
Notifications
You must be signed in to change notification settings - Fork 0
Umbrella Rust Worker Migration
ai-task: noetl/ai-meta#30 · Opened: 2026-05-30 · Last update: 2026-06-02 · Status: In flight (R-2 / R-3 phases) · Blueprint: Appendix H of the global hybrid cloud architecture
Migrate the runtime hot path from Python to Rust while protecting the production Python platform. Phased rollout so each step is independently shippable + rollback-able.
Appendix H drafted in noetl/docs#174. Landed 2026-05-29.
CLI and worker depend on the same execution-engine crate; ≥80% shared code path.
| Sub-task | Done | Status |
|---|---|---|
| R-1.1 PR-1 — crate skeleton | 2026-05-27 | ✅ |
| R-1.1 PR-2a — extract YAML types | 2026-05-27 | ✅ |
| R-1.1 PR-2b — extract parser + command-gen | 2026-05-28 | ✅ |
| R-1.1 PR-2c — replace inline tools with noetl-tools (8 sub-PRs) | 2026-05-29 → 2026-05-30 | ✅ closes noetl/cli#19 |
| R-1.1 PR-2d — integration tests + docs | 2026-05-30 | ✅ |
| R-1.2 PR-1 — publish executor 0.1.0 to crates.io | 2026-05-30 | ✅ |
| R-1.2 PR-2a — i64 execution_id alignment | 2026-05-30 | ✅ |
| R-1.2 PR-2b/c — worker condition module adopts executor | 2026-05-30 | ✅ |
| R-1.2 PR-2d — worker NatsCommandSource impl | 2026-05-31 | ✅ |
| R-1.2 PR-2e — worker observability harness | 2026-05-31 | ✅ closes #32 |
| Sub-task | Done | Status |
|---|---|---|
| R-2.1 — arrow-rs in noetl-tools | 2026-05-28 | ✅ |
| R-2.2 PR-A/B — tabular encoder fallback | 2026-05-29 | ✅ |
| R-2.3 Phase A — pyarrow.flight.FlightServerBase on Python server | 2026-05-30 | ✅ |
| R-2.3 Phase B — noetl-arrow-flight-client crate | 2026-05-31 | ✅ |
R-2.3 Phase C1 — get_flight_info discovery |
2026-05-31 | ✅ |
| R-2.3 Phase C2 — mTLS + token auth | 2026-06-01 | ✅ closes #33 |
Rust worker reaches tool-kind parity for the production playbook mix. KEDA scales Rust and Python pools off the same NATS subjects (per-pool routing).
| Sub-task | Date | Status | Tracking |
|---|---|---|---|
R-3 Phase B-1 — nats tool kind in noetl-tools |
2026-06-02 | ✅ closed | #38 |
R-3 Phase B-2 — mcp tool kind in noetl-tools |
2026-06-02 | ✅ closed | #39 |
| R-3 Phase B-3 — bump worker noetl-tools ^2.16 | 2026-06-02 | ✅ closed | #40 |
| R-3 Phase B-4 — KEDA dual-scaling for Rust pool | 2026-06-02 | ✅ closed | #41 |
R-3 Phase C-1 — agent tool kind routing decision |
2026-06-02 | ✅ closed | #42 |
R-3 Phase C-2 — container tool kind callback design |
2026-06-02 → in flight | 🔄 design | #43 |
| Per-pool NATS subject routing (PRs 1-6) | 2026-05-31 → 2026-06-01 | ✅ | #42 |
| KEDA multi-trigger scaler | 2026-06-01 | ✅ | noetl/noetl#657 |
| Multi-arch image publishing (worker v5.9.0) | 2026-06-02 | ✅ closed | #44 |
| Routing flag flip on prod-shaped env | 2026-06-01 | ✅ | noetl/ops#138 |
task_sequence tool kind |
2026-06-02 surfaced | ⏳ Ready to pick up | #47 |
| Credential alias resolution | 2026-06-02 surfaced | ⏳ Ready to pick up | #48 |
Six-month review based on production load data — port to Rust if
handle_event p90 is materially constraining, otherwise declare
hybrid the durable design. Not yet reached.
| Date | Event |
|---|---|
| 2026-06-02 | Kind validation against worker v5.9.0 surfaced #47 + #48 (regression gaps). Routing scheme proven end-to-end. Session details. |
| 2026-06-02 | Worker v5.9.0 republished as native multi-arch via noetl/worker#39 (replaces failed QEMU build). |
| 2026-06-02 | R-3 Phase B/C-1 issues all closed: #38-#42 (5 closures). |
| 2026-06-01 | Ops PR-5 routing flag flip merged via noetl/ops#138. Server publishes start landing on noetl.commands.shared.<eid> / noetl.commands.python.<eid>. |
| 2026-05-31 | Rust worker observability harness PR-2e merged; /metrics endpoint + snowflake event_id. |
| 2026-05-30 | PR-2c noetl-tools registry sweep complete (8 sub-PRs); noetl/cli#19 closed. |
| 2026-05-29 | Appendix H blueprint landed via noetl/docs#174. |
-
Pick up #47
(task_sequence tool kind). Read Python implementation in
repos/noetl/noetl/worker/process.pyfirst to decide between Option A (implement in noetl-tools) and Option B (route to Python pool). -
Pick up #48
(credential alias resolution). Add
ControlPlaneClient::get_credentialif not present; wire into tool dispatch path soauth: "<alias>"resolves before reaching the tool. - Continue #43 container tool kind callback design.
- Re-run kind regression after #47 + #48 land; target ≥45/53 COMPLETED (today's 17/53 + the ~35 gap fixes).
- Umbrella: Rust Worker Parity Gaps — #47 + #48 grouped.
- Umbrella: Container Tool Callback — #43.
- Umbrella: Python Services to Rust — #45, the non-worker services parallel umbrella.
- Releases — worker, tools, cli release history.
- Home — overview
- Repo Map
- Releases
- Sessions Log
- Domain-Specific SLM Platform (#139) — RFC (design); travel#63 is the reference impl
- Secrets Wallet (#61) — SECURITY (design)
- Rust Server Port (#49) — PRIMARY
- Decoupled Context + Event Chain (#115) — RFC (design), reframes #101
- Orchestrator Scaling (#101) — reframed by #115; consume side = #115 Phase 1
- Event WAL + Derivable Storage (#104) — Round 01 (locator) PR open
- WASM Plug-in Compilation (#105) — system-pool plug-in hot-reload (ADR Phase 4)
- System Pool Design (#46) — PRIMARY
- Regression Baseline Migration (#98) — e2e
- Subscription / Listener Tool (#90) — RFC
- Container Tool Callback (#43)
- Rust Worker Parity Gaps (#47 · #48)
- Event Envelope Reconciliation (#51 in TaskList)
- Cursor Loop Mode (#100) — server v3.8.0 + tools v3.10.1, 2026-06-15
- Transfer Tool Credentials (#99) — tools v3.10.0 + worker v5.22.0, 2026-06-14
- Explicit Input Binding (#77) — v3.0.0 shipped 2026-06-09
- Rust Worker Migration (#30)
- Python Services → Rust (#45)
- Issue Tracking
- Wiki Convention
- Handoffs
- Deployment Validation
- Execution Model
- Data Access Boundary
- Observability
- noetl/noetl wiki — app + DSL
- noetl/server wiki — Rust control plane
- noetl/worker wiki — Rust pull worker
- noetl/tools wiki — tool registry crate
- noetl/cli wiki — CLI + local mode
- noetl/gateway wiki — gatekeeper
- noetl/ops wiki — Helm + manifests
- noetl/travel wiki — domain SPA reference
- Docs site — engineer-facing architecture