standup
Weekly — week of 2026-05-24
Four slices shipped, three ADRs decided, one admin surface built end-to-end.
Weekly digest for the week of 2026-05-18 → 2026-05-24. What shipped:
Four slices shipped, three ADRs decided, one admin surface built end-to-end.
Session wrap-up landed Monday (af43abce, ADR 0019): a new session_logs table, a generate_wrap_up service on 30-minute inactivity, and a forced-tool-choice Haiku call whose output bleeds into every subsequent system prompt between HEARTBEAT and MEMORY retrieval. Cloud Scheduler sweep followed in d8b18258. The week’s quietest but most load-bearing fix also landed here: Alembic migrations were silently failing in the Cloud Run deploy path because they ran direct instead of through the cloud-sql-proxy (1c0a2ab). Every future migration was broken until that landed.
Multi-site portfolio mode shipped Wednesday in eight phases (544041a): schema through UI, aggregate HEARTBEAT, portfolio-level trend queries, scope passthrough in SvelteKit, BIBLE writes blocked in portfolio mode, and a Pro-only 403 before quota is consumed (#73–#82). Two rollup bugs cleaned up alongside: historical backfill wasn’t running on every sync (a104a24), and lifetime active-count and MRR queries had a DISTINCT collapse bug (99af1bd).
Tool-result snapshot persistence (ADR 0023, #99–#108) was the heaviest single day. Every tool_result now writes to message_tool_results; a deterministic summarizer injects a “Previously fetched” block with proper as of <date> attribution into subsequent turns. Retention defaults to 180 days, 200 rows per conversation. GDPR deletion is handled by a direct user_id FK with ondelete=CASCADE — one SQL statement, no application sweep. Thumbs feedback schema and UI landed in the same push (#109–#110).
Admin foundation built out across Thursday and Friday: JWT versioning (#126), audit log, user search and detail, five mutating endpoints, escalation queue with regression-replay eval over thumbs-down rows (#116–#123), and a SvelteKit static admin SPA on Cloudflare Pages (#127–#136). Auth simplified to a single path: CF Access JWT at the perimeter, User.is_admin = TRUE as the second gate. The polyglot bearer-JWT fallback was dropped (c357898); the CLI migrates to service tokens. No legacy fallback remains.
The KB also gained two MCP entry points this week — /api/mcp for CI and internal tooling, and an OAuth 2.1 endpoint for Claude Desktop and ChatGPT — both backed by lib/mcp-tools.ts.
Notable. The ai-engineer ADR review on snapshot persistence caught a deferred-join footgun before it shipped: the original design reached user_id through conversation_id → conversations.user_id, which would have required a backfill migration on a write-hot table if row-level security ever landed. Fixed to a direct column before merge. The pattern is worth keeping in view — schema decisions that seem equivalent today can serialize future work at the worst possible moment.
Synthesized from 5 daily standups in [2026-05-18, 2026-05-24].