Commit graph

1835 commits

Author SHA1 Message Date
senke
ccf98983fe chore(v0.103): finalize release — CHANGELOG, FEATURE_STATUS, .cursorrules scope
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
2026-02-20 15:14:25 +01:00
senke
b33c9d3cca feat(profile): add profile privacy toggle (B3)
- Backend: is_public in Profile, UpdateProfile; strip SocialLinks for private
- Settings: ProfileVisibilityCard toggle in Privacy tab
- UserProfilePage: show 'Profil privé' when viewing private profile
2026-02-20 15:10:02 +01:00
senke
09f9dc3de6 feat(profile): add social links section on public profile (B2) 2026-02-20 15:06:20 +01:00
senke
9be0e6e14f feat(profile): add profile banner (B1) 2026-02-20 14:56:25 +01:00
senke
a3fa564a50 docs: document WebAuthn/Passkeys deferral to v0.104 (A3) 2026-02-20 14:52:53 +01:00
senke
d626e9c533 feat(auth): enrich sessions page with history and revoke (A4) 2026-02-20 14:52:20 +01:00
senke
74f5158309 docs: document 2FA SMS deferral to v0.104 (A2) 2026-02-20 14:49:21 +01:00
senke
6bac68b679 feat(auth): add OAuth Spotify provider (A1) 2026-02-20 14:48:08 +01:00
senke
286be8ba1d chore(v0.102): consolidate remaining changes — docs, frontend, backend
Some checks failed
Backend API CI / test-unit (push) Failing after 0s
Backend API CI / test-integration (push) Failing after 0s
Frontend CI / test (push) Failing after 0s
Storybook Audit / Build & audit Storybook (push) Failing after 0s
- docs: SCOPE_CONTROL, CONTRIBUTING, README, .github templates
- frontend: DeveloperDashboardView, Player components, MSW handlers, auth, reactQuerySync
- backend: playback_analytics, playlist_service, testutils, integration README

Excluded (artifacts): .auth, playwright-report, test-results, storybook_audit_detailed.json
2026-02-20 13:02:12 +01:00
senke
42490b539c feat(queue): migrate QueueView drag & drop to @dnd-kit (B3) 2026-02-20 13:00:57 +01:00
senke
222fb95372 docs: add CHANGELOG v0.102 release notes; test(e2e): add queue flow tests 2026-02-20 12:57:26 +01:00
senke
274e63c883 docs: update FEATURE_STATUS.md for v0.102 — gear, live, queue, developer operational 2026-02-20 12:56:55 +01:00
senke
7b86ae7457 docs(live): document Go Live limitation (A6) 2026-02-20 12:56:29 +01:00
senke
9e1458e738 feat(player): Lot F - PlaybackSpeedControl, useMediaSession, waveform
- Add playbackSpeed to playerStore with setPlaybackSpeed action
- Add setPlaybackRate to AudioPlayerService
- Create PlaybackSpeedControl (0.5x–2x) and integrate in GlobalPlayer
- Create useMediaSession hook for OS controls (title, artwork, play/pause/next/prev)
- Add waveform preview in PlayerBarProgress (placeholder bars client-side)
- Update types, tests, and mocks
2026-02-20 00:40:53 +01:00
senke
1b2f5333df feat(social): Lot E - Like/Comment API + RoleBadge on profile
- Connect SocialViewFeedItem like to socialService.toggleLike(track.id, 'track')
- Connect SocialViewFeedItem comment to socialService.postComment (expandable form)
- Update socialService.postComment to use POST /social/comments (target_id, target_type, content)
- Add RoleBadge component and display on UserProfilePageHeader
- Fetch user roles via getUserRoles in useUserProfilePage
- Add MSW handlers for POST /social/like and POST /social/comments
2026-02-20 00:25:08 +01:00
senke
0622aa81aa feat(playlists): Lot D - DuplicatePlaylistButton, Export, Share, Recommendations
- Add duplicatePlaylist() to playlistService (POST /playlists/:id/duplicate)
- Implement DuplicatePlaylistButton with navigation to new playlist on success
- Add DuplicatePlaylistButton and ExportPlaylistButton to PlaylistDetailPageActionsBar
- Add MSW handlers for duplicate and export endpoints
- SharePlaylistModal and PlaylistRecommendations already wired (flags enabled)
2026-02-20 00:22:42 +01:00
senke
64c92d9788 feat(developer): connect API keys to real backend (Lot C frontend)
- developerApi: listKeys, createKey, deleteKey
- developerService: use real API instead of localStorage
- DeveloperDashboardView: list keys, Create API Key button, revoke with confirmation
- CreateAPIKeyModal: scopes read/write/admin
- MSW handlers for GET/POST/DELETE developer/api-keys
2026-02-20 00:19:58 +01:00
senke
32348bebce feat(developer): add API keys backend (Lot C)
- Migration 082: api_keys table (user_id, name, prefix, hashed_key, scopes, last_used_at, expires_at)
- APIKey model, APIKeyService (Create, List, Delete, ValidateAPIKey)
- APIKeyHandler: GET/POST/DELETE /api/v1/developer/api-keys
- AuthMiddleware: X-API-Key and Bearer vza_* accepted as alternative to JWT
- CSRF: skip for API key auth (stateless)
- Key format: vza_ prefix, SHA-256 hashed storage
2026-02-20 00:18:36 +01:00
senke
93361bf89f feat(queue): sync playerStore with backend API, migrate QueueView to usePlayerStore
- Add useQueueSync hook: restore queue on login, sync add/remove/reorder/clear
- Extend queueApi.getQueue to return queueItemIds for backend sync
- Migrate QueueView from useAudio to usePlayerStore + usePlayer
- Add ConfirmationDialog for Clear Queue button
- Add MSW handlers for GET/PUT/POST/DELETE queue endpoints
- Wire useQueueSync in DashboardLayout
2026-02-20 00:13:33 +01:00
senke
6a53daab59 feat(queue): add backend queue API with CRUD operations 2026-02-19 23:44:44 +01:00
senke
dc81f89338 feat(live): replace mock fallback with real API 2026-02-19 23:42:20 +01:00
senke
d803d2bcfe feat(gear): connect CRUD operations and add category filter 2026-02-19 23:41:46 +01:00
senke
bd810a931a chore(scope): prepare release/v0.102 branch 2026-02-19 23:39:40 +01:00
senke
f3916b4f4e docs: close v0.101, add v0.102 scope placeholder 2026-02-19 22:50:30 +01:00
senke
4fc0cd4018 chore: finalize v0.101 release — all criteria validated 2026-02-19 19:31:06 +01:00
senke
ec74f82967 fix(e2e): align local E2E setup with CI or document CI-only validation 2026-02-19 19:23:17 +01:00
senke
f05a1eb89d chore: finalize v0.101 release — all criteria validated 2026-02-19 19:19:19 +01:00
senke
baed6285e7 docs: validate no regression on critical flows for v0.101 2026-02-19 19:13:38 +01:00
senke
de2af0fb58 fix(e2e): align local E2E setup with CI or document CI-only validation 2026-02-19 19:10:15 +01:00
senke
04693d6bd7 docs: finalize v0.101 security checklist and scope 2026-02-19 19:01:56 +01:00
senke
ddd0b6f5e4 chore(web): remove console.log in prod, address TODO/FIXME for v0.101 2026-02-19 19:01:42 +01:00
senke
099f69e118 docs: update v0.101 remediation status and scope checklist 2026-02-19 16:27:22 +01:00
senke
c0bcb711df fix(e2e): align CI Go version to 1.24 for v0.101
fix(web): resolve lint errors for v0.101
- eslint: add ignores (e2e, scripts, playwright-report, generated types)
- eslint: add browser globals, disable react-hooks in stories
- fix empty catch blocks (Cart, MarketplacePage, RolesPage, SettingsPage)
- fix PlayerExpanded: move useEffect before early return
- fix TrackHistory.test: rename type import to avoid no-redeclare
2026-02-19 16:27:10 +01:00
senke
4b0c266b8e chore(docs): add v0.101 diagnostic baseline
- Add V0_101_DIAGNOSTIC_BASELINE.md with initial diagnostic results
- Fix eslint: remove storybook plugin dep, add dist_verification to ignores
- Fix .storybook/preview.tsx: remove unused React, use object shorthand
2026-02-19 16:08:05 +01:00
senke
cfffedce92 fix(tests): parse RespondSuccess envelope in GetUploadStats test 2026-02-19 14:04:47 +01:00
senke
d23fc1be2a fix(tests): correct UpdateProfile assertion in user_service_test 2026-02-19 14:03:28 +01:00
senke
07b1f71b56 fix(frontend): resolve failing tests for v0.101
- setup: mock HTMLCanvasElement.getContext and HTMLMediaElement.pause for JSDOM
- bitrateService: accept multiple network error message patterns
- TrackDetailPage: use Object.defineProperty for navigator.clipboard
2026-02-19 12:07:02 +01:00
senke
7b500648fe fix(backend): resolve failing tests for v0.101
- config: isolate TestLoad/TestLoad_DefaultValues from env (APP_DOMAIN, DB_HOST, REDIS_URL)
- handlers: fix TestLogin_InvalidCredentials (401 not 403), TestLogout_Success, TestGetMe_Success (inject auth middleware), TestResendVerification_Success (unverify user)
2026-02-19 11:29:30 +01:00
senke
95fd442c90 chore(release): v0.101.0 stable 2026-02-18 18:16:26 +01:00
senke
2dce2578e7 docs: update remediation and onboarding for v0.101
- REMEDIATION_PROGRESS: add Phase v0.101 section
- V0_101_RELEASE_SCOPE: check build criteria
- VERSION: 0.101.0-dev (release tag will create)
2026-02-18 18:16:06 +01:00
senke
a53dc358e6 fix(chat): ensure WebSocket auth token from query or cookie
- Chat server: accept token from ?token= or access_token cookie (httpOnly)
- Frontend: append token to WS URL when available (TokenStorage)
2026-02-18 12:42:48 +01:00
senke
98f6db3a1d fix(streaming): ensure HLS audio chain works end-to-end
- HAProxy: route /hls to stream server
- Vite proxy: /ws, /stream, /hls for dev
- HLS_BASE_URL: empty when STREAM_URL relative (proxy)
- FEATURE_STATUS: HLS_STREAMING operational
2026-02-18 12:42:42 +01:00
senke
aeda9120b3 fix(chat-server): ensure sqlx-data.json available for Docker build
- Remove sqlx-data.json from .dockerignore to allow SQLX_OFFLINE build
- Use repo root as build context for veza-common path dependency
- Add SQLX_OFFLINE=true and COPY sqlx-data.json in Dockerfile
2026-02-18 12:38:16 +01:00
senke
cd5f07ee35 docs: add full stack startup procedure for v0.101 2026-02-18 12:04:27 +01:00
senke
ba53c3927e chore(infra): add chat-server and stream-server to docker-compose dev 2026-02-18 12:03:47 +01:00
senke
1f72854192 chore(infra): add ClamAV to docker-compose for v0.101 2026-02-18 12:03:14 +01:00
senke
68fececd8d fix(storybook): resolve audit errors - usePlaylistSearch loop, MSW handlers, ignore patterns
- usePlaylistSearch: use useRef for toastError to avoid infinite loop in useEffect
- handlers-playlists: fix search response format (playlists/total/page/limit)
- handlers-playlists: fix list response (items -> playlists)
- handlers-playlists: add GET playlists/:id/analytics handler
- PlaylistSearch.stories: fix Empty story response format
- audit-storybook: add MSW, swagger, .mdx ignore patterns
- audit-storybook: cap errors per story (MAX_ERRORS_PER_STORY=100)
2026-02-17 22:22:39 +01:00
senke
d82ca03394 fix(storybook): extend audit ignore patterns for auth, chat, logger
- Add IGNORED_CONSOLE_ERRORS: [ERROR]/[WARN], auth errors, WebSocket,
  React Query, hooks, form validation, ResizeObserver
- Ignore errors from node_modules, chunk-, vendor (third-party libs)
- Ignore /api/v1/logs/ network failures in isAppRelevantFailure
2026-02-17 17:31:07 +01:00
senke
ff7e2ce4c5 fix(storybook): reduce audit failures with ignored patterns and config
- Extend IGNORED_CONSOLE_ERRORS: Failed to fetch, Storybook index, Radix,
  ResizeObserver, emoji-picker, date-fns
- Ignore errors from iframe.html and assets/*.js (Storybook internals)
- Add configurable STORYBOOK_PORT (default 6007)
- Increase POST_LOAD_WAIT_MS 600→1000 for MSW init
- Increase NAVIGATION_TIMEOUT_MS 30s→45s (configurable via STORYBOOK_NAV_TIMEOUT)
- Add MSW handler for images.unsplash.com
2026-02-17 17:29:28 +01:00
senke
432415dc75 docs: update Welcome.mdx and deprecate Kodo references in docs
- Welcome.mdx: Kodo → Sumi design tokens
- EMPTY_ERROR_PATTERNS: KodoEmptyState → EmptyState
- all_components/covered_components: remove KodoEmptyState (renamed to EmptyState)
- COLOR_USAGE.md: add deprecation notice, point to DESIGN_TOKENS
- COMPONENT_USAGE.md: add note to prefer Sumi tokens
2026-02-17 17:05:33 +01:00