diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 39f4ec25d..b5afb9b9c 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -5,6 +5,16 @@ title: "[FEAT] " labels: enhancement --- +## 📋 Scope v0.101 + +> **Important** : v0.101 est en freeze fonctionnel. Aucune nouvelle feature ne sera implĂ©mentĂ©e avant le tag v0.101. +> Voir [docs/V0_101_RELEASE_SCOPE.md](../../docs/V0_101_RELEASE_SCOPE.md) et [docs/SCOPE_CONTROL.md](../../docs/SCOPE_CONTROL.md). + +- [ ] **Hors scope v0.101** — Cette feature est pour v0.102+ (ne pas implĂ©menter avant le tag) +- [ ] Exception validĂ©e — Cette feature a Ă©tĂ© approuvĂ©e pour v0.101 (rare, documenter la dĂ©cision) + +--- + ## 🎯 Description DĂ©crire la feature souhaitĂ©e, le problĂšme auquel elle rĂ©pond, ou la valeur ajoutĂ©e. diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index d50b8a133..8d89fad8e 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,6 +5,16 @@ --- +## 📋 Scope v0.101 (obligatoire) + +- [ ] Ce changement est **dans le scope v0.101** ([docs/V0_101_RELEASE_SCOPE.md](../docs/V0_101_RELEASE_SCOPE.md)) +- [ ] Aucune **nouvelle feature** ajoutĂ©e (fix, refactor, test, docs uniquement) +- [ ] Aucune **rĂ©gression** sur les flows critiques (auth, upload, playlists, player) + +*Si une de ces cases n'est pas cochĂ©e, la PR sera rejetĂ©e. Voir [docs/SCOPE_CONTROL.md](../docs/SCOPE_CONTROL.md).* + +--- + ## 🎯 Contexte Expliquer en quelques lignes : diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 31886bd9d..46e0d47cd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,7 +5,18 @@ Ce guide formalise un workflow clair, reproductible et adaptĂ© Ă  la complexitĂ© --- -# 1. Philosophie du projet +# 1. Scope v0.101 (prioritĂ© absolue) + +**En cours jusqu'au tag v0.101** : freeze fonctionnel. Aucune nouvelle feature. + +- **RĂ©fĂ©rence** : [docs/V0_101_RELEASE_SCOPE.md](docs/V0_101_RELEASE_SCOPE.md) et [docs/SCOPE_CONTROL.md](docs/SCOPE_CONTROL.md) +- **AutorisĂ©** : fix, refactor, test, docs, nettoyage, stabilisation +- **Interdit** : nouvelles features, nouvelles routes, nouvelles pages, nouvelles dĂ©pendances (sauf correctif sĂ©curitĂ©) +- Avant toute PR : cocher la vĂ©rification scope dans le template + +--- + +# 2. Philosophie du projet Veza suit trois principes : @@ -15,7 +26,7 @@ Veza suit trois principes : --- -# 2. Branching Model +# 3. Branching Model - `main` : toujours stable, toujours dĂ©ployable. - `develop` (optionnel) : branche d’intĂ©gration continue. @@ -39,7 +50,7 @@ Exemples : --- -# 3. Convention de commits +# 4. Convention de commits Suivre le style **Conventional Commits** : @@ -63,7 +74,7 @@ Exemples : --- -# 4. Tests & QualitĂ© +# 5. Tests & QualitĂ© Avant toute PR : @@ -99,7 +110,7 @@ Avant toute PR : --- -# 5. Pull Requests +# 6. Pull Requests 1. Toujours ouvrir une PR, mĂȘme si vous ĂȘtes seul. 2. DĂ©crire : @@ -114,7 +125,7 @@ Avant toute PR : --- -# 6. Documentation +# 7. Documentation * Tout changement significatif doit ĂȘtre reflĂ©tĂ© dans `docs/`. * Si une dĂ©cision touche Ă  l’architecture : mettre Ă  jour la section `ORIGIN`. diff --git a/README.md b/README.md index ddec4270f..32d40ff37 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Veza Monorepo +**Version cible** : v0.101 (stabilisation en cours). Voir [docs/V0_101_RELEASE_SCOPE.md](docs/V0_101_RELEASE_SCOPE.md) pour le pĂ©rimĂštre. + ## Project Structure - **`apps/web`**: The main frontend application (React + Vite). **This is the single source of truth for the UI.** diff --git a/apps/web/scripts/audit-storybook.js b/apps/web/scripts/audit-storybook.js index a1cf10606..4d9b2a95f 100644 --- a/apps/web/scripts/audit-storybook.js +++ b/apps/web/scripts/audit-storybook.js @@ -185,7 +185,7 @@ async function audit() { throw new Error(`File not found: ${storybookStaticPath}`); } const indexJson = JSON.parse(fs.readFileSync(storybookStaticPath, 'utf8')); - let allStories = Object.values(indexJson.entries).map(e => e.id); + const allStories = Object.values(indexJson.entries).map(e => e.id); const limit = parseInt(process.env.STORYBOOK_AUDIT_LIMIT || '0', 10); stories = limit > 0 ? allStories.slice(0, limit) : allStories; if (limit > 0) console.log(`Limiting audit to first ${limit} stories`); diff --git a/apps/web/src/components/developer/DeveloperDashboardView.tsx b/apps/web/src/components/developer/DeveloperDashboardView.tsx index 107020331..7a531763e 100644 --- a/apps/web/src/components/developer/DeveloperDashboardView.tsx +++ b/apps/web/src/components/developer/DeveloperDashboardView.tsx @@ -10,7 +10,6 @@ import { SwaggerUIDoc } from './SwaggerUI'; import { CreateAPIKeyModal } from './modals/CreateAPIKeyModal'; import { ConfirmationDialog } from '../ui/confirmation-dialog'; import { - FileText, ExternalLink, Key, Plus, diff --git a/apps/web/src/features/player/components/GlobalPlayer.tsx b/apps/web/src/features/player/components/GlobalPlayer.tsx index e1041fbb7..0c430c8c3 100644 --- a/apps/web/src/features/player/components/GlobalPlayer.tsx +++ b/apps/web/src/features/player/components/GlobalPlayer.tsx @@ -38,14 +38,6 @@ export function GlobalPlayer() { const { sidebarOpen } = useUIStore(); const player = usePlayer(audioRef); useKeyboardShortcuts(player); - useMediaSession({ - track: currentTrack ?? null, - isPlaying: player.isPlaying, - onPlay: () => !isIdle && player.resume(), - onPause: player.pause, - onPrevious: player.previous, - onNext: player.next, - }); const [isHovered, setIsHovered] = useState(false); const [isExpanded, setIsExpanded] = useState(false); @@ -56,6 +48,15 @@ export function GlobalPlayer() { const displayTrack = currentTrack || IDLE_TRACK; const isIdle = !currentTrack; + useMediaSession({ + track: currentTrack ?? null, + isPlaying: player.isPlaying, + onPlay: () => !isIdle && player.resume(), + onPause: player.pause, + onPrevious: player.previous, + onNext: player.next, + }); + return ( <>