Migration rythme SQLite : état partagé (branche propre, socle sous plafond) #1770

Merged
hermes-fusion merged 3 commits from hermes/migration-rythme-sqlite-2 into main 2026-10-16 14:40:02 +02:00
Collaborator

Carte t_93894e76. Reprise de la migration du relevé de rythme dans le service d’etat, rebasée sur main actuel, sans modification de la PR 1695. rythme_bascule et rythme_ecrire extraits dans _tableau/rythme_donnees.py pour respecter le plafond de 600 lignes de socle.py.

Carte t_93894e76. Reprise de la migration du relevé de rythme dans le service d’etat, rebasée sur main actuel, sans modification de la PR 1695. rythme_bascule et rythme_ecrire extraits dans _tableau/rythme_donnees.py pour respecter le plafond de 600 lignes de socle.py.
Motif. `_tableau/rythme.json` (le relevé de fabrication du studio, poussé sur le 132 par
`_tableau/pousser-rythme.sh`) vit hors de la base partagée, alors que douze fichiers d'état y passent un à
un depuis le 2026-10-14 (recette de STUD-1107). La carte « rythme.json » demande la même bascule, avec sa
comparaison et son retour arrière.

Remède.
- `etat_partage.sql` : table `rythme`, UNE LIGNE PAR CELLULE du relevé — la date du relevé (rang -1,
  genre « d »), puis les sections : un titre ou un paragraphe est une ligne d'une cellule, la ligne 0 d'un
  tableau est son en-tête et les suivantes son corps. `(section, ligne, colonne)` est la clé, l'ordre du
  fichier est gardé, et rien du rapport ne part dans une colonne JSON (règle commune du fichier). Le schéma
  refuse un genre inconnu, une date ailleurs qu'au rang -1, une cellule vide. `bascules.nom` n'est plus une
  liste fermée de noms mais un motif, et `_reparer_bascules` refait une base restée sur l'ancienne (SQLite
  ne modifie pas un CHECK).
- `etat_partage.py` : `rythme_lire`, `rythme_remplacer` (une transaction, tout ou rien, idempotent),
  `section_rythme` / `rythme_cellules`, qui REFUSENT en le nommant ce qui ne se range pas fidèlement
  (cellule qui n'est pas un texte, genre inconnu, tableau sans en-tête, clé de premier niveau inconnue).
- `_infra/etat-service.py` : `GET /rythme`, `POST /rythme/remplacer`. Routes nouvelles du service d'état :
  aucun champ d'`/api/...` ne change, le front n'est pas concerné.
- `etat_client.py` : `rythme()`, `rythme_remplacer()`, `basculer rythme [--essai]`, `revenir rythme`,
  chemin `$ETAT_RYTHME` (bancs). Cette bascule ne prend PAS le verrou de montage : le relevé n'a rien à voir
  avec le montage, et les montages tournent en continu — les attendre rendrait la bascule impossible (même
  règle que `reseaux-file`).
- `_tableau/socle.py` : `rythme_ecrire(releve, chemin)` écrit la base ET réécrit le fichier — la copie que
  `pousser-rythme.sh` recopie sur le 132, où l'onglet Rythme et `/api/rythme` le lisent encore. Service muet
  alors que la bascule est posée : le relevé n'est que dans le fichier, et c'est DIT (« fichier-muet »).
- `_travail/production/rythme.py` (le producteur) écrit par ce chemin et dit où le relevé fait foi.
- Bancs : `_tableau/test_rythme_bascule.py` (nouveau, de bout en bout contre un vrai service), section 8 de
  `controle/test_etat_partage.py` (sur le vrai relevé du dépôt : 12 sections, 71 cellules, copie identique),
  les deux routes dans `_infra/test_etat_service.py`. Doc : `OUTILS.md`, `_tableau/LXC-132.md`.

La bascule en production n'est pas faite : le service d'état du 130 est injoignable (curl /sante : délai
dépassé). `python3 etat_client.py basculer rythme --essai` puis `basculer rythme` sont à lancer sur la
machine du service.
socle.py : rythme_bascule et rythme_ecrire passent dans rythme_donnees, socle sous le plafond de 600 lignes
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 3m2s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m0s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Failing after 12m12s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Failing after 12m11s
1cedd8388b
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é.
rythme_donnees : éviter l'import circulaire en important socle localement dans les fonctions
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 3m29s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 3m1s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 15m50s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 17m49s
4b2c4a4e44
hermes-fusion deleted branch hermes/migration-rythme-sqlite-2 2026-10-16 14:40: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!1770
No description provided.