veza/apps/web/src/components
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
..
admin fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
analytics refactor(web): migrate components from hardcoded pigment hex to SUMI tokens 2026-04-27 05:07:24 +02:00
auth fix(security): protect admin routes with role check 2026-04-05 16:19:16 +02:00
base refactor: Phase 1 — SUMI token foundation 2026-02-12 01:48:01 +01:00
branding feat(branding): scaffold Logo component + Sumi icons + brand assets pipeline (Sprint 3) 2026-04-27 17:08:17 +02:00
charts refactor(design-system): finish Sprint 2 — light theme + 3 viz pigments canonized 2026-04-27 16:57:12 +02:00
commerce fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
dashboard fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
data fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
demo feat(ui): add SUMI design system components, seasonal hooks, and i18n updates 2026-03-31 19:15:54 +02:00
developer refactor(web): migrate components from hardcoded pigment hex to SUMI tokens 2026-04-27 05:07:24 +02:00
feedback fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
filters fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
forms fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
icons feat(branding): scaffold Logo component + Sumi icons + brand assets pipeline (Sprint 3) 2026-04-27 17:08:17 +02:00
inventory fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
keyboard refactor: Phase 3a — Global color class migration to SUMI semantics 2026-02-12 01:51:49 +01:00
layout fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
library refactor(web): migrate playlistService to orval-generated playlist client (v1.0.8 B4) 2026-04-25 21:07:49 +02:00
live fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
marketplace fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
modals fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
monitoring fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
navigation fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
notifications fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
player refactor(web): migrate user-pref + storybook hex literals to tokens (Sprint 2 follow-up #2) 2026-04-27 16:42:35 +02:00
pwa fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
search fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
seller fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
settings refactor(web): migrate user-pref + storybook hex literals to tokens (Sprint 2 follow-up #2) 2026-04-27 16:42:35 +02:00
share fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
social fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
sumi fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
theme fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ui feat(legal): DMCA notice handler + admin queue + 451 playback gate (W3 Day 14) 2026-04-28 15:39:33 +02:00
upload refactor(web): migrate components from hardcoded pigment hex to SUMI tokens 2026-04-27 05:07:24 +02:00
user fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
AdvancedFilters.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
BulkModeBanner.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
COMPONENT_USAGE.md docs: update Welcome.mdx and deprecate Kodo references in docs 2026-02-17 17:05:33 +01:00
ErrorBoundary.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
ErrorBoundary.test.tsx fix(a11y): fix heading hierarchy h1→h3 gaps on 8 pages 2026-03-25 10:14:18 +01:00
ErrorBoundary.tsx improving UI: adding API doc to Developer Page 2026-01-26 14:12:17 +01:00
index.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
OfflineIndicator.stories.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
OfflineIndicator.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
OfflineQueueManager.tsx fix: stabilize builds, tests, and lint across all stacks 2026-04-05 16:48:07 +02:00
Onboarding.tsx chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
RateLimitIndicator.tsx refactor(tokens): complete design token migration to semantic system 2026-02-09 23:05:09 +01:00
types.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00