github MBombeck/HealthLog v1.4.39.3
v1.4.39.3 — Dashboard slim/thick merge robustness and list-page precision

latest release: v1.4.39.4
2 hours ago

v1.4.39.3 — Dashboard slim/thick merge robustness and list-page precision

The post-deploy CI for v1.4.39.2 surfaced eight e2e failures across the
chromium-desktop and chromium-mobile profiles that all routed through
two narrow regressions and one durable test-fixture gap. v1.4.39.3
fixes the root causes, hardens the merge contract with a pure helper
plus unit coverage, and aligns the e2e route-mock patterns with the
v1.4.37 W-CI lesson so the regression class cannot recur.

Fixed

  • Dashboard slim/thick merge no longer blanks the tile strip when
    the slim slice resolves with an empty summaries record.
    The
    v1.4.39.2 inline slim?.summaries ?? thick?.summaries short-
    circuited on JavaScript's truthy-empty-object semantics even when
    thick carried the full payload. The merge moved to a pure
    mergeSlimAndThickAnalytics helper that uses object emptiness as
    the discriminator. Populated slim still wins on overlapping fields
    (the v1.4.39.2 progressive-paint contract is preserved), empty slim
    falls through to thick, both empty leaves the dashboard's data-
    floor gates to render the appropriate empty state. Eight new
    behaviour-level unit tests cover the edge cases.
  • MeasurementList non-grouped rows now preserve decimal precision
    on both the desktop table and the mobile card grid.
    The v1.4.37
    W7c collapsed-list view passed every value through fmt.integer,
    which kept the per-day step / activity aggregates correct but
    silently truncated single weight / body-fat / temperature
    readings — 78.4 kg rendered as "78 kg". Grouped rows (cumulative
    HK type day aggregates) stay on fmt.integer because their
    readings are integer-only by definition; non-grouped rows now use
    fmt.number which honours up to three fraction digits without
    forcing a minimum.

Changed

  • Playwright route mocks for /api/analytics migrate from the
    literal string glob to the regex form across every authenticated
    spec.
    The **/api/analytics glob does not match the sliced URL
    form /api/analytics?slice=summaries the v1.4.39.2 dashboard split
    fires alongside the thick request, so the slim request fell through
    to the real route on the seeded test user. Ten specs migrate; the
    regex form is the durable alignment with the v1.4.37 W-CI lesson
    that already swept onboarding-flicker.spec.ts and
    mobile-viewport.spec.ts.

Notes

  • No schema migration. Runtime + test-fixture-only changes.
  • pnpm test --run green at 4662 / 4663 (1 long-standing skip).
  • Full Playwright suite green at 116 passing / 36 skipped / 152 total
    on both chromium-desktop and chromium-mobile profiles against
    the production Next.js build. Closes every failure from the
    v1.4.39.2 post-deploy CI run.

Don't miss a new HealthLog release

NewReleases is sending notifications on new releases.