# Session State ## Current Focus Agent Context API Phase 2 & 3 Complete ## Recently Completed - **Agent Context API Phase 2 & 3** — Write operations (complete, uncomplete, update due, update task), create operations (task, shopping), and management UI in settings. Fixed SQLite timestamp scanning issue. - **Sync log + clear cache feedback** — migration `016_sync_log.sql`, store methods `AddSyncLogEntry`/`GetRecentSyncLog`, handler changes, template partial `sync-log.html` - `HandleClearCache` now renders sync log HTML (replaces `hx-swap="none"`) - `HandleSyncSources` adds log entry after sync - `HandleSettingsPage` passes `SyncLog []store.SyncLogEntry` to template - Tests: `TestStore_AddAndGetSyncLog`, `TestStore_GetRecentSyncLog_LimitsResults`, `TestHandleClearCache_AddsLogEntry`, `TestHandleClearCache_ReturnsHTMLSyncLog`, `TestHandleSettingsPage_IncludesSyncLog`, `TestHandleSyncSources_AddsLogEntry` - **Bug 1: Todoist incremental sync** — added 5 tests exercising the incremental merge path (upsert, delete completed/deleted, sync token storage/reuse, forceRefresh). Code was already correct, just untested. - Tests: `TestFetchTasks_IncrementalSync_UpsertsActiveTasks`, `TestFetchTasks_IncrementalSync_DeletesCompletedAndDeletedTasks`, `TestFetchTasks_IncrementalSync_StoresNewSyncToken`, `TestFetchTasks_IncrementalSync_UsesSavedSyncToken`, `TestFetchTasks_ForceRefresh_ClearsSyncToken` - **Bug 2: Task completion response/headers** — added assertions for response body (`rendered:completed-atom`), Content-Type header, HX-Reswap/HX-Trigger headers, template data verification. Code was correct, assertions were missing. - Tests updated: `TestHandleCompleteAtom_Todoist`, `TestHandleUncompleteAtom_Todoist` - New test: `TestHandleCompleteAtom_RendersCorrectTemplateData` - **Bug 3: Google Calendar cache layer** — calendar events now cached via `CacheFetcher` pattern, surviving API outages. - New migration: `migrations/015_calendar_events.sql` - New store methods: `SaveCalendarEvents`, `GetCalendarEvents`, `GetCalendarEventsByDateRange` - New cache key: `store.CacheKeyGoogleCalendar` - New handler method: `fetchCalendarEvents` (uses `CacheFetcher` with stale-cache fallback) - `BuildTimeline` now reads events from store (removed `calendarClient` param) - Tests: `TestBuildTimeline_ReadsCalendarEventsFromStore`, `TestFetchCalendarEvents_CacheFallbackOnAPIError`, `TestSaveAndGetCalendarEvents` - All tests pass (`go test ./...`) ## Previously Completed - Extracted project-agnostic dev methodology to `~/.claude/CLAUDE.md` - Created `~/.claude/roles/` with architect.md, implementor.md, reviewer.md - Slimmed task-dashboard `CLAUDE.md` (87→72 lines, references global for methodology) - Trimmed `DESIGN.md` (removed Development Workflow, Git Practices, TDD methodology, ADR methodology, Config Reference duplication) - Deleted `ARCHITECT_ROLE.md`, `IMPLEMENTOR_ROLE.md`, `REVIEWER_ROLE.md` from repo ## Previously Completed - Build version footer with ldflags injection (`deploy.sh`, `index.html`) - `assertTemplateContains` test helper, refactored existing template tests - `scripts/logs` for fetching production journalctl - Fix passkey registration: hide UI when WebAuthn not configured (WebAuthnEnabled flag) - Added no-cache header tests for #66 ## Completed Bugs (All Verified) - **#74**: Feature toggles — tests: `TestHandleToggleFeature`, `TestHandleCreateFeature`, `TestHandleDeleteFeature`; docs: DESIGN.md §4.3 - **#56**: Box contents overflow — CSS-only fix, documented in DESIGN.md - **#65**: Google Tasks — timeline tests cover integration; API client lacks dedicated unit tests - **#66**: No-cache headers — tests: `TestHTMLResponse_SetsNoCacheHeaders`, `TestJSONResponse_SetsNoCacheHeaders` - **#67**: Z-index — CSS-only fix, documented in DESIGN.md §z-index hierarchy - **#68**: Track completion — tests: `TestHandleCompleteAtom_Todoist`, `TestHandleCompleteAtom_Trello` - **#69**: Timeline calendar — tests: `TestCalcCalendarBounds`, `TestBuildTimeline_IncludesOverdueItems`; docs: DESIGN.md §Timeline View - **#70**: Clear inputs — tests: `TestShoppingQuickAdd_Success`; docs: DESIGN.md §Quick Add UX - **#71**: Shopping checkmarks — tests: `TestShoppingModeItemsTemplateFiltersChecked` - **#72**: Inline add per store — tests: `TestShoppingQuickAdd_ShoppingModeReturnsStoreItems` - **#73**: Store grouping — partial tests, partial docs ## Agent Context API - Status: [COMPLETED] Phase 1, 2, & 3 - Tests: `internal/handlers/agent_test.go` (comprehensive) - Docs: ADR-005, DESIGN.md §Agent Context API - Write operations, Creation, and Management UI all implemented and verified. ## Known Gaps - Google Tasks API client lacks dedicated unit tests (integration tested via timeline) - WebAuthn passkeys require `WEBAUTHN_RP_ID` and `WEBAUTHN_ORIGIN` env vars in production ## Remaining Items (Feature Requests) - #12: Research task durations - #28: Bugs as first-class atoms - #30: Consistent background opacity - #31: PlanToEat ingredients - #33-38: Shopping/timeline features ## Next Steps 1. Set `WEBAUTHN_RP_ID` and `WEBAUTHN_ORIGIN` in production to enable passkeys 2. Implement feature requests #12, #28 etc. ## Process Improvements - Extracted dev workflow to `~/.claude/CLAUDE.md` — reusable across projects - Role definitions now in `~/.claude/roles/` — project-agnostic - CLAUDE.md reduced from 87 to 72 lines — faster to parse - DESIGN.md trimmed ~200 lines of duplicated methodology