Skip to content

Reference n8n calendar workflow gotchas

SUPERSEDED 2026-04-30: All four n8n calendar workflow bugs documented below are now moot. Forge bypasses n8n entirely via forge_google_calendar.py. Canonical reference: Google Calendar direct client. The workflows themselves are unused but kept in n8n until Justin retires them via the UI.

The notes below are kept for historical context only.


Documented 2026-04-29 while wiring the Time Daily pipeline. Some of these may be patched in n8n later; until then, the brain works around them.

Bug 1: delete-calendar-event expects eventId, not event_id

Fixed in forge_telegram_inbox_brain.py::tool_delete_calendar_event. Use {"eventId": ...} (camelCase). event_id returned 404 every time.

Bug 2: update-calendar-event returns 500 for every payload shape

Tried eventId, event_id, id, eventId+calendarId, full set with start/end/summary/timeZone — all 500. Workflow itself appears broken n8n-side.

Workaround: forge_telegram_brain.py capture system prompt now instructs corrections to use delete + create instead of update for past events. Both delete_calendar_event and create_calendar_event work fine.

Bug 3: list-calendar-events strips colorId from response

Returned fields are fixed: id, summary, start, end, status, htmlLink, location, description. No colorId, attendees, recurrence, or other Google API fields.

Also: the workflow's default behavior with a days param is FORWARD-only (filters out past events). The workaround is to pass Google-native timeMin / timeMax ISO strings, which the workflow does honor for windowing.

Workaround: tool_list_calendar_events rewritten to use timeMin/timeMax and accept a hours_back param (so the brain can find events Justin logged earlier today for corrections). The Time Daily aggregator classifies events by summary-text patterns (in forge_time_daily_aggregator.py::_PATTERNS) instead of relying on colorId.

n8n API access

Justin's n8n API key (N8N_API_KEY in ~/.forge-secrets/n8n.env) returns Forbidden for /api/v1/workflows. Cannot edit workflows from forge backend. To fix the underlying n8n bugs, Justin must either: - (a) Edit the workflows in the n8n UI manually - (b) Issue a new API key with admin scope - (c) Or forge builds a direct Google Calendar client (forge_google_calendar.py) bypassing n8n entirely. That would also need OAuth refresh_token. The existing n8n credential decryption via forge_n8n_decrypt_cred.sh no longer works (bad magic number); the script's KDF is stale relative to current n8n cred encoding.

colorId on event creation

Unverified as of 2026-04-29. The brain calls create-calendar-event with colorId in the payload. The n8n workflow returns 200 OK and the response includes eventId, but does NOT echo colorId back. Whether n8n forwards colorId to Google Calendar is unverified. To check: open the calendar app and inspect a recent bot-created event's color. If all bot-created events are the default color, the create workflow drops colorId too.

[Claude Code, bot-refiner-v2, 2026-04-29]