mirror of
https://github.com/MBombeck/HealthLog.git
synced 2026-11-11 13:52:20 +00:00
Merge branch 'feat/v144-userneeds' into release/v1.44.0
# Conflicts: # src/__tests__/sharing-surface-guard.test.ts # src/__tests__/workout-canonical-identity-guard.test.ts
This commit is contained in:
commit
aa899a9d54
86 files changed
+12949
-9
No files matched your search
@@ -96,6 +96,9 @@ const MAY_READ_EVERY_ROW: Record<string, string> = {
|
||||
// as stored, schedule and switch included.
|
||||
"lib/export/full-backup-payload.ts": "backup carries the stored rows",
|
||||
"lib/export/restore-backup.ts": "restore writes the stored rows back",
|
||||
// v1.44 — the CSV import writes new medications and reads only their names
|
||||
// and doses to skip duplicates; it derives nothing due.
|
||||
"lib/import/medications-csv.ts": "imports new rows, derives nothing due",
|
||||
// v1.43 — the units a taken dose consumed, resolved per slot exactly as
|
||||
// the inventory does. It reads only doses already recorded as taken.
|
||||
"lib/medications/ingredients/recompute.ts":
|
||||
|
||||
@@ -1077,6 +1077,18 @@ const DELEGABLE_ROUTES: Record<string, DelegableEntry> = {
|
||||
domain: "measurements",
|
||||
why: "The record's workout list. Verified to carry no AI-written paragraph: the single-workout route beside it does, and stays refused for exactly that reason.",
|
||||
},
|
||||
"app/api/measurements/provenance/route.ts": {
|
||||
domain: "measurements",
|
||||
why: "Which source delivered a metric on one UTC day and which one the record's source priority picks, with the reason. Read-only aggregates of the resolved user's readings; no AI, no note text.",
|
||||
},
|
||||
"app/api/measurements/provenance/compare/route.ts": {
|
||||
domain: "measurements",
|
||||
why: "Two sources of one metric side by side over at most a year of UTC days, with the source the ladder picked each day. Read-only aggregates of the resolved user's readings; no AI, no note text.",
|
||||
},
|
||||
"app/api/activity/calendar/route.ts": {
|
||||
domain: "measurements",
|
||||
why: "The activity calendar: day totals of steps, active minutes and load, workouts by sport, and the record owner's goals, computed without AI. Read-only, scoped to the resolved user, module-gated on the record's own `workouts` switch like the workout list beside it.",
|
||||
},
|
||||
"app/api/cycle/cycles/route.ts": {
|
||||
domain: "cycle",
|
||||
why: "The record's cycle history. Whether cycle tracking applies is a property of the record, and the gate gets there by re-loading the profile and gender for the resolved user id — note that the `gender` argument at the call site is dead (`requireCycleEnabled` names it `_gender`), so it is the id that carries the substitution, not that argument.",
|
||||
@@ -2178,8 +2190,11 @@ const ACTOR_ROUTES: Record<string, string> = {
|
||||
*
|
||||
* v1.44 -- the module list layout and the preview-feature switch are the
|
||||
* person's own presentation and join the actor list. 268 -> 270.
|
||||
*
|
||||
* v1.44 -- the activity calendar read, the activity goals and the source
|
||||
* provenance reads join the list. 270 -> 273.
|
||||
*/
|
||||
const FROZEN_ENTRY_COUNT = 270;
|
||||
const FROZEN_ENTRY_COUNT = 273;
|
||||
|
||||
/**
|
||||
* The two surfaces that authenticate a Bearer token outside `requireAuth` —
|
||||
|
||||
@@ -82,6 +82,9 @@ const PINNED_AFFORDANCES: Record<
|
||||
// the two status grids used to spell the tint at every call site and now
|
||||
// name a tone instead, so the marker lives here once.
|
||||
"src/components/admin/_shared.tsx": { "text-success": 3, "toast.success": 1 },
|
||||
// v1.44: the activity calendar's per-week tick for "every weekly goal met",
|
||||
// a state of a row the person reads, not the outcome of a write.
|
||||
"src/components/activity/activity-calendar-card.tsx": { "text-success": 1 },
|
||||
// v1.42: the readiness inventory's "carries" status icon, one arm of the
|
||||
// carries / thin / empty tone table, beside its spoken status label.
|
||||
"src/components/timeline/readiness-inventory.tsx": { "text-success": 1 },
|
||||
|
||||
@@ -46,6 +46,9 @@ const IDENTITY_OWNER: Record<string, string> = {
|
||||
// The doctor report's per-sport block (v1.44): sums sessions, so a session
|
||||
// two sources reported must count once, as it does on the list.
|
||||
"lib/doctor-report/workouts.ts": "lib/doctor-report/workouts.ts",
|
||||
// The activity calendar counts workouts per day; a session two devices
|
||||
// recorded must count once there, as it does in the list.
|
||||
"lib/activity/calendar-read.ts": "lib/activity/calendar-read.ts",
|
||||
// The only indirection in the set. The Coach block is handed rows it does not
|
||||
// read itself; the snapshot builder fetches them in parallel with every other
|
||||
// block's data. Recording the owner here rather than assuming the call site
|
||||
|
||||
@@ -53,6 +53,9 @@ const LIMITING_HELPERS: Record<string, string[]> = {
|
||||
"lib/withings/webhook-handler.ts",
|
||||
"lib/whoop/webhook-handler.ts",
|
||||
],
|
||||
// v1.44 — the lab and medication CSV imports: a preview bucket for a dry
|
||||
// run, the shared `import:` bucket for the import itself.
|
||||
handleRecordImport: ["lib/import/record-import-route.ts"],
|
||||
};
|
||||
|
||||
/** Mutating routes with no limit, each with the reason it needs none. */
|
||||
|
||||
Reference in new issue
Block a user