feat(pilotage) : la chaîne de production en graphe, avec Svelte Flow (xyflow) #1835

Merged
hermes-fusion merged 5 commits from feat/pilotage-flow into main 2026-10-18 13:35:02 +02:00
Owner

La chaîne était six pavés et des flèches écrits à la main. @xyflow/svelte la dessine : nœuds, liens en escalier, fond quadrillé, cadrage automatique — sans déplacement ni connexion (c'est un schéma, pas un éditeur).

  • six nœuds, un par étape, dans l'ordre du plan ;
  • l'étape qu'un projet occupe porte la marque « en cours » ;
  • Pilotage.js (161 Ko) et Pilotage.css (16 Ko) ne se chargent qu'à l'ouverture de l'onglet (import dynamique) ; le front principal reste à 156 Ko ;
  • couleurs = variables de la charte, rien en dur.

Mesuré sur le 135 : svelte-check 0/0, garde-habillage 0 refus, 572 tests, build OK.

La chaîne était six pavés et des flèches écrits à la main. `@xyflow/svelte` la dessine : nœuds, liens en escalier, fond quadrillé, cadrage automatique — sans déplacement ni connexion (c'est un schéma, pas un éditeur). - six nœuds, un par étape, dans l'ordre du plan ; - l'étape qu'un projet occupe porte la marque « en cours » ; - `Pilotage.js` (161 Ko) et `Pilotage.css` (16 Ko) ne se chargent qu'à l'ouverture de l'onglet (import dynamique) ; le front principal reste à 156 Ko ; - couleurs = variables de la charte, rien en dur. Mesuré sur le 135 : svelte-check 0/0, `garde-habillage` 0 refus, 572 tests, build OK.
feat(pilotage) : la chaîne de production en graphe, avec Svelte Flow (xyflow)
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 1m58s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m6s
089436d043
La chaîne était six pavés et des flèches, écrits à la main. C'est un graphe : `@xyflow/svelte` (xyflow) le
dessine — nœuds, liens en escalier, fond quadrillé, cadrage automatique. Les nœuds ne se déplacent pas, ne se
connectent pas et ne se sélectionnent pas : c'est un schéma, pas un éditeur.

- six nœuds, un par étape (Script, Voix, Images, Montage, Vignette, Publication), dans l'ordre du plan ;
- une étape qu'un projet occupe porte la marque « en cours » (bordure d'action, variable de la charte) ;
- `Pilotage.js` (161 Ko) et `Pilotage.css` (16 Ko) ne se chargent **qu'à l'ouverture de l'onglet** : le front
  principal reste à 156 Ko. C'est l'import dynamique de `main.js` qui le permet, rien d'autre n'a bougé.

Les couleurs des nœuds et des liens sont les variables de la page (`--surface-raised`, `--border-strong`,
`--text-link`) : aucune valeur en dur, la charte tient en clair comme en sombre.

Mesuré sur le 135 : `svelte-check` 0/0, `garde-habillage` 0 refus, 572 tests verts, build produit les deux
fichiers.
Collaborator

fusion-auto : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
foXaCe force-pushed feat/pilotage-flow from 089436d043
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 1m58s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m6s
to 686ae3045b
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m0s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m18s
2026-10-18 11:51:30 +02:00
Compare
Collaborator

fusion-auto : pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la PR est en conflit avec main : à rebaser. Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
foXaCe force-pushed feat/pilotage-flow from 686ae3045b
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m0s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m18s
to 8d7eedeeb2
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 1m50s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m57s
2026-10-18 12:05:31 +02:00
Compare
Merge branch 'feat/pilotage-flow'
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 1m52s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m19s
936bf061e5
# Conflicts:
#	_tableau/serveur.py
feat(pilotage) : un nœud qui dit ce que l'étape produit, et des états aux couleurs de la charte
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 32s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m3s
fafb0f3247
Le premier jet du graphe rendait six pavés vides : Svelte Flow n'affiche par défaut qu'un libellé
texte (`data.label`), et je lui passais `titre`/`detail`. Un nœud maison (`PilotageNoeud.svelte`,
passé par `nodeTypes`) porte les deux lignes — le nom de l'étape et ce qu'elle produit — et la
bordure « en cours » quand un projet l'occupe.

Les états suivent maintenant les quatre pastilles du socle (`.rv-e.ok|att|trou|prev`) : `ERROR` en
`trou` (rouge), `PAUSED_QUOTA` et `ATTENTE_OPERATEUR` en `att` (ambre), `ARCHIVED` en `ok` (vert).
La variante `err` que j'avais écrite n'existe pas : le badge sortait gris, donc un projet en échec
ressemblait à un projet sans état.

Le graphe passe de 190 à 150 px et `fitViewOptions` cadre les nœuds : plus de place morte sous eux.

Vu sur le 135 avec l'API remplacée par trois projets d'essai : nœuds lisibles, deux étapes marquées
« en cours », `Valider` actif sur le seul projet en attente. `svelte-check` 0/0, build OK.
Collaborator

fusion-auto : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
fix(pilotage) : le graphe passe la charte et trace ses liens
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 4m41s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 9m0s
f315d66160
Deux fautes que la CI a vues et que mes yeux avaient laissées passer.

LA CHARTE. `test_charte_svelte.py` refuse toute couleur, bordure, rayon ou taille écrite en dur, et
toute classe hors registre. Mon premier nœud portait une feuille locale (`gap: 2px`, `border-radius:
10px`, `.etape`) : refusé. Le nœud est maintenant bâti sur les composants du socle — `Card.Root` pour
la surface, `Badge variant="att"` pour la marque « en cours » — et ne garde que des classes de mise en
page. Plus de `<style>` dans la page : le conteneur du graphe prend `h-40`.

LES LIENS. Un nœud maison sans poignées n'a pas d'ancre : Svelte Flow ne traçait aucun trait entre les
six étapes (visible sur la capture du 18 octobre). `<Handle type="target" position={Position.Left}>`
et sa jumelle à droite les rétablissent ; la chaîne se lit enfin comme une chaîne.

Mesuré sur le 135 : `test_charte_svelte` OK, `garde-habillage` 0 refus, `svelte-check` 0/0, 572 tests.
Collaborator

fusion-auto : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.

`fusion-auto` : pas de fusion, la CI est rouge (Rust). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
fix(pilotage) : le nœud du graphe entre au registre du front
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m6s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 7m53s
d865f9ecab
`test_onglets_doublons.py` tient la liste des composants du front et refuse ce qui n'est ni un onglet ni
un composant hors onglet. `PilotageNoeud.svelte` n'y était pas : le banc le disait (« composants du front
non classés »), et c'était le seul banc vert sur `main` que la branche rendait rouge — donc le seul vrai
refus de la CI.

Il est rangé dans `COMPOSANTS_HORS_ONGLET`, avec sa raison : ce n'est pas un onglet, c'est le rendu d'un
nœud du graphe, monté par Svelte Flow hors du DOM de la page.

Vérifié sur le 135, front non bâti comme en CI : la suite complète ne garde que les dix bancs rouges sur
`main` (ffmpeg, whisper, /studio absent, pilote) — aucun n'est attribuable à cette branche.
hermes-fusion deleted branch feat/pilotage-flow 2026-10-18 13:35:02 +02:00
Collaborator

Fusionnée automatiquement par fusion-auto (forge) : CI verte, sans conflit.

Fusionnée automatiquement par `fusion-auto` (forge) : CI verte, sans conflit.
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
foXaCe/studio!1835
No description provided.