umbrella(container-callback): cite server sub-issue #174 in validation closeout
dashboard: #80 closed — container_callback chain green (ops#168 + server#173 v3.0.3 + e2e#38)
Home (Last refreshed + Active umbrellas -#80 + Recently closed +#80 +
Ecosystem map server v3.0.3 / ops note + Sessions preview + Releases
preview), Sessions-Log (new top entry), Releases (server v3.0.3 row +
Last refreshed), Umbrella-Container-Tool-Callback (2026-06-10 validation
closeout: chain green, three layered bugs fixed).
docs(dashboard): #81 closed — noetl-server v3.0.2 container-tool command type fix
Home (Last refreshed + Active umbrellas + #79/#80 reconciled +
Recently-closed #81 + Ecosystem-map server v3.0.2 + Sessions/Releases
previews), Sessions-Log (full entry), Releases (Last refreshed +
timeline v3.0.2 row), Umbrella-Container-Tool-Callback (Recent-activity
row — #81 unblocks the chain).
Refs noetl/ai-meta#81
wiki: worker#60 merged — Container Tool Callback umbrella #43 Round 4 worker-side adoption ships v5.14.0
Sessions-Log: new dated entry at top documenting the worker PR
merge (worker@f96da71 v5.14.0) and the worker-side adoption
status (the last code piece of the closed Container Tool Callback
umbrella).
Home: Last-refreshed cell prefix updated with the new headline +
worker pointer bump + healthy-steady-state dashboard fingerprint.
Releases.md: prepended row for noetl-worker v5.14.0 + Last
refreshed cell updated.
Umbrella-Container-Tool-Callback: "Remaining follow-up" section
flipped from in-flight to DONE — table marks both cli#56 and
worker#60 MERGED; sequence-to-land becomes a done-sequence list;
section header reads "✅ DONE" with only the kind-validation step
on a fresh worker image remaining as housekeeping.
Refs noetl/ai-meta#43
Refs noetl/worker#59 noetl/worker#60
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
wiki: cli#56 + server#143 merged — executor 0.4.1 + Phase D R4 fan-in barrier
Sessions-Log: new dated entry at top documenting the two PR merges
(cli@77be8be v4.10.0 + server@be37e5c v2.49.0) + the worker PR
status (still draft until the noetl-executor 0.4.1 publish lands).
Home: Last-refreshed cell prefix updated with the new headline +
links.
Releases.md: prepended rows for noetl-server v2.49.0 (Phase D R4
fan-in barrier) and noetl/cli v4.10.0 (noetl-executor 0.4.1
bridge propagation); Last refreshed cell updated.
Umbrella-Container-Tool-Callback: Round-4-follow-up status table
updated — cli#56 marked MERGED, worker#60 still blocked on the
0.4.1 publish.
Umbrella-Rust-Server-Port: new Recent activity row for Phase D R4
slice 1 (fan-in / reduce barrier). Phase D status table gets a
new row marking R4 slice 1 as v2.49.0 shipped with kind-val
pending.
Refs noetl/ai-meta#43
Refs noetl/ai-meta#49 Phase D R4
Refs noetl/cli#56
Refs noetl/server#142 noetl/server#143
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
wiki: record Container-Tool Callback Round 4 worker-side adoption PRs (#43 follow-up)
Sessions-Log: new dated entry at top documenting the two-PR chain
opened today — noetl/cli#56 (executor 0.4.1 bridge propagation,
102/0) + noetl/worker#60 (draft, blocked; 126/0 against local
patched executor).
Home: Last-refreshed cell prefix updated with the new headline +
links to both PRs + per-step sequencing for landing.
Umbrella-Container-Tool-Callback: "Remaining follow-up" section
under Next-concrete-steps now carries a per-repo status table +
the merge-sequence-to-land + the expected dashboard fingerprint
after Round 4 lands (the
`noetl_worker_call_done_skipped_pending_callback_total{tool_kind="container"}`
≈ server `noetl_container_callback_total{state=...}` shape with
stale counter at ~0).
Refs noetl/ai-meta#43
Refs noetl/cli#55 noetl/cli#56
Refs noetl/worker#59 noetl/worker#60
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
docs(container-callback): umbrella #43 CLOSED — Round 5 e2e kind-val rig landed
Round 5 of the Container Tool Callback umbrella ships
(e2e#30, closes e2e#29; e2e@17de21d). All four Rust rounds are
in. Umbrella closes.
Round 5 deliverables:
- fixtures/playbooks/container_callback_happy_path/ (alpine sleep+echo)
- fixtures/playbooks/container_callback_oom/ (python:3.12-alpine
+ 40 MiB bytes() under 32Mi limit)
- scripts/kind_validate_container_callback.sh (preflight, run,
scrape metrics, sum both counters per state, assert delta ≥ 1)
Rule 0a three-page sweep:
- Home: Last refreshed + #43 moved from Active umbrellas to
Recently closed; preamble count Three → Two.
- Sessions-Log: prepend dated entry.
- Umbrella-Container-Tool-Callback: mark CLOSED with full per-round
landing inventory + drop the now-obsolete Next-concrete-steps
Rust-rounds list (worker-side pending_callback adoption is the
only follow-up).
Worker-side pending_callback adoption is the only remaining
work; tracked as a comment on the umbrella issue. Harmless
during transition (watcher callback recorded by
noetl_container_callback_stale_total).
docs(container-callback): Round 3 shipped — Tool::Container (tools v2.21.0)
noetl/ai-meta#43 Round 3 lands: Tool::Container creates a labeled
K8s Job and returns immediately, with the new
ToolResult.pending_callback marker to signal the worker should
suppress its own call.done emit (tools#37, closes tools#36;
v2.21.0).
Closes the last code round in the chain. Only Round 5 (e2e
kind-val rig) remains to close the umbrella.
Worker-side adoption of pending_callback (suppressing emit when
marker set) is a coordinated follow-up; until then the watcher's
callback is treated as stale by the server (recorded by
noetl_container_callback_stale_total). Harmless race during the
transition.
Rule 0a four-page sweep:
- Home: Last refreshed + ecosystem-map tools cell v2.20.0 → v2.21.0.
- Sessions-Log: prepend dated entry.
- Releases: prepend v2.21.0 row.
- Umbrella-Container-Tool-Callback: Recent-activity table + mark
Round 3 DONE; only Round 5 remains; document the worker-side
follow-up.
docs(container-callback): Round 1 shipped — noetl-k8s-watcher Deployment (ops@8892043)
noetl/ai-meta#43 Round 1 lands: noetl-k8s-watcher Deployment +
RBAC + shell watcher script in ci/manifests/k8s-watcher/
(ops#167, closes ops#166).
External K8s Job watcher observes Job state transitions in the
noetl namespace and POSTs terminal-state events to noetl-server's
Round-2 endpoint when Jobs carrying noetl.execution-id labels
transition to a terminal state.
Shell MVP per the sub-issue note — kubectl --watch -o json piped
through jq + curl. Cluster-scoped read-only RBAC; single-replica
Deployment with bitnami/kubectl + jq/curl installed at startup.
3× retry with backoff on 5xx/transport; never on 4xx.
Sanity-checked: kubectl kustomize renders 327 lines of valid
YAML; sh -n watcher.sh clean; jq classification dry-run resolves
Complete → succeeded.
Rounds 1 + 2 are both in. The Round-1 ↔ Round-2 chain can be
kind-validated end-to-end against the live endpoint by manually
kubectl apply-ing a labeled Job before Round 3 lands the tool
side.
Rule 0a three-page sweep (no Releases.md since noetl/ops is
untagged):
- Home: Last refreshed + ecosystem-map ops cell.
- Sessions-Log: prepend dated entry.
- Umbrella-Container-Tool-Callback: Recent-activity table +
Next-concrete-steps marked Round 1 DONE; only Rounds 3 + 5
remain.
docs(container-callback): Round 2 shipped — server v2.48.0
noetl/ai-meta#43 Round 2 lands: POST /api/internal/container-callback/
{execution_id}/{step} (server#141, closes server#140).
External K8s watcher (Round 1, noetl/ops#166) POSTs Job
terminal-state events to this endpoint when a Job carrying the
noetl.execution-id label transitions to a terminal state.
Handler validates path params, checks staleness via a single
indexed SELECT on noetl.event, and emits a call.done event on
the orchestrator's pipeline (or bumps stale counter + returns
202 if no events exist for the execution).
Six TerminalState variants matching the umbrella's failure-mode
taxonomy. Each survives in meta.terminal_state so playbooks
branch on the specific failure reason.
Two new counters + structured INFO logs. 7 new unit tests;
lib 487/0.
Round 2 unblocks Round 1 (watcher Deployment) + Round 3
(Tool::Container).
Rule 0a four-page sweep:
- Home: Last refreshed + ecosystem-map server cell
v2.47.0 → v2.48.0.
- Sessions-Log: prepend dated entry.
- Releases: prepend v2.48.0 row.
- Umbrella-Container-Tool-Callback: Recent-activity table +
Next-concrete-steps marked Round 2 DONE; Rounds 1/3/5 stay
open.
docs(container-tool-callback): settle design (Option B) + sub-issue tree
The Container Tool Kind Callback umbrella (noetl/ai-meta#43)
moves from 'design conversation; no implementation' to design
settled (Option B — external noetl-k8s-watcher deployment) with
the sub-issue tree opened across the four Rust repos:
- Round 1 noetl/ops#166 — noetl-k8s-watcher deployment + RBAC
- Round 2 noetl/server#140 — callback endpoint
- Round 3 noetl/tools#36 — Tool::Container with PendingCallback marker
- Round 5 noetl/e2e#29 — kind-val rig (happy path + OOMKilled)
Round 4 (Python tool update) deferred per the Rust-only standing
direction.
The wiki page now carries:
- The design decision rationale (Option A rejected — brittle to
Job crashes; Option C rejected — K8s 1.31+ pin too restrictive).
- Catalog entry YAML shape.
- Failure-mode taxonomy (6 call.done statuses mapped from K8s
terminal conditions).
- Recommended round ordering (Round 2 first; smallest blast
radius).
inject dates across dashboard pages for developer scanability
Per session 2026-06-02 request: "inject dates so other developers
can get a sense what is done and when and what is going on now."
Changes across pages:
- Home — adds Opened/Last update columns to active umbrella table,
appends Recently Closed (last 7 days) table with closure dates,
adds Last commit column to ecosystem map with PR links, expands
Sessions log + Releases sections with explicit dates.
- Umbrella-Rust-Worker-Migration — adds Opened/Last update at
top, dates each R-1/R-2/R-3 sub-task with completion date,
surfaces closed-issue links per phase, reshapes Recent activity
as a dated table.
- Umbrella-Rust-Worker-Parity-Gaps — adds Surfaced/Filed/Last
update at top, dates the regression run that surfaced them,
cites the master execution_id.
- Umbrella-Python-Services-To-Rust — adds Opened/Last update at
top, reshapes Recent activity as a dated table including the
ADR merge SHA.
- Umbrella-System-Pool-Design — same shape, captures the design
conversation timeline (issue file → matrix capture → ADR merge
→ wiki cross-links).
- Umbrella-Container-Tool-Callback — adds Opened/Last update,
dated activity table.
- Umbrella-Event-Envelope — adds Started/Last update, dated each
EE-1/EE-2/EE-3 landing, marked EE-4 as blocked on #45 step 1.
- Repo-Map — adds Last commit column to every repo table.
- Releases — adds Timeline section (all repos, last 14 days,
sorted by date).
Goal: a developer scanning any page can see "what's done, when,
what's next" without opening the issue tracker.
initialise NoETL ecosystem dashboard
Per session 2026-06-02 request: "use ai-meta wiki as todo umbrella
tracker for all issues and submodule repos to keep links and
description of what we do across all repos."
The ai-meta wiki becomes the single pane of glass for the NoETL
platform — cross-repo umbrellas, ecosystem map, release history,
session decisions, agent-coordination conventions.
Initial page set:
Dashboard:
- Home — active-umbrella table, ecosystem map, recent sessions,
release pointer, conventions index
- _Sidebar — navigation
Ecosystem reference:
- Repo Map — every submodule, role, current version, wiki link
- Releases — per-repo release log with GitHub Release URLs
- Sessions Log — chronological agent session entries
Active umbrellas (one page per ai-task issue):
- Umbrella-Rust-Worker-Migration (#30)
- Umbrella-Container-Tool-Callback (#43)
- Umbrella-Python-Services-To-Rust (#45)
- Umbrella-System-Pool-Design (#46)
- Umbrella-Rust-Worker-Parity-Gaps (#47 + #48)
- Umbrella-Event-Envelope (#51 EE-1..EE-4)
Conventions (pointers into agents/rules/):
- Issue-Tracking
- Wiki-Convention (the ai-meta vs per-repo split)
- Handoffs
- Deployment-Validation
- Execution-Model
- Observability
Cross-link discipline: this wiki uses bare slugs internally and
full URLs to per-repo wikis. Per-repo wikis link back to
specific pages here (not Home).