mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
Add the medication-class to target-vital map and the adherence-to-vital storyline so the Coach can surface, association-only, when an adherence dip lines up with a drift in the vital that medication targets. Never causal, never a dose-change suggestion; dose questions defer to the prescriber. Add an in-repo CUSUM / binary-segmentation changepoint detector over DAY rollups with a high firing bar (persistence plus within-segment-spread magnitude) so the Coach can name a dated, sustained level shift instead of a vague "lately", and stays silent when no break clears the bar. Surface which source recovery is read from when two sources materially diverge, with the honest reason, instead of silently averaging. Lay the n-of-1 experiment substrate: a nullable encrypted outcome column on coach_plans (migration 0197), the review_due / reviewed lifecycle statuses wired into the encrypted-column registry and rotation script, and a daily worker that reads the experiment result back in the user's own before/after numbers — association-only, honest-null, no cheerlead on an adverse trend, and routing a worsened vital to the clinician. The user-visible read-back stays behind COACH_EXPERIMENT_VERDICT until its review cases clear. Extend the outbound dose screen to catch experiment-shaped dose changes (halve / skip / stop a medication to test it). Add evaluation cases and unit tests for each new surface.
prisma/
The database layer. HealthLog runs PostgreSQL 16 via Prisma 7. This directory holds the single schema file and the forward-only migration history; the generated client is emitted elsewhere.
Contents
schema.prisma— 61 models, one file.cuid()primary keys,snake_casecolumns via@map(...), encrypted columns mostly suffixed*Encrypted(search the file; there are 24 encrypted column references). Thegenerator clientblock emits to../src/generated/prisma(imported as@/generated/prisma).migrations/— numbered, forward-only SQL migrations (0001_…upward).migration_lock.tomlpins the provider topostgresql.
Migration workflow
# author a migration from a schema edit
pnpm dlx prisma migrate dev --name <short_snake_case_name>
# regenerate the client after any schema change
pnpm dlx prisma generate
Number a new migration with the next free prefix. The production entrypoint runs prisma migrate deploy on boot, so every migration must apply cleanly forward — there is no down-migration path. Always include the migration file in the same change as the schema edit.
Conventions
- Encryption is fail-closed:
*Encryptedcolumns are written through@/lib/crypto(AES-256-GCM, versioned key ids); never store plaintext in an encrypted column. Key rotation isscripts/rotate-encryption-key.ts+docs/ops/encryption-key-rotation.md. - The generated client under
src/generated/prismais build output — do not edit it. - Schema-touching changes that affect the API surface must regenerate
docs/api/openapi.yaml(see../CLAUDE.md).
Related: ../src/lib/README.md (db.ts, rollups/), ../docs/ops/ (migrations + backup runbooks).