Commit Graph
39 Commits
Author SHA1 Message Date
thePR0M3TH3AN 607d5ce1a1 client-reliability-3: preserve shared badge callbacks and guard reentrant disposal 2026-10-19 18:02:46 -04:00
thePR0M3TH3AN 712b05cf87 client-reliability-3: cancel queued torrent probes after last card owner disposes 2026-10-19 17:56:25 -04:00
thePR0M3TH3AN 687f8c438d Optimize feed lifecycle and navigation rendering 2026-07-26 18:27:57 -04:00
thePR0M3TH3ANandClaude Opus 4.8 129d877d38 fix(liveness): eager-probe hide-until-verified cards (fixes vanished foreign feed)
Setting CARD_LIVENESS_POLICY=hide-foreign made all foreign/NIP-71 content
disappear: a hide-until-verified card starts display:none, which has no layout
box, so the IntersectionObserver never fires for it — its liveness probe never
runs, it never gets a healthy verdict, and it stays hidden forever (deadlock).

Fix: cardNeedsEagerLivenessProbe() identifies cards governed by a
hide-until-verified policy (foreign under hide-foreign; all non-owner under
hide-all). Both health observers now kick the probe for those cards from
onCardRegister — which fires for every card regardless of visibility — instead of
waiting for an intersection that a hidden card can never produce. The URL probe is
deferred one microtask so attachUrlHealthBadges has wired state.onCheck after
observe(). Probes stay concurrency-capped + priority-ordered; show-pending is
unchanged (no eager probing).

Tests: cardNeedsEagerLivenessProbe predicate coverage in
tests/video-card-source-visibility.test.mjs.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-25 09:33:41 -04:00
thePR0M3TH3ANandClaude Opus 4.8 ccbe8d9bb2 feat(liveness): config-driven card visibility policy + probe prefetch (#5)
Makes the card liveness-visibility behavior switchable so it can be A/B
feel-tested, and probes ahead of the scroll for a snappier result.

- CARD_LIVENESS_POLICY (config/instance-config.js): "show-pending" (default,
  unchanged) | "hide-foreign" (foreign/ingested cards hidden until a source
  verifies; native cards stay show-pending) | "hide-all". Owner's own cards are
  always visible. Flip live for testing without a rebuild:
  window.__BITVID_CARD_LIVENESS_POLICY__ = "hide-foreign" then refresh/scroll.
  Implemented via a data-foreign provenance flag on the card +
  getCardLivenessPolicy() in cardSourceVisibility.js.
- LIVENESS_PROBE_PREFETCH_MARGIN (default 600px): both liveness probes were
  already viewport-gated (IntersectionObserver, on-screen-first, WebTorrent
  priority-queued + concurrency-capped); this expands their rootMargin so cards
  just below the fold verify before the user reaches them.
- Tests: three policy scenarios in tests/video-card-source-visibility.test.mjs;
  also un-broke 3 pre-existing VideoCard tests by adding the missing
  IntersectionObserver JSDOM stub.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-25 09:13:52 -04:00
thePR0M3TH3ANandClaude Opus 4.8 126ac75a25 fix(webtorrent): stop feed health-probe connection storm (freeze/crash)
The feed's per-card stream-health badges ran WebTorrent swarm probes at
PROBE_CONCURRENCY = 96, and each probe's torrent.add set no maxConns (WebTorrent
default 55 peers). Loading/scrolling the feed could therefore open
~96 x 55 simultaneous WebSocket/WebRTC connections, pegging the main thread
(freeze) and exhausting memory (tab crash); playing a video added the streaming
torrent on top and tipped it over. This also produced the MaxListenersExceeded
warnings and relay/connection storms.

- gridHealth: PROBE_CONCURRENCY 96 -> 4 (probes are real swarm joins, not pings).
- webtorrent probePeers add: maxConns: 4 (a probe only needs to see >=1 peer).
- webtorrent playback add: maxConns: 30 (caps the streaming handshake storm;
  ample for playback bandwidth).

Pre-existing issue (not from the file-size refactor — verified). Confirmed
locally: feed scroll + playback no longer freeze/crash. grid-health +
webtorrent-regression tests pass; build green.

Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-19 22:10:55 -04:00
google-labs-jules[bot]andPR0M3TH3AN c47392aba6 Refactor numeric constants to centralized module
- Introduce `js/constants.js` with semantic time constants (e.g., `ONE_MINUTE_MS`, `STANDARD_TIMEOUT_MS`) and feature-specific TTLs.
- Export `KIND_MUTE_LIST` from `js/nostrEventSchemas.js` to standardize NIP-51 mute list kind usage.
- Refactor `js/state/cache.js`, `js/nostr/cachePolicies.js`, `js/channelProfile.js`, and various services to use centralized constants instead of hardcoded magic numbers.
- Update `js/nostr/relayConstants.js` to derive values from the shared time constants.
- Replace duplicate definitions of timeouts and retry delays across the codebase.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-11 03:27:26 +00:00
google-labs-jules[bot]andPR0M3TH3AN a7d19fc1db test: improve gridHealth prioritization testing
- Extract `prioritizeEntries` logic to `js/gridHealthLogic.js` for testability
- Add comprehensive unit tests in `tests/grid-health.test.mjs`
- Improve `getIntersectionRect` to robustly handle invalid rects
- Ensure 0x0 rects are filtered out explicitly

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-08 00:22:16 +00:00
google-labs-jules[bot]andPR0M3TH3AN ee46b36a25 docs: add detailed webtorrent architecture and regression prevention comments
- Create `docs/webtorrent-architecture.md` detailing the "Webseeds are Peers" strategy.
- Update `docs/video-availability-checks.md` with cross-reference.
- Add "CRITICAL" warning comments to `js/webtorrent.js` and `js/gridHealth.js` to prevent regressions.
- Enhance `tests/webtorrent-regression.test.mjs` to explicitly verify `urlList` passing in mocks.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 19:35:02 +00:00
google-labs-jules[bot]andPR0M3TH3AN 3859d8f60f fix(webtorrent): correct webseed handling and health checks
Reverts `js/webtorrent.js` and `js/gridHealth.js` to a simplified implementation that correctly treats webseeds as peers. This ensures that videos with only webseeds (and 0 P2P peers) are considered healthy and playable, resolving an issue where such videos were marked as unhealthy or failed to stream.

- Updates `js/webtorrent.js` to use `client.add(url, { urlList: [...] })` for better webseed integration.
- Updates `js/gridHealth.js` to rely on `peers > 0` for health, removing complex `webseedOnly` logic.
- Updates `tests/webtorrent-regression.test.mjs` to verify that webseeds are counted as peers and result in a healthy state with reason "peer".

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 18:40:23 +00:00
thePR0M3TH3AN 429df6e205 Handle webseed-only probe results 2026-02-01 12:14:35 -05:00
google-labs-jules[bot]andPR0M3TH3AN 7e21386bd0 fix(webtorrent): correct webseed availability check and force bootstrap
This change addresses two issues with WebTorrent webseed handling:
1.  **Grid Availability Check:** Modified `js/gridHealth.js` to correctly classify torrents with only webseeds as "healthy" and report 1 peer (instead of 0) so the UI availability check passes.
2.  **Video Player Bootstrap:** Modified `js/webtorrent.js` (`probePeers` and `streamVideo`) to explicitly append provided webseed URLs (`urlList`) to the magnet link as `&ws=` parameters. This forces the WebTorrent client to recognize and use these webseeds as initial peers for bootstrapping the swarm.

Tested via `tests/verification/verify_webseed_fix.mjs` (logic verification).

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 15:49:46 +00:00
google-labs-jules[bot] 4a0b81ad98 chore(ai): remove dead code (unused exports & deps) 2026-01-24 20:28:53 +00:00
google-labs-jules[bot] 215ff29f1a fix(webtorrent): use web seeds in health probe 2026-01-23 04:06:11 +00:00
google-labs-jules[bot] 8769eab3f7 feat: improve webtorrent fallback reliability
- Increased `PROBE_TIMEOUT_MS` in `js/gridHealth.js` to 20s to reduce false negatives in peer detection.
- Relaxed the peer check in `js/app.js` to allow forcing a switch to WebTorrent even if the liveliness checker reports 0 peers (showing a warning instead of an error).
- Added `tests/verify_app_switch.mjs` to validate the UI logic change.
2026-01-21 21:23:21 +00:00
google-labs-jules[bot] f06b2c7b1d feat: persist webtorrent probes and tracker health checks to localstorage
- Add storage helpers for torrent probes and tracker health in `js/utils/storage.js`
- Update `js/gridHealth.js` to read/write torrent probes from localStorage
- Update `js/healthService.js` to read/write tracker health from localStorage
- Ensure TTLs (5m for probes, 2m for trackers) are respected across sessions
- Add verification test `tests/verify-storage-persistence.mjs` (removed before completion)
2026-01-18 18:13:37 +00:00
thePR0M3TH3AN ebd825fb37 Add webseed-only status to WebTorrent probes 2026-01-15 09:37:25 -05:00
thePR0M3TH3AN 7ae501c010 Remove WebTorrent peer count badges 2025-10-18 14:58:46 -04:00
thePR0M3TH3AN 328640f939 Align WebTorrent health badge color with CDN indicator 2025-10-17 08:19:03 -04:00
thePR0M3TH3AN 7ae07b1369 refactor: migrate console usage to shared loggers 2025-10-15 14:37:25 -04:00
thePR0M3TH3AN d705cf176b Revert "Refactor logging to centralized logger" 2025-10-15 11:14:10 -04:00
thePR0M3TH3AN 37ba57aa37 Refactor logging to centralized logger 2025-10-15 11:11:14 -04:00
thePR0M3TH3AN f286b10896 Add helper to manage video card source visibility 2025-10-15 07:39:44 -04:00
thePR0M3TH3AN b50d474151 Refine static layouts and card primitives 2025-10-11 13:45:22 -04:00
thePR0M3TH3AN e2935c23fd Cache health badge state to avoid re-flashing 2025-10-09 20:31:40 -04:00
thePR0M3TH3AN bf63808007 Refactor health observers to share card observer utility 2025-10-02 12:39:11 -04:00
thePR0M3TH3AN cc627c1e65 update 2025-09-27 20:47:55 -04:00
thePR0M3TH3AN f6612236f0 update 2025-09-27 20:20:05 -04:00
thePR0M3TH3AN e0e1eb381c update 2025-09-27 20:17:46 -04:00
thePR0M3TH3AN 0461d06834 Tune WebTorrent probe scheduling 2025-09-27 20:13:47 -04:00
thePR0M3TH3AN 12aaf63d3d Increase WebTorrent health probe concurrency 2025-09-27 15:24:26 -04:00
thePR0M3TH3AN 2dfe20907b Treat missing CDN/WebTorrent sources as offline 2025-09-27 14:59:45 -04:00
thePR0M3TH3AN 0b4523b0be Fix duplicate card variable in health badge update 2025-09-27 14:50:56 -04:00
thePR0M3TH3AN 866e4f11fb Hide videos with dead CDN and torrent peers 2025-09-27 14:45:48 -04:00
thePR0M3TH3AN 1985b16064 Improve health probe prioritization 2025-09-27 13:49:45 -04:00
thePR0M3TH3AN 854216f331 Prioritize visible videos for health checks 2025-09-27 13:33:13 -04:00
thePR0M3TH3AN bc085ad3be Add WebTorrent probe for grid health badges 2025-09-25 20:31:25 -04:00
thePR0M3TH3AN 40f87167b9 Align torrent badge styling with CDN indicator 2025-09-25 19:31:41 -04:00
thePR0M3TH3AN ddd8a393f4 Add tracker health badges for magnets 2025-09-25 18:50:12 -04:00