diff --git a/HANDOFF.md b/HANDOFF.md index 659462f..6453da6 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -4,7 +4,7 @@ Immediate baton-pass for the next fresh implementation session. ## Current objective -Run calendar pass (2/3): extend the action bus beyond create-only calendar support now that Gmail pass 1 is complete. +Run operator/polish pass (3/3): tighten operator docs, approval policy clarity, recurring verification flow, and low-noise execution reporting now that Gmail + Calendar passes are complete. ## Use these state files first 1. `WIP.md` — full standing plan and checkpoints @@ -44,15 +44,30 @@ Run calendar pass (2/3): extend the action bus beyond create-only calendar suppo - Added explicit approval metadata in workflow responses (`approval.policy`, `approval.required`, `approval.mutation_level`). - Updated docs/test payloads/validator to match the expanded Gmail contract. +## Calendar pass 2 completed in this handoff cycle +- Added workflow actions: + - `list_upcoming_events` + - `update_calendar_event` + - `delete_calendar_event` +- Added host bridge executors: + - `calendar_list_events` (`gog calendar events`) + - `calendar_event_update` (`gog calendar update`) + - `calendar_event_delete` (`gog calendar delete`) +- Preserved explicit approval policy: + - read-only calendar listing stays `low` + - mutating calendar update/delete stay `high` +- Added docs/test payloads/validator coverage for the expanded calendar contract. + ## Highest-priority next actions -1. Add `list_upcoming_events`, `update_calendar_event`, and `delete_calendar_event` actions. -2. Keep approval policy explicit per action (default-gated for mutating operations). -3. Add one compact operator test playbook for recurring verification (queue → approve → verify → cleanup). +1. Add a compact operator command/reference section for common approval flows. +2. Add one or two canned recurring verification flows (queue → approve → verify → cleanup). +3. Decide/document approval defaults clearly per action family. +4. Improve low-noise execution/result reporting in approval history. ## Success criteria for the next session -- Calendar action coverage expanded (`list_upcoming_events`, `update_calendar_event`, `delete_calendar_event`) with workflow + bridge + docs alignment. -- Approval policy remains explicit/safe for mutating calendar actions. -- `WIP.md` and memory updated with concrete IDs/evidence. +- Operator/polish pass completed with docs/playbook/history-reporting improvements. +- Approval defaults are explicit and easy to skim. +- `WIP.md` and memory updated with concrete evidence. - Meaningful commit(s) captured. ## Relevant files diff --git a/WIP.md b/WIP.md index 3cf5b58..f4bde81 100644 --- a/WIP.md +++ b/WIP.md @@ -99,9 +99,9 @@ Started: `2026-03-12` - [x] Add `delete_email_draft` - [x] Add `list_email_drafts` - [x] Add `send_gmail_draft` / send-approved-email path -- [ ] Add `update_calendar_event` -- [ ] Add `delete_calendar_event` -- [ ] Add `list_upcoming_events` +- [x] Add `update_calendar_event` +- [x] Add `delete_calendar_event` +- [x] Add `list_upcoming_events` - [ ] Decide whether Drive/Docs/Sheets need action-bus verbs next or can stay direct-tool only for now ### Then polish the operator experience @@ -134,11 +134,11 @@ Planned passes: - added `list_email_drafts` - added `send_gmail_draft` / send-approved-email path - updated workflow contract/docs/test payloads/bridge + WIP evidence -2. Calendar pass: - - add `update_calendar_event` - - add `delete_calendar_event` - - add `list_upcoming_events` - - update `WIP.md` with evidence before ending the pass +2. Calendar pass: ✅ complete + - added `update_calendar_event` + - added `delete_calendar_event` + - added `list_upcoming_events` + - updated workflow contract/docs/test payloads/bridge + WIP evidence 3. Operator/polish pass: - decide approval defaults for each action - add low-noise execution/result reporting @@ -192,16 +192,44 @@ Targeted verification evidence: - send: exit `0`, returned dry-run op `gmail.drafts.send` - `python3 -m py_compile skills/n8n-webhook/scripts/resolve-approval-with-gog.py` passed. +## Calendar pass 2 completion (2026-03-12) +Implemented in this pass: +- workflow contract + router logic for: + - `list_upcoming_events` + - `update_calendar_event` + - `delete_calendar_event` +- host bridge executor coverage for new approval kinds: + - `calendar_list_events` → `gog calendar events` + - `calendar_event_update` → `gog calendar update` + - `calendar_event_delete` → `gog calendar delete` +- docs + sample payloads + workflow validator updates for the expanded calendar contract +- explicit approval policy preserved: + - `list_upcoming_events` → `approval.mutation_level = low` + - `update_calendar_event` / `delete_calendar_event` → `approval.mutation_level = high` + +Targeted verification evidence: +- `python3 skills/n8n-webhook/scripts/validate-workflow.py skills/n8n-webhook/assets/openclaw-action.workflow.json` + - result: `OK: workflow asset structure looks consistent` +- Workflow asset inspection confirmed new router actions are present: + - `list_upcoming_events` + - `update_calendar_event` + - `delete_calendar_event` +- Host bridge command-builder verification from shipped sample payloads: + - `calendar_list_events` → `gog calendar events primary --account will@example.com --json --no-input --max 10 --days 7 --query zap --dry-run` + - `calendar_event_update` → `gog calendar update primary example-calendar-event-id --account will@example.com --json --no-input --send-updates none --summary Updated call with vendor --from 2026-03-13T18:15:00Z --to 2026-03-13T18:45:00Z --description Updated by OpenClaw action bus. --location Updated room --dry-run` + - `calendar_event_delete` → `gog calendar delete primary example-calendar-event-id --account will@example.com --json --no-input --force --send-updates none --dry-run` +- `python3 -m py_compile skills/n8n-webhook/scripts/resolve-approval-with-gog.py` passed. + ## Next-session handoff For the next fresh implementation session, start from `HANDOFF.md` + `WIP.md` rather than from old chat context. Immediate target: -- calendar pass only: - - add `update_calendar_event` - - add `delete_calendar_event` - - add `list_upcoming_events` -- keep approval policy explicit for mutating calendar actions -- run targeted verification and refresh WIP/memory/tasks before ending +- operator/polish pass only: + - add a compact operator command/reference section for common approval flows + - add one or two canned recurring verification flows + - decide/document approval defaults clearly per action family + - improve low-noise execution/result reporting in history +- refresh WIP/memory/tasks before ending ## Relevant files - `skills/n8n-webhook/assets/openclaw-action.workflow.json` diff --git a/memory/2026-03-12.md b/memory/2026-03-12.md index a27fb1b..a735109 100644 --- a/memory/2026-03-12.md +++ b/memory/2026-03-12.md @@ -173,3 +173,28 @@ - `approval-mmny879w-yvqzokpz` - `approval-mmny879w-md99hqxs` - `gog` dry-run command checks for list/delete/send each exited `0`. + +## Calendar pass 2 (fresh subagent implementation, locally verified) +- Added to `openclaw-action` workflow contract: + - `list_upcoming_events` + - `update_calendar_event` + - `delete_calendar_event` +- Preserved explicit approval metadata/policy: + - `list_upcoming_events` → `approval.mutation_level = low` + - `update_calendar_event` / `delete_calendar_event` → `approval.mutation_level = high` +- Extended host bridge `resolve-approval-with-gog.py` with executor coverage for: + - `calendar_list_events` → `gog calendar events` + - `calendar_event_update` → `gog calendar update` + - `calendar_event_delete` → `gog calendar delete` +- Added sample payloads: + - `skills/n8n-webhook/assets/test-list-upcoming-events.json` + - `skills/n8n-webhook/assets/test-update-calendar-event.json` + - `skills/n8n-webhook/assets/test-delete-calendar-event.json` +- Verification evidence (local/targeted): + - workflow structure + contract validator passed after the calendar additions + - workflow asset inspection confirmed the three new router actions are present + - bridge command-builder checks from shipped payloads produced: + - `gog calendar events primary --account will@example.com --json --no-input --max 10 --days 7 --query zap --dry-run` + - `gog calendar update primary example-calendar-event-id --account will@example.com --json --no-input --send-updates none --summary Updated call with vendor --from 2026-03-13T18:15:00Z --to 2026-03-13T18:45:00Z --description Updated by OpenClaw action bus. --location Updated room --dry-run` + - `gog calendar delete primary example-calendar-event-id --account will@example.com --json --no-input --force --send-updates none --dry-run` + - `python3 -m py_compile skills/n8n-webhook/scripts/resolve-approval-with-gog.py` passed.