mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-08 12:32:43 +00:00
A medication added at 16:05 with doses at 09:00, 14:00 and 21:00 showed its creation day wrongly in "Last 90 days". The 14:00 dose, recorded afterwards on its own slot, read as an off-schedule take "due" at 21:00, and a 09:00 row with no time appeared as off-schedule too. The history route minted slots only from the creation instant, so the 14:00 slot never existed for the dose to land on, while the write path, which mints the whole day, had filed it there. The 09:00 row was the pending placeholder the today projector mints for every slot of the day, which the auto-miss pass stamped a day later; with no slot to bind to it surfaced as an off-schedule row. The ledger now mints slots over the requested window and takes the creation instant as the floor of expected slots: a slot before it appears only when a recorded dose claims it (a take by its window or its pin, or a skip), and a pending or auto-missed placeholder on it is dropped. The first archived schedule era also covers the stretch before the creation, so an edited schedule behaves the same. Every adherence surface tallies the same ledger with the same floor, so the detail rates, the calendar and the ledger bar agree on that day. The doctor report, the Coach and the adherence chips previously read the slots before a medication existed as missed whenever their window started earlier; they now read nothing there. Refs #1028
docs/ — internal reference + operator playbooks
The user-facing documentation lives at https://docs.healthlog.dev — that's the canonical surface for self-hosting guides, integration walkthroughs, AI-provider setup, and the doctor-report workflow.
The files in this directory are the internal operator playbooks, audit notes, and machine-readable specs that ship alongside the source:
api/— the OpenAPI 3.1 spec for the native-client subset (iOS DTO codegen target). Seeapi/README.mdfor the preview commands. Also home to the MCP-server contract:api/mcp-capabilities.md(tools, resources, prompts, write model) andapi/mcp-skills.md(building a connector / skill).ops/— operator runbooks: deploy, backup / restore, encryption-key rotation, password reset and account recovery, env checks, TLS pinning, data repair. These are what an operator reaches for during an incident.self-hosting/— horizontal-scaling notes (HEALTHLOG_PROCESS_TYPE=web|worker|all) and the deploy-pipeline recipe. Routine install steps stay ondocs.healthlog.dev. Includesself-hosting/mcp.md— enabling the off-by-default MCP connector and pointing Claude.ai / ChatGPT / Claude Desktop at it, andself-hosting/sso.md— OIDC SSO login: IdP setup, the identity-pinning security model,OIDC_ONLYconsequences, and the break-glass runbook. Alsoself-hosting/geolite2.md— bringing your own offline GeoLite2 databases viaGEOLITE2_DIRinstead of sending login IPs to a third-party lookup. Andself-hosting/account-sharing.md— letting one account on the instance open another's health record: the three access levels, the eight sections a grant can be narrowed to, managed profiles for somebody with no login and the guardians who look after them, what revocation does and does not undo, and which trust properties of the instance are unchanged by any of it.migration/— migration notes. Currently only v1.3 to v1.4; later releases are covered byCHANGELOG.mdand https://docs.healthlog.dev.integrations/— per-integration reference (Withings, Fitbit, Google Health, WHOOP, Apple Health, AI providers, data import).adr/— architecture decision records.security/— threat-model notes.diagrams/— architecture diagrams rendered through docs.healthlog.dev.releases/— release imagery.apple-store-connect-checklist.md— the iOS submission gate.codex-protocol-spec.md— Codex / ChatGPT OAuth protocol reverse-engineering notes.ui-guidelines.md— UI / a11y house style.
If you're a self-hoster looking to spin up an instance, start at https://docs.healthlog.dev or jump to the Quick Start in the project README.