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.
| Project | Sessions |
|---|---|
| Trading terminal (backend) | 74 |
| Migrations | 44 |
| Diagnostics tool | 31 |
| Frontend | 30 |
| Data API | 24 |
| ADR repo | 21 |
| Analytics pipeline | 12 |
| Other repos | 7 |
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
| Concept | Mentions | Signal |
|---|---|---|
| sql | 21 | 🔴 Deep dive needed |
| solana | 13 | 🟡 Review |
| infrastructure | 9 | 🟢 Familiar |
| dbt | 8 | 🟢 Familiar |
| clickhouse | 6 | 🟢 Familiar |
| typescript | 5 | 🟢 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.gitignoreand VSCode’sfiles.exclude. - dbt installation fails with system Python on macOS due to
externally-managed-environmentprotection — needs a venv. Obvious in retrospect. - Concurrent Python API calls with
asyncio.gather()are ~2x faster than sequential (awaitin a loop): ~1.5s vs ~3s for 3 tasks. Semaphore prevents rate limiting while maintaining the speedup.