veza/docs/archive/v0-history/V0_503_RELEASE_SCOPE.md
senke 0e7097ed1b chore(cleanup): J1 — purge 220MB debris, archive session docs (complete)
First-attempt commit 3a5c6e184 only 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 of bec75f143 (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 in
3a5c6e184 and remain in place — this commit does not modify .gitignore.

Refs: AUDIT_REPORT.md §11
2026-04-14 17:12:03 +02:00

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.mddocs/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-server ne retourne aucun résultat dans CI/CD/config (hors docs historiques)
  • cargo build n'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.503 créé

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