docs: update docs to reflect events store migration completion
BOOTSTRAP__AI_Agent_Quickstart.md: rewrite store reactivity trap section to distinguish events sub-stores (PersistedState, fine-grained) from ae_loc/idaa_loc (svelte-persisted-store, coarse). Add import/read/write syntax examples and pointer to migration doc. PROJECT__Stores_Svelte5_Migration.md: rewritten to reflect events module fully complete; documents established PersistedState pattern with canonical examples; tables show all 5 sub-stores done + events_loc retired. TODO__Agents.md: events migration marked complete (2026-06-11); idaa_loc and ae_loc listed as remaining work; stale events_loc file_display_overrides ref fixed. tests/README.md: replace Leads-only store migration note with full events sub-store table, localStorage keys, and explanation of PersistedState deserialization (no __version guard needed). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -142,19 +142,31 @@ onDestroy(() => cleanup());
|
||||
- Use `$state()` for local component state with no external binding.
|
||||
|
||||
### Store reactivity trap (important for `$effect`)
|
||||
The app uses `svelte-persisted-store` (Svelte 4 contract) for `$ae_loc`, `$ae_api`,
|
||||
`$ae_sess`, etc. In Svelte 5 `$effect`, reading **any field** of a Svelte 4 store
|
||||
subscribes to the **entire store**. This means unrelated writes to `$ae_loc`
|
||||
(e.g. iframe height, SWR reload) will re-trigger your effect. Be conservative about
|
||||
what you read from these stores inside `$effect` blocks. See `PROJECT__Stores_Svelte5_Migration.md`
|
||||
for the long-term fix plan.
|
||||
The app has two kinds of persisted stores — know which you're reading:
|
||||
|
||||
For search pages specifically, this usually means:
|
||||
**Svelte 4 `svelte-persisted-store` (coarse reactivity) — still used for:**
|
||||
- `$ae_loc`, `$ae_sess`, `$ae_api` (global app state)
|
||||
- `$idaa_loc`, `$idaa_sess` (IDAA module)
|
||||
|
||||
In Svelte 5 `$effect`, reading **any field** of these stores subscribes to the **entire store**.
|
||||
Unrelated writes to `$ae_loc` (e.g. iframe height, SWR reload) will re-trigger your effect.
|
||||
Be conservative about what you read from these stores inside `$effect` blocks.
|
||||
|
||||
**Svelte 5 `PersistedState` (fine-grained reactivity) — Events module stores:**
|
||||
- `badges_loc`, `leads_loc`, `pres_mgmt_loc`, `launcher_loc`, `events_auth_loc`
|
||||
|
||||
These use `runed`'s `PersistedState`. Access via `.current` (no `$` sigil):
|
||||
`badges_loc.current.field`. Writing one field only re-triggers effects that read that field.
|
||||
Import from the `.svelte` extension: `import { badges_loc } from '$lib/stores/ae_events_stores__badges.svelte'`.
|
||||
|
||||
For search pages using the coarse stores, this usually means:
|
||||
- keep true user preferences in persisted local state
|
||||
- keep transient triggers, loading flags, and last-executed search keys in session state when possible
|
||||
- let the page effect schedule the search, but put the duplicate-execution guard inside the search executor so page-load auto-search still runs after hydration
|
||||
- if the search text or filters are mirrored from localStorage on mount, expect that mount-time writes can re-trigger the effect unless the executor has its own guard
|
||||
|
||||
See `PROJECT__Stores_Svelte5_Migration.md` for migration status and the pattern to follow when migrating remaining stores.
|
||||
|
||||
### `{#await}` blocks
|
||||
```svelte
|
||||
{#await somePromise}
|
||||
|
||||
Reference in New Issue
Block a user