Track
First-real-user E2E. Depends on #67; contract shape from #61 (MyCronApi approval/audit endpoints); data path from #68.
Purpose
The user's half of the loop. ADR-0007 says the user approves on the Control Surface, and #61 adds the contract — this issue wires it to the hosted store so a pending approval created by an agent is actually decidable in the browser.
Scope
- Approval queue surface (승인함 tab): pending approvals with what/when/which agent (origin from
client_ref prefix) and approve/reject actions calling the hosted API as the signed-in user
- Cronlet detail: source agent, schedule (+ display-only next fire time computed client-side from cron+tz), intent, delivery target, approval state, run/evidence history (read)
- Audit panel: read-only event list (ts, actor, action, outcome)
Non-scope
Policy learning, weekly review, builder redesign (#55/#56 own that), notifications.
Acceptance
- Agent-registered external Cronlet appears as pending; approving in the browser flips
external_execution_approved and the decision lands in audit with actor=user
- Surface tests for pending → approved transition and the empty states
- No fabricated presets; signed-out view unchanged
Track
First-real-user E2E. Depends on #67; contract shape from #61 (MyCronApi approval/audit endpoints); data path from #68.
Purpose
The user's half of the loop. ADR-0007 says the user approves on the Control Surface, and #61 adds the contract — this issue wires it to the hosted store so a pending approval created by an agent is actually decidable in the browser.
Scope
client_refprefix) and approve/reject actions calling the hosted API as the signed-in userNon-scope
Policy learning, weekly review, builder redesign (#55/#56 own that), notifications.
Acceptance
external_execution_approvedand the decision lands in audit with actor=user