feat(pilotage) : l'onglet Pilotage — la chaîne, les projets, et les trois gestes #1833

Merged
hermes-fusion merged 1 commit from feat/onglet-pilotage into main 2026-10-18 11:15:01 +02:00
Owner

Le poste de conduite du studio. Il manquait : le réglage « pilote » est retiré, l'orchestrateur porte la file, mais rien ne l'affichait.

La page : la chaîne en six étapes (Script → Voix → Images → Montage → Vignette → Publication) avec celles qu'un projet occupe ; puis les projets (état, jetons, jobs en file/en cours/en échec) et trois gestes — Valider (récapitulatif + archive, ne publie rien), Reprendre (quota), Relancer (échec). Chaque bouton n'est actif que dans l'état qui le concerne.

Le relais (serveur_pilotage.py) : la page est en HTTPS derrière Caddy, l'orchestrateur en HTTP ailleurs — un fetch direct serait bloqué. /api/pilotage/... est relayé avec le jeton, sur liste blanche. 502 = service injoignable, 503 = « orchestrateur non posé ».

Le jeton : la pose en laisse une copie lisible par le compte studio (600), sinon le Python ne peut pas lire le fichier root de l'unité.

Monté à l'ouverture de l'onglet (quandVisible). app.css couvre la nouvelle racine.

Mesuré sur le 135 : svelte-check 0/0, 572 tests verts.

Le poste de conduite du studio. Il manquait : le réglage « pilote » est retiré, l'orchestrateur porte la file, mais rien ne l'affichait. **La page** : la chaîne en six étapes (Script → Voix → Images → Montage → Vignette → Publication) avec celles qu'un projet occupe ; puis les projets (état, jetons, jobs en file/en cours/en échec) et trois gestes — `Valider` (récapitulatif + archive, **ne publie rien**), `Reprendre` (quota), `Relancer` (échec). Chaque bouton n'est actif que dans l'état qui le concerne. **Le relais** (`serveur_pilotage.py`) : la page est en HTTPS derrière Caddy, l'orchestrateur en HTTP ailleurs — un `fetch` direct serait bloqué. `/api/pilotage/...` est relayé avec le jeton, sur liste blanche. 502 = service injoignable, 503 = « orchestrateur non posé ». **Le jeton** : la pose en laisse une copie lisible par le compte `studio` (600), sinon le Python ne peut pas lire le fichier root de l'unité. Monté à l'ouverture de l'onglet (`quandVisible`). `app.css` couvre la nouvelle racine. Mesuré sur le 135 : `svelte-check` 0/0, **572 tests** verts.
feat(pilotage) : l'onglet Pilotage — la chaîne de production, les projets, et les trois gestes
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m12s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m47s
51b0f31802
Le studio pilotait ses productions par des tickets chez un agent extérieur ; le réglage est retiré et
l'orchestrateur porte désormais la file et la machine à états. Il manquait le poste de conduite.

**La page** (`front/src/Pilotage.svelte`, onglet « Pilotage ») : la chaîne en six étapes (Script, Voix, Images,
Montage, Vignette, Publication) avec celles qu'un projet occupe, puis les projets — état, jetons, jobs en
file/en cours/en échec — et trois gestes : `Valider` (écrit le récapitulatif et archive, il ne publie rien),
`Reprendre` (relève le quota d'un projet `PAUSED_QUOTA`), `Relancer` (remet en file les jobs d'un projet
`ERROR`). Chaque bouton n'est actif que dans l'état qui le concerne.

**Le relais** (`_tableau/serveur_pilotage.py`) : la page est en HTTPS derrière Caddy, l'orchestrateur en HTTP
sur une autre adresse — un `fetch` direct serait bloqué. Le tableau relaie donc `/api/pilotage/...` vers
l'orchestrateur avec son jeton, sur une liste blanche. Une panne est un 502 qui dit pourquoi ; sans jeton, un
503 qui dit « orchestrateur non posé ».

**Le jeton** : la pose en laisse une copie lisible par le compte `studio` (`/opt/studio/.orchestrateur.env`,
600) — le service Python tourne sous ce compte et ne pouvait pas lire le fichier root de l'unité.

Monté à l'ouverture de l'onglet (`quandVisible`), comme les autres : rien ne se charge au démarrage.
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/onglet-pilotage from 51b0f31802
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m12s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m47s
to cc16f494b1
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m8s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m27s
2026-10-18 10:42:26 +02:00
Compare
foXaCe force-pushed feat/onglet-pilotage from cc16f494b1
Some checks failed
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m8s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m27s
to 12f3ff2bbc
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 4m10s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 9m30s
2026-10-18 11:02:05 +02:00
Compare
hermes-fusion deleted branch feat/onglet-pilotage 2026-10-18 11:15:01 +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!1833
No description provided.