Repository navigation
Forme d'onde des extraits calculée par l'API (#474) - #477
Merged
Merged
Conversation
Nouveau projet InSeconds.Waveform (NLayer) : un extrait MP3 devient un blob versionné de 1984 octets (180 barres, 1800 valeurs de basses). Trois colonnes sur catalogue.tracks (waveform, waveform_source, waveform_computed_at) et leur migration. Le calcul est une étape de catalogue-refresh (extrait remplacé détecté au nom de fichier de l'URL Deezer, ancien format à l'octet de version) et, pour un ajout manuel, un message Wolverine différé de 15 min qui glisse jusqu'au dernier ajout. Un seul verrou consultatif PostgreSQL entre les deux. Rien au staging (Catalogue:Waveform:ComputeOnAdd=false). La forme part en base64 dans StartSession (Daily) et le morceau courant de Runs ; un morceau sans forme est journalisé en Warning. Téléchargement de l'extrait en mémoire, limité au CDN de Deezer et à 3 Mo. Niveau warning accepté par POST /api/client-errors. Métriques et traces du catalogue. Faux Deezer de l'hôte de test : MP3 synthétique.
…rage du son (#474) Le front décode le blob de l'API (waveformFromBlob) et dessine la forme avant le premier son : plus de forme plate pendant tout le premier palier quand on reprend une partie à 10 s. Sans forme, le navigateur la calcule dès l'événement playing (et non plus à la fin du palier) et le dit par un Warning WaveformFallback, une fois par morceau et par page. Tableau Grafana Exploitation : panneaux des formes d'onde. Documentation : piège 50, piège 47 et conformité Deezer (valeurs dérivées stockées), réglages, tâche catalogue-refresh, déploiement et premier remplissage.
…ecture, garde-fous - PostgresWaveformLock passe dans Persistence/, le Warning "sans forme" dans LoggedTrackWaveforms (Application) : le port de lecture ne journalise plus. - Le téléchargement d'extrait revérifie l'hôte final après une redirection. - Les diagnostics (warning) du front ont leur propre plafond par page, pour ne pas consommer celui des vraies erreurs. - Sonar : codePointAt à la place de charCodeAt. - Jauge et runbook : les formes manquantes sont les échecs du dernier passage. - Corrections de doc (quatre nombres d'en-tête, cinq ports Deezer).
|
Oasis35
marked this pull request as ready for review
November 2, 2026 13:59
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



Contexte
À la reprise d'une partie à 10 s, la waveform restait plate pendant tout le premier palier : le front ne la calculait qu'à la fin du palier. Décision (#474) : l'API calcule la forme de chaque extrait, la stocke en base, et l'envoie avec la partie. Le navigateur ne calcule plus qu'en repli.
Ce que fait la PR
InSeconds.Waveform(NLayer). Un extrait MP3 devient un blob versionné de 1984 octets (180 barres, 1800 valeurs de basses, les 30 s). Colonneswaveform,waveform_source,waveform_computed_atsurcatalogue.tracks(migrationTrackWaveform).catalogue-refresh(23 h UTC : morceaux sans forme, extrait remplacé détecté au nom de fichier de l'URL Deezer, ancien format à l'octet de version) et, pour un ajout manuel, un message Wolverine différé de 15 min qui glisse jusqu'au dernier ajout. Un seul verrou consultatif PostgreSQL (474) entre les deux.Catalogue:Waveform:ComputeOnAdd=false, pas decatalogue-refresh, piège 16).waveformFromBlobdessine la forme dès la première image. Sans forme, calcul navigateur dès l'événementplaying, avec un WarningWaveformFallback(une fois par morceau et par page) viaPOST /api/client-errorsqui accepte désormaislevel: warning.*.dzcdn.netet 3 Mo, jamais d'URL signée dans un journal. Aucun audio n'est écrit sur disque ni en base (piège 47).InSeconds.Catalogue, nouveaux panneaux du tableau Grafana Exploitation.Après le déploiement en prod
Lancer
catalogue-refreshà la main depuis/jobspour le premier remplissage ; le panneau « Formes manquantes » doit retomber à 0.Vérifications faites en session cloud
npm run lint:arch,npm run buildverts.Generated by Claude Code