From 941dbf6f8d61a91b03c5aea874f387e792445435 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Sun, 19 Apr 2026 20:44:40 -0500 Subject: [PATCH] style: fix prettier formatting in mvp scratchpad Formatting drift in docs/scratchpads/mvp-20260312.md caused format:check to fail; applied pnpm format to bring it into compliance. Co-Authored-By: Claude Sonnet 4.6 --- docs/scratchpads/mvp-20260312.md | 50 ++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/docs/scratchpads/mvp-20260312.md b/docs/scratchpads/mvp-20260312.md index 35106b1..1a7df2d 100644 --- a/docs/scratchpads/mvp-20260312.md +++ b/docs/scratchpads/mvp-20260312.md @@ -379,3 +379,53 @@ Initial verifier (haiku) on the first delivery returned "OK to ship" but missed - #8: confirm `packages/config/dist` not git-tracked. **Next:** PR for FED-M1-04 → CI wait → merge. Then FED-M1-05 (migration script, codex/sonnet, 10K). + +--- + +## Session 18 — 2026-04-19 — FED-M1-07 + FED-M1-08 + +**Branches landed this run:** `feat/federation-m1-integration` (PR #476, FED-M1-07), `feat/federation-m1-migrate-test` (PR #477, FED-M1-08) +**Branch active at end:** none — both PRs merged to main, branches deleted + +**M1 progress:** 8 of 12 tasks done. Remaining: M1-09 (regression e2e, haiku), M1-10 (security review, sonnet), M1-11 (docs, haiku), M1-12 (close + release, orchestrator). + +### FED-M1-07 — Integration tests for federated tier gateway boot + +Three test files under `apps/gateway/src/__tests__/integration/` gated by `FEDERATED_INTEGRATION=1`: + +- `federated-boot.success.integration.test.ts` — `detectAndAssertTier` resolves; `pg_extension` row for `vector` exists +- `federated-boot.pg-unreachable.integration.test.ts` — throws `TierDetectionError` with `service: 'postgres'` when PG port is closed +- `federated-pgvector.integration.test.ts` — TEMP table with `vector(3)` column round-trips data + +Independent code review (sonnet) returned VERDICT: B with two IMPORTANT items, both fixed in the same PR: + +- Port 5499 collision risk → replaced with `net.createServer().listen(0)` reserved-port helper +- `afterAll` and `sql` scoped outside `describe` → moved both inside `describe.skipIf` block + +Independent surface verifier (haiku) confirmed all claims. 4/4 tests pass live; 4/4 skip cleanly without env var. + +### FED-M1-08 — Migration integration test (caught real P0 bug) + +`packages/storage/src/migrate-tier.integration.test.ts` seeds temp PGlite with cross-table data (users, teams, team_members, conversations, messages), runs `runMigrateTier`, asserts row counts + spot-checks. Gated by `FEDERATED_INTEGRATION=1`. + +**P0 bug surfaced and fixed in same PR:** `DrizzleMigrationSource.readTable()` returns Drizzle's camelCase keys (`emailVerified`, `userId`); `PostgresMigrationTarget.upsertBatch()` was using them verbatim as SQL identifiers, producing `column "emailVerified" does not exist` against real federated PG. The 32 unit tests in M1-05 missed this because both source and target were mocked. Fix: `normaliseSourceRow` now applies `toSnakeCase` (`/[A-Z]/g` → `_`), idempotent on already-snake_case keys. + +Code review (sonnet) returned VERDICT: B with one IMPORTANT and one MINOR, both fixed: + +- `createPgliteDbWithVector` and `runPgliteMigrations` were initially added to `@mosaicstack/db` public exports → moved to `packages/storage/src/test-utils/pglite-with-vector.ts` (avoids polluting prod consumers with WASM bundle) +- `afterAll` did not call `cleanTarget` → added before connection close, ensuring orphan rows cleaned even on test panic + +Side change: `packages/storage/package.json` gained `"type": "module"` (codebase convention; required for `import.meta.url` in test-utils). All other workspace packages already declared this. + +### Process notes for this session + +- Review-then-verify pipeline now battle-tested: M1-08 reviewer caught the P0 bug + the public-API leak that the worker would have shipped. Without review, both would have gone to main. +- Integration tests are paying for themselves immediately: M1-08 caught a real P0 in M1-05 that 32 mocked unit tests missed. Going forward, **at least one real-services integration test per code-mutating PR** should become a soft norm where feasible. +- TASKS.md status updates continue to ride on the matching feature branch (avoids direct-to-main commits). + +**Followup tasks tracked but still deferred (no change):** + +- #7: `tier=local` hardcoded in gateway-config resume branches (~262, ~317) +- #8: confirm `packages/config/dist` not git-tracked + +**Next:** FED-M1-09 — standalone regression e2e (haiku canary, ~4K). Verifies that the existing `standalone` tier behavior still works end-to-end on the federation-touched build, since M1 changes touched shared paths (storage, config, gateway boot).