We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
docs(adoption): noetl/worker#31 (producer-side credential scrubbing) Extends the landing-history table with PR #31 (5.6.0): a new `src/scrub.rs` module runs at the top of `build_call_done_result` so all three emit paths (inline `result.context`, durable PUT, shm cache) ride a scrubbed clone. Mirrors Python's `producer_scrub_payload` shape — sensitive-key matching with case + separator normalisation, value-pattern matching for Bearer / Basic / JWT / private-key blocks + vendor prefixes, recursive walk replacing matches with `[REDACTED]`. Updates the "in flight or pending" section: credential scrubbing is no longer an open follow-up. Only remaining open work before the next major Appendix H phase (R-2.3 Arrow Flight) is live kind-cluster validation of R-2.1 + R-2.2 + scrub end-to-end. 87/87 lib tests pass (15 new in scrub::tests + 2 new in executor::command::tests).
docs(adoption): noetl/worker#30 (R-2.2 tabular outputs as Arrow IPC) Extends the landing-history table with PR #30 (5.5.0): the worker now stages tabular tool outputs (DuckDB / Postgres / Snowflake rowsets, `{columns, rows}` shape) as Arrow IPC stream bytes in the shm cache instead of JSON when they exceed the inline budget. Colocated consumers switch on `IpcHint.media_type = "application/vnd.apache.arrow.stream"` to pick the Arrow decoder; non-tabular outputs stay on the JSON fallback (#28). The 5-row fallback chain from #29 is preserved — only the shm payload encoding changes per-context. Durable PUT stays JSON regardless so cross-node consumers see no behaviour change. Updates the "in flight or pending" section: R-2.1 + R-2.2 are both fully landed worker-side. Next major Appendix H phase is R-2.3 (Arrow Flight gRPC endpoint for tabular cross-node fetch); open follow-ups are credential-scrubbing-before-durable-PUT and live kind-cluster validation of R-2.1 + R-2.2 together.
docs(adoption): noetl/worker#24 closed — cross-node durable result-store slice Extends the landing-history table with the fifth + final PR in the `call.done` payload series: 5. #29 (5.4.0) — durable result-store via `ControlPlaneClient::put_result` → `ResultRef` reference with optional nested `ipc: IpcHint`. Cross-node consumers can now fetch the bytes via `GET /api/result/resolve`; colocated consumers keep the shm fast path. `build_call_done_result` is now a 5-row fallback chain: - inline `context` (≤ 100 KB) - durable + ipc (both succeed) - durable only (shm fails) - ipc only (durable fails — matches #28 degraded mode) - status only (everything fails — visible drop) Updates the "in flight or pending" section: #24 is fully closed; the R-2.1 worker-side application has landed in both colocated AND cross-node forms. Next major Appendix H phase is R-2.2 (tabular tool outputs via `arrow_codec::encode_record_batch`).
docs(adoption): noetl/worker#24 call.done reference-only payload series Documents the four-PR progression (#25 → #26 → #27 → #28) aligning the worker's `call.done` payload with the Python broker's `_validate_reference_only_payload` contract: 1. #25 (5.1.3) — minimum-viable `{status}`-only emit (forward-progress fix; strips all tool output). 2. #26 (5.2.0) — restores data flow via inline `result.context` for in-budget outputs. 3. #27 (5.2.1) — Rust-side pre-check against `NOETL_EVENT_RESULT_CONTEXT_MAX_BYTES` so over-budget tool output is visibly dropped rather than silently truncated. 4. #28 (5.3.0) — colocated-consumer slice: over-budget outputs stage in the same-node Arrow IPC cache (`noetl-arrow-cache` 0.1.0, R-2.1) and ride the event as `result.reference`. Also updates the "Sub-PRs in flight or pending" section: the colocated slice is now ✅; the durable `result_store` cross-node path is the next open #24 slice; the next major Appendix H phase is R-2.2 (tabular tool outputs via `arrow_codec::encode_record_batch`).
noetl-executor-adoption: kind-validation fixes row (5.1.1 + 5.1.2) Add a R-1.2 sub-PR landing history row for the three latent worker bugs surfaced + fixed during the kind-validation pass: - noetl/worker#19 — NATS URL inline auth (5.1.1) - noetl/worker#21 — registration payload (5.1.2) - noetl/worker#23 — command_id numeric JSON (5.1.2) These had never fired before because the Rust worker had only been exercised against MockSource in unit tests + anonymous-NATS dev configs. Kind validation against the real Python broker caught all three in sequence. Refs noetl/ai-meta#30 validation summary.
noetl-executor-adoption: NATS consumer-lag landed (#17); R-1.2 chunk done Add the consumer-lag row to the R-1.2 sub-PR landing history table (noetl-worker 5.1.0 / noetl/worker#17): - New src/nats/lag_poller.rs with periodic poll task spawned from Worker::run. Updates two gauges: noetl_worker_nats_consumer_pending and noetl_worker_nats_consumer_ack_pending (both labeled stream + consumer). - Cadence WORKER_NATS_LAG_POLL_INTERVAL env (default 5s, clamped ≥1s). - KEDA can now drive worker-pool autoscaling off the worker's own /metrics endpoint. - Behaviour-additive (feat:) → 5.0.0 → 5.1.0. Strike through the final "in flight" bullet and add a closing note: the R-1.2 worker chunk + every documented follow-up is done; next Appendix H phase is R-2.1 (noetl-arrow-cache crate). Refs noetl/ai-meta#30.
noetl-executor-adoption: meta.attempts landed (#15); both EE-3 follow-ups done Add the meta.attempts row to the R-1.2 sub-PR landing history table (noetl-worker 5.0.0 / noetl/worker#15): - Threads Command.attempts: u32 (executor 0.3.0) through every emitted envelope's meta field. - meta: Some({"attempts": N}) populated ALWAYS — even attempts=0 is a meaningful signal; projector reads uniformly. - 7 helpers + CommandExecutor::emit_event signatures gained attempts: u32 → feat: + BREAKING CHANGE: → 4.0.0 → 5.0.0. Both EE-3 follow-ups now ✅: - App-side snowflake event_id (#14, 4.0.0) - meta.attempts propagation (#15, 5.0.0) Remaining pending bullet: NATS consumer lag metric (PR-2e follow-up; unrelated to EE). Refs noetl/ai-meta#30.
noetl-executor-adoption: app-side snowflake event_id landed (#14) Add a new R-1.2 sub-PR row for the snowflake event_id work in noetl-worker 4.0.0: - Layout mirrors noetl.core.common.get_snowflake_id 1:1 — same 41/10/12 bit split, same env knobs (NOETL_SNOWFLAKE_EPOCH_MS, NOETL_SNOWFLAKE_NODE_ID, NOETL_SHARD_ID). - Cross-stack compat test (id_layout_matches_python_helper_formula) reconstructs the Python helper's bit-packing formula from a Rust-generated id. - Constructor signatures changed → feat: + BREAKING CHANGE: → semantic-release auto-bumped 3.0.0 → 4.0.0. Update the "in flight or pending" bullet to strike through the app-side snowflake entry (done) and link noetl/worker#13 as the remaining EE-3 follow-up (meta.attempts propagation). Refs noetl/ai-meta#30.
noetl-executor-adoption: PR-EE-3 landed; EE series complete After noetl/worker#11 merged (noetl-worker 3.0.0): - Add EE-3 row to the R-1.2 sub-PR landing history table. - Replace the "in flight or pending" EE bullet with the four-PR complete status (✅ EE-1 / EE-2 / EE-3 / EE-4). - Surface two follow-ups that fell out of EE-3 scope: - App-side snowflake event_id generation (observability.md Principle 3 — current code passes None and the server's gen_snowflake() DB default fires). - meta.attempts propagation (Command.attempts exists on the executor 0.3.0 shape but outgoing events leave meta: None). Refs noetl/ai-meta#30 — EE umbrella.
noetl-executor-adoption: EE series progress (3 of 4 landed) Expand the cross-repo EE bullet under "Sub-PRs in flight or pending" so worker contributors can see the full status before picking up PR-EE-3: - PR-EE-1 ✅ noetl/cli#37 (noetl-executor 0.3.1) - PR-EE-2 ✅ noetl/server#6 + pipeline-fix #7 (noetl-server 2.0.1) - PR-EE-4 ✅ noetl/noetl#639 (noetl 3.0.0) - PR-EE-3 ⏳ here — replace WorkerEvent with ExecutorEvent re-export; sends new wire shape. Both servers accept either form via aliases so this is safe to land any time. Drop the duplicate envelope-reconciliation bullet (the longer one consolidates it). Cross-link to noetl/server wiki event-envelope page.
docs(wiki): record PR-2e (observability harness) + EE-1 progress PR-2e (noetl/worker#8) landed; noetl-worker now at 2.1.0 with Prometheus /metrics endpoint + 7 metrics covering every boundary (pulls, dispatch, event emit, concurrent dispatches). Updates: - R-1.2 sub-PR landing history extended with PR-2e row covering the 7-metric inventory, the dedicated 9090 port, the observability.md Principle 2 satisfaction, and the noetl/ai-meta#32 closure. - Sub-PRs-in-flight: PR-2e removed (landed); event envelope reconciliation roadmap updated to reflect PR-EE-1 landed on noetl/cli (executor 0.3.1) and PR-EE-3 (worker switch) is the remaining worker-side step waiting for server-side PR-EE-2 + PR-EE-4. - NATS consumer lag metric noted as a follow-up from PR-2e. Refs noetl/ai-meta#30 -- Appendix H umbrella. Refs noetl/worker#8 -- PR-2e. Refs noetl/cli#37 -- PR-EE-1 (which the worker switch will eventually adopt). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
docs(wiki): record R-1.2 PR-2d-2 worker adoption (1.1.0 → 2.0.0) Updates noetl-executor-adoption.md to reflect that PR-2d-2 landed (was 'planned' in the previous version): - "What the worker imports" section: drops 'Planned' framing; documents each surface (CommandSource, ClaimOutcome, Pulled<H>, Command) with its actual worker call site. - New "AckHandle design" sub-section explains why NatsAckHandle is NatsAckHandle { message, notification } not bare Message -- ClaimOutcome doesn't carry execution_id on AlreadyClaimed / RetryLater / Failed variants, so the notification metadata rides in the ack handle for observability.md Principle 4 compliance. - New "Lossless WorkerCommand → ExecutorCommand translation" table documents each field mapping; references the translate_carries_full_context_as_input_including_cases test that locks in the contract. - R-1.2 sub-PR landing history extended with PR-2d-2 + the two CI fixes (PRs #4 and #5) so the version cascade 1.1.0 -> 1.1.2 -> 2.0.0 is auditable. - Sub-PRs-in-flight section: PR-2d-2 removed (landed); PR-2e (Prometheus metrics harness, noetl/ai-meta#32) added as the next worker-side R-1.2 deliverable. - Adds worker-source link reference. Refs noetl/ai-meta#30 -- Appendix H umbrella. Refs noetl/worker#6 -- the PR this row documents. Refs noetl/ai-meta#32 -- the metrics harness follow-up. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
docs(wiki): update noetl-executor-adoption for 0.3.0 trait surface PR-2d-1 (noetl/cli#35) landed the breaking CommandSource trait redesign for noetl-executor 0.3.0. Worker wiki updated to: - Document the new types the worker will import from noetl_executor::worker::source in PR-2d-2: CommandSource trait (with ack lifecycle + associated AckHandle), ClaimOutcome enum (4-state — Claimed/AlreadyClaimed/RetryLater/Failed), Pulled<H> wrapper, and the enriched Command (now carries render_context + attempts). - Replace the placeholder "Planned for PR-2d" section with a concrete table mapping each new type to its worker call site. - Add R-1.2 PR-2d-1 to the companion-PRs table on noetl/cli with a deep-link to the cli wiki's design-decisions section. - Bump docs.rs link versions 0.2.1 -> 0.3.0 throughout. - Rename "PR-2d" -> "PR-2d-2" in the "in flight" section since the planned work split into two PRs (cli trait redesign + worker adoption). Refs noetl/ai-meta#30 -- Appendix H umbrella. Refs noetl/cli#35 -- the PR that landed the 0.3.0 surface this worker page now documents. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
docs(wiki): scaffold worker wiki (Home + noetl-executor-adoption + release-pipeline + sidebar) First substantive content for the noetl-worker wiki. Replaces the "Welcome to the worker wiki!" stub with a Home page covering crate architecture, module layout, and pages. - **Home.md**: dependency graph, module layout table (per-module link to GitHub source), distribution channels, related repo cross-links. - **noetl-executor-adoption.md**: companion to the cli wiki's executor-crate-architecture page from the worker side. Lists what the worker imports from noetl-executor today (Operator, Condition, evaluate_structured_condition), what stays worker-local (pull-loop control flow per § H.10), and the R-1.2 sub-PR landing history (PR-2c shipped; PR-2d planned). - **release-pipeline.md**: documents the semantic-release → release-worker flow, the GitHub-Actions safeguard gotcha (GITHUB_TOKEN-created tags don't fire workflows), and the fix pattern noetl/cli uses (#32) which noetl/worker#4 will adopt. - **_Sidebar.md**: navigation; cross-links to cli + tools + server + noetl + ops wikis. Cross-references all use the noetl/<repo>#<NN> format per the ai-meta cross-repo issue-linking discipline. Refs noetl/ai-meta#30 -- Appendix H umbrella. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>