Files
Maven/SESSION-05-07-2026.md
T
kami 8d823000d1 fix: code-review findings on overnight-jul5
- digest queue no longer dropped on failed dispatch (retry next tick)
- collapsed reminders marked fired/rescheduled only after digest delivers
- /tools step-up gate skipped when WebAuthn is not configured (was 403 forever)
- passkey credential store rolls back memory on persist failure
- auth_test fake updated for TickTrace (branch build break)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ASstMtsZWLSRcD1Tq8T68Q
2026-07-05 17:50:21 +04:00

6.6 KiB
Raw Blame History

Overnight Session — 2026-07-05

Branch: overnight-jul5 (from infra/spine-migrations-encryption-mavweb) Architect: .opencode/agent/architect.md


Phase 0 — Setup

  • Branch overnight-jul5 created from infra/spine-migrations-encryption-mavweb
  • .opencode/agent/architect.md — orchestrator agent
  • SESSION-05-07-2026.md — this file

Phase 1 — Housekeeping

# Task Commit Status
2 Makefile hygiene-race -coverprofile in make test, add build-caldav target b9248ef done
3 db_key.env hygiene — remove live key from repo, add to .gitignore, keep .env.example already-done done
4 Passkey persistence — store credentials on disk (JSON file) instead of in-memory map 44807b6 done

Notes:

  • Live AES-256 key in deploy/db_key.env must be removed from git history. Rotate after.

Phase 2 — Test Coverage Gaps

# Task Commit Status
5 mavcaldav testscmd/mavcaldav/ (314 lines, 0 coverage). CalDAV polling, iCal parsing, value-change filtering 6daa96b done
6 mavttsd testscmd/mavttsd/ (Piper handler). TTS worker protocol round-trip a80b919 done
7 voicesink testsinternal/delivery/voicesink/. Voice channel dispatch, ErrNoSession mapping ffef44f done
8 mavweb tests — extend to cover main.go routes (server setup, template parsing, route registration, startup flags) 185f4f5 done

Notes:

  • mavweb handlers_test.go exists (14 cases). The gap is the non-handler code in main.go (549 lines) and webauthn.go (213 lines).
  • voicesink has 0 tests but is critical — it's the bridge between delivery routing and voice sessions.

Phase 3 — Easy Features (from feature ranking)

# Task Commit Status
9 Command history — read-only query over existing facts. New endpoint or /dash section f8ba396 done
10 Revert / undo — void the latest row for a fact key. Wrapper around existing append-only void mechanism a02e10f done
11 Stale-reminder burst collapse — digest overdue reminders on boot instead of firing all at once. Cosmetic: group into a single notification ca081ce done

Notes:

  • Command history: the data is already there (RecentFacts). This is exposing it better.
  • Revert: internal/store already supports voiding (VoidFact). This is a thin API + confirm gate.
  • Burst collapse: the DueReminders query in internal/store/reminders.go already returns all pending due reminders. The fix is in internal/loop/gather.go to collapse them.

Phase 4 — Doable Features

# Task Commit Status
12 Recurring reminders — cron+next_fire_ts cols, RescheduleReminder, dispatcher logic 1eca17f done
13 Capability modelscope column on tools table, migration, UI, tests 6b80fd0 done
14 Notification batching/digest mode — in-memory queue, configurable window/max_items/severity_ceiling 354990f done
15 Rule trace/explanation engine — ExplainTick/ExplainGate, TickTrace IPC, daemon cache 2689db1 done
16 Backup/restore automation — scripts/maven-backup.sh with backup/restore/verify/list 3f09cdb done

Notes:

  • Recurring reminders: needs schema migration (#1). Add cron TEXT and next_fire_ts INTEGER to reminders table.
  • Capability model: ranking says "cheap now, expensive to retrofit once tools surface passes ~15 entries."
  • Rule trace: the data is ephemeral — can log predicate results per tick to a ring buffer or a rule_evals table.

Phase 5 — Web UI Re-imagination

# Task Commit Status
17 In-process auth gate for /tools — local PasskeySession check on POST, returns 403 if unasserted 5afff00 done
18 Digest / notification history UI — /notifications page with recent nudge history 5c34fb1 done
19 Rule trace page — /trace route showing predicate eval results per rule per tick 85013f7 done
20 Command history page — new /history route showing recent facts/commands f8ba396 done
21 PWA icons — SVG icon + manifest.json icons array 00a3bba done
22 Language unification — bilingual cheatsheet with RU/EN toggle in nav + ?lang= param c225ba3 done

Notes:

  • In-process auth gate added for POST /tools (5afff00). Digest UI (#18) depends on #14; trace page (#19) depends on #15.
  • PWA manifest currently has "icons": [] — no icons, mobile add-to-home-screen shows a blank tile.

Phase 6 — Final Pass

# Task Commit Status
23 Run make test with race detector — fix any races ccb1d78 done
24 docker compose build — verify all six daemons compile ccb1d78 done
25 Final review pass — check for debugging artifacts, commented code, TODO stubs ccb1d78 done

Cross-reference: feature ranking → this session

Ranking item Session task
Infra #2 (mavweb/mavcaldav tests) #5, #8
Easy: command history #9
Easy: revert/undo #10
Easy: capability model #13
Easy: stale-reminder collapse #11
Doable: recurring reminders #12
Doable: passkey persistence #4
Doable: backup/restore #16
Doable: testing infra #2
Doable: rule trace/explanation #15
Doable: notification batching/digest #14

Caveats & Gotchas

  • Destroy-confirm policy is listed as "mandatory" in ranking but already shipped in tool executor (PROGRESS.md confirms). No action needed.
  • Quiet-hours definition is listed as "mandatory" but already shipped (3623305). No action needed.
  • At-rest encryption is listed as infra #1 in ranking but already done (047a813). No action needed.
  • Schema migrationsmigrations.go exists and is wired. Any new schema change (recurring reminders) uses it.
  • Docker is already deployed and build-tested (commits 04c8dd17683a9b). The "not build-tested" comment in Dockerfile is stale.
  • Systemd is explicitly replaced by Docker per commit 04c8dd1: "Chosen Docker over interim systemd units."
  • Race detector may surface pre-existing races in the IPC or worker packages — fix them but don't scope-creep into a full refactor.
  • Passkey persistence has a chicken-and-egg problem with cold-start unlock (needs passkey to unlock, passkey needs re-enroll after restart). Fix just the mavweb credential storage; the cold-start unlock flow is a separate feature.