managarten/apps
Till JS 5110065ebe feat(mana/web/sync): expose debug info, surface silent push failures
The SYNC_DEBUG.md runbook tries to inspect window.unifiedSync from
DevTools to figure out why pending changes aren't flushing on
mana.how. The script can't work because (a) the unified sync
instance is never exposed on window and (b) the two most likely
failure modes — push for an unknown appId, getToken() returning
null — both `return` silently with no error, no telemetry, no
state change. The pending count climbs and there's nothing in
the console to point at the cause.

This commit makes those failures visible:

push() unknown appId
  When a pending change lands for an appId that isn't in the
  registered channels map (almost always a registry/migration
  drift like renaming an appId without migrating the existing
  pending rows) we now log a warning that names the offending
  appId, lists the known ones for comparison, and emits a
  push:error telemetry event with errorCategory='unknown-appid'.
  The pending rows for that appId would otherwise accumulate
  forever — same symptom as the SYNC_DEBUG report.

push() no token
  getValidToken() can return null if the local exp check failed
  and the refresh-on-online retry didn't yield a new token. This
  was the silent path that was hardest to diagnose: the existing
  health-check telemetry only fires after a successful fetch, so
  there was no signal at all. We now log a warning, set
  channel.lastError = 'no-token', flip status to 'error' and emit
  push:error with errorCategory='no-token'.

sync-telemetry.ts
  Widens the errorCategory union to include 'no-token' and
  'unknown-appid' so the new emits type-check.

getDebugInfo()
  New method on the createUnifiedSync return value. Returns a
  flat, JSON-serializable snapshot of every channel's state
  (status, online, clientId, serverUrl, channels[appId] with
  lastError + timer flags, plus knownAppIds at top level) so the
  SYNC_DEBUG runbook (Schritt C) can compare what the server
  is being asked to sync vs. what's actually sitting in
  _pendingChanges.

(app)/+layout.svelte
  Exposes the live unified-sync instance on window.__unifiedSync
  in the browser. Not a security concern: every method on the
  returned object is also reachable via Dexie + a fresh fetch
  from the same DevTools console, and a malicious user can't
  escalate anything by poking at it. This is the global the
  SYNC_DEBUG Schritt C script needs to exist.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 17:20:22 +02:00
..
api refactor(api): use Vercel AI SDK + Zod for nutriphi/planta vision routes 2026-04-09 16:59:51 +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 refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
cards chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
chat refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
citycorners chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
contacts refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
context chore(workspace): remove redundant nested lockfiles + workspace.yaml 2026-04-09 11:57:11 +02:00
docs docs: Phase 9 documentation roundup — close encryption-shaped doc gaps 2026-04-08 11:47:59 +02:00
guides refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
inventory refactor(mana): rename inventar → inventory across the codebase 2026-04-09 15:50:24 +02:00
mana feat(mana/web/sync): expose debug info, surface silent push failures 2026-04-09 17:20:22 +02:00
manavoxel chore(workspace): unify vitest to ^4.1.2 across all packages 2026-04-07 13:58:29 +02:00
memoro chore: remove abandoned per-product workspace artifacts 2026-04-09 11:56:51 +02:00
moodlit refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
mukke feat: rename ManaCore to Mana across entire codebase 2026-04-05 20:00:13 +02:00
news refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
nutriphi refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
photos chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
picture refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
planta chore(planta): remove orphan apps/planta/packages/shared 2026-04-09 14:06:11 +02:00
presi refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
questions refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
skilltree chore: delete 25 web-archived directories, remove stale stubs, clean workspace config 2026-04-03 13:03:49 +02:00
storage refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
times chore: complete ManaCore → Mana rename (docs, go modules, plists, images) 2026-04-07 12:26:10 +02:00
todo refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
traces refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
uload refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +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