mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 04:32:42 +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.
scripts/
One-shot operator and build scripts. These are not part of the running application — they are run by hand during a deploy, a backfill, or a release, or wired into CI. Recurring work belongs on pg-boss (src/lib/jobs/), not here.
How to run them
pnpm dlx tsx scripts/<file>.ts
Use pnpm dlx tsx, not bare pnpm tsx. The production standalone image strips tsx, so the bare invocation fails inside the container. scripts/ is excluded from the project typecheck.
What lives here
generate-openapi.ts— emitsdocs/api/openapi.yamlfrom the registered Zod schemas (pnpm openapi:generate).check-openapi.ts— compares a freshly generated spec against the committed YAML; CI fails on drift (pnpm openapi:check).check-env.ts— pre-deploy env-var sanity check againstenv-manifest.json(pnpm check-env); wired into CI.assert-deploy.ts— post-deploy/api/versionassertion.rotate-encryption-key.ts— AES-256-GCM key rotation; seedocs/ops/encryption-key-rotation.md.restore-backup.ts— restore an off-host AES-GCM backup from an S3-compatible bucket.repair-intake-anomalies.ts— repair historic medication-ledger defects (duplicate dose-slot rows, implausibletaken_at); dry-run by default, seedocs/ops/intake-repair.md.backfill-rollups.ts,drain-per-sample-cumulative.ts,backfill-mood-note-column.ts— historical data backfills (note: the boot-timerollup-full-backfillqueue handles new accounts automatically; the CLI is the manual fallback).seed-demo.ts+seed-demo-v15.sql— populate a demo tenant.test-notifications.ts— exercise the notification dispatcher + reminder check.fetch-geolite2.sh— download the MaxMind GeoLite2 MMDBs (needs a licence key) beforedocker build.install-hooks.sh— install the local git hooks.generate-sw-version.mjs,print-bundle-report.mjs— service-worker version stamp and bundle-size report.i18n/— locale tooling;__tests__/— tests for the scripts above.
Conventions
See ../CLAUDE.md "Tests and commands" + "Self-hosting gotchas". Operator runbooks that drive these scripts live in ../docs/ops/.