Some checks failed
Backend API CI / test-unit (push) Has been cancelled
Backend API CI / test-integration (push) Has been cancelled
Veza CI / Rust (Stream Server) (push) Has been cancelled
Veza CI / Backend (Go) (push) Has been cancelled
Veza CI / Notify on failure (push) Has been cancelled
Veza CI / Frontend (Web) (push) Has been cancelled
Frontend CI / test (push) Has been cancelled
Security Scan / Secret Scanning (gitleaks) (push) Has been cancelled
First-attempt commit02728909fonly captured the .gitignore change; the pre-commit hook silently dropped the 343 staged moves/deletes during lint-staged's "no matching task" path. This commit re-applies the intended J1 content on top of24af2f72b(which was pushed in parallel). Uses --no-verify because: - J1 only touches .md/.json/.log/.png/binaries — zero code that would benefit from lint-staged, typecheck, or vitest - The hook demonstrated it corrupts pure-rename commits in this repo - Explicitly authorized by user for this one commit Changes (343 total: 169 deletions + 174 renames): Binaries purged (~167 MB): - veza-backend-api/{server,modern-server,encrypt_oauth_tokens,seed,seed-v2} Generated reports purged: - 9 apps/web/lint_report*.json (~32 MB) - 8 apps/web/tsc_*.{log,txt} + ts_*.log (TS error snapshots) - 3 apps/web/storybook_*.json (1375+ stored errors) - apps/web/{build_errors*,build_output,final_errors}.txt - 70 veza-backend-api/coverage*.out + coverage_groups/ (~4 MB) - 3 veza-backend-api/internal/handlers/*.bak Root cleanup: - 54 audit-*.png (visual regression baselines, ~11 MB) - 9 stale MVP-era scripts (Jan 27, hardcoded v0.101): start_{iteration,mvp,recovery}.sh, test_{mvp_endpoints,protected_endpoints,user_journey}.sh, validate_v0101.sh, verify_logs_setup.sh, gen_hash.py Session docs archived (not deleted — preserved under docs/archive/): - 78 apps/web/*.md → docs/archive/frontend-sessions-2026/ - 43 veza-backend-api/*.md → docs/archive/backend-sessions-2026/ - 53 docs/{RETROSPECTIVE_V,SMOKE_TEST_V,PLAN_V0_,V0_*_RELEASE_SCOPE, AUDIT_,PLAN_ACTION_AUDIT,REMEDIATION_PROGRESS}*.md → docs/archive/v0-history/ README.md and CONTRIBUTING.md preserved in apps/web/ and veza-backend-api/. Note: The .gitignore rules preventing recurrence were already pushed in02728909fand remain in place — this commit does not modify .gitignore. Refs: AUDIT_REPORT.md §11
11 KiB
11 KiB
V0.503 Release Scope — Stream Server E2E + Chat Hardening + Cleanup
Status : En préparation Phase : 5 — Streaming & Communication Prérequis : v0.502 (taguée) Estimation : ~5 sprints (25 jours ouvrés)
Objectif
Rendre le streaming HLS fonctionnel de bout en bout (upload → transcode → HLS → player), durcir le chat Go (rate limiter Redis, présence persistante, full-text search), et nettoyer les vestiges du chat server Rust supprimé en v0.502.
État actuel (pré-v0.503)
| Composant | État | Détail |
|---|---|---|
| Stream Server Rust | ✅ Compile, ✅ Docker | HLS endpoints existent mais pipeline E2E non connecté |
| Go Backend HLS | ⚠️ Partiel | Appelle /internal/jobs/transcode mais pas les endpoints HLS |
| Frontend HLS | ⚠️ Partiel | useHLSPlayer hook existe mais non branché, player utilise URL directe |
| hls.js | ✅ Installé | ^1.6.14 dans package.json |
| Chat Go | ✅ Opérationnel | Rate limiter in-memory, présence éphémère, recherche ILIKE basique |
| Chat Rust (veza-chat-server) | ❌ Obsolète | Retiré de docker-compose mais dossier et refs CI/CD encore présents |
Lots
Lot SS1 — Stream Server HLS Integration (E2E)
Objectif : Un track uploadé est jouable en HLS adaptatif dans le player.
| # | Tâche | Fichiers impactés | Effort |
|---|---|---|---|
| SS1-01 | Ajouter endpoints Go proxy HLS (GET /api/v1/tracks/:id/hls/master.m3u8, /hls/status) |
internal/handlers/stream_handler.go |
M |
| SS1-02 | Étendre stream_service.go : appeler transcoding HLS (pas juste compress), vérifier statut HLS via stream server |
internal/services/stream_service.go |
M |
| SS1-03 | Ajouter config Go HLSEnabled (flag activable), StreamServerHLSURL |
internal/config/config.go |
S |
| SS1-04 | Mettre à jour le callback /api/v1/internal/tracks/:id/stream-ready pour inclure info HLS |
internal/handlers/stream_handler.go |
S |
| SS1-05 | Frontend : intégrer useHLSPlayer dans le player principal |
apps/web/src/features/player/ |
M |
| SS1-06 | Frontend : ABR quality selector (utiliser données useHLSPlayer) |
apps/web/src/features/player/components/ |
M |
| SS1-07 | Mettre à jour Caddy staging/prod pour proxyer /hls/* → stream-server |
config/caddy/Caddyfile.staging, docker-compose files |
S |
| SS1-08 | Story Storybook player HLS (Loading, Error, Quality switch) | apps/web/src/features/player/ |
S |
| SS1-09 | MSW handler pour HLS endpoints | apps/web/src/mocks/handlers-streaming.ts |
S |
| SS1-10 | Test E2E : upload → transcode → HLS playback | veza-backend-api/internal/integration/ |
L |
Lot CH1 — Chat Server Hardening
Objectif : Améliorer la robustesse et les performances du chat Go.
| # | Tâche | Fichiers impactés | Effort |
|---|---|---|---|
| CH1-01 | Migrer rate limiter vers Redis (sliding window, clé chat:ratelimit:{user}:{action}) |
internal/websocket/chat/rate_limiter.go |
M |
| CH1-02 | Présence tracking avec persistence Redis (HASH chat:presence:{user}, TTL heartbeat) |
internal/websocket/chat/hub.go, nouveau presence_service.go |
M |
| CH1-03 | Migration SQL : ajouter tsvector + index GIN sur messages.content |
Nouvelle migration 113_messages_fts.sql |
S |
| CH1-04 | Remplacer ILIKE par ts_query dans SearchMessages |
internal/websocket/chat/handler_history.go, chat_message_repository.go |
M |
| CH1-05 | Ajouter GET /api/v1/users/:id/presence REST endpoint (en plus du WS) |
internal/handlers/presence_handler.go |
S |
| CH1-06 | Tests unitaires rate limiter Redis (mock Redis) | internal/websocket/chat/rate_limiter_test.go |
S |
| CH1-07 | Tests unitaires presence service | internal/websocket/chat/presence_service_test.go |
S |
| CH1-08 | Benchmark : 100+ connexions WebSocket simultanées (Go bench) | internal/websocket/chat/benchmark_test.go |
M |
Lot CL1 — Cleanup & Archivage Chat Rust
Objectif : Supprimer toute trace opérationnelle du chat server Rust.
| # | Tâche | Fichiers impactés | Effort |
|---|---|---|---|
| CL1-01 | Archiver veza-chat-server/ → archive/veza-chat-server/ (ou supprimer) |
Dossier veza-chat-server/ |
S |
| CL1-02 | Supprimer chat-server de CI workflow ci.yml (build, audit, lint, test) |
.github/workflows/ci.yml (lignes ~84-101) |
S |
| CL1-03 | Supprimer chat-server de CD workflow cd.yml (build, scan, SBOM, sign, deploy) |
.github/workflows/cd.yml (lignes 41, 60-66, 79, 92, 110, 120, 137) |
S |
| CL1-04 | Supprimer scrape chat-server:8081 de Prometheus config |
config/prometheus.yml (lignes 18-21) |
S |
| CL1-05 | Supprimer proxy /ws → chat-server:8081 de Caddyfile staging |
config/caddy/Caddyfile.staging (ligne 3) |
S |
| CL1-06 | Retirer veza-chat-server des npm workspaces si référencé |
package.json (root) |
S |
| CL1-07 | Nettoyer go.work si le chat-server y est référencé |
go.work |
S |
| CL1-08 | Vérifier et nettoyer les références Turborepo (turbo.json) |
turbo.json |
S |
Lot QA1 — Tests & Documentation finale
Objectif : Valider l'ensemble, mettre à jour la documentation.
| # | Tâche | Fichiers impactés | Effort |
|---|---|---|---|
| QA1-01 | Mettre à jour FEATURE_STATUS.md : HLS opérationnel, chat Go complet |
docs/FEATURE_STATUS.md |
S |
| QA1-02 | Mettre à jour PROJECT_STATE.md pour v0.503 |
docs/PROJECT_STATE.md |
S |
| QA1-03 | Créer SMOKE_TEST_V0503.md — checklist validation |
docs/SMOKE_TEST_V0503.md |
S |
| QA1-04 | Mettre à jour CHANGELOG.md |
CHANGELOG.md |
S |
| QA1-05 | Archiver V0_503_RELEASE_SCOPE.md → docs/archive/ |
docs/archive/ |
S |
| QA1-06 | Créer placeholder V0_601_RELEASE_SCOPE.md |
docs/V0_601_RELEASE_SCOPE.md |
S |
| QA1-07 | Rétrospective v0.503 | docs/RETROSPECTIVE_V0503.md |
S |
| QA1-08 | Tag v0.503 |
Git | S |
Fichiers impactés (récapitulatif)
Backend Go (nouveau/modifié)
| Fichier | Action |
|---|---|
internal/handlers/stream_handler.go |
Modifier — ajouter endpoints HLS proxy |
internal/services/stream_service.go |
Modifier — HLS transcoding + status |
internal/config/config.go |
Modifier — flag HLSEnabled |
internal/websocket/chat/rate_limiter.go |
Modifier — Redis backend |
internal/websocket/chat/hub.go |
Modifier — presence persistence |
internal/websocket/chat/handler_history.go |
Modifier — FTS ts_query |
internal/repositories/chat_message_repository.go |
Modifier — FTS query |
internal/websocket/chat/presence_service.go |
Nouveau |
internal/handlers/presence_handler.go |
Nouveau ou modifier |
migrations/113_messages_fts.sql |
Nouveau |
Frontend (nouveau/modifié)
| Fichier | Action |
|---|---|
apps/web/src/features/player/ |
Modifier — intégrer useHLSPlayer |
apps/web/src/features/player/components/ |
Modifier — quality selector |
apps/web/src/mocks/handlers-streaming.ts |
Nouveau |
Infra & CI/CD
| Fichier | Action |
|---|---|
.github/workflows/ci.yml |
Modifier — retirer chat-server |
.github/workflows/cd.yml |
Modifier — retirer chat-server |
config/prometheus.yml |
Modifier — retirer chat-server scrape |
config/caddy/Caddyfile.staging |
Modifier — retirer /ws, ajouter /hls |
docker-compose.yml |
Vérifier — HLS config |
docker-compose.staging.yml |
Vérifier — HLS config |
docker-compose.prod.yml |
Vérifier — HLS config |
Archivage / Suppression
| Fichier | Action |
|---|---|
veza-chat-server/ |
Archiver ou supprimer |
Critères d'acceptation
Lot SS1
- Un track uploadé déclenche un transcoding HLS (3 tiers : 128k, 256k, 320k)
- Le player charge automatiquement la playlist HLS quand disponible
- L'ABR fonctionne (switch qualité automatique selon bande passante)
- Le quality selector permet de forcer une qualité
- Le streaming HLS est authentifié (stream token éphémère)
- La story Storybook du player affiche les 3 états (Loading, Error, Quality)
- Le test E2E upload → HLS passe
Lot CH1
- Le rate limiter utilise Redis (vérifié par test avec 2 goroutines)
- La présence est persistée dans Redis et récupérable via REST
- La recherche de messages utilise full-text search PostgreSQL
- Le benchmark atteint 100+ connexions simultanées sans erreur
Lot CL1
- Le dossier
veza-chat-server/est archivé ou supprimé git grep chat-serverne retourne aucun résultat dans CI/CD/config (hors docs historiques)cargo buildn'est plus exécuté pour le chat-server en CI
Lot QA1
- FEATURE_STATUS.md reflète l'état réel du code
- CHANGELOG.md est à jour
- Tag
v0.503créé
Hors scope v0.503
| Élément | Version cible |
|---|---|
| Go Live (streaming vidéo) | v0.703 |
| 2FA SMS / Passkeys | v0.104 |
| Migration React 19 | v0.602 |
| Blue-green deployment | v0.601 |
| IaC (Terraform/Pulumi) | v0.801 |
| OAuth Discord/Spotify implémentation | v0.601 |
| Payout vendeurs (Stripe Connect) | v0.601 |
| Reviews produits | v0.601 |
| Factures PDF | v0.601 |
| Remboursements | v0.601 |
| Hyperswitch mode production | v0.601 |
| Consolidation des migrations (squash) | v0.601 |
| Découpage fichiers > 1000 LOC | v0.601 |
Risques
| Risque | Mitigation |
|---|---|
| Stream server HLS non fonctionnel en pratique | Tester l'upload → transcode manuellement avant d'intégrer le frontend |
| FFmpeg non disponible dans le container stream-server | Vérifier le Dockerfile stream-server (FFmpeg doit être installé) |
| Redis indisponible en dev (rate limiter + presence) | Conserver le fallback in-memory existant |
| Performance search FTS sur gros volume | L'index GIN et ts_vector sont conçus pour ça, benchmarker |
Diagramme de flux HLS (cible v0.503)
Upload Track → Go Backend → POST /internal/jobs/transcode → Stream Server (Rust)
│
▼
FFmpeg transcode
├── 128k.m3u8 + segments
├── 256k.m3u8 + segments
└── 320k.m3u8 + segments
│
▼
Callback → Go Backend
POST /api/v1/internal/tracks/:id/stream-ready
│
▼
Track.stream_manifest_url = HLS URL
│
Player ← hls.js ← GET /hls/:track_id/master.m3u8 ← Stream Server (auth JWT)
└── ABR quality switching automatique