thePR0M3TH3AN and Claude Opus 4.8
b8e6921ac0
[perf] Stale-while-revalidate cold boot: don't serialize behind admin lists + list sync
...
Cold refresh stalled on "Fetching moderation filters…" and then (logged in)
"Fetching subscriptions…" before the grid could render. Boot was SERIAL behind
relay fetches even though every stage already had a local cache:
1. _initAccessControl awaited the full admin-list relay refresh (up to 15s)
before auto-login — but accessControl hydrates whitelist/blacklist from
localStorage at construction, and isHydrated() existed for exactly this case
(unused). Now: when cached lists are present (every visit after the first),
boot proceeds immediately and the refresh continues in the background — the
existing whitelist/blacklist change listeners re-filter the grids when it
lands. First-ever visits still wait (a whitelist-mode instance must never
render unfiltered). The admin-pane refresh no longer blocks boot at all.
2. bootstrapTrustedSeeds awaited the same relay refresh (up to 3.5s more).
waitForAccessControl now fast-paths on isHydrated(): cached editors seed
trust immediately, and its onEditors/Whitelist/BlacklistChange listeners
already re-apply seeds when the real refresh lands.
3. The post-login feed gate held the grid for the FULL list sync + NIP-07
decryption (up to 8s). New js/app/feedListCacheGate.js: a probe that checks
all three list services (blocks/subscriptions/hashtags) hold a valid cache
for the active pubkey, raced into the gate — warm boots open as soon as the
caches hydrate (first ticks) and the background sync re-filters on arrival.
Cold boots (no caches) behave exactly as before.
Net effect: warm cold-refresh renders from IndexedDB-cached events with cached
filters/lists near-instantly; relay truth streams in behind it. No moderation
semantics changed — every stage that lacks a cache still waits.
Tests: tests/feed-list-cache-gate.test.mjs (5 — all-three-caches probe incl.
stale-pubkey/missing-service, late-hydration early release, cold-boot timeout,
throwing probe). Access-control + switch suites green. Lint + build green
(coordinator compacted to stay under its size cap).
Co-Authored-By: Claude Opus 4.8 <[email protected] >
2026-07-02 15:32:34 -04:00
..
2026-06-23 21:22:03 -04:00
2026-02-08 00:33:13 +00:00
2026-02-26 21:40:23 -05:00
2026-02-08 00:41:34 +00:00
2026-02-05 03:00:29 +00:00
2026-06-17 05:56:38 -04:00
2026-02-21 20:45:47 -05:00
2026-07-01 10:14:03 -04:00
2026-02-08 01:29:09 +00:00
2026-06-14 15:04:40 -04:00
2026-06-23 14:53:11 -04:00
2026-02-18 17:07:47 +00:00
2026-02-11 12:01:39 +00:00
2026-02-14 13:22:43 +00:00
2026-07-01 21:45:23 -04:00
2026-02-08 00:33:27 +00:00
2026-06-25 10:21:53 -04:00
2026-02-05 23:04:21 +00:00
2026-06-24 21:57:11 -04:00
2026-06-23 21:01:04 -04:00
2026-02-23 01:16:32 +00:00
2026-02-26 17:44:51 +00:00
2026-03-04 12:25:23 -05:00
2026-02-12 14:36:45 +00:00
2026-06-25 10:39:11 -04:00
2026-06-30 15:19:34 -04:00
2026-06-22 18:47:00 -04:00
2026-06-30 17:00:57 -04:00
2026-06-14 16:15:06 -04:00
2026-01-24 11:44:16 +00:00
2026-02-12 14:36:45 +00:00
2026-06-30 22:19:13 -04:00
2026-02-05 17:00:13 +00:00
2026-06-22 19:20:48 -04:00
2026-07-01 08:47:54 -04:00
2026-06-22 20:23:51 -04:00
2026-06-24 08:19:37 -04:00
2026-07-02 10:44:09 -04:00
2026-02-08 02:00:10 +00:00
2026-02-26 17:36:00 +00:00
2026-01-13 20:32:06 +00:00
2026-06-18 13:55:03 -04:00
2026-06-30 16:49:42 -04:00
2026-06-22 19:51:43 -04:00
2026-06-18 12:15:14 -04:00
2026-06-20 12:38:51 -04:00
2026-06-20 12:21:49 -04:00
2025-10-14 13:31:22 -04:00
2026-06-18 12:15:46 -04:00
2026-02-21 16:45:16 -05:00
2026-06-23 20:26:51 -04:00
2026-06-16 15:07:14 -04:00
2026-02-08 03:41:19 +00:00
2026-06-16 14:52:11 -04:00
2026-06-23 21:36:15 -04:00
2025-10-26 19:23:40 -04:00
2026-01-20 12:39:19 +00:00
2026-07-02 15:18:10 -04:00
2026-06-20 09:09:07 -04:00
2026-06-20 09:32:30 -04:00
2026-01-24 21:42:37 +00:00
2026-06-21 17:17:35 -04:00
2026-06-20 07:39:05 -04:00
2026-07-01 19:11:19 -04:00
2026-01-23 05:33:57 +00:00
2026-07-02 09:08:32 -04:00
2025-10-26 12:05:03 -04:00
2026-07-02 15:32:34 -04:00
2026-06-20 12:14:03 -04:00
2026-06-23 15:00:10 -04:00
2026-06-30 15:50:27 -04:00
2026-06-14 16:57:05 -04:00
2026-06-24 08:46:30 -04:00
2026-02-08 00:22:16 +00:00
2026-06-17 12:13:58 -04:00
2026-07-01 20:59:56 -04:00
2026-02-26 17:38:30 +00:00
2026-06-23 14:53:51 -04:00
2026-02-17 04:52:40 +00:00
2026-02-09 23:22:49 -05:00
2025-10-14 08:48:17 -04:00
2026-06-30 15:35:18 -04:00
2026-02-15 20:18:30 +00:00
2026-02-27 03:43:14 +00:00
2026-02-14 18:58:02 +00:00
2026-02-01 21:47:29 +00:00
2025-10-26 16:06:40 -04:00
2026-06-24 18:48:49 -04:00
2026-06-19 08:52:11 -04:00
2026-06-16 20:15:17 -04:00
2026-06-30 11:39:57 -04:00
2026-06-20 14:26:32 -04:00
2026-06-20 14:58:29 -04:00
2026-06-20 14:24:51 -04:00
2026-06-20 14:55:41 -04:00
2026-06-29 21:45:23 -04:00
2026-06-20 14:48:54 -04:00
2026-02-21 16:08:33 -05:00
2026-06-14 09:52:33 -04:00
2026-07-01 09:29:43 -04:00
2026-07-01 21:16:55 -04:00
2026-06-18 15:53:56 -04:00
2026-01-06 15:32:21 -05:00
2026-01-06 15:32:21 -05:00
2025-10-08 16:39:30 -04:00
2026-06-22 21:48:51 -04:00
2026-06-22 21:00:30 -04:00
2026-06-23 14:53:24 -04:00
2026-06-29 20:57:04 -04:00
2026-06-23 14:53:24 -04:00
2026-06-22 11:30:12 -04:00
2026-06-29 10:11:52 -04:00
2026-06-29 10:55:27 -04:00
2026-06-23 14:53:11 -04:00
2025-10-22 07:18:25 -04:00
2026-02-21 15:53:09 -05:00
2026-01-27 11:54:02 +00:00
2026-02-09 21:32:29 +00:00
2026-06-20 08:27:21 -04:00
2026-06-16 20:28:27 -04:00
2026-01-06 15:32:21 -05:00
2025-10-22 15:48:59 -04:00
2026-03-04 12:25:23 -05:00
2026-06-12 14:31:38 -04:00
2026-01-31 10:33:50 +00:00
2026-01-29 11:53:42 +00:00
2026-02-09 15:33:21 +00:00
2025-10-22 22:17:30 -04:00
2026-01-06 15:36:37 -05:00
2026-06-18 15:40:16 -04:00
2025-10-29 06:52:30 -04:00
2026-06-23 14:53:38 -04:00
2025-10-21 17:46:41 -04:00
2026-06-30 22:49:02 -04:00
2026-06-30 22:11:43 -04:00
2026-06-18 12:15:27 -04:00
2026-01-14 03:52:53 +00:00
2026-06-19 08:04:54 -04:00
2026-07-01 10:56:38 -04:00
2026-02-05 22:59:50 +00:00
2026-07-01 20:16:00 -04:00
2026-07-01 15:34:20 -04:00
2026-06-20 12:19:09 -04:00
2026-02-26 17:42:43 +00:00
2026-06-30 11:07:11 -04:00
2025-10-29 22:14:20 -04:00
2026-07-01 19:23:04 -04:00
2026-06-20 08:27:41 -04:00
2026-06-20 08:27:41 -04:00
2026-06-14 22:51:36 -04:00
2026-07-01 19:41:00 -04:00
2026-01-27 03:20:08 +00:00
2025-10-02 12:48:24 -04:00
2026-06-30 22:33:03 -04:00
2026-07-01 16:11:41 -04:00
2026-01-22 22:50:00 -05:00
2026-01-25 03:34:10 +00:00
2026-01-29 11:53:42 +00:00
2026-06-16 14:18:46 -04:00
2026-02-26 17:42:07 +00:00
2026-06-30 10:05:53 -04:00
2026-07-02 14:48:18 -04:00
2026-06-30 10:58:30 -04:00
2026-06-30 15:19:22 -04:00
2026-06-16 22:09:57 -04:00
2026-06-16 16:56:12 -04:00
2026-07-01 20:20:57 -04:00
2026-06-21 21:21:54 -04:00
2026-06-30 09:35:40 -04:00
2026-06-30 22:11:43 -04:00
2026-07-01 15:20:58 -04:00
2025-10-20 21:15:47 -04:00
2026-06-16 09:53:52 -04:00
2026-07-02 14:59:21 -04:00
2026-06-21 21:21:54 -04:00
2026-07-01 16:04:33 -04:00
2026-01-27 02:09:22 +00:00
2026-06-24 13:06:34 -04:00
2026-07-01 19:51:41 -04:00
2026-06-30 15:24:29 -04:00
2026-06-22 21:48:51 -04:00
2026-06-24 07:07:57 -04:00
2026-06-14 22:51:36 -04:00
2026-02-08 03:34:20 +00:00
2026-06-25 08:31:45 -04:00
2026-06-25 09:48:55 -04:00
2026-06-22 11:44:02 -04:00
2026-06-22 11:30:12 -04:00
2026-02-26 17:41:34 +00:00
2026-02-08 03:44:38 +00:00
2026-02-28 19:48:57 +00:00
2026-01-30 03:40:36 +00:00
2026-07-02 09:40:46 -04:00
2026-01-27 02:09:22 +00:00
2025-10-23 13:43:05 -04:00
2026-06-23 20:11:38 -04:00
2026-06-18 20:32:50 -04:00
2025-10-29 17:06:19 -04:00
2026-06-22 11:44:02 -04:00
2026-01-06 15:32:21 -05:00
2026-01-29 03:19:06 +00:00
2026-06-14 15:49:50 -04:00
2026-06-24 13:51:41 -04:00
2026-06-24 17:29:53 -04:00
2026-06-24 12:01:25 -04:00
2026-06-21 20:52:20 -04:00
2026-06-21 21:21:54 -04:00
2026-06-21 21:07:00 -04:00
2026-06-23 14:53:24 -04:00
2026-06-20 17:47:21 -04:00
2026-06-17 18:23:10 -04:00
2026-06-20 19:00:51 -04:00
2026-06-20 17:29:35 -04:00
2025-10-04 17:25:43 -04:00
2026-06-21 14:10:21 -04:00
2026-06-20 18:45:42 -04:00
2026-06-20 19:13:32 -04:00
2026-06-21 10:55:27 -04:00
2026-06-20 12:52:15 -04:00
2026-06-23 14:53:24 -04:00
2026-06-13 08:00:28 -04:00
2026-06-18 16:05:54 -04:00
2026-02-01 19:35:02 +00:00
2026-06-23 14:53:38 -04:00
2026-06-23 14:53:38 -04:00
2026-06-25 08:56:00 -04:00