managarten/apps
Till JS 636138b2d4 refactor(scope): replace _scopeCursor bridge with reactive useScopedLiveQuery hook
The previous fix wired Dexie's `_scopeCursor` infra-table as a side-
channel between Svelte $state (active-space + current-user) and Dexie
liveQuery: every scoped query touched the table on read so liveQuery
subscribed to it, every setActiveSpace bumped the table so liveQuery
re-ran. Worked, but smelled — hidden side-effect inside `scopedTable`,
scope state pretending to be a Dexie row, +1 roundtrip per query, and
`current-user.ts` had to dynamic-import Dexie just to pump the bridge.

Replacement: a Svelte 5 `$effect`-based hook that owns scope-tracking
explicitly. The dependency now lives in the reactive layer (which is
where it belongs), not as a side-effect in the data layer.

What changes:

- New `data/scope/use-scoped-live-query.svelte.ts`. The hook reads a
  module-level `scopeTick` `$state` counter inside its `$effect`.
  Both `onActiveSpaceChanged` (existing) and `onCurrentUserChanged`
  (new, added to `current-user.ts`) bump the tick on real changes.
  Effect re-fires → previous Dexie subscription unsubscribes → fresh
  one created with up-to-date `getInScopeSpaceIds()`. Same return
  shape as `useLiveQueryWithDefault` for drop-in migration.

- `current-user.ts` gains an `onCurrentUserChanged` event bus,
  symmetric to `active-space.svelte.ts#onActiveSpaceChanged`. Stays
  a plain `.ts` (no runes) so it remains a leaf and works in the
  test runner without the Svelte preprocessor — the rename to
  `.svelte.ts` was tried earlier and reverted because of test
  fallout (commit `01e6b9f04`).

- 53 module `queries.ts` files migrated from
  `useLiveQueryWithDefault` → `useScopedLiveQuery`. The choice of
  hook now documents at the call-site whether the query is
  scope-aware. Pure mechanical find-replace — no logic changes.

What goes away:

- `data/scope/cursor.ts` deleted.
- `touchScopeCursor()` calls removed from `scopedTable` /
  `scopedAnd` / `scopedGet`. Functions are pure data-layer again,
  no implicit reactive subscriptions.
- `bumpScopeCursor()` calls removed from `setActiveSpace` and both
  `loadActiveSpace` branches. Setter is pure state-update, no
  Dexie write side-effect.
- `current-user.ts` no longer dynamic-imports `scope/cursor` —
  `setCurrentUserId` is a clean three-line setter again.
- Dexie v46 drops the `_scopeCursor` table (`stores: { _scopeCursor:
  null }`). v45 stays declared so existing browsers' version chain
  remains contiguous; the v46 deletion runs once on next open. No
  user data lost — the table only ever held a transient bumpedAt
  row.

Existing 14 scope regression tests still pass. Type-check + theme-
token validators are clean.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 12:15:22 +02:00
..
api feat(unlisted): M8.1 — backend foundation for shareable-link snapshots 2026-04-24 17:12: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 refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
cards chore(mobile): remove 6 of 7 mobile apps — keep only memoro 2026-04-20 15:31:47 +02:00
chat chore(mobile): remove 6 of 7 mobile apps — keep only memoro 2026-04-20 15:31:47 +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(mobile): remove 6 of 7 mobile apps — keep only memoro 2026-04-20 15:31:47 +02:00
docs feat(ai): Mission Grant rollout gating — flag, alerts, runbook, user docs 2026-04-15 14:02:47 +02:00
food refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +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 refactor(scope): replace _scopeCursor bridge with reactive useScopedLiveQuery hook 2026-04-25 12:15:22 +02:00
manavoxel fix(type-check): clear the last five failures — monorepo type-check is now 76/76 green 2026-04-20 15:53:07 +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
photos refactor: rename nutriphi module to food (Essen) 2026-04-14 15:30:07 +02:00
picture chore(mobile): remove 6 of 7 mobile apps — keep only memoro 2026-04-20 15:31:47 +02:00
plants refactor: rename planta → plants, clean up codebase 2026-04-12 18:59:44 +02:00
presi fix(presi): wire up db:push for presi schema via @mana/api 2026-04-12 14:32:44 +02:00
questions refactor(shared-tailwind): rewrite themes.css to single-layer shadcn convention 2026-04-09 01:13:06 +02:00
quotes/packages/content fix(mana-llm): google-genai v1.73 keyword-only Part.from_text() 2026-04-16 12:47:23 +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 fix(tsconfig): unblock shared-types consumers 2026-04-21 18:53:55 +02:00
traces chore(mobile): remove 6 of 7 mobile apps — keep only memoro 2026-04-20 15:31:47 +02:00
uload fix(type-check): clear the last five failures — monorepo type-check is now 76/76 green 2026-04-20 15:53:07 +02:00