Les producteurs de _reseaux/ écrivent la file par une seule porte : plan.py (bascule reseaux-file) #1700
Loading…
Reference in a new issue
No description provided.
Delete branch "hermes/migration-file-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?
Ce que fait cette PR
La file des réseaux (
_reseaux/file.json) était écrite par quatre passages, chacun avec sa copie de la recette : lire le fichier entier, modifier une entrée, le réécrire entier. Aucune transaction, aucun verrou. Deux passages rapprochés perdaient les marques de l'autre, et la base du service d'état (reseaux_file, STUD-1107) — devenue le foyer de cette file — ne recevait rien tant quepousser-tableau.shn'était pas passé.Cette PR fait passer les quatre passages par un module unique,
_reseaux/plan.py:plan.ecrire(entrees)écrit le fichier toujours et en premier (c'est lui quepousser-tableau.shfait entrer dans la base), puis la base dès quepython3 etat_client.py basculer reseaux-fileest fait ;plan.lire()suit le même foyer (la base quand la bascule est posée), et rend la forme du fichier (pas denullen plus) ;Contenu de la branche (rebasée sur
mainle 2026-10-15)189ddc4e— tablereseaux_file, routesGET /reseaux/POST /reseaux/remplacer,basculer reseaux-file [--essai]/revenir reseaux-file, lecture depuis la base,bascules.nomen motif (_reparer_bascules). C'est le contenu de la PR #1682 (hermes/migration-reseaux-sqlite, carte t_b914b746), que cette branche reprend et rebase surmain: les cinq conflits (OUTILS.md,_tableau/LXC-132.md,etat_client.py,etat_partage.py,etat_partage.sql) venaient de la migration des sujets, entrée dansmaindepuis. La résolution garde le texte et le code demain(sujets,basculesen motif,_reparer_bascules) et n'ajoute que ce qui manque à la file des réseaux : la table,reseaux_lire/reseaux_remplacer,entree_reseaux, les branchesreseaux-filedebasculer/revenir, les commandesreseaux <fichier>eten-service <nom>,$RESEAUX_FILE. #1682 est aujourd'huiconflit+ci-rouge: celle-ci porte le même travail, réparé et vert.cd2bfe20— les producteurs (_reseaux/plan.py,preparer-file.py,marquer.py,tiktok-web.py,tiktok-brouillon.py,controle-voix-file.py), le retour arrière à l'octet, les deux bancs que le changement de porte rendait faux,_reseaux/COMPTES.md.Le banc
controle/test_etat_partage.py(cas 8b) comparait la liste des tables de la base réparée à une liste écrite à la main : elle a menti dès que le schéma a gagné les tables des sujets («bascules_avantest restée derrière » alors qu'elle était partie). Il demande maintenant la liste au schéma du dépôt.Aucun champ de l'API du tableau n'a changé (
/api/...) : le front n'est pas concerné.Preuves
python3 controle/test_plan_reseaux.py→exit=0, 37 cas (ok), sortie complète sur la carte t_265acd1f.controle/test_etat_partage.py,controle/test_etat_reseaux.py,_infra/test_etat_service.py,_tableau/test_collecte.py,controle/test_dedoublonnage_uploads.py,controle/test_dependances_reseaux.py,controle/test_garde_voix_shorts.py,controle/test_trace_voix_fabrication.py,controle/test_purger_episodes.py,_tableau/test_onglet_reseaux.py,_tableau/test_collecte_ciblee.py._reseaux/test_tiktok_web.py: 5 cas rouges, identiques surmain(mêmes 5 noms, mêmes messages, mesurés le 2026-10-15 dans un arbre de travail détaché surorigin/main) — antérieurs à cette PR. Ce qu'elle corrige dans ce banc : il patchetw.FILE, que le module ne lit plus, et écrivait donc le VRAI_reseaux/file.json; la file se déplace maintenant par$PLAN_RESEAUX(comme danscontrole/test_dedoublonnage_uploads.py, même défaut)._tableau/rust:cargo test --release --locked→ 18 suites, 77 tests passés, 0 échec ;cargo build --release --locked→Finished, aucun avertissement. Aucun fichier Rust dans cette PR.b'...]\n' != b'...]').Points ouverts, pour le chef
outils/remplacer-video.py(remplacement de texte dans tous les*.jsonde_reseaux/) et_reseaux/serveur/etat.py(fusion avec le dossier d'état du 130). La base ne les voit qu'aupousser-tableau.shsuivant ; une écriture de l'un d'eux suivie d'une écriture de producteur avant ce passage est perdue. C'est écrit dans_reseaux/COMPTES.md(« Les chemins d'écriture defile.json»)._reseaux/passent par une seule porte d'écriture :plan.pyfusion-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é.c60d73d906cd2bfe20b9fusion-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é.Fusionnée automatiquement par
fusion-auto(forge) : CI verte, sans conflit.