pediatric-ai-scribe-v3/migrations
Daniel 5a666f5ca5 test: e2e runs against its own throwaway database, not production's
The e2e stack shared production's Postgres — same server, same database,
same table. Seeded robots sat in `users` beside real clinicians, and
anything a test wrote, or a migration under test changed, landed on real
data. Nothing about "run the tests" should be able to reach an account
belonging to a person.

Now it has a Postgres and a Redis of its own, both on tmpfs: created
empty on every run, held in RAM, gone on teardown. scripts/e2e.sh is one
command that recreates the stack, seeds it, runs the browser and leaves
the app up at 127.0.0.1:3553 so it can be clicked around in, with the
report served at :3554.

Two bugs fell out of it immediately, both of which only a database that
did not already exist could have found:

The schema could not be built from nothing. The entrypoint migrated
before the app created its baseline tables, so the first migration
failed on saved_encounters not existing. It never showed because every
database this has ever run against already had the baseline. Then, one
layer down, 1777800000000_generated-images creates a table with a
foreign key to learning_content — which the baseline stopped creating
when Learning Hub was removed. Restoring into a brand-new database could
not have booted. The entrypoint now stands aside when the database is
empty and lets the app do it in the order it already gets right, and the
foreign key is only created where its target is. All 20 migrations
replay from empty, producing the same 23 tables production has.

Configuration lives in the database, so a throwaway one starts at
defaults — 14 settings against production's 49. That is why every model
picker was empty: models.custom did not exist. The tests were right and
the environment was incomplete, so the seed now states what the suite
depends on, with fictional model ids: a test should not pass because of
a setting somebody changed on the live system last week.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Dv6sqaY6Vq3ChZHMem3cnU
2026-09-13 00:49:25 +02:00
..
1744600000000_example-no-op.js Add node-pg-migrate for versioned schema changes + better mobile UA labels 2026-04-14 05:06:19 +02:00
1744650000000_add-encounter-version.js Batch of security + scale fixes 2026-04-14 05:24:40 +02:00
1777003849000_add-personal-notes.js feat(notes): personal notes with rich-text editor + voice dictation 2026-04-24 06:18:41 +02:00
1777090000000_notes-trash.js improve learning hub generation flow 2026-05-08 09:32:58 +02:00
1777507197626_add-mermaid-diagrams.js stabilize assistant and add diagrams 2026-05-08 00:23:00 +02:00
1777600000000_add-clinical-assistant-chats.js feat: improve clinical assistant visual sources 2026-05-07 02:45:17 +02:00
1777700000000_add-prompt-revisions.js feat: ship reviewed prompt history, conversation limits and account protections 2026-09-07 04:01:01 +02:00
1777800000000_generated-images.js test: e2e runs against its own throwaway database, not production's 2026-09-13 00:49:25 +02:00
1777900000000_image-context.js feat: integrate durable image jobs/private assets into current core 2026-09-07 16:53:42 +02:00
1780000000000_drop-model-classification.js fix: separate Scribe/Clinical/Learning prompt sections; drop model classification entirely with scrub migration 2026-09-07 18:22:51 +02:00
1780100000000_registration-invites.js feat: invite-only registration 2026-09-10 23:12:07 +02:00
1780200000000_citation-audit.js feat: citation quality tracking, and the SSO settings fit a phone 2026-09-10 23:44:43 +02:00
1780300000000_user-resources.js feat: My Resources — anyone can generate teaching material, privately 2026-09-11 14:50:54 +02:00
1780400000000_my-resources-images.js feat: PubMed search for My Resources, and an image tool that actually fires 2026-09-11 16:47:08 +02:00
1780500000000_resource-images.js feat: decks are built with python-pptx instead of pandoc, and carry their figures 2026-09-11 19:34:26 +02:00
1780600000000_resource-deck.js feat: the model designs the deck instead of writing markdown for a parser to guess at 2026-09-11 19:49:55 +02:00
1780700000000_login-codes.js feat: sign in with a code emailed to you, offered beside the password 2026-09-11 20:12:03 +02:00
1780800000000_retire-learning-hub.js feat: retire Learning Hub 2026-09-12 20:14:20 +02:00
1780900000000_drop-webdav-learning-path.js feat: connect Nextcloud by signing in to Nextcloud 2026-09-12 20:55:00 +02:00
1781000000000_invite-code-recoverable.js wip: invite codes stay copyable 2026-09-12 21:00:22 +02:00