feat(orchestrateur) : le flux d'événements, une connexion par fil, et la surface d'un agent #1831

Merged
foXaCe merged 1 commit from feat/orchestrateur-flux into main 2026-10-18 10:14:50 +02:00
Owner

Le flux GET /api/events (plan §7) : projet_cree, job_pris, job_fini (avec son issue), projet_archive, projet_repris, projet_relance ; : battement toutes les 15 s ; 5 min puis réabonnement. Rien pour ce qui ne change rien. Jeton en en-tête ou ?jeton= (EventSource ne sait pas signer).

Une connexion par fil : un flux dure des minutes ; sur le serveur sériel du plan, le premier écran abonné aurait gelé la file. La base passe derrière un Mutex, le flux ne le prend jamais.

La surface d'un agent : POST /api/projects/liste, POST /api/projects/relancer, et GET /api/routes (le catalogue complet : méthode, corps, réponse, rôle, états, étapes, événements). orchestrateur --routes l'imprime sans démarrer. Un agent pilote tout — sauf publier.

Le bus est par serveur, jamais un static : deux serveurs ne se mélangent pas les événements.

Mesuré : 31 bancs verts, dont 4 neufs (flux, catalogue, liste, relance). ORCHESTRATEUR.md et le plan d'architecture à jour.

**Le flux `GET /api/events`** (plan §7) : `projet_cree`, `job_pris`, `job_fini` (avec son issue), `projet_archive`, `projet_repris`, `projet_relance` ; `: battement` toutes les 15 s ; 5 min puis réabonnement. Rien pour ce qui ne change rien. Jeton en en-tête **ou** `?jeton=` (`EventSource` ne sait pas signer). **Une connexion par fil** : un flux dure des minutes ; sur le serveur sériel du plan, le premier écran abonné aurait gelé la file. La base passe derrière un `Mutex`, le flux ne le prend jamais. **La surface d'un agent** : `POST /api/projects/liste`, `POST /api/projects/relancer`, et `GET /api/routes` (le catalogue complet : méthode, corps, réponse, rôle, états, étapes, événements). `orchestrateur --routes` l'imprime sans démarrer. Un agent pilote tout — sauf publier. Le bus est **par serveur**, jamais un `static` : deux serveurs ne se mélangent pas les événements. Mesuré : **31 bancs** verts, dont 4 neufs (flux, catalogue, liste, relance). `ORCHESTRATEUR.md` et le plan d'architecture à jour.
feat(orchestrateur) : le flux d'événements, une connexion par fil, et la surface d'un agent
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Failing after 1m56s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m0s
90a88cc589
Trois pièces, et une décision d'architecture.

**Le flux `GET /api/events`** (plan §7) : une ligne JSON par changement — `projet_cree`, `job_pris`,
`job_fini` (avec son issue), `projet_archive`, `projet_repris`, `projet_relance` — plus un `: battement`
toutes les 15 s, et une durée de 5 min puis l'écran se réabonne. Rien pour ce qui ne change rien (un `claim`
vide, une lecture). Le jeton s'y donne en en-tête **ou** en `?jeton=…` : `EventSource` ne sait pas poser
d'en-tête, et c'est le seul endroit où l'on cède.

**Une connexion par fil.** Le plan servait les connexions une à une. Un flux dure des minutes : sur un
serveur sériel, le premier écran abonné aurait gelé la file pour tout le monde. Chaque connexion part dans
son fil, la base passe derrière un `Mutex` (un seul écrivain, SQLite le dit), et le flux ne prend jamais ce
verrou — il ne lit pas la base.

**La surface d'un agent.** `POST /api/projects/liste` (tous les projets, avec leurs compteurs de jobs),
`POST /api/projects/relancer` (les jobs `DEAD` d'un projet `ERROR` repartent, compteur de reprises remis à
zéro), et `GET /api/routes` — le catalogue que l'orchestrateur rend lui-même : méthode, corps, réponse, rôle,
états, étapes, types d'événements. `orchestrateur --routes` l'imprime sans démarrer le service. Un agent peut
donc piloter (créer, lister, lire, valider, reprendre, relancer, suivre) sans lire le code — et il ne peut
pas publier : l'orchestrateur s'arrête à `ATTENTE_OPERATEUR`.

Le bus d'événements est **par serveur** (`evenements::Diffusion` dans le `Contexte`), jamais un `static` :
deux serveurs ne se mélangent pas les événements (le premier essai faisait échouer un banc à cause de
l'autre).

Mesuré : **31 bancs** de l'orchestrateur verts (dont 4 neufs sur le flux, le catalogue, la liste et la
relance), doc `ORCHESTRATEUR.md` et plan d'architecture mis à jour.
Collaborator

fusion-auto : pas de fusion, la CI est rouge (Rust, Front Svelte). 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, Front Svelte). Le chef de l'atelier renvoie la carte à l'agent ; l'étiquette tombera d'elle-même une fois corrigé.
foXaCe force-pushed feat/orchestrateur-flux from 90a88cc589
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Failing after 1m56s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 2m0s
to 5ed5305043
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m36s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 8m53s
2026-10-18 10:04:28 +02:00
Compare
foXaCe merged commit cc84a3aba0 into main 2026-10-18 10:14:50 +02:00
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!1831
No description provided.