veza/apps/web/src/components/ui
senke 49335322b5
Some checks failed
Veza CI / Notify on failure (push) Blocked by required conditions
Veza CI / Rust (Stream Server) (push) Successful in 5m33s
Security Scan / Secret Scanning (gitleaks) (push) Failing after 1m0s
Veza CI / Backend (Go) (push) Failing after 9m37s
Veza CI / Frontend (Web) (push) Has been cancelled
E2E Playwright / e2e (full) (push) Has been cancelled
feat(legal): DMCA notice handler + admin queue + 451 playback gate (W3 Day 14)
End-to-end DMCA workflow. Public submission, admin queue, takedown
flips track to is_public=false + dmca_blocked=true, playback paths
return 451 Unavailable For Legal Reasons.

Backend
- migrations/988_dmca_notices.sql + rollback : table dmca_notices
  (id, status, claimant_*, work_description, infringing_track_id FK,
  sworn_statement_at, takedown_at, counter_notice_at, restored_at,
  audit_log JSONB, created_at, updated_at). Adds tracks.dmca_blocked
  BOOLEAN. Partial indexes for the pending queue + per-track lookup.
  Status enum constrained via CHECK.
- internal/models/dmca_notice.go + DmcaBlocked field on Track.
- internal/services/dmca_service.go : CreateNotice + ListPending +
  Takedown + Dismiss. Takedown is a single transaction that flips the
  track's flags AND appends an audit_log entry — partial state can't
  happen if the track was deleted between fetch and update.
- internal/handlers/dmca_handler.go : POST /api/v1/dmca/notice (public),
  GET /api/v1/admin/dmca/notices (paginated), POST /:id/takedown,
  POST /:id/dismiss. sworn_statement=false → 400. Conflict → 409.
  Track gone after notice → 410.
- internal/api/routes_legal.go : route registration. Admin chain :
  RequireAuth + RequireAdmin + RequireMFA (same as moderation routes).
- internal/core/track/track_hls_handler.go : both StreamTrack +
  DownloadTrack now early-return 451 when track.DmcaBlocked. Owner
  cannot bypass — only an admin restoring the notice clears the gate.
- internal/services/dmca_service_test.go : audit_log append helpers,
  malformed-JSON rejection, ordering preservation.

Frontend
- apps/web/src/features/legal/pages/DmcaNoticePage.tsx : public form
  at /legal/dmca/notice. Validates sworn-statement checkbox client-side.
  Receipt panel shows the notice ID after submission.
- apps/web/src/services/api/dmca.ts : thin client (POST /dmca/notice).
- routeConfig + lazy registry updated for the new route.
- DmcaPage now links to /legal/dmca/notice instead of saying "form
  pending".

E2E
- tests/e2e/29-dmca-notice.spec.ts : 3 tests. (1) anonymous submit
  yields 201 + pending receipt. (2) sworn_statement=false rejected
  with 400. (3) admin takedown gates playback with 451 — gated behind
  E2E_DMCA_ADMIN=1 because admin path requires MFA-bearing seed.

Acceptance (Day 14) : public submission produces a pending notice,
admin takedown blocks playback at 451. Lab-side validation pending
admin MFA seed for the e2e admin pathway.

W3 progress : Redis Sentinel ✓ · MinIO distribué ✓ · CDN ✓ · DMCA ✓ ·
embed  Day 15.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 15:39:33 +02:00
..
accordion fix(tests): add missing component tests and fix failing tests 2026-02-12 22:59:09 +01:00
avatar-upload fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
content-transition feat(ui): header glassmorphism, card hover effects, content transitions, badge animations 2026-02-09 23:25:52 +01:00
context-menu fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
data-list ui(components): migrate remaining 27 skeleton files to Skeleton shimmer 2026-02-08 23:21:33 +01:00
date-picker refactor(ui): extract DatePicker into date-picker module 2026-02-05 22:15:11 +01:00
dialog fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
dropdown-menu fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
feature-highlight feat(ui): chat status indicators, notification grouping, feature discovery 2026-02-10 00:04:23 +01:00
file-upload fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
hover-card fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
lazy-component feat(legal): DMCA notice handler + admin queue + 451 playback gate (W3 Day 14) 2026-04-28 15:39:33 +02:00
optimized-image fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
select fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
tabs fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
tooltip fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
virtualized-list chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
Accordion.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
accordion.tsx refactor(ui): accordion module, re-export 2026-02-06 02:33:10 +01:00
Alert.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
alert.test.tsx refactor: Phase 3a — Global color class migration to SUMI semantics 2026-02-12 01:51:49 +01:00
alert.tsx feat(ui): semantic tokens in modal, button, card, alert 2026-02-10 09:29:48 +01:00
AnimatedNumber.test.tsx fix(tests): add missing component tests and fix failing tests 2026-02-12 22:59:09 +01:00
AnimatedNumber.tsx feat(ui): animated number counters + navigation progress bar 2026-02-10 00:19:18 +01:00
AstralBackground.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
AstralBackground.tsx refactor(ui): migrate arbitrary values to layout tokens 2026-02-17 17:05:08 +01:00
avatar-upload.test.tsx refactor(ui): extract AvatarUpload into avatar-upload module 2026-02-05 22:21:02 +01:00
Avatar.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
avatar.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
avatar.tsx chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
AvatarUpload.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Badge.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
badge.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
badge.tsx refactor: Phase 4 — Update UI primitives to SUMI design system 2026-02-12 01:58:15 +01:00
button-loading.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
button-loading.tsx Phase 2 stabilisation: code mort, Modal→Dialog, feature flags, tests, router split, Rust legacy 2026-02-14 17:23:32 +01:00
Button.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
button.test.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
button.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ButtonLoading.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Card.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
card.test.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
card.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Checkbox.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
checkbox.test.tsx test(settings): add regression tests for all 20 Settings page bugs 2026-03-26 00:24:24 +01:00
checkbox.tsx feat(ui): add SUMI design system components, seasonal hooks, and i18n updates 2026-03-31 19:15:54 +02:00
Collapsible.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
collapsible.test.tsx fix(tests): add missing component tests and fix failing tests 2026-02-12 22:59:09 +01:00
collapsible.tsx feat(ui): avatar polish, smooth accordion, modal animation consistency 2026-02-09 23:46:46 +01:00
ComingSoon.test.tsx fix(a11y): fix heading hierarchy h1→h3 gaps on 8 pages 2026-03-25 10:14:18 +01:00
ComingSoon.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
confirmation-dialog.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
confirmation-dialog.tsx refactor: Phase 3a — Global color class migration to SUMI semantics 2026-02-12 01:51:49 +01:00
ConfirmationDialog.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ContentFadeIn.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ContentFadeIn.tsx refactor: Phase 7 — Clean up legacy components and remove dead tokens 2026-02-12 02:09:29 +01:00
DataList.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
DataList.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
DataList.tsx refactor(ui): extract DataList into data-list module 2026-02-05 22:35:53 +01:00
date-picker.test.tsx refactor(ui): extract DatePicker into date-picker module 2026-02-05 22:15:11 +01:00
DatePicker.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
DesignTokens.stories.tsx refactor(web): migrate user-pref + storybook hex literals to tokens (Sprint 2 follow-up #2) 2026-04-27 16:42:35 +02:00
Dialog.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
dialog.test.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
dialog.tsx refactor(ui): extract Dialog into dialog module 2026-02-05 22:59:48 +01:00
dropdown-menu.test.tsx style(ui): elevate Dropdown, DropdownMenu, Tooltip to SaaS Premium; update test 2026-02-07 14:23:04 +01:00
dropdown-menu.tsx refactor(ui): dropdown-menu module, dropdown controlled open, re-export 2026-02-06 02:27:29 +01:00
dropdown.test.tsx test: fix and improve unit tests across multiple features 2026-03-25 23:34:42 +01:00
dropdown.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
DropdownMenu.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
empty-state.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
empty-state.tsx feat: frontend improvements — UI polish, player bar, auth flow, i18n 2026-03-18 11:35:44 +01:00
EmptyState.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ERROR_DISPLAY_COMPONENT_API.md incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
ERROR_DISPLAY_STRATEGY.md incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
ErrorBoundary.tsx fix: add override modifier to ErrorBoundary.render() 2026-02-10 00:49:59 +01:00
ErrorDisplay.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ErrorDisplay.test.tsx test: add tests for ErrorDisplay, LoadingState, ComingSoon 2026-02-12 22:19:54 +01:00
ErrorDisplay.tsx refactor(frontend): eliminate ~45 'any' types in production code 2026-02-22 17:44:49 +01:00
FAB.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
FAB.test.tsx fix(tests): add missing component tests and fix failing tests 2026-02-12 22:59:09 +01:00
FAB.tsx fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
file-upload.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
floating-input.test.tsx fix(tests): add missing component tests and fix failing tests 2026-02-12 22:59:09 +01:00
floating-input.tsx refactor: Phase 7 — Clean up legacy components and remove dead tokens 2026-02-12 02:09:29 +01:00
FloatingInput.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
focus-trap.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
focus-trap.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
FocusTrap.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
FormField.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
FormField.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
FormField.tsx refactor: Phase 3a — Global color class migration to SUMI semantics 2026-02-12 01:51:49 +01:00
HelpText.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
HelpText.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
HelpText.tsx feat(ui): add SUMI design system components, seasonal hooks, and i18n updates 2026-03-31 19:15:54 +02:00
ImageCropper.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ImageCropper.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
ImageCropper.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ImageViewerModal.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ImageViewerModal.test.tsx feat(ui): badge polish, DnD feedback, typography system, image lightbox 2026-02-09 23:52:33 +01:00
ImageViewerModal.tsx fix: UI remediation Phase 1 (S0-S5) + Phase 2 Sprint 6 shadow system 2026-02-12 10:13:44 +01:00
Input.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
input.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
input.tsx refactor: Phase 4 — Update UI primitives to SUMI design system 2026-02-12 01:58:15 +01:00
KeyboardShortcutsPanel.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Label.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
label.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
label.tsx ui(tokens): complete text-kodo-content-dim → text-muted-foreground migration (52 files) 2026-02-09 00:04:51 +01:00
LazyComponent.test.tsx test(ui): add LazyErrorFallback and LazyComponent stories; fix LazyComponent tests for fallback text 2026-02-05 20:49:17 +01:00
LazyComponent.tsx feat(legal): DMCA notice handler + admin queue + 451 playback gate (W3 Day 14) 2026-04-28 15:39:33 +02:00
loading-spinner.test.tsx refactor: unify loading components -- consolidate Spinner into LoadingSpinner 2026-02-12 22:04:45 +01:00
loading-spinner.tsx refactor: unify loading components -- consolidate Spinner into LoadingSpinner 2026-02-12 22:04:45 +01:00
LoadingSpinner.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
LoadingState.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
LoadingState.test.tsx refactor: LoadingState delegates all spinner rendering to LoadingSpinner 2026-02-12 22:23:16 +01:00
LoadingState.tsx refactor: LoadingState delegates all spinner rendering to LoadingSpinner 2026-02-12 22:23:16 +01:00
NavigationProgress.tsx fix: UI remediation Phase 1 (S0-S5) + Phase 2 Sprint 6 shadow system 2026-02-12 10:13:44 +01:00
optimized-image.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
optimized-image.tsx refactor(ui): extract OptimizedImage into optimized-image module 2026-02-05 22:31:35 +01:00
OptimizedImage.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Progress.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
progress.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
progress.tsx refactor: Phase 7 — Clean up legacy components and remove dead tokens 2026-02-12 02:09:29 +01:00
radio-group.test.tsx test(settings): add regression tests for all 20 Settings page bugs 2026-03-26 00:24:24 +01:00
radio-group.tsx fix(settings): fix toast crash, schema validation, radio group, and delete dialog 2026-03-25 23:40:51 +01:00
RadioGroup.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
scroll-area.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
scroll-area.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
ScrollArea.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ScrollToTop.tsx refactor: Phase 7 — Clean up legacy components and remove dead tokens 2026-02-12 02:09:29 +01:00
select.test.tsx test(ui): add Select stories (Default, Empty, Disabled, Grouped, MultiSelect), fix tests for listbox/option 2026-02-05 21:16:30 +01:00
Sidebar.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Sidebar.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Skeleton.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
skeleton.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
skeleton.tsx feat(a11y): comprehensive accessibility & view states improvements 2026-02-09 23:04:35 +01:00
Slider.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
slider.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
slider.tsx chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
Switch.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
switch.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
switch.tsx feat(a11y): comprehensive accessibility & view states improvements 2026-02-09 23:04:35 +01:00
Table.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
table.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
table.tsx refactor: Phase 3a — Global color class migration to SUMI semantics 2026-02-12 01:51:49 +01:00
Tabs.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
tabs.test.tsx incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
tabs.tsx refactor(ui): tabs module, re-export 2026-02-06 10:12:33 +01:00
testids.ts chore(cleanup): remove orphan code + archive disabled workflows + .playwright-mcp 2026-04-20 20:33:40 +02:00
Textarea.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
textarea.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
textarea.tsx refactor(ui): replace gray colors with Sumi tokens 2026-02-17 17:03:57 +01:00
Toast.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Toast.test.tsx fix(a11y): fix heading hierarchy h1→h3 gaps on 8 pages 2026-03-25 10:14:18 +01:00
Toast.tsx feat: frontend improvements — UI polish, player bar, auth flow, i18n 2026-03-18 11:35:44 +01:00
Tooltip.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
tooltip.test.tsx refactor(ui): tooltip module, useTooltip, re-export, tests 2026-02-06 10:32:14 +01:00
tooltip.tsx refactor(ui): tooltip module, useTooltip, re-export, tests 2026-02-06 10:32:14 +01:00
virtualized-list.test.tsx refactor(web): split VirtualizedList into virtualized-list module 2026-02-06 13:55:06 +01:00
virtualized-list.tsx refactor(web): split VirtualizedList into virtualized-list module 2026-02-06 13:55:06 +01:00
VirtualizedList.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
WaveformVisualizer.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
WaveformVisualizer.test.tsx chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
WaveformVisualizer.tsx refactor(web): migrate components from hardcoded pigment hex to SUMI tokens 2026-04-27 05:07:24 +02:00