Commit Graph
769 Commits
Author SHA1 Message Date
google-labs-jules[bot]andPR0M3TH3AN de5e453b34 Refactor user blocking to prioritize standard NIP-51 Mute Lists
- Updates `js/userBlocks.js` to write block entries to a standard Kind 10000 Mute List event.
- Implements a hybrid storage model: unencrypted public mutes are stored in `p` tags, while private blocks are stored in the encrypted event content.
- Maintains read compatibility with legacy `d=user-blocks` lists (both Kind 10000 and Kind 30002) by merging and prioritizing the newest event timestamp.
- Updates local caching to persist both public mutes and private blocks, preventing data loss or "zombie" entries on reload.
- Updates `js/subscriptions.js` to correctly detect NIP-44 capabilities on `Nip07Adapter` signers, fixing a regression where NIP-04 fallback was skipped.
- Updates `js/nostrEventSchemas.js` to mark `USER_BLOCK_LIST` as legacy and define `MUTE_LIST`.
- Updates unit tests to verify the new multi-kind fetching and merged publishing logic.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 22:10:42 +00:00
google-labs-jules[bot]andPR0M3TH3AN 8383a4f18b Migrate user blocks to standard NIP-51 Mute List
- Updates `js/userBlocks.js` to treat Kind 10000 (standard Mute List) as the primary write target.
- Public mutes are stored in `p` tags, and private blocks are stored in encrypted content within the same event.
- Legacy `d=user-blocks` lists are still read for backward compatibility (preferring the newest event), but no longer written.
- Updates `js/nostrEventSchemas.js` to mark `USER_BLOCK_LIST` as legacy and standardise `MUTE_LIST`.
- Updates UI controllers (`MoreMenuController`, `ProfileModalController`) to use "Mute/Block List" terminology and delegate all mute/block actions to `userBlocks`.
- Updates `ModerationService` to delegate viewer mute operations to `userBlocks` and disable direct Kind 10000 publishing to prevent overwrites.
- Documentation updated in `docs/nostr-event-schemas.md`.
- Fixes regressions in `more-menu-controller.test.mjs`, `moderation-service.test.mjs`, `trusted-mute-lists.test.mjs`, and `user-blocks.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 21:47:29 +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 1fc9859798 Merge branch 'unstable' into ai/performance-events-cache-dirty-tracking-5412442767823742174 2026-02-01 12:00:52 -05:00
thePR0M3TH3AN a21882bb3d Merge branch 'unstable' into ai/align-docs-code-11869612789191754100 2026-02-01 12:00:11 -05:00
thePR0M3TH3AN 43a977da61 Merge branch 'unstable' into ai/optimize-events-cache-persistence-7314295839012727690 2026-02-01 11:59:25 -05:00
google-labs-jules[bot]andPR0M3TH3AN 18bb9c244e Fix webtorrent-regression.test.mjs failures
- Added import of `setup-localstorage.mjs` to polyfill `self` required by `webtorrent.min.js`.
- Updated `MockTorrent` to simulate webseed `wire` events, ensuring `probePeers` logic (which listens for wires) functions correctly in tests.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:55:15 +00:00
google-labs-jules[bot]andPR0M3TH3AN c82ab2d490 Optimize EventsCacheStore persistence with dirty state tracking
Implemented `dirtyEventIds` and `dirtyTombstones` in `NostrClient` to track only modified items.
Updated `EventsCacheStore.persistSnapshot` to accept these dirty sets and iterate only over changed items, skipping the O(N) serialization loop for unchanged data.
Added heuristic to skip deletion scan if the dataset size has not decreased.
Optimized `NostrClient` methods (`flushEventBuffer`, `deleteAllVersions`, `fetchVideos`, etc.) to flag modified events.
Updated `nostr-delete-flow.test.mjs` to use valid hex IDs for NIP-compliant testing.

Benchmark results (5000 items, single update):
- Before: ~19ms (O(N))
- After: ~2ms (O(1))

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:50:28 +00:00
google-labs-jules[bot]andPR0M3TH3AN a7c752a6af fix(test): mock wire event in webtorrent regression test
Simulates a 'wire' event in MockWebTorrent when a webseed is present,
ensuring probePeers correctly identifies the stream as healthy.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:43:15 +00:00
google-labs-jules[bot]andPR0M3TH3AN 640dee8c0b test: aggressively increase timeout for webtorrent regression
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:32:05 +00:00
google-labs-jules[bot]andPR0M3TH3AN f03ddd90a0 test: ensure webtorrent regression test is robust against ci flakiness
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:28:46 +00:00
google-labs-jules[bot]andPR0M3TH3AN 80dd5dcade fix(test): add debug logging and increase timeout in webtorrent regression test
- Increase `timeoutMs` in `tests/webtorrent-regression.test.mjs` from 50ms to 200ms to reduce flakiness in CI environments.
- Add debug logging to `js/webtorrent.js` (guarded by `NODE_ENV === 'test'`) to inspect `probePeers` inputs and `client.add` errors, helping diagnose why `webseedOnly` detection might fail in CI.
- Log failure details in `tests/webtorrent-regression.test.mjs` if assertion fails.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:19:16 +00:00
google-labs-jules[bot]andPR0M3TH3AN 1bbaac85fd test: increase timeout for webtorrent regression test
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 16:17:36 +00:00
thePR0M3TH3AN 5a67774011 Merge pull request #2023 from PR0M3TH3AN/fix-webtorrent-webseed-regression-10274894627332192935
Fix WebTorrent webseed stream health check regression
2026-02-01 09:14:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 88d30970ef Fix CI failure in hashtag-preferences test
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 14:14:02 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2f33992192 Fix dependencies (jsdom/nostr-tools conflict) and WebTorrent regression
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 13:32:00 +00:00
thePR0M3TH3AN d35de4d743 Merge pull request #2036 from PR0M3TH3AN/ai/refactor-notification-controller-20231027-2601673227327805546
refactor(ai): extract notification logic to NotificationController
2026-02-01 08:01:22 -05:00
thePR0M3TH3AN 438f895dd6 Merge branch 'unstable' into fix-webtorrent-webseed-regression-10274894627332192935 2026-02-01 08:00:23 -05:00
google-labs-jules[bot]andPR0M3TH3AN 1dfc23c11a refactor(ai): extract notification logic from js/app.js (agent)
- Moved `showError`, `showStatus`, `showSuccess`, and `updateNotificationPortalVisibility` logic to `js/ui/notificationController.js`.
- Instantiated `NotificationController` in `js/ui/applicationBootstrap.js`.
- Refactored `js/app.js` to delegate notification calls to the controller.
- Added unit tests for `NotificationController`.
- Followed AGENTS.md refactoring checklist.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 03:08:05 +00:00
google-labs-jules[bot]andPR0M3TH3AN 3511877ebe chore(ai): CI health fixes (flaky tests)
- Fix flaky test in `tests/hashtag-preferences.test.mjs` by defining missing `fetchCalls` variable.
- Fix `webtorrent` initialization error in `tests/unit/services/r2Service.storage-config.test.mjs` by ensuring `window.crypto` is available and `File` mock extends `Blob`.
- Update `tests/test-helpers/setup-localstorage.mjs` to polyfill `window.crypto` using `globalThis.crypto`.
- Update `scripts/run-unit-tests.mjs` to support test file filtering via command line arguments.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-02-01 02:10:21 +00:00
google-labs-jules[bot]andPR0M3TH3AN 63dacbdef8 Fix WebTorrent webseed checks and resolve CI/test failures
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 22:36:47 +00:00
google-labs-jules[bot]andPR0M3TH3AN 062f79b181 chore(ai): move smoke test to tests/smoke/smoke-test.mjs
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 21:27:57 +00:00
google-labs-jules[bot]andPR0M3TH3AN ffd8f0e23c fix: Sync package-lock.json and fix tests for nostr-tools v2
- Synced `package-lock.json` with `package.json` to resolve `npm ci` failures.
- Updated `nostr-tools` dependencies to resolve conflicts.
- Fixed `SyntaxError` in `tests/nostr-login-permissions.test.mjs` caused by duplicate code.
- Updated `js/nostr/client.js`, `js/nostr/publishHelpers.js`, `js/nostr/adapters/nsecAdapter.js`, `js/nostr/nip46Client.js` to use `hexToBytes` helper when calling `nostr-tools` functions, as v2+ expects `Uint8Array` instead of hex strings.
- Added `hexToBytes` helper in `js/utils/hex.js`.
- Updated tests (`tests/nostr/dm-direct-message-flow.test.mjs`, `tests/nostr-send-direct-message.test.mjs`, `tests/nostr-private-key-signer.test.mjs`, `tests/nostr/nip46Client.test.js`) to use `Uint8Array` for keys where required.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:56:44 +00:00
thePR0M3TH3AN e36e6308e2 Merge branch 'unstable' into ai/reproducers-issues-moderation-6626021856372138081 2026-01-31 14:15:43 -05:00
google-labs-jules[bot]andPR0M3TH3AN 8e2d79b489 Fix hashtag-preferences unit test mock and package-lock.json
Updated tests/hashtag-preferences.test.mjs to properly mock window.nostr with enable() and encryption methods, resolving the permission failure in "load defers permission-required decrypts".
Also updated package-lock.json to resolve @noble/ciphers version mismatch causing CI failures.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:13:43 +00:00
google-labs-jules[bot]andPR0M3TH3AN 9aaf8aa4d5 fix(webtorrent): ensure webseed-only streams are marked healthy
Previously, `probePeers` would mark a stream as unhealthy (healthy: false) if no P2P peers were found, even if a valid webseed was present. This caused the UI to potentially disable playback or show error states for webseed-only content.

This fix ensures that if `peers === 0` but `hasWebSeed` is true, the probe result returns `healthy: true` with reason `"webseed"`.

Added `tests/webtorrent-regression.test.mjs` to verify this behavior and prevent future regressions.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:07:31 +00:00
thePR0M3TH3AN 2da157a06d Merge branch 'unstable' into ai/interop-tests-20260131-17192017166205222144 2026-01-31 14:06:13 -05:00
thePR0M3TH3AN dab5f66fd0 Merge branch 'unstable' into ai/debug-frontend-13808877327263676633 2026-01-31 14:05:39 -05:00
google-labs-jules[bot]andPR0M3TH3AN d77aa8f22a fix(ai): fix syntax error in nostr-login-permissions.test.mjs
- Rewrite `tests/nostr-login-permissions.test.mjs` to ensure clean syntax and avoid potential parser issues in Node 20 CI environment.
- Fixes `SyntaxError: Unexpected token ')'` reported in GitHub Actions.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 19:02:05 +00:00
google-labs-jules[bot]andPR0M3TH3AN f825f08787 Fix NIP-07 permissions and verify unit tests
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 18:59:55 +00:00
thePR0M3TH3AN daa9161f96 Merge branch 'unstable' into agent/automated-pr-review-fixes-3637557005884121646 2026-01-31 13:48:46 -05:00
thePR0M3TH3AN f58b9f709e Merge branch 'unstable' into ai/deps-safe-upgrades-3374834892089585189 2026-01-31 13:46:34 -05:00
thePR0M3TH3AN e0f2711b2b Merge branch 'unstable' into ai/docs-update-20251025-11051811202313978357 2026-01-31 13:45:48 -05:00
thePR0M3TH3AN 4fc101f7ce Merge branch 'unstable' into ai/changelog-20260131-14640726990701590988 2026-01-31 13:44:21 -05:00
thePR0M3TH3AN 6422dc6e71 Merge branch 'unstable' into telemetry-aggregation-8056813995017540806 2026-01-31 13:42:13 -05:00
thePR0M3TH3AN 47fde8dd84 Merge branch 'unstable' into ai/schema-validate-20250226-13203498180481473459 2026-01-31 13:40:52 -05:00
google-labs-jules[bot]andPR0M3TH3AN f0606065c9 fix(ai): resolve test failures and permission regressions (agent)
- Fix flaky mock in `tests/hashtag-preferences.test.mjs` (limit mock responses to avoid timeouts)
- Fix timeout leak in `js/services/hashtagPreferencesService.js` (clear timeout on success)
- Update `nostrClient.loginWithExtension` to request full permissions (fixing `nostr-login-permissions.test.mjs`)
- Ensure `jsdom` is available for `channel-profile-moderation.test.mjs`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 15:53:38 +00:00
google-labs-jules[bot]andPR0M3TH3AN 76a90a1a62 chore(ai): safe dependency upgrades and test fixes
- Upgrade playwright to 1.58.1 and autoprefixer to 10.4.24
- Fix permission caching in client.js
- Improve test robustness for hashtag preferences
- Add dependency scan artifacts
- Document deferred upgrades

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 15:46:06 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5232f38bed fix(ai): resolve test failures and permission regressions (agent)
- Fix flaky mock in `tests/hashtag-preferences.test.mjs`
- Update `nostrClient.loginWithExtension` to request full permissions (fixing `nostr-login-permissions.test.mjs`)
- Ensure `jsdom` is available for `channel-profile-moderation.test.mjs`

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 15:30:15 +00:00
thePR0M3TH3AN d999b79e5a Merge pull request #2011 from PR0M3TH3AN/ai/onboarding-20250129-12232766230754991727
docs(ai): improve onboarding steps and fix unit tests
2026-01-31 10:23:04 -05:00
thePR0M3TH3AN 525fc049be Merge pull request #2014 from PR0M3TH3AN/ai/tests-profile-cache-20250220-7730745390613459017
Add unit tests for ProfileCache
2026-01-31 10:20:47 -05:00
google-labs-jules[bot]andPR0M3TH3AN dc3a14c086 fix(ci): update nostr client login permissions and test mocks (agent)
- Update `js/nostr/client.js` to request all default permissions (including encryption) during login, fixing `tests/nostr-login-permissions.test.mjs`.
- Update `tests/hashtag-preferences.test.mjs` to properly mock `window.nostr` with `signEvent` and `getPublicKey`, and fix `fetchListIncrementally` mock to ensure reliable test execution.
- Fix broken test assertions in `hashtag-preferences.test.mjs`.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 14:53:43 +00:00
google-labs-jules[bot]andPR0M3TH3AN a39e7d832d test(ai): add unit tests for profileCache (agent)
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 11:24:53 +00:00
google-labs-jules[bot]andPR0M3TH3AN 5fe938ef9f fix(ci): address failures in lint, login permissions, and unit tests
- Update `scripts/check-hex.js` to ignore `releases/` directory to prevent false positives from PR numbers.
- Update `js/nostr/client.js` to request full NIP-07 permissions (including encryption) during login, fixing `tests/nostr-login-permissions.test.mjs`.
- Update `tests/hashtag-preferences.test.mjs` to make the mock fetch function consistently return the event, allowing retry logic to be tested correctly.

Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 10:34:19 +00:00
google-labs-jules[bot]andPR0M3TH3AN be43c266e0 fix(test): resolve hangs in multiple unit tests and harden runner
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 10:33:50 +00:00
google-labs-jules[bot]andPR0M3TH3AN 42a18fa784 fix(test): resolve hangs in multiple unit tests
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 10:13:24 +00:00
google-labs-jules[bot]andPR0M3TH3AN 2c87b94b62 fix(tests): resolve hashtag preferences unit test failure
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 09:50:04 +00:00
google-labs-jules[bot]andPR0M3TH3AN de7a215f77 fix(test): resolve hang in nostr-login-permissions test
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 09:23:29 +00:00
google-labs-jules[bot]andPR0M3TH3AN ec3691e659 docs(ai): improve onboarding steps and fix unit tests
Co-authored-by: PR0M3TH3AN <[email protected]>
2026-01-31 08:54:59 +00:00