Migration SQLite — file des réseaux (bascule reseaux-file) [t_b914b746] #1682
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/migration-reseaux-sqlite"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Carte t_b914b746 — migrer
/opt/studio/reseaux-file.jsonvers SQLite, sur la recette de STUD-1107.Ce que fait la branche
etat_partage.sql: tablereseaux_file— une ligne par entree du fichier,rangpour garder l'ordre de la LISTE d'origine, un champ par colonne (pas de colonne fourre-tout JSON, regle commune du schema).quandest refuse deux fois : le motif, etstrftime('%Y-%m-%d %H:%M', quand) IS quand(une heure qui n'existe pas, mesure sur SQLite 3.54 :2026-10-01 25:00rend NULL).etat_partage.py:reseaux_lire,reseaux_remplacer(tout ou rien,majgardee si rien ne change),entree_reseaux(champ inconnu REFUSE, jamais rogne), et_reparer_bascules.bascules.nomn'est plus une liste fermee de noms mais un motif ([a-z0-9][a-z0-9_.-]*). Raison : douze migrations ajoutent chacune leur nom, et SQLite ne modifie pas unCHECK—CREATE TABLE IF NOT EXISTSne touche pas une table en place, donc une base ouverte avant ce changement refusaitreseaux-fileenCHECK constraint failed._reparer_basculesrenomme, repose le schema, recopie les lignes, jette l'ancienne ; renommage et recopie en deux temps, l'ensemble idempotent (une coupure laissebascules_avant, que l'ouverture suivante termine)._infra/etat-service.py:GET /reseaux,POST /reseaux/remplacer.etat_client.py:reseaux(),reseaux_remplacer(),en_service(nom),basculer reseaux-file [--essai],revenir reseaux-file,reseaux <fichier>(ecriture du plan dans la base),en-service <nom>. Le chemin se regle par$RESEAUX_FILE(defaut/opt/studio/reseaux-file.json). Pas de verrou de montage pour ce fichier : il n'a rien a voir avec le montage, et les montages tournent en continu — l'attendre aurait rendu la bascule impossible._tableau/collecte.py: l'onglet Reseaux litGET /reseauxdes que la bascule est posee, sinon le fichier comme avant. Le 132 n'a pasetat_client.py(deploy-132.shne livre que_tableau/etjetons.py) : l'appel se fait enurllib, commeserveur_depenses.py. Un banc ne parle jamais au service de production : hors de/opt/studio, il fautSTUDIO_ETAT_URL._reseaux/pousser-tableau.sh: quand la bascule est posee, le plan entre dans la base (etat_client.py reseaux) et le JSON n'est plus pousse au 132. Service injoignable :en-servicesort en 1 en le disant, et le script retombe sur le chemin d'avant.Criteres d'acceptation de la carte
reseaux_fileexiste etbascules.nom='reseaux-file'est possiblebasculer reseaux-file --essaisort en 0basculer reseaux-file, l'ancien JSON est renomme en.bak-sqlite-YYYY-MM-DDrevenir reseaux-filerestaure le fichier (l'etat en vigueur, dans la forme qu'ecrivent les producteurs de_reseaux/)Preuves
controle/test_etat_partage.py: TOUT PASSE, dontok 8a(essai IDENTIQUES, fichier absent et formes refusees sans rien toucher, bascule avec.bak-sqlite, base identique au fichier, ecriture dans la base, retour arriere, re-bascule) etok 8b(une base d'avant le 2026-10-14 accepte le nouveau nom)._tableau/test_collecte.py: OK (la file vient du service une fois basculee, et le refus est dit)._tableau/lancer-tests.py: sortie en commentaire de la carte._tableau/rust:cargo test --release --lockedvert (10 binaires, 0 echec),cargo build --release --lockedsans avertissement.Limites, dites
_reseaux/preparer-file.py,marquer.py,tiktok-web.py) ecrivent toujours_reseaux/file.json: c'est la copiereseaux-file.jsonque la carte demande de migrer. Le chemin d'ecriture vers la base passe parpousser-tableau.sh.sortiesetfile_montagene sont pas touches./api/...du service Rust n'est touchee : le front Svelte n'a rien a changer.Hotspot
etat_partage.sql,etat_partage.pyetetat_client.pysont touches par les douze cartes de migration en cours, donthermes/migration-atelier-sqlite(t_56665067) qui tourne en meme temps : un rebase sur ces trois fichiers est probable pour la seconde fusion.2804dd85d70edc0c7dccfusion-auto: pas de fusion, la CI est rouge (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 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é.0edc0c7dcc7659a64d5ffusion-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é.7659a64d5f004d5865f6004d5865f6ab9835ca88Fusionnée automatiquement par
fusion-auto(forge) : CI verte (Rust et Front Svelte), PR relue (étiquetterelu), sans conflit.