-
Notifications
You must be signed in to change notification settings - Fork 0
Umbrella Event Envelope
TaskList: #51 in the agent's running task list · Started: 2026-05-29 · Last update: 2026-06-01 · Status: In flight (EE-1 / EE-2 / EE-3 landed; EE-4 not started)
Reconcile the four divergent shapes of the event envelope that the system carries today so the Rust worker, the Python server, the projector, and the CLI all serialise/deserialise the same bytes for the same conceptual event.
Surfaced via the noetl-server wiki's event envelope page:
| Component | Type | Owns the wire format? |
|---|---|---|
| Python server | EventEmitRequest |
Today's source of truth |
| Rust server | EventRequest |
Mirror of Python (intended) |
| Rust worker | WorkerEvent |
Drifted — uses an older shape |
| noetl-executor | ExecutorEvent |
Drifted — uses CLI-local shape |
Result: serialising in worker, deserialising in server, requires careful field mapping that's currently inline + fragile.
All four shapes carry a bigint event_id generated by the
application via snowflake (per
observability.md Principle 3). Server-side
gen_snowflake() Postgres function stays as a fallback.
Every event envelope carries meta.attempts: int (retry count).
Projectors group by attempts without reaching back into worker
logs.
call.done status fields normalised across all four shapes:
COMPLETED / FAILED / ERROR / CANCELLED. Projector consumers
group by the single column without per-source translation.
Shipped in noetl-server v2.0.1 + worker v5.8.0.
Drop WorkerEvent and ExecutorEvent; replace with a shared
noetl-events crate that both worker and CLI's local-mode
runner consume. Server's Rust port (per
Umbrella: Python Services to Rust)
will use the same crate, removing the last divergence.
Will likely land as part of the shared library work in #45 step 1 (publisher crate adds the shared library skeleton).
- noetl-server wiki: event envelope page.
- Umbrella: Rust Worker Migration — the migration this reconciliation supports.
- Umbrella: Python Services to Rust — EE-4 lands as part of the shared crate work there.
EE-4: create noetl-events crate in the same workspace as
noetl-tools / noetl-executor. Both worker + executor depend
on it. Older types become re-exports during migration.
- Home — overview
- Repo Map
- Releases
- Sessions Log
- 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