mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-07 04:12:04 +00:00
One run of scripts/bench/run.ts against the seeded account (1,266,549 measurement rows, anchor 2026-10-22), 20 measured requests per row after 3 warm-up requests, web-only production build, 792 MB heap ceiling, Postgres 16.15. The commit adds only lint rules, guards, tests and scripts on top of v1.44.0, so the server code measured is the v1.44.0 code. Cold (caches evicted before each request), p95 and statements per request: /api/auth/me 17 ms / 19, dashboard summary 233 ms / 31, dashboard snapshot 2253 ms / 158, pulse series 30 d 59 ms / 8, 365 d 311 ms / 8, 3650 d 2118 ms / 8, day view 78 ms / 49, insights health status 140 ms / 68, correlations 105 ms / 45. Warm, the snapshot is 24 ms / 13 and the 3650-day series still 1506 ms, since that read is not cached. The 5,000-row batch ingest took 1722 ms and 424 statements over ten requests. The machine was shared with other work during the run (load average 8 to 20), so latency is indicative; the statement counts do not depend on it. The results directory is written by the script and left out of prettier, so a re-run diffs cleanly.
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
From a source checkout:
pnpm dlx tsx scripts/<file>.ts
The production image intentionally removes npm, pnpm, and Corepack. Only
container-safe scripts named by an operator runbook use its pinned
healthlog-tsx launcher; scripts that import the full application dependency
graph must run from a source checkout. 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-apple-health-distance.ts— repair walking-distance rows theexport.zipimport stored 1000x too small; dry-run by default, seedocs/ops/apple-health-distance-repair.md.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.bench/—seed-large-account.ts(a synthetic ten-year account of about 1.26 million measurement rows) andrun.ts(latency and SQL statements per request against it); seedocs/contributing/benchmarks.md. Results land inbench/results/.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/.