super-productivity/src
johannesjo 8d7e05cceb fix(supersync): plug residual gaps surfaced by post-slice review
Two post-merge findings from the careful review pass on the
SuperSync slice (PR 7b):

1. **Storage NaN bug.** The app-side `localStorage`-backed
   `SuperSyncStorage.getLastServerSeq` returned `NaN` for an empty-
   string value (`parseInt("", 10) === NaN`), which the package's
   `stored ?? 0` fallback could not catch (nullish coalescing only
   triggers on `null`/`undefined`). The original implementation
   used `stored ? parseInt(stored, 10) : 0` and returned `0` for
   any falsy string. Add an explicit `Number.isFinite` check in
   the adapter so the port contract (returns `number | null`) is
   actually honored. Doesn't happen in practice today — `setItem`
   always writes a stringified int — but a hypothetical regression
   that wrote `""` would silently break sync replay.

2. **`_handleNativeRequestError` residual hostname leak.** The
   non-retryable native path re-threw the original error
   unchanged. Foreign errors from the native HTTP executor (e.g.
   iOS TLS cert errors like "SSL certificate problem: hostname
   mismatch for sync.example.com") can embed the resolved
   hostname in `.message`, which surfaces in user-visible snack
   notifications via `super-sync-restore.service.ts` and
   similar. Scrub to a name-only form
   (`SuperSync native request failed: <Error.name>`) while
   preserving identity for our own thrown errors
   (`AuthFailSPError`, `MissingCredentialsSPError`,
   `HTTP <status>` form). The full message is still captured in
   the structured log meta for diagnostics.

Two new Vitest specs cover the scrub path and the
`AuthFailSPError` identity preservation through the non-retryable
native branch. Package spec count: 275 (was 273).
2026-05-13 00:45:41 +02:00
..
app fix(supersync): plug residual gaps surfaced by post-slice review 2026-05-13 00:45:41 +02:00
assets feat(tasks): add notes panel shortcut 2026-05-12 12:48:45 +02:00
environments 18.5.0 2026-05-09 20:27:05 +02:00
static fix(security): harden XSS sinks and add Origin check (#7413) 2026-05-06 21:37:06 +02:00
styles feat: update breakpoint 2026-05-11 14:17:48 +02:00
test-helpers
typings
_common.scss
favicon.ico
hammer-config.class.ts
index.html fix(splash): keep productivity-tip heading readable on dark theme 2026-04-21 21:50:52 +02:00
karma.conf.js test: restore karma coverage reporter setup 2026-04-24 17:40:28 +02:00
main.ts feat(screenshots): single-session capture, tablet spec, polished seed 2026-05-07 01:06:22 +02:00
manifest.json
polyfills.ts fix(schedule): indicate tasks beyond available time 2026-05-11 14:30:55 +02:00
styles.scss fix(styles): use package imports for fontsource instead of relative paths 2026-03-18 13:14:10 +01:00
test.ts
tsconfig.app.json fix(build): exclude test helpers from production build 2026-02-25 16:46:51 +01:00
tsconfig.spec.json refactor(sync-providers): move pkce helper 2026-05-12 19:14:12 +02:00
tsconfig.worker.json