Dernière collecte : le fichier du 132 passe dans la base du service d état (STUD-1110) #1696

Merged
foXaCe merged 4 commits from hermes/migration-derniere-collecte-sqlite into main 2026-10-17 11:58:15 +02:00
Collaborator

Goal — migrer /opt/studio/derniere-collecte.json (l instantané des chaînes YouTube, réécrit à chaque passage par tableau-bord.py sur le 132) vers la base SQLite du service d état, recette de STUD-1107.

Ce que fait la branche

  • table derniere_collecte : une ligne par clé de PREMIER NIVEAU du document (t, donnees, erreurs, tiktok, instagram), valeur encodée en JSON trié ; cle est le nom du champ, pas de colonne fourre-tout. Le découpage s arrête au premier niveau, comme le relevé de l atelier : la collecte est un INSTANTANÉ réécrit d un bloc, et ses valeurs sont les structures Analytics de Google.
  • bascules.nom n est plus une liste fermée (motif GLOB, avec _reparer_bascules qui refait une base restée sur l ancienne liste sans perdre de ligne) — douze migrations sont en cours sur cette table.
  • routes GET /derniere-collecte, GET /derniere-collecte/detail, POST /derniere-collecte/remplacer.
  • python3 etat_client.py basculer derniere-collecte [--essai] / revenir derniere-collecte : comparaison identique avant bascule, ancien gardé en .bak-sqlite-<date>, copie réécrite depuis la base. Le fichier se désigne par $ETAT_DERNIERE_COLLECTE (son écrivain vit sur le 132).
  • le fichier reste la copie que lisent la page du 132, revue.py et serveur.py : tableau-bord.py écrit la collecte dans la base ET dans le fichier via _tableau/collecte_commun.py (une seule fois pour ses deux passages d écriture). Un service muet est dit sur la sortie d erreur.
  • la bascule ne prend PAS le verrou de montage : la collecte se refait à chaque passage, l attendre la rendrait impossible.

Bancs

  • _tableau/test_collecte_bascule.py (nouveau) : essai, bascule pendant un montage, copie réécrite, écriture dans ses trois cas (service / fichier / fichier-muet), retour arrière, re-bascule, refus d un document qui n est pas un objet.
  • controle/test_etat_partage.py 3b : la table, la comparaison, le refus d une liste et d une clé à blanc, la réparation d une base d avant.
  • _infra/test_etat_service.py : les trois routes.

État — suite complète _tableau/lancer-tests.py --tout (couverture et cliquet) en cours, sortie jointe en commentaire. Aucun front touché. Rien déployé sur le 132.

**Goal** — migrer `/opt/studio/derniere-collecte.json` (l instantané des chaînes YouTube, réécrit à chaque passage par `tableau-bord.py` sur le 132) vers la base SQLite du service d état, recette de STUD-1107. **Ce que fait la branche** - table `derniere_collecte` : une ligne par clé de PREMIER NIVEAU du document (`t`, `donnees`, `erreurs`, `tiktok`, `instagram`), valeur encodée en JSON trié ; `cle` est le nom du champ, pas de colonne fourre-tout. Le découpage s arrête au premier niveau, comme le relevé de l atelier : la collecte est un INSTANTANÉ réécrit d un bloc, et ses valeurs sont les structures Analytics de Google. - `bascules.nom` n est plus une liste fermée (motif GLOB, avec `_reparer_bascules` qui refait une base restée sur l ancienne liste sans perdre de ligne) — douze migrations sont en cours sur cette table. - routes `GET /derniere-collecte`, `GET /derniere-collecte/detail`, `POST /derniere-collecte/remplacer`. - `python3 etat_client.py basculer derniere-collecte [--essai]` / `revenir derniere-collecte` : comparaison identique avant bascule, ancien gardé en `.bak-sqlite-<date>`, copie réécrite depuis la base. Le fichier se désigne par `$ETAT_DERNIERE_COLLECTE` (son écrivain vit sur le 132). - le fichier reste la copie que lisent la page du 132, `revue.py` et `serveur.py` : `tableau-bord.py` écrit la collecte dans la base ET dans le fichier via `_tableau/collecte_commun.py` (une seule fois pour ses deux passages d écriture). Un service muet est dit sur la sortie d erreur. - la bascule ne prend PAS le verrou de montage : la collecte se refait à chaque passage, l attendre la rendrait impossible. **Bancs** - `_tableau/test_collecte_bascule.py` (nouveau) : essai, bascule pendant un montage, copie réécrite, écriture dans ses trois cas (service / fichier / fichier-muet), retour arrière, re-bascule, refus d un document qui n est pas un objet. - `controle/test_etat_partage.py` 3b : la table, la comparaison, le refus d une liste et d une clé à blanc, la réparation d une base d avant. - `_infra/test_etat_service.py` : les trois routes. **État** — suite complète `_tableau/lancer-tests.py --tout` (couverture et cliquet) en cours, sortie jointe en commentaire. Aucun front touché. Rien déployé sur le 132.
Dernière collecte : le fichier du 132 passe dans la base du service d'état (STUD-1110)
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 22s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 24s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 40s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 17s
ebef113798
Cause : `/opt/studio/derniere-collecte.json` (l'instantané des chaînes YouTube, réécrit à chaque
passage par `tableau-bord.py` sur le 132) n'existait que sur le disque du 132 ; le PC, le conteneur
des agents et le service Rust n'en avaient qu'une copie datée par ssh (`copie_collecte_132.py`), et
deux lecteurs pouvaient travailler sur deux versions différentes sans que rien ne le dise.

Remède : la collecte entre dans la base partagée du service d'état, une ligne par clé de PREMIER
NIVEAU du document (table `derniere_collecte`), avec la recette de STUD-1107 — routes
`GET /derniere-collecte`, `GET /derniere-collecte/detail`, `POST /derniere-collecte/remplacer`,
`basculer derniere-collecte [--essai]` / `revenir derniere-collecte`, ancien gardé en
`.bak-sqlite-<date>`, comparaison identique avant de basculer. Le fichier reste la copie que lisent
la page du 132, `revue.py` et `serveur.py` : `tableau-bord.py` écrit la collecte dans la base ET dans
le fichier, par `_tableau/collecte_commun.py` (une seule fois pour ses deux passages d'écriture ; le
plafond de lignes de `_tableau/`, STUD-1191, interdit d'en ajouter au producteur). Un service muet
est dit sur la sortie d'erreur, jamais une écriture perdue en silence. La bascule ne prend pas le
verrou de montage : la collecte se refait à chaque passage, l'attendre la rendrait impossible.

En chemin, `bascules.nom` n'est plus une liste fermée de noms (SQLite ne modifie pas un CHECK, et
douze migrations sont en cours) : le motif GLOB, et `_reparer_bascules` refait une base restée sur
l'ancienne liste sans perdre une ligne.

Bancs : `_tableau/test_collecte_bascule.py` (nouveau, de bout en bout contre un vrai service),
`controle/test_etat_partage.py` (3b : la table, la comparaison, la réparation d'une base d'avant),
`_infra/test_etat_service.py` (les trois routes).
hermes-bot force-pushed hermes/migration-derniere-collecte-sqlite from ebef113798
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 22s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 24s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 40s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 17s
to 73bb9477f7
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 24s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 12s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 23s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 12s
2026-10-15 01:53:50 +02:00
Compare
Collaborator

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é.

`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é.
hermes-bot force-pushed hermes/migration-derniere-collecte-sqlite from 73bb9477f7
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 24s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 12s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 23s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 12s
to 1c16f58f6e
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 20s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 13s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 21s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 13s
2026-10-15 02:04:42 +02:00
Compare
Author
Collaborator

Poussée après rebasage sur main (1c16f58f, sur b613cad4) : la PR portait l'étiquette conflit parce que la migration des sujets (#1694) est passée la première et touchait exactement les mêmes fichiers. Résolution en union, les deux migrations vivent côte à côte : bascules.nom en GLOB (texte identique des deux côtés), table sujets_* puis table derniere_collecte dans etat_partage.sql, NOMS = ("sorties", "file_montage", "sujets", "derniere-collecte"), les deux paires de fonctions client (sujets/derniere-collecte) et les deux branches de basculer/revenir. La forge donne maintenant mergeable: true.

Aucun champ de /api/... n'est touché : le service d'état (http://192.168.1.142:8799) n'est pas l'API de la page. Trois routes nouvelles y sont ajoutées, plus rien n'est modifié sur les routes existantes. Le front n'a rien à faire.

Preuves, sur 1c16f58f :

cargo test --release --locked    (dans _tableau/rust)
test result: ok. 4 passed; 0 failed
test result: ok. 18 passed; 0 failed
test result: ok. 8 passed; 0 failed
test result: ok. 13 passed; 0 failed
test result: ok. 4 passed; 0 failed (x2), 2 passed
cargo build --release --locked   aucun avertissement, aucune erreur

python3 _infra/test_etat_service.py        OK : le service répond sur chaque route, refuse en 400/403/404, …
python3 _tableau/test_collecte_bascule.py  TOUT PASSE
python3 _tableau/test_sujets_bascule.py    OK (le banc de la migration voisine, rejoué après le rebasage)
python3 controle/test_etat_partage.py      TOUT PASSE (section 3b incluse)
python3 _tableau/garde_fous.py             garde-fous : rien à redire (exit 0)

python3 _tableau/lancer-tests.py --tout    170 bancs verts, 1 rouge

Le rouge est _tableau/test_accueil_parite.py (code 1), le même banc sur main, avec la même erreur :

_tableau/test_accueil_parite.py ligne 260
AssertionError: complet : le JSON doré n'est plus la sortie de Python
(clés : ['seuil_heures_apres', 'courbes', 'monetisation', 'fin_seuil'])

Il est donc préexistant et sans rapport avec cette branche (le JSON doré de /api/accueil a pris du retard sur son producteur Python). Mesuré sur un worktree détaché de main en a3575e4d, suite complète aussi : 168 bancs verts, 1 rouge — le même.

Cliquet de couverture : inchangé. Sur la branche comme sur main (mesure du même jour, a3575e4d) : cœur 99,1 %, ensemble 96,7 %, avec la même phrase « la couverture a BAISSÉ » — la mesure enregistrée (99,4 % / 99,0 %) est antérieure aux deux, le rouge est donc lui aussi préexistant. _tableau/collecte_commun.py, le module neuf, sort à 100 % (mesuré par coverage run --include="*collecte_commun.py" _tableau/test_collecte_bascule.py), et etat_partage.py gagne ses lignes neuves (routes et _reparer_bascules) sans perdre de couverture.

Ce que la branche fait, en une ligne : /opt/studio/derniere-collecte.json entre dans la base partagée (table derniere_collecte, une ligne par clé de premier niveau, routes GET /derniere-collecte, GET /derniere-collecte/detail, POST /derniere-collecte/remplacer), basculer derniere-collecte [--essai] / revenir derniere-collecte posent et défont la bascule, le fichier reste la copie de référence que lit la page du 132, et tableau-bord.py écrit désormais la collecte dans la base ET dans le fichier par _tableau/collecte_commun.py (un service muet est dit, jamais une écriture perdue en silence).

Poussée après rebasage sur `main` (`1c16f58f`, sur `b613cad4`) : la PR portait l'étiquette `conflit` parce que la migration des sujets (`#1694`) est passée la première et touchait exactement les mêmes fichiers. Résolution en union, les deux migrations vivent côte à côte : `bascules.nom` en GLOB (texte identique des deux côtés), table `sujets_*` puis table `derniere_collecte` dans `etat_partage.sql`, `NOMS = ("sorties", "file_montage", "sujets", "derniere-collecte")`, les deux paires de fonctions client (`sujets`/`derniere-collecte`) et les deux branches de `basculer`/`revenir`. La forge donne maintenant `mergeable: true`. Aucun champ de `/api/...` n'est touché : le service d'état (`http://192.168.1.142:8799`) n'est pas l'API de la page. Trois routes nouvelles y sont ajoutées, plus rien n'est modifié sur les routes existantes. Le front n'a rien à faire. Preuves, sur `1c16f58f` : cargo test --release --locked (dans _tableau/rust) test result: ok. 4 passed; 0 failed test result: ok. 18 passed; 0 failed test result: ok. 8 passed; 0 failed test result: ok. 13 passed; 0 failed test result: ok. 4 passed; 0 failed (x2), 2 passed cargo build --release --locked aucun avertissement, aucune erreur python3 _infra/test_etat_service.py OK : le service répond sur chaque route, refuse en 400/403/404, … python3 _tableau/test_collecte_bascule.py TOUT PASSE python3 _tableau/test_sujets_bascule.py OK (le banc de la migration voisine, rejoué après le rebasage) python3 controle/test_etat_partage.py TOUT PASSE (section 3b incluse) python3 _tableau/garde_fous.py garde-fous : rien à redire (exit 0) python3 _tableau/lancer-tests.py --tout 170 bancs verts, 1 rouge Le rouge est `_tableau/test_accueil_parite.py` (code 1), **le même banc sur `main`**, avec la même erreur : _tableau/test_accueil_parite.py ligne 260 AssertionError: complet : le JSON doré n'est plus la sortie de Python (clés : ['seuil_heures_apres', 'courbes', 'monetisation', 'fin_seuil']) Il est donc préexistant et sans rapport avec cette branche (le JSON doré de `/api/accueil` a pris du retard sur son producteur Python). Mesuré sur un worktree détaché de `main` en `a3575e4d`, suite complète aussi : 168 bancs verts, 1 rouge — le même. Cliquet de couverture : **inchangé**. Sur la branche comme sur `main` (mesure du même jour, `a3575e4d`) : cœur 99,1 %, ensemble 96,7 %, avec la même phrase « la couverture a BAISSÉ » — la mesure enregistrée (99,4 % / 99,0 %) est antérieure aux deux, le rouge est donc lui aussi préexistant. `_tableau/collecte_commun.py`, le module neuf, sort à 100 % (mesuré par `coverage run --include="*collecte_commun.py" _tableau/test_collecte_bascule.py`), et `etat_partage.py` gagne ses lignes neuves (routes et `_reparer_bascules`) sans perdre de couverture. Ce que la branche fait, en une ligne : `/opt/studio/derniere-collecte.json` entre dans la base partagée (table `derniere_collecte`, une ligne par clé de premier niveau, routes `GET /derniere-collecte`, `GET /derniere-collecte/detail`, `POST /derniere-collecte/remplacer`), `basculer derniere-collecte [--essai]` / `revenir derniere-collecte` posent et défont la bascule, le fichier reste la copie de référence que lit la page du 132, et `tableau-bord.py` écrit désormais la collecte dans la base ET dans le fichier par `_tableau/collecte_commun.py` (un service muet est dit, jamais une écriture perdue en silence).
hermes-bot force-pushed hermes/migration-derniere-collecte-sqlite from 1c16f58f6e
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 20s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 13s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 21s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 13s
to b9c91da103
All checks were successful
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (push) Successful in 20s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (push) Successful in 12s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 22s
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 12s
2026-10-15 02:12:46 +02:00
Compare
Author
Collaborator

Deuxième rebasage, même raison et même résultat : cette fois sur e6a8582e (l'arrivée du banc des doublons inter-onglets, #1620), qui ajoutait deux fichiers absents de ma base — sans lui, la PR affichait _tableau/test_onglets_doublons.py et _tableau/ONGLETS.md comme s'ils étaient supprimés. La branche est maintenant partie du sommet de main, et son diff ne contient plus que ses onze fichiers :

OUTILS.md                         |   2 +-
_infra/etat-service.py            |  10 ++
_infra/test_etat_service.py       |  31 +++-
_tableau/LXC-132.md               |  20 ++-
_tableau/collecte_commun.py       |  93 ++++
_tableau/tableau-bord.py          |   6 +-
_tableau/test_collecte_bascule.py | 256 +++++
controle/test_etat_partage.py     |  32 +++
etat_client.py                    | 161 ++++++++++++-
etat_partage.py                   |  67 +++-
etat_partage.sql                  |  26 +++
11 fichiers, 694 insertions(+), 10 suppressions(-)

Preuves au sommet poussé, b9c91da1 (le reste de la discussion vaut pour 1c16f58f : même contenu, seuls les commits de main arrivent).

cargo test --release --locked   (dans _tableau/rust)
test result: ok. 4 passed; 0 failed          test result: ok. 18 passed; 0 failed
test result: ok. 8 passed; 0 failed          test result: ok. 13 passed; 0 failed
test result: ok. 5 passed; 0 failed          test result: ok. 8 passed; 0 failed
test result: ok. 4 passed; 0 failed (x3)     test result: ok. 3 passed; 0 failed (x2)
test result: ok. 2 passed; 0 failed          test result: ok. 1 passed; 0 failed
cargo build --release --locked : aucun avertissement, aucune erreur

_infra/test_etat_service.py        OK — le service d'état répond sur chaque route, refuse en 400/403/404, pose son schéma
_tableau/test_collecte_bascule.py  TOUT PASSE
_tableau/test_sujets_bascule.py    OK — le banc de la migration voisine, rejoué après rebasage
controle/test_etat_partage.py      TOUT PASSE
_tableau/garde_fous.py             garde-fous : rien à redire (exit 0)

_tableau/lancer-tests.py --tout    171 bancs verts, 1 rouge

Le rouge reste _tableau/test_accueil_parite.py (code 1), le même que sur main et pour la même erreur (le JSON doré n'est plus la sortie de Python, clés seuil_heures_apres, courbes, monetisation, fin_seuil) : préexistant, sans rapport avec cette branche. Deux vérifications pour le dire sans se tromper : le banc échoue à l'identique dans un worktree détaché de main (a3575e4d, suite complète : 168 verts et ce seul rouge), et entre a3575e4d et le sommet actuel de main, aucun commit ne touche _tableau/test_accueil_parite.py ni un fichier de l'accueil (git diff --stat a3575e4d origin/main -- _tableau/test_accueil_parite.py : vide).

Cliquet de couverture, inchangé lui aussi : cœur 99,1 %, ensemble 96,7 %, la même phrase qu'une suite complète de main seul, mesurée le même jour — le rouge du cliquet est donc antérieur à la branche. _tableau/collecte_commun.py sort à 100 % (coverage run --include="*collecte_commun.py" _tableau/test_collecte_bascule.py), et les lignes neuves d'etat_partage.py (routes, _reparer_bascules) sont couvertes par _infra/test_etat_service.py, y compris la réparation d'une base restée sur l'ancienne liste de noms.

Deuxième rebasage, même raison et même résultat : cette fois sur `e6a8582e` (l'arrivée du banc des doublons inter-onglets, `#1620`), qui ajoutait deux fichiers absents de ma base — sans lui, la PR affichait `_tableau/test_onglets_doublons.py` et `_tableau/ONGLETS.md` comme s'ils étaient supprimés. La branche est maintenant partie du sommet de `main`, et son diff ne contient plus que ses onze fichiers : OUTILS.md | 2 +- _infra/etat-service.py | 10 ++ _infra/test_etat_service.py | 31 +++- _tableau/LXC-132.md | 20 ++- _tableau/collecte_commun.py | 93 ++++ _tableau/tableau-bord.py | 6 +- _tableau/test_collecte_bascule.py | 256 +++++ controle/test_etat_partage.py | 32 +++ etat_client.py | 161 ++++++++++++- etat_partage.py | 67 +++- etat_partage.sql | 26 +++ 11 fichiers, 694 insertions(+), 10 suppressions(-) Preuves au sommet poussé, `b9c91da1` (le reste de la discussion vaut pour `1c16f58f` : même contenu, seuls les commits de `main` arrivent). cargo test --release --locked (dans _tableau/rust) test result: ok. 4 passed; 0 failed test result: ok. 18 passed; 0 failed test result: ok. 8 passed; 0 failed test result: ok. 13 passed; 0 failed test result: ok. 5 passed; 0 failed test result: ok. 8 passed; 0 failed test result: ok. 4 passed; 0 failed (x3) test result: ok. 3 passed; 0 failed (x2) test result: ok. 2 passed; 0 failed test result: ok. 1 passed; 0 failed cargo build --release --locked : aucun avertissement, aucune erreur _infra/test_etat_service.py OK — le service d'état répond sur chaque route, refuse en 400/403/404, pose son schéma _tableau/test_collecte_bascule.py TOUT PASSE _tableau/test_sujets_bascule.py OK — le banc de la migration voisine, rejoué après rebasage controle/test_etat_partage.py TOUT PASSE _tableau/garde_fous.py garde-fous : rien à redire (exit 0) _tableau/lancer-tests.py --tout 171 bancs verts, 1 rouge Le rouge reste `_tableau/test_accueil_parite.py` (code 1), le même que sur `main` et pour la même erreur (`le JSON doré n'est plus la sortie de Python`, clés `seuil_heures_apres`, `courbes`, `monetisation`, `fin_seuil`) : préexistant, sans rapport avec cette branche. Deux vérifications pour le dire sans se tromper : le banc échoue à l'identique dans un worktree détaché de `main` (`a3575e4d`, suite complète : 168 verts et ce seul rouge), et entre `a3575e4d` et le sommet actuel de `main`, aucun commit ne touche `_tableau/test_accueil_parite.py` ni un fichier de l'accueil (`git diff --stat a3575e4d origin/main -- _tableau/test_accueil_parite.py` : vide). Cliquet de couverture, inchangé lui aussi : cœur 99,1 %, ensemble 96,7 %, la même phrase qu'une suite complète de `main` seul, mesurée le même jour — le rouge du cliquet est donc antérieur à la branche. `_tableau/collecte_commun.py` sort à 100 % (`coverage run --include="*collecte_commun.py" _tableau/test_collecte_bascule.py`), et les lignes neuves d'`etat_partage.py` (routes, `_reparer_bascules`) sont couvertes par `_infra/test_etat_service.py`, y compris la réparation d'une base restée sur l'ancienne liste de noms.
Collaborator

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é.

`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é.
Merge remote-tracking branch 'origin/main' into lots/hermes-1696
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 1m54s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 9m53s
f052ba8c53
Merge remote-tracking branch 'origin/main' into lots/hermes-1696
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Failing after 16s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 9m43s
c77765031e
Collaborator

fusion-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 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é.
foXaCe merged commit f976dc47c2 into main 2026-10-17 11:58:15 +02:00
foXaCe deleted branch hermes/migration-derniere-collecte-sqlite 2026-10-17 11:58:15 +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!1696
No description provided.