·
#weekly-log#messaging#websocket#migrations#debugging

Week of Jan 21–28: WebSocket Debugging, Goose Migrations, Diagnostics Tool

243 sessions across 8 repos. Pub/sub WebSocket debugging, Goose migration ordering, Dataform scheduling, and a diagnostics Vercel app for reproducing production issues.

Activity

243 Claude Code sessions this week — highest volume so far.

ProjectSessions
Trading terminal (backend)74
Migrations44
Diagnostics tool31
Frontend30
Data API24
ADR repo21
Analytics pipeline12
Other repos7

Heavy days: Jan 22 (66 sessions), Jan 23 (55), Jan 28 (63). Weekend was quiet (1-2 sessions), then back-loaded hard on Monday and Tuesday.

Shipped

  • WebSocket → pub/sub fallback for diagnostics — Attempted a direct WebSocket connection to our pub/sub bus for the diagnostics tool, but Vercel’s serverless environment doesn’t support persistent WebSocket connections the way we needed. Pivoted to the bus’s HTTP API as a stopgap. Slower but works in a stateless environment.

  • Diagnostics Vercel app — Deployed a diagnostics tool to Vercel for reproducing production issues. Useful for sharing a reproducible environment with teammates without needing local setup.

  • Goose migration ordering fix — Resolved sequencing issue between legacy SQL migrations and Goose migrations. Legacy creates the base DDL schema; Goose handles subsequent DDL changes. They must run in order. Documented in an ADR.

  • Internal flag rename — Renamed an internal feature flag for clarity — the old name no longer matched what it actually did.

  • Dataform scheduling — Set up a daily scheduled job in Dataform for the analytics pipeline. First time using Dataform’s built-in scheduling (previously everything ran via cron).

Concepts Explored

ConceptMentionsSignal
sql21🔴 Deep dive needed
solana13🟡 Review
infrastructure9🟢 Familiar
dbt8🟢 Familiar
clickhouse6🟢 Familiar
typescript5🟢 Familiar

SQL flagged as deep-dive — the volume is high but concentrated on migration-specific SQL (DDL, Goose, legacy schema) rather than analytical SQL. Two different skill surfaces.

Debugging Notes

The WebSocket issue on the diagnostics app was instructive. Deployment environment constraints (serverless = no persistent connections) change your architecture options significantly. The pub/sub bus’s HTTP API is a real escape hatch here — polling over HTTP instead of subscribing, which works fine for a diagnostics tool that doesn’t need millisecond latency.

Key lesson: the bus’s durable-stream subjects behave differently from its core (non-durable) subjects for pull consumers. Had to switch from a push consumer model to an explicit pull consumer to get reliable message delivery in the serverless context.

Discoveries

  • The team’s work spans multiple separate git repos, not a monorepo. This matters for CLAUDE.md placement and context window management across sessions.
  • ~200k files in build artifacts (target/, .venv/) were polluting VSCode file indexing. Added both to .gitignore and VSCode’s files.exclude.
  • dbt installation fails with system Python on macOS due to externally-managed-environment protection — needs a venv. Obvious in retrospect.
  • Concurrent Python API calls with asyncio.gather() are ~2x faster than sequential (await in a loop): ~1.5s vs ~3s for 3 tasks. Semaphore prevents rate limiting while maintaining the speedup.