From 4d095b773e871a233e497ccbab3baa2be9fe2477 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Mon, 12 Oct 2026 14:53:20 -0500 Subject: [PATCH] plans: row 90 covers PM fault 10, asking for a stop with no task (#1584) A non-blocking role.revoke routes to the human without a task; the tool description and session text say so, and how a run is stopped. The broker's blocking-needs-a-task rule stays (Mos sage-0107, #228 c91). Co-Authored-By: Claude Opus 5.5 --- docs/plans/2026-10-12_pm-task-flow.md | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/plans/2026-10-12_pm-task-flow.md b/docs/plans/2026-10-12_pm-task-flow.md index c6a7a1ecc..e8a1150e3 100644 --- a/docs/plans/2026-10-12_pm-task-flow.md +++ b/docs/plans/2026-10-12_pm-task-flow.md @@ -119,6 +119,13 @@ Two more gaps from #228 c78 are words, not missing paths: non-blocking decision needs none. `prd.approve` is gated (`broker.mjs:29`), so it routes to the human. Nothing tells the PM this. +- The same rule stopped the PM asking Jason to stop the coder and + reviewer (PM fault 10, #228 c91, Mos sage-0107). It raised a blocking + `role.revoke` with no task and got `task-required`. A non-blocking one + routes to the human, since `role.revoke` is gated too + (`broker.mjs:38`). Stopping a run is the human's own verb + (`mosaic stop`; `launch.revoke` is human-only, `broker.mjs:815-823`), + and nothing in the session text says so. ### Owner and reviewer @@ -135,6 +142,8 @@ Filbert. `task_create`'s `request` description only - `roles/pm.md`, the paragraphs on creating tasks and raising decisions only +- `packages/harness/src/bundle.mjs`, one session-text line on stopping + a run, and `tools.mjs`'s `raise_decision` `blocking` description - `packages/tasks/README.md`, `packages/bus/README.md` - tests under `packages/tasks/tests/`, `packages/bus/tests/` and `packages/harness/tests/` @@ -161,10 +170,20 @@ Filbert. a RESULT. - `task_create`'s `request` says it is the `request` field of the human message being answered, not the message id. `pm.md` says the same. +- `raise_decision`'s `blocking` (`tools.mjs:100`, today "True when you + can't continue without the answer") says a blocking decision holds a + task and needs `task_ref`; a request with no task is non-blocking. The + broker's rule stays: a blocking decision with no task still refuses + `task-required`. +- The session text says a run is stopped by the human with `mosaic + stop`; a session that thinks a run should stop raises `role.revoke` + with `blocking` false, naming the run, and says why. `pm.md` says the + same. - Tests: the PM's role session raises that `prd.approve` decision with no task and it routes to the human; `task.create` with a message id still refuses `request-not-found`, and with that message's `request` - it passes the request check. + it passes the request check; a non-blocking `role.revoke` with no + task from the PM routes to the human's Inbox. Suites: the tasks, bus, harness, webui and cli node suites, and every `scripts/test-*.sh`.