Plan approval UI does nothing — execution proceeds regardless #27

Closed
opened 2026-05-21 12:06:01 +00:00 by rawan · 0 comments
Member

The "Approve plan / Decline" panel in the JobDrawer is not a real gate. Clicking Approve persists the decision, but the agent loop never reads it and execution continues either way.

Observed: Sent a plan-style task. The job inspector showed status DONE and the assistant reply (with a file diff for hi.py) before I ever clicked Approve. The Plan tab was still showing "Plan is ready for review".

Root cause (confirmed in source, not YOLO-related):

crates/hero_shrimp_server/src/rpc/methods/plan.rs:9-17 explicitly documents the missing wiring:

Status as of Week 8 landing:

  • This RPC + the UI chips are live (operators can click Approve/Decline and the decision persists).
  • The engine-side handoff … is the FOLLOW-UP step. Until that lands, an approval is captured but doesn't yet auto-resume execution.

And grepping the engine confirms it:

$ grep -rn '"plan_approval:' crates/hero_shrimp_engine/ crates/hero_shrimp_runtime/
(zero hits)

The UI writes to the state table at key plan_approval:<job_id>; nothing in the engine consumes it.

Suggested fix: either

  1. Wire up the engine-side consumer — the agent-loop poller reads plan_approval:<job_id> between iterations and pauses when the plan is published, resumes on approve, aborts on decline. (The intended design, per the file header.)
  2. Or remove/disable the approval UI until #1 lands, so it doesn't mislead operators into thinking approval matters.
The "Approve plan / Decline" panel in the JobDrawer is not a real gate. Clicking Approve persists the decision, but the agent loop never reads it and execution continues either way. **Observed:** Sent a plan-style task. The job inspector showed status `DONE` and the assistant reply (with a file diff for `hi.py`) before I ever clicked Approve. The Plan tab was still showing "Plan is ready for review". **Root cause (confirmed in source, not YOLO-related):** [`crates/hero_shrimp_server/src/rpc/methods/plan.rs:9-17`](crates/hero_shrimp_server/src/rpc/methods/plan.rs#L9-L17) explicitly documents the missing wiring: > Status as of Week 8 landing: > - This RPC + the UI chips are live (operators can click Approve/Decline and the decision persists). > - The engine-side handoff … is the FOLLOW-UP step. **Until that lands, an approval is captured but doesn't yet auto-resume execution**. And grepping the engine confirms it: ``` $ grep -rn '"plan_approval:' crates/hero_shrimp_engine/ crates/hero_shrimp_runtime/ (zero hits) ``` The UI writes to the `state` table at key `plan_approval:<job_id>`; nothing in the engine consumes it. **Suggested fix:** either 1. Wire up the engine-side consumer — the agent-loop poller reads `plan_approval:<job_id>` between iterations and pauses when the plan is published, resumes on approve, aborts on decline. (The intended design, per the file header.) 2. Or remove/disable the approval UI until #1 lands, so it doesn't mislead operators into thinking approval matters.
rawan closed this issue 2026-06-01 14:21:20 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_shrimp#27
No description provided.