TODO.md
Rama main · réplica de lectura del repositorio original.
# TODO
<!-- RESUME:START -->
## ▶ Resume here — 2026-10-25
- Last worked on: phr 0.0.6 published (records keyed by identity @id, door refuses until opted in, audit owner by username); originals kept in the user's encrypted PHR vault shipped in 0.0.5; data move dropped (no moves, [#969](https://github.com/jwilleke/yourphr/issues/969) not planned).
- Branch / state: `yourphr-addon` at 894a57958, clean, pushed; main clean, pushed.
- Running / in-flight: local test site `phr.localhost:3921` (ngdpbase v5.30.1, phr from the branch) left running; no CI in progress.
- Parked / half-done: none.
- Next steps:
- Pick the next phr work under epic [#958](https://github.com/jwilleke/yourphr/issues/958): parity inventory (what yourPHR is used for, checked against phr), or the CCR reader ([#941](https://github.com/jwilleke/yourphr/issues/941)) as a third import shim.
- Core questions go to the ngdpbase session, not Jim; Jim decides priorities and anything leaving the branch (merge, publish, release, deploy).
- Blockers / significant notes: real health data still waits on [ngdpbase#1823](https://github.com/jwilleke/ngdpbase/issues/1823) (core access decisions for add-on records). Audit moves to @id in [ngdpbase#2041](https://github.com/jwilleke/ngdpbase/issues/2041).
<!-- RESUME:END -->
Open work in [jwilleke/yourphr](https://github.com/jwilleke/yourphr), ranked. Generated by `/pstatus` — a snapshot of what is open right now, nothing else. Session history lives in the project log.
## 🔴 P0 — Security & Critical
*None.*
## 🟣 Epics
- [#958](https://github.com/jwilleke/yourphr/issues/958) — [EPIC] phr add-on: build out yourPHR on ngdpbase to cutover
- [#935](https://github.com/jwilleke/yourphr/issues/935) — [EPIC] Make sense of the records you already have — one lifetime record from any file
- [#676](https://github.com/jwilleke/yourphr/issues/676) — [EPIC] The word "fasten" stops appearing in anything we ship
- [#385](https://github.com/jwilleke/yourphr/issues/385) — [EPIC] Realistic test-data corpus + golden-test harness
- [#333](https://github.com/jwilleke/yourphr/issues/333) — [EPIC] Explore — record export options (Save Report, PDF, Email)
- [#253](https://github.com/jwilleke/yourphr/issues/253) — [FEATURE] Epic: Support manual data entry and user-created records
## 🟠 P1
- [#899](https://github.com/jwilleke/yourphr/issues/899) — [SECURITY] Tests reach fake servers through an injected transport, as ngdpbase does
- [#898](https://github.com/jwilleke/yourphr/issues/898) — [SECURITY] Retire SPIKE_TEST_ALLOW_INTERNAL: no switch turns the outbound guard off
- [#897](https://github.com/jwilleke/yourphr/issues/897) — [SECURITY] Adopt ngdpbase's egress policy as the outbound guard
- [#864](https://github.com/jwilleke/yourphr/issues/864) — [SECURITY] Stop GitHub Actions from approving pull requests
- [#926](https://github.com/jwilleke/yourphr/issues/926) — Register yourPHR as a patient-access SMART on FHIR app with Oracle Health (Cerner Millennium)
- [#925](https://github.com/jwilleke/yourphr/issues/925) — [FEATURE] Oracle Health in production: load the 1,319 patient-access endpoints into the catalog — our app already works there, no activation
- [#924](https://github.com/jwilleke/yourphr/issues/924) — [FEATURE] Epic at scale: confirm the intended way an auto-distributed refresh-token app goes live at all organizations (no per-org activation)
- [#916](https://github.com/jwilleke/yourphr/issues/916) — [FEATURE] 'Sync now' makes the person wait for the whole sync: start it, return, notify
- [#909](https://github.com/jwilleke/yourphr/issues/909) — [FEATURE] Request log: one line per request with status and duration; warn on slow requests and event-loop stalls
- [#893](https://github.com/jwilleke/yourphr/issues/893) — [FEATURE] Adopt ngdpbase's file logging provider: rotating logs on the data volume
- [#871](https://github.com/jwilleke/yourphr/issues/871) — [FEATURE] Provider client secrets come from the instance's .env / Secret, not hand-pasted into the catalog form
- [#870](https://github.com/jwilleke/yourphr/issues/870) — [BUG] Every provider connect on prod fails — yourPHR was never pointed at the SMART relay
- [#817](https://github.com/jwilleke/yourphr/issues/817) — [BUG] SSRF guard misses NAT64, 6to4 and two IPv4 special ranges; LAN access switches the guard off entirely
- [#814](https://github.com/jwilleke/yourphr/issues/814) — [BUG] Sign-out does not end the session: the token stays valid until it expires
- [#791](https://github.com/jwilleke/yourphr/issues/791) — [BUG] The backup and recovery docs describe the Go stack — plaintext, gzip, settings file, labels
- [#782](https://github.com/jwilleke/yourphr/issues/782) — [BUG] A click that cannot complete says nothing — guards wait forever, failures are silent
- [#776](https://github.com/jwilleke/yourphr/issues/776) — [BUG] Sync imports document titles but never fetches the documents — the Binary pass went with the Go stack
- [#737](https://github.com/jwilleke/yourphr/issues/737) — [BUG] PDF, DICOM and image uploads (v2's #255) are gone in v3
- [#674](https://github.com/jwilleke/yourphr/issues/674) — [BUG] A display label is used as a feature flag — "sandbox mode" keys off the instance's name
- [#657](https://github.com/jwilleke/yourphr/issues/657) — [FEATURE] Chat over records as an MCP server — the patient's own AI client connects, YourPHR transmits nothing
- [#633](https://github.com/jwilleke/yourphr/issues/633) — [FEATURE] Help content — the pages a patient actually needs
- [#408](https://github.com/jwilleke/yourphr/issues/408) — [FEATURE] Prove one production SMART provider end-to-end via provider catalog
## 🟡 P2
- [#896](https://github.com/jwilleke/yourphr/issues/896) — [security] katex — 1 open advisory in the root lockfile (low)
- [#967](https://github.com/jwilleke/yourphr/issues/967) — [BUG] 50 of 114 Storybook stories throw on open — missing Angular providers and unregistered Chart.js scales
- [#946](https://github.com/jwilleke/yourphr/issues/946) — [BUG] The CMS Blue Button production-access runbook still describes the Go stack
- [#945](https://github.com/jwilleke/yourphr/issues/945) — [FEATURE] Share the consolidated record: FHIR export, IPS, SMART Health Links, printed summary
- [#944](https://github.com/jwilleke/yourphr/issues/944) — [FEATURE] Records request kit: right-of-access / EHI Export letters and a provider checklist
- [#943](https://github.com/jwilleke/yourphr/issues/943) — [FEATURE] Lifetime health history: a guided, patient-reported questionnaire
- [#942](https://github.com/jwilleke/yourphr/issues/942) — [FEATURE] List imaging studies from DICOM files (date, modality, body part)
- [#941](https://github.com/jwilleke/yourphr/issues/941) — [FEATURE] Import CCR (Continuity of Care Record) documents
- [#940](https://github.com/jwilleke/yourphr/issues/940) — [FEATURE] Trends across all sources and years: one chart per lab or vital
- [#939](https://github.com/jwilleke/yourphr/issues/939) — [FEATURE] My records folder: a refreshable source (idempotent re-upload; watched folder later)
- [#938](https://github.com/jwilleke/yourphr/issues/938) — [FEATURE] Duplicates across sources: identical files once, identical facts grouped, near-matches confirmed
- [#937](https://github.com/jwilleke/yourphr/issues/937) — [FEATURE] Extract facts from documents into FHIR, each linked to its file and page
- [#936](https://github.com/jwilleke/yourphr/issues/936) — [FEATURE] OCR for scanned pages and phone photos, on the instance
- [#933](https://github.com/jwilleke/yourphr/issues/933) — [FEATURE] eClinicalWorks (healow): register the patient app — self-service, ~17k practices; needs private_key_jwt for refresh tokens
- [#932](https://github.com/jwilleke/yourphr/issues/932) — [FEATURE] NextGen Enterprise: register the patient-access app — one shared endpoint, ~4,820 practices, no gate
- [#923](https://github.com/jwilleke/yourphr/issues/923) — [FEATURE] Patient identifiers: show one in plain words, hide the MyChart login, keep login IDs out of exports
- [#902](https://github.com/jwilleke/yourphr/issues/902) — [FEATURE] My medical record numbers: each MRN with the organization that issued it
- [#901](https://github.com/jwilleke/yourphr/issues/901) — [FEATURE] Show NPI registry facts beside records that state an NPI (type 1 and type 2)
- [#900](https://github.com/jwilleke/yourphr/issues/900) — [FEATURE] NPI organization lookup (type 2) beside the clinician lookup
- [#802](https://github.com/jwilleke/yourphr/issues/802) — [FEATURE] The live deployment still sets SPIKE_* variables — rename them, then retire the fallback
- [#535](https://github.com/jwilleke/yourphr/issues/535) — [FEATURE] No list view for Organizations (individual ones display fine)
- [#462](https://github.com/jwilleke/yourphr/issues/462) — [FEATURE] Share records as a SMART Health Link (shlink)
- [#415](https://github.com/jwilleke/yourphr/issues/415) — [docs] Manual SMART connect golden-path checklist (relay + catalog)
- [#389](https://github.com/jwilleke/yourphr/issues/389) — [FEATURE] /patient-profile Care Provider
- [#334](https://github.com/jwilleke/yourphr/issues/334) — [FEATURE] Explore — Save Report
- [#314](https://github.com/jwilleke/yourphr/issues/314) — [FEATURE] Wearable Device Integration for Vitals, Activity & PGHD
- [#313](https://github.com/jwilleke/yourphr/issues/313) — [FEATURE] patients able to add records to their own PHR
- [#307](https://github.com/jwilleke/yourphr/issues/307) — [FEATURE] Manual records — frontend: entry/edit/delete forms
- [#305](https://github.com/jwilleke/yourphr/issues/305) — [FEATURE] Manual records — backend: store/edit/delete user-created records (FHIR-consistent)
- [#300](https://github.com/jwilleke/yourphr/issues/300) — [FEATURE] Angular surface for Medicare claims & coverage (insurance view)
- [#280](https://github.com/jwilleke/yourphr/issues/280) — [FEATURE] Raw fhir-cards: resolve a referenced resource's display name (e.g. Medication/{id})
- [#252](https://github.com/jwilleke/yourphr/issues/252) — [FEATURE] Harden re-import dedup: guard idempotent upserts against stale (older) overwrites + add coverage
## 🔵 In review
*None.*
## ⏸ Deferred
- [#804](https://github.com/jwilleke/yourphr/issues/804) — [FEATURE] Adopt OIDC UserInfo in place of /api/secure/account/me; the UI draws from permission claims
- [#363](https://github.com/jwilleke/yourphr/issues/363) — [FEATURE] Database at-rest encryption: enable/migrate (guarded) + decrypt
- [#934](https://github.com/jwilleke/yourphr/issues/934) — [FEATURE] Greenway Health: register the patient app — self-service, free, one review, ~1,400 practices
- [#918](https://github.com/jwilleke/yourphr/issues/918) — [FEATURE] Deleting an account makes the person wait for every removal (33 s): start it, sign out, finish in the background
- [#917](https://github.com/jwilleke/yourphr/issues/917) — [FEATURE] 'Back up now' makes the admin wait ~10 s or more: start it, return, notify
- [#894](https://github.com/jwilleke/yourphr/issues/894) — [FEATURE] Wire Dynamic Client Registration (src/dcr) into provider connect
- [#890](https://github.com/jwilleke/yourphr/issues/890) — [FEATURE] List YourPHR in the Harvard SMART App Gallery
- [#884](https://github.com/jwilleke/yourphr/issues/884) — [FEATURE] Restart the server from the admin UI, without depending on PM2
- [#862](https://github.com/jwilleke/yourphr/issues/862) — [FEATURE] Device-grant scopes use SMART on FHIR v2 names: patient/Observation.c for connected devices
- [#860](https://github.com/jwilleke/yourphr/issues/860) — [FEATURE] A connected device's grant lasts until revoked: drop the 30-day term and its reminders
- [#833](https://github.com/jwilleke/yourphr/issues/833) — [FEATURE] Per-person notification channels: each person chooses where notices reach them
- [#803](https://github.com/jwilleke/yourphr/issues/803) — [FEATURE] "spike" in test/CI variable names, temp prefixes, comments and docs — rename to yourPHR
- [#801](https://github.com/jwilleke/yourphr/issues/801) — [FEATURE] The app database file is still called spike.db — rename it, migrating existing instances
- [#772](https://github.com/jwilleke/yourphr/issues/772) — [CHORE] check-routes compares paths, not methods — a GET-only path reads as served for PATCH and DELETE
- [#770](https://github.com/jwilleke/yourphr/issues/770) — [FEATURE] Patient self-report forms as QuestionnaireResponse — the questionnaire has to exist first
- [#705](https://github.com/jwilleke/yourphr/issues/705) — [FEATURE] Reconnect an expired source through the catalog — re-authorize without disconnect + re-import
- [#704](https://github.com/jwilleke/yourphr/issues/704) — [CHORE] Frontend tests: off the deprecated Karma builder, then Karma/Jasmine to Vitest
- [#702](https://github.com/jwilleke/yourphr/issues/702) — [CHORE] Replace frontend baseUrl with paths mappings — TypeScript 7 removes it
- [#699](https://github.com/jwilleke/yourphr/issues/699) — [CHORE] Migrate the frontend off Yarn Classic to npm — one package manager, one audit surface
- [#591](https://github.com/jwilleke/yourphr/issues/591) — [EPIC] Parity: what the TypeScript stack must do before it replaces yourPHR
- [#552](https://github.com/jwilleke/yourphr/issues/552) — [CHORE] Port the DICOM viewer to dwv 0.36 — removed APIs and a build path that no longer exists
- [#502](https://github.com/jwilleke/yourphr/issues/502) — [ARCH] Evaluate moving Azia's hand-rolled dark stylesheet onto Bootstrap 5.3 colour modes (data-bs-theme)
- [#499](https://github.com/jwilleke/yourphr/issues/499) — [FEATURE] ui.color-mode: instance default for light/dark (user's own choice still wins)
- [#487](https://github.com/jwilleke/yourphr/issues/487) — [CHORE] Migrating off Karma must not silently defang the contrast test (jsdom has no real cascade)
- [#436](https://github.com/jwilleke/yourphr/issues/436) — [FEATURE] Support for "Bootstrap" and themas
- [#370](https://github.com/jwilleke/yourphr/issues/370) — [FEATURE] Add VA Clinical Health (FHIR) as a SMART provider
- [#369](https://github.com/jwilleke/yourphr/issues/369) — [FEATURE] /medical-history — server-side grouping endpoint (counts + paged detail) for scale
- [#364](https://github.com/jwilleke/yourphr/issues/364) — [FEATURE] Admin Database card — polish (free space, schema version, totals, vacuum)
- [#352](https://github.com/jwilleke/yourphr/issues/352) — [FEATURE] Patient-friendly Body Diagram / Body Map View
- [#351](https://github.com/jwilleke/yourphr/issues/351) — [FEATURE] /medical-history — group & filter by Date (default), Condition, Provider, Place, Type
- [#343](https://github.com/jwilleke/yourphr/issues/343) — [FEATURE] Add patient/Observation.rs (+ lab/vital scopes) to the Cerner sandbox seed — no lab values import today
- [#340](https://github.com/jwilleke/yourphr/issues/340) — [FEATURE] Provider logos on Connected Sources — minted UUID brand_id for seeded sandboxes, brand_logo_url override for custom entries
- [#339](https://github.com/jwilleke/yourphr/issues/339) — [FEATURE] athenahealth sandbox — complete Developer-Portal onboarding (approval-gated)
- [#263](https://github.com/jwilleke/yourphr/issues/263) — [FEATURE] Message Provider
- [#251](https://github.com/jwilleke/yourphr/issues/251) — [FEATURE] Explore Apple Health's supported-institution list as a provider-catalog / FHIR-endpoint source
## ❓ Needs triage
*None.*