Skip to content

v1.2.1-dev01

Pre-release
Pre-release

Choose a tag to compare

@thebigjoe1 thebigjoe1 released this 26 Aug 00:48
· 5 commits to main since this release

First dev pre-release of the 1.2.1 patch cycle. Community bug fixes across
Foods, Diary, and USDA import, plus a hard timeout on the sync loop so a
wedged connection stops holding pull-to-refresh hostage.

Added

  • Select All / Select None on the Foods manage-mode bar (#175 follow-up). Both target the current filtered list, so source, category, and search filters scope the selection instead of blanket-selecting the whole library.
  • Forward-proxy support for outbound server requests (#177). HTTP_PROXY / HTTPS_PROXY / NO_PROXY (standard curl / requests convention, lowercase variants also honored) route every outbound fetch through the configured proxy. No changes at call sites.
  • Autofocus + Enter-to-submit on the remaining sheets (#170). Foods quantity prompt, Foods multi-portion, and Diary edit-item sheets focus the first numeric input on open and submit on Enter, matching Quick Calories / Activity / Water / Body Stats which already had this.

Fixed

  • Foods appeared empty after leaving and returning to the section (#178). A slow initial /api/foods response rendered the "No foods yet" empty state over the user's real library until the fetch resolved. Foods now holds a loading spinner while the initial load is in flight so the empty state only appears when the library is genuinely empty.
  • Diary week strip bars shifted whenever activity was logged, and drifted again when navigating between days (#180). The strip was applying the current day's activity-adjusted goal as a single denominator across every column. Each day now resolves its own goal from its own dynamic TDEE (in dynamic mode) plus its own effective active kcal (respecting the manual / wearable policy). Logging or removing activity on any day refreshes the strip immediately.
  • Sync push and pull could hold the sync lock open for 10 to 19 minutes when a connection stalled. Both requests now abort after 30 seconds, so a wedged link surfaces as a visible sync failure instead of blocking every subsequent pull-to-refresh for the OS TCP-retry window.
  • Foods manage-mode buttons floated inward at ≥1440px instead of anchoring to the right edge (#175 follow-up). The detail preview pane hides while manage mode is active, and the manage bar drops its 452px right inset so the buttons sit flush with the viewport at every width.
  • USDA import stored total polyunsaturated fat under monounsaturated, and read only oleic acid for the monounsaturated figure (#179). FoodData Central nutrient IDs `1292` (total monounsaturated) and `1293` (total polyunsaturated) now map correctly; ID `1268` (MUFA 18:1, a single fatty acid, not a category total) is no longer used. Totals for fat and energy were never affected, only the split between the two unsaturated categories. Existing rows keep the old values until they are re-imported. Fix contributed by @herver1971.
  • Diary week strip ring was stale after editing a serving size (#168 follow-up). The strip's refresh signature now digests per-item scaled calories through the same helper the strip renders with, so any portion / quantity / unit swap updates the day's ring immediately without a reload.
  • Reset / invite email links and test-email origin now honor `X-Forwarded-Proto` so instances behind a reverse proxy generate the correct HTTPS URLs instead of falling back to `http://`.
  • Enabling user management no longer strands data written in single-user mode (TraceApps/docs#2). Registering the first account now claims foods, meals, diary, Activity log, fasting sessions, Trace chat history, wellness and workout rows, and the Fitbit / Google Health / Withings / Garmin connections in one transaction. Same handover runs for password and OIDC first-account paths, from one shared implementation.
  • Data left behind in single-user mode is adopted on upgrade. Instances that already enabled user management on an earlier build had their unowned rows stranded. Startup now adopts them once, when exactly one account exists.
  • Deleting an account no longer leaves its wearable data and OAuth tokens in the database. All four removal paths (self-delete, admin delete, disable user management, lockout recovery) now clear `wellness_data`, `workouts`, and the Fitbit / Google Health / Withings / Garmin token rows. Genuinely unowned rows are untouched.
  • `/api/wellness/latest` no longer hides wearable metrics in single-user mode. It read only the `NULL` owner while the pollers wrote `0`, so every Fitbit-sourced metric was invisible to that endpoint. Now reads both.

Security

  • No CVE-driven dependency bumps this cycle. `npm audit --production` reports 0 vulnerabilities; no open Dependabot alerts.