+ This event is not a reply to, nor does it refer to, any other event. + + * One "e" tag:
+ `["e",
+ `
+There may be any number of `
From 071d78dd6c36487e2bbbbc3845f8ae3e7a2b05e3 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Wed, 12 Nov 2025 11:06:10 -0500 Subject: [PATCH] update --- AGENTS.md | 4 + README.md | 39 +- components/edit-video-modal.html | 32 +- components/sidebar.html | 22 + components/upload-modal.html | 67 +- components/video-modal.html | 4 +- config/instance-config.js | 20 + config/validate-config.js | 3 + ...ced_Profile_Channel_Views_Specification.md | 2 +- ..._Subscription_&_Reporting_Specification.md | 14 +- ...nced_Video_Comment_System_Specification.md | 41 +- ...ome_Page_&_Video_Tracking_Specification.md | 4 +- css/tailwind.source.css | 57 +- docs/beacon/css-mapping.md | 2 +- docs/design-system.md | 2 +- docs/nips/01.md | 178 + docs/nips/02.md | 78 + docs/nips/03.md | 34 + docs/nips/04.md | 55 + docs/nips/05.md | 103 + docs/nips/06.md | 31 + docs/nips/07.md | 32 + docs/nips/08.md | 21 + docs/nips/09.md | 53 + docs/nips/10.md | 84 + docs/nips/11.md | 367 ++ docs/nips/12.md | 9 + docs/nips/13.md | 102 + docs/nips/14.md | 21 + docs/nips/15.md | 339 ++ docs/nips/16.md | 9 + docs/nips/17.md | 211 ++ docs/nips/18.md | 40 + docs/nips/19.md | 69 + docs/nips/20.md | 9 + docs/nips/21.md | 38 + docs/nips/22.md | 200 + docs/nips/23.md | 66 + docs/nips/24.md | 43 + docs/nips/25.md | 100 + docs/nips/26.md | 112 + docs/nips/27.md | 54 + docs/nips/28.md | 160 + docs/nips/29.md | 244 ++ docs/nips/30.md | 72 + docs/nips/31.md | 15 + docs/nips/32.md | 176 + docs/nips/33.md | 9 + docs/nips/34.md | 248 ++ docs/nips/35.md | 70 + docs/nips/36.md | 41 + docs/nips/37.md | 57 + docs/nips/38.md | 63 + docs/nips/39.md | 67 + docs/nips/40.md | 59 + docs/nips/42.md | 109 + docs/nips/44.md | 297 ++ docs/nips/45.md | 60 + docs/nips/46.md | 226 ++ docs/nips/47.md | 687 ++++ docs/nips/48.md | 60 + docs/nips/49.md | 126 + docs/nips/50.md | 55 + docs/nips/51.md | 170 + docs/nips/52.md | 216 ++ docs/nips/53.md | 267 ++ docs/nips/54.md | 117 + docs/nips/55.md | 586 +++ docs/nips/56.md | 108 + docs/nips/57.md | 191 + docs/nips/58.md | 123 + docs/nips/59.md | 255 ++ docs/nips/60.md | 186 + docs/nips/61.md | 122 + docs/nips/62.md | 61 + docs/nips/64.md | 146 + docs/nips/65.md | 43 + docs/nips/66.md | 97 + docs/nips/68.md | 92 + docs/nips/69.md | 89 + docs/nips/70.md | 45 + docs/nips/71.md | 137 + docs/nips/72.md | 132 + docs/nips/73.md | 128 + docs/nips/75.md | 85 + docs/nips/77.md | 175 + docs/nips/78.md | 21 + docs/nips/7D.md | 33 + docs/nips/84.md | 51 + docs/nips/86.md | 90 + docs/nips/87.md | 142 + docs/nips/88.md | 132 + docs/nips/89.md | 133 + docs/nips/90.md | 230 ++ docs/nips/92.md | 45 + docs/nips/94.md | 58 + docs/nips/96.md | 338 ++ docs/nips/98.md | 63 + docs/nips/99.md | 86 + docs/nips/A0.md | 60 + docs/nips/B0.md | 53 + docs/nips/B7.md | 41 + docs/nips/C0.md | 69 + docs/nips/C7.md | 29 + docs/nips/EE.md | 288 ++ docs/nips/README.md | 423 +++ docs/nostr-event-schemas.md | 30 +- docs/nwc-compliance.md | 13 +- docs/release-notes.md | 12 + js/accessControl.js | 18 +- js/adminListStore.js | 8 +- js/app.js | 3321 +++++------------ js/channelProfile.js | 212 +- js/config.js | 7 + js/constants.js | 40 +- js/index.js | 7 + js/nostr/client.js | 451 ++- js/nostr/commentEvents.js | 1172 +++++- js/nostr/countDiagnostics.js | 65 + js/nostr/maxListenerDiagnostics.js | 101 + js/nostr/nip71.js | 217 +- js/nostr/publishHelpers.js | 299 +- js/nostr/reactionEvents.js | 193 +- js/nostr/viewEvents.js | 10 +- js/nostr/watchHistory.js | 798 +++- js/nostrEventSchemas.js | 644 +++- js/nostrToolsBootstrap.js | 6 +- js/payments/lnurl.js | 39 +- js/payments/nwcClient.js | 546 ++- js/payments/zapReceiptValidator.js | 445 +++ js/payments/zapSharedState.js | 115 + js/payments/zapSplit.js | 177 +- js/services/commentThreadService.js | 385 +- js/services/discussionCountService.js | 50 +- js/services/hashtagPreferencesService.js | 30 +- js/services/moderationActionController.js | 557 +++ js/services/moderationService.js | 32 +- js/services/videoNotePayload.js | 32 +- js/subscriptions.js | 218 +- js/ui/ModalManager.js | 857 +++++ js/ui/appChromeController.js | 247 +- js/ui/applicationBootstrap.js | 955 +++++ js/ui/components/EditModal.js | 36 +- js/ui/components/SimilarContentCard.js | 20 +- js/ui/components/VideoCard.js | 136 + js/ui/components/VideoModal.js | 333 +- js/ui/components/nip71FormManager.js | 26 +- js/ui/components/tagPillList.js | 92 +- js/ui/components/videoMenuRenderers.js | 6 +- js/ui/moreMenuController.js | 83 +- js/ui/profileModalController.js | 228 ++ js/ui/videoModalCommentController.js | 807 ++++ js/ui/views/VideoListView.js | 219 +- js/ui/zapController.js | 306 +- js/userBlocks.js | 689 +++- js/utils/videoPointer.js | 13 +- package.json | 7 +- tests/app/hydrate-sidebar-navigation.test.mjs | 96 + tests/app/is-user-logged-in.test.mjs | 132 + tests/comment-event-builder.test.mjs | 178 +- tests/comment-thread-service.test.mjs | 347 +- tests/discussion-count-service.test.mjs | 44 +- tests/edit-modal-submit-state.test.mjs | 80 + tests/helpers/moderation-test-helpers.mjs | 20 +- tests/moderation/submit-report.test.mjs | 99 + tests/moderation/trusted-mute-lists.test.mjs | 20 +- tests/nip71-base-event-tags.test.mjs | 18 + tests/nip71-builder.test.mjs | 74 +- tests/nostr-boost-actions.test.mjs | 145 +- tests/nostr/comment-events.test.mjs | 575 ++- tests/nostr/edit-video-dtag.test.mjs | 166 + tests/nostr/nip71.test.js | 9 +- tests/nostr/publishHelpers.test.mjs | 143 + tests/nostr/reaction-events.test.mjs | 125 + tests/nostr/revert-video-dtag.test.mjs | 127 + tests/nwc-client.test.mjs | 407 ++ tests/profile-modal-controller.test.mjs | 130 + tests/reaction-event-builder.test.mjs | 47 +- tests/subscriptions-manager.test.mjs | 349 +- tests/ui/app-chrome-controller.test.mjs | 58 + tests/ui/profileModalController.test.js | 1 + .../ui/video-list-view-popular-tags.test.mjs | 91 + tests/user-blocks.test.mjs | 429 ++- tests/video-modal-comments.test.mjs | 406 ++ tests/video-modal-controllers.test.mjs | 113 + tests/video-modal-zap.test.mjs | 435 +++ tests/video-note-payload.test.mjs | 22 + tests/view-counter.test.mjs | 57 +- tests/watch-history.test.mjs | 367 +- tests/zap-split.test.mjs | 452 ++- vendor/crypto-helpers.LICENSE | 22 + vendor/crypto-helpers.bundle.min.js | 10 + vendor/crypto-helpers.entry.js | 3 + views/subscriptions.html | 2 +- 194 files changed, 28793 insertions(+), 3944 deletions(-) create mode 100644 docs/nips/01.md create mode 100644 docs/nips/02.md create mode 100644 docs/nips/03.md create mode 100644 docs/nips/04.md create mode 100644 docs/nips/05.md create mode 100644 docs/nips/06.md create mode 100644 docs/nips/07.md create mode 100644 docs/nips/08.md create mode 100644 docs/nips/09.md create mode 100644 docs/nips/10.md create mode 100644 docs/nips/11.md create mode 100644 docs/nips/12.md create mode 100644 docs/nips/13.md create mode 100644 docs/nips/14.md create mode 100644 docs/nips/15.md create mode 100644 docs/nips/16.md create mode 100644 docs/nips/17.md create mode 100644 docs/nips/18.md create mode 100644 docs/nips/19.md create mode 100644 docs/nips/20.md create mode 100644 docs/nips/21.md create mode 100644 docs/nips/22.md create mode 100644 docs/nips/23.md create mode 100644 docs/nips/24.md create mode 100644 docs/nips/25.md create mode 100644 docs/nips/26.md create mode 100644 docs/nips/27.md create mode 100644 docs/nips/28.md create mode 100644 docs/nips/29.md create mode 100644 docs/nips/30.md create mode 100644 docs/nips/31.md create mode 100644 docs/nips/32.md create mode 100644 docs/nips/33.md create mode 100644 docs/nips/34.md create mode 100644 docs/nips/35.md create mode 100644 docs/nips/36.md create mode 100644 docs/nips/37.md create mode 100644 docs/nips/38.md create mode 100644 docs/nips/39.md create mode 100644 docs/nips/40.md create mode 100644 docs/nips/42.md create mode 100644 docs/nips/44.md create mode 100644 docs/nips/45.md create mode 100644 docs/nips/46.md create mode 100644 docs/nips/47.md create mode 100644 docs/nips/48.md create mode 100644 docs/nips/49.md create mode 100644 docs/nips/50.md create mode 100644 docs/nips/51.md create mode 100644 docs/nips/52.md create mode 100644 docs/nips/53.md create mode 100644 docs/nips/54.md create mode 100644 docs/nips/55.md create mode 100644 docs/nips/56.md create mode 100644 docs/nips/57.md create mode 100644 docs/nips/58.md create mode 100644 docs/nips/59.md create mode 100644 docs/nips/60.md create mode 100644 docs/nips/61.md create mode 100644 docs/nips/62.md create mode 100644 docs/nips/64.md create mode 100644 docs/nips/65.md create mode 100644 docs/nips/66.md create mode 100644 docs/nips/68.md create mode 100644 docs/nips/69.md create mode 100644 docs/nips/70.md create mode 100644 docs/nips/71.md create mode 100644 docs/nips/72.md create mode 100644 docs/nips/73.md create mode 100644 docs/nips/75.md create mode 100644 docs/nips/77.md create mode 100644 docs/nips/78.md create mode 100644 docs/nips/7D.md create mode 100644 docs/nips/84.md create mode 100644 docs/nips/86.md create mode 100644 docs/nips/87.md create mode 100644 docs/nips/88.md create mode 100644 docs/nips/89.md create mode 100644 docs/nips/90.md create mode 100644 docs/nips/92.md create mode 100644 docs/nips/94.md create mode 100644 docs/nips/96.md create mode 100644 docs/nips/98.md create mode 100644 docs/nips/99.md create mode 100644 docs/nips/A0.md create mode 100644 docs/nips/B0.md create mode 100644 docs/nips/B7.md create mode 100644 docs/nips/C0.md create mode 100644 docs/nips/C7.md create mode 100644 docs/nips/EE.md create mode 100644 docs/nips/README.md create mode 100644 docs/release-notes.md create mode 100644 js/nostr/countDiagnostics.js create mode 100644 js/nostr/maxListenerDiagnostics.js create mode 100644 js/payments/zapReceiptValidator.js create mode 100644 js/services/moderationActionController.js create mode 100644 js/ui/ModalManager.js create mode 100644 js/ui/applicationBootstrap.js create mode 100644 js/ui/videoModalCommentController.js create mode 100644 tests/app/hydrate-sidebar-navigation.test.mjs create mode 100644 tests/app/is-user-logged-in.test.mjs create mode 100644 tests/moderation/submit-report.test.mjs create mode 100644 tests/nostr/edit-video-dtag.test.mjs create mode 100644 tests/nostr/publishHelpers.test.mjs create mode 100644 tests/nostr/reaction-events.test.mjs create mode 100644 tests/nostr/revert-video-dtag.test.mjs create mode 100644 tests/ui/app-chrome-controller.test.mjs create mode 100644 tests/ui/profileModalController.test.js create mode 100644 vendor/crypto-helpers.LICENSE create mode 100644 vendor/crypto-helpers.bundle.min.js create mode 100644 vendor/crypto-helpers.entry.js diff --git a/AGENTS.md b/AGENTS.md index 78007417..435758d3 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2,6 +2,10 @@ This guide tells AI agents how to keep bitvid aligned with the current product direction. Follow it whenever you touch code, content, or documentation inside this repository. +For any nostr related work, please review the nip documentation located in /docs/nips before begining work. + +**Comment publishing guardrail:** Session actors are limited to passive telemetry (e.g., view counters). Always require the logged-in Nostr signer when sending video comments through [`js/nostr/commentEvents.js`](js/nostr/commentEvents.js). See the reminder in [`docs/nostr-event-schemas.md`](docs/nostr-event-schemas.md#event-catalogue) for context. + --- ## 1. Release Channels: Main vs. Unstable diff --git a/README.md b/README.md index 3d08eafb..780acec2 100644 --- a/README.md +++ b/README.md @@ -132,8 +132,7 @@ package scripts to keep formatting, linting, and generated output consistent: ```bash npm run format # normalize CSS/HTML/JS/MD sources with Prettier + tailwindcss plugin npm run lint:css # enforce design token usage and guard against raw hex colors - npm run build:css # rebuild css/tailwind.generated.css from tailwind.source.css - npm run check:css # fail CI if tailwind.generated.css is out of date + npm run build # run the Tailwind build locally (output remains gitignored) ``` - **No hard-coded colors:** Follow the token-first rules in `AGENTS.md`—reach @@ -147,16 +146,15 @@ npm run format # format CSS/HTML/JS/MD with Prettier + tailwindcss pl npm run lint # run CSS, hex color, inline-style, design-token, and Tailwind color/bracket guards in one pass npm run lint:css # enforce token usage and forbid raw hex colors npm run lint:inline-styles # fail CI if inline style attributes or element.style usage slip in -npm run build:css # rebuild css/tailwind.generated.css from tailwind.source.css +npm run build # run the Tailwind build (delegates to npm run build:css) npm run build:beacon # bundle torrent/dist assets and re-run the inline-style guard npm run build:beacon:bundle # bundle beacon assets without running the guard (rarely needed) -npm run check:css # CI-friendly guard that fails if tailwind.generated.css is dirty ``` #### Admin runbook: regenerate Tailwind styles -Need to refresh `css/tailwind.generated.css` after token or template changes? -Run these commands from the repo root: +Need to confirm Tailwind picks up token or template changes? Run these +commands from the repo root: 1. Install dependencies (only required after cloning or when packages change): @@ -164,20 +162,16 @@ Run these commands from the repo root: npm install ``` -2. Rebuild the Tailwind bundle: +2. Rebuild the Tailwind bundle for local verification (the output stays + gitignored and CI/Netlify handle deploy-time generation): ```bash npm run build:css ``` -3. Optional: confirm the generated file is committed and up to date. - - ```bash - npm run check:css - ``` - -4. Commit the updated `css/tailwind.generated.css` alongside any HTML/JS edits - that rely on the new utilities so deploys pick up the refreshed styles. +The generated `css/tailwind.generated.css` artifact is ignored in git. CI +workflows and Netlify deploys run `npm run build` to produce the compiled +stylesheet during deployment, so source changes are all you need to commit. Inline styles are intentionally blocked. `npm run lint:inline-styles` scans HTML and scripts for `style=` attributes, `element.style`, or `style.cssText` usage @@ -218,11 +212,11 @@ calls over to the facades above so upgrades stay painless. The build command compiles Tailwind with `tailwind.config.cjs`, runs it through the PostCSS pipeline defined in `postcss.config.cjs` (for autoprefixing), and -emits the purged, minified stylesheet at `css/tailwind.generated.css`. Commit the -regenerated file alongside any template changes so deployments pick up the -latest styles. This generated bundle is the only stylesheet we ship—reference -`css/tailwind.generated.css` everywhere and avoid vendoring older `tailwind.min.css` -artifacts. +emits the purged, minified stylesheet at `css/tailwind.generated.css`. That +bundle is generated automatically during CI/Netlify deploys and remains +gitignored locally; reference `css/tailwind.generated.css` in templates, but do +not commit the compiled file. Avoid vendoring legacy `tailwind.min.css` +artifacts now that the deploy pipeline owns the build step. ### Logo usage @@ -327,8 +321,9 @@ placeholder at “—” and development builds log a warning—so mixed deploym ## Testing Continuous integration runs CSS linting/builds, the Playwright kitchen-sink snapshots, and the Node-based unit tests on every push. -Before pushing, run `npm run check:css` locally so `css/tailwind.generated.css` stays clean. Pair that with `npm run test:unit` for -application logic changes and `npm run test:visual` for presentation updates to mirror the CI surface area. +Before pushing, run `npm run build` locally so the Tailwind bundle regenerates. +Pair that with `npm run test:unit` for application logic changes and +`npm run test:visual` for presentation updates to mirror the CI surface area. ### Manual QA checklist diff --git a/components/edit-video-modal.html b/components/edit-video-modal.html index 52dc03b9..91cd83f0 100644 --- a/components/edit-video-modal.html +++ b/components/edit-video-modal.html @@ -146,12 +146,12 @@ type="number" id="editNip71Duration" min="0" - step="1" + step="0.001" data-nip71-input="duration" class="input" />
- Provide the runtime in whole seconds for timeline scrubbing. + Optional legacy fallback in seconds (fractions allowed) for clients that expect a top-level duration.
Optional magnet pointer if the variant is seeded via P2P.
Fractional seconds supported; clients use this for precise timelines.
+Average bits per second for this variant.
+- Provide the runtime in whole seconds for timeline scrubbing. + Optional legacy fallback in seconds (fractions allowed) for clients that + expect a top-level duration.
- Optional magnet pointer if the variant is seeded via - P2P. -
-+ Optional magnet pointer if the variant is seeded via + P2P. +
+ Fractional seconds supported; clients use this for precise timelines. +
++ Average bits per second for this variant. +
+