managarten/packages
Till JS 9e0ade4c0a fix(mana/web): sprint 3 — type-safe sync protocol + tests
- New SyncChange / FieldChange / SyncOp types replace `any[]` in
  applyServerChanges. The wire format is now self-documenting and
  TypeScript catches malformed callsites at compile time.
- isValidSyncChange() validates incoming server payloads at the boundary:
  malformed entries are dropped with a single warn log, valid ones are
  applied. A bad row from the server can no longer corrupt IndexedDB.
  Hand-rolled type guards keep us free of a runtime-validation dep.
- applyServerChanges() and readFieldTimestamps() are now top-level
  exports (extracted out of createUnifiedSync's closure) so they can be
  imported directly by tests. Behaviour is unchanged — the closure
  variant inside the sync manager just resolves the module-level
  symbol now.
- New sync.test.ts covers:
  * pure isValidSyncChange and readFieldTimestamps cases
  * field-level LWW: server-newer wins, split outcome when local-newer
    on one field and server-newer on another
  * insert with __fieldTimestamps stamping
  * soft-delete LWW guard
  * malformed-entry drop with valid entries surviving
  * sync-loop guard: server-applied writes don't generate _pendingChanges
- fake-indexeddb added as devDependency for the integration tests.

Note: the monorepo's vitest install is currently tangled across mixed
@vitest/* package versions in the lockfile, so `pnpm test` fails before
reaching this file. The tests are written to pass on any vitest 4.x once
that's untangled — needs its own dedicated cleanup pass.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 13:38:23 +02:00
..
cards-database feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
credits feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
eslint-config fix(timeblocks): type errors from recurrence migration 2026-04-07 13:22:59 +02:00
feedback feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
help feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
local-llm feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
local-store fix(mana/web): sprint 2 — auth-aware data layer + guest migration 2026-04-07 13:07:12 +02:00
notify-client chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
qr-export feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-api-client feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-auth chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-auth-ui feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-branding fix(mana/web): sprint 3 — type-safe sync protocol + tests 2026-04-07 13:38:23 +02:00
shared-config chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-drizzle-config feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-error-tracking feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-errors chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-go chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-hono feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-i18n chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-icons chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-landing-ui chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-links feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-llm feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-logger feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-pwa feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-python/manacore_auth feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-splitscreen feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-storage chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-stores feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-tags chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-tailwind chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-theme chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-theme-ui chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-tsconfig feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-types chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-ui chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-uload feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
shared-utils chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
shared-vite-config chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
spiral-db feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
subscriptions feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
test-config chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
wallpaper-generator feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00