managarten/apps
Till JS 733dca45f1 fix(mana/web): sprint 4 — perf, quota, telemetry, indexed queries
Sprint 4.1 — per-table sync apply lock
  Replaces the global _applyingServerChanges boolean with a Set of
  currently-applying table names (beginApplyingTables / isApplyingTable).
  applyServerChanges now scopes the lock to exactly the tables it touches,
  so a user typing into chat while todo is syncing no longer has their
  write silently dropped from _pendingChanges. The legacy single-flag API
  is kept as a thin shim for backward compatibility.

Sprint 4.2 — IndexedDB quota handling
  - quota-detect.ts (no Dexie deps, importable from database.ts):
    isQuotaError() across browsers + Dexie wrapped errors,
    notifyQuotaExceeded() dispatches a CustomEvent the UI can subscribe to.
  - quota.ts (re-exports detect helpers + adds db-aware bits):
    cleanupTombstones() hard-deletes old soft-deleted rows to reclaim space,
    withQuotaRecovery() wraps a write op with one cleanup-and-retry pass.
  - applyServerChanges wraps each per-table transaction in a quota
    recovery loop. A full DB no longer crashes the pull.
  - The Dexie creating/updating hooks now write _pendingChanges via
    trackPendingChange(), which catches QuotaError on the fire-and-forget
    promise and surfaces the event instead of silently losing the entry.

Sprint 4.3 — sync telemetry events
  New sync-telemetry.ts emits a window CustomEvent for every push/pull
  lifecycle transition: push:start/ok/error, pull:start/ok/error,
  apply:malformed-drop, apply:done. Errors carry a coarse category
  (network/auth/http-5xx/http-4xx/parse/unknown) and durations are
  measured in ms. No record contents are emitted — safe to forward to
  Sentry / a debug HUD without leaking PII.

Sprint 4.4 — indexed queries on hot dashboard paths
  Three cross-app dashboard widgets that previously full-scanned every
  task / time block on every render now use indexed range queries:
    - useTodayTasks       → .where('dueDate').belowOrEqual(endOfToday)
    - useUpcomingTasks    → .where('dueDate').between(start, end)
    - useUpcomingEvents   → .where('startDate').between(now, future)
  useFavoriteContacts hits the indexed isFavorite column directly (with
  a number-or-boolean compound key for legacy / fresh records).

Verified: 20/20 tests in sync.test.ts still passing.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 14:18:22 +02:00
..
api feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
calc/packages/shared chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
calendar chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
cards chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
chat chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
citycorners chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
contacts chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
context chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
docs chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
guides chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
inventar chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
mana fix(mana/web): sprint 4 — perf, quota, telemetry, indexed queries 2026-04-07 14:18:22 +02:00
manacore/apps/web/src/lib feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
manavoxel chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
matrix chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
memoro chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
moodlit feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
mukke feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
news chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
nutriphi chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
photos chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
picture chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
planta chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
presi chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
questions feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
skilltree chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
storage chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
times chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
todo chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
traces feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
uload chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
zitare/packages/content chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00