fix(tableau) : le service du 132 retrouve les jetons de la collecte du bouton #1815

Merged
foXaCe merged 1 commit from fix/132-service-jetons into main 2026-10-17 13:12:21 +02:00
Collaborator

La panne

Le bouton « Actualiser » de la page du 132 ne collectait plus rien, et il le disait à sa façon : « Mis à jour il y a 6 h », avec « Chiffres à jour » sur le bouton.

Depuis que /actualiser est servie par le service Rust (t_cd8a473a), c'est lui qui lance python3 tableau-bord.py --force, donc dans son propre sandbox. Or l'unité porte ProtectHome=yes : pour le service et pour tout ce qu'il lance, /home/studio/.claude est un dossier vide. Chaque clic mourait en une seconde :

12:11:55 debut « chaîne Minute Chat » — délai 100 s
12:11:55 jetons : youtube-token-minutechat.json introuvable. Dossiers cherchés : … /home/studio/.claude

Mesure : derniere-collecte.json figé à 12:06:38, clics à 12:11:55 et 12:22:27 sans effet. Seules les collectes du minuteur et du cron, hors sandbox, aboutissaient — d'où des chiffres vieux de plusieurs heures, et un échec invisible (la route répond 202, et « Chiffres à jour » est un libellé fixe dont le seuil de retard vaut 2 × cadence = 24 h).

Le correctif

ProtectHome=read-only
ReadWritePaths=/home/studio/.claude

/home reste lisible et protégé ; seul le dossier des jetons est réinscriptible, parce que la collecte y renouvelle les jetons TikTok et Instagram.

Vérifié de bout en bout (2026-10-17)

  • dans le sandbox du service (systemd-run avec ses propriétés) : jetons lisibles, écriture acceptée ;
  • vrai POST /actualiser sur 127.0.0.1:8096 : 202 {"chaine":null,"lance":true}, puis les huit chaînes, TikTok et Instagram relevés en 82,8 s, page réécrite, derniere-collecte.json à 12:42, erreurs: [].

L'unité du 132 a été corrigée à la main le 2026-10-17 (sauvegarde service-tableau.service.bak-jetons-protecthome-20261017) ; ce commit la garde corrigée, sinon le prochain deployer.sh la repose en arrière.

Ce qui reste ouvert

  1. L'infobulle du bouton annonce encore « Chiffres à jour » quand la collecte vient d'échouer : elle doit lire cause/code de /etat et dire « Relevé en échec » avec sa cause (front Svelte).
  2. Le collecteur http://192.168.1.142:8798/processus.json refuse la connexion en boucle (Connection reset by peer, Broken pipe) — onglet Processus, côté LXC 130.

Doc : _tableau/LXC-132.md (section du 2026-10-17) et la leçon dans LECONS.md (« un lanceur sandboxé hérite du sandbox, et un 202 cache la panne »).

## La panne Le bouton « Actualiser » de la page du 132 ne collectait plus rien, et il le disait à sa façon : « Mis à jour il y a 6 h », avec « Chiffres à jour » sur le bouton. Depuis que `/actualiser` est servie par le service Rust (t_cd8a473a), c'est lui qui lance `python3 tableau-bord.py --force`, donc **dans son propre sandbox**. Or l'unité porte `ProtectHome=yes` : pour le service et pour tout ce qu'il lance, `/home/studio/.claude` est un dossier vide. Chaque clic mourait en une seconde : ``` 12:11:55 debut « chaîne Minute Chat » — délai 100 s 12:11:55 jetons : youtube-token-minutechat.json introuvable. Dossiers cherchés : … /home/studio/.claude ``` Mesure : `derniere-collecte.json` figé à 12:06:38, clics à 12:11:55 et 12:22:27 sans effet. Seules les collectes du minuteur et du cron, hors sandbox, aboutissaient — d'où des chiffres vieux de plusieurs heures, et un échec invisible (la route répond `202`, et « Chiffres à jour » est un libellé fixe dont le seuil de retard vaut `2 × cadence` = 24 h). ## Le correctif ``` ProtectHome=read-only ReadWritePaths=/home/studio/.claude ``` `/home` reste lisible et protégé ; seul le dossier des jetons est réinscriptible, parce que la collecte y **renouvelle** les jetons TikTok et Instagram. ## Vérifié de bout en bout (2026-10-17) - dans le sandbox du service (`systemd-run` avec ses propriétés) : jetons lisibles, écriture acceptée ; - vrai `POST /actualiser` sur `127.0.0.1:8096` : `202 {"chaine":null,"lance":true}`, puis les **huit chaînes, TikTok et Instagram relevés en 82,8 s**, page réécrite, `derniere-collecte.json` à `12:42`, `erreurs: []`. L'unité du 132 a été corrigée à la main le 2026-10-17 (sauvegarde `service-tableau.service.bak-jetons-protecthome-20261017`) ; ce commit la garde corrigée, sinon le prochain `deployer.sh` la repose en arrière. ## Ce qui reste ouvert 1. L'infobulle du bouton annonce encore « Chiffres à jour » quand la collecte vient d'échouer : elle doit lire `cause`/`code` de `/etat` et dire « Relevé en échec » avec sa cause (front Svelte). 2. Le collecteur `http://192.168.1.142:8798/processus.json` refuse la connexion en boucle (`Connection reset by peer`, `Broken pipe`) — onglet Processus, côté LXC 130. Doc : `_tableau/LXC-132.md` (section du 2026-10-17) et la leçon dans `LECONS.md` (« un lanceur sandboxé hérite du sandbox, et un 202 cache la panne »).
fix(tableau): le service du 132 retrouve les jetons de la collecte du bouton
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Failing after 18s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 7m15s
58076a875b
service-tableau.service porte ProtectHome=yes, et c'est sa route /actualiser qui lance la
collecte (python3 tableau-bord.py --force) depuis t_cd8a473a : pour le service et pour tout ce
qu'il lance, /home/studio/.claude était donc un dossier vide. Chaque clic mourait en une
seconde sur « jetons : youtube-token-minutechat.json introuvable. Dossiers cherchés : …
/home/studio/.claude », alors que la route répondait 202 et que la page annonçait « Chiffres à
jour ». Mesuré le 2026-10-17 : derniere-collecte.json figé à 12:06:38, clics à 12:11:55 et
12:22:27 sans effet — seules les collectes du minuteur et du cron, hors sandbox, aboutissaient.

ProtectHome=read-only laisse /home lisible (le sandbox garde son sens) et
ReadWritePaths=/home/studio/.claude rouvre le seul dossier que la collecte écrit : le script y
renouvelle les jetons TikTok et Instagram. Après correction, vérifié dans le sandbox du service
(systemd-run avec ses propriétés) puis par un vrai POST /actualiser : les huit chaînes, TikTok
et Instagram relevés en 82,8 s, erreurs: [].

L'unité du 132 a été corrigée le 2026-10-17 (sauvegarde dans /etc/systemd/system) ; ce commit
la garde corrigée, sinon le prochain deployer.sh la repose en arrière.
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é.
hermes-bot force-pushed fix/132-service-jetons from 58076a875b
Some checks failed
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Failing after 18s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 7m15s
to aed9a5de7e
All checks were successful
Tests du tableau (Rust + Svelte) / Front Svelte (_tableau/front) (pull_request) Successful in 1m58s
Tests du tableau (Rust + Svelte) / Rust (_tableau/rust) (pull_request) Successful in 7m43s
2026-10-17 13:04:34 +02:00
Compare
foXaCe merged commit 5af1ea2b5d into main 2026-10-17 13:12:21 +02:00
foXaCe deleted branch fix/132-service-jetons 2026-10-17 13:12:21 +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!1815
No description provided.