diff --git a/docs/agent-lifecycle/approvals.md b/docs/agent-lifecycle/approvals.md index ffd3aa32..07dd6db0 100644 --- a/docs/agent-lifecycle/approvals.md +++ b/docs/agent-lifecycle/approvals.md @@ -216,10 +216,15 @@ target drives `push_todo`'s own upsert-by-key dedup: a re-fire of the *same schedule* against a target that hasn't reviewed the last one collapses into that one todo instead of stacking up. +**`operator` is the one exception** — it's a valid schedule target but +has no in-container todo inbox, so it keeps the original broker +`Message` path (the dashboard mirrors `to == operator` into its own +pane, same as before). + ### Missing-target failure When a target name doesn't resolve to a known agent (container -destroyed, typo, etc.) the worker: +destroyed, operator typo, etc.) the worker: 1. Records `last_result = "no such agent: "` on the per-target row. diff --git a/frontend/packages/dashboard/src/schedules.js b/frontend/packages/dashboard/src/schedules.js index 611133a1..a0b6edca 100644 --- a/frontend/packages/dashboard/src/schedules.js +++ b/frontend/packages/dashboard/src/schedules.js @@ -238,23 +238,22 @@ function intervalSecondsFromFormData(fd, namePrefix) { // Targets multi-select chip box — shared between the new-schedule // form and the edit-schedule form. Same DOM shape, same candidate -// list (containers + root); only the chip element id +// list (containers + operator + root); only the chip element id // prefix and checkbox field name vary. Used to be inlined twice in // near-identical 18-line blocks; consolidated here so a future // change (new chip kind, candidate-list source swap, etc.) lives in // one place. Returns the wrapping `