Supervision : mesurer ce conteneur, pas la machine hôte
Samuel ADONE+1: Claude Opus 5
8f0dcba
/proc n'est pas isolé dans un conteneur. /proc/stat comptait l'activité de
tout le serveur : le tableau annonçait 99,5 % de processeur pendant que ce
service dormait. La mesure vient maintenant du compteur cgroup
(cpu.stat/usage_usec), rapportée aux cœurs réellement alloués — donc à nous
seuls. Repli sur /proc/stat hors conteneur, explicitement étiqueté « machine
entière ».
Même illusion sur le disque : sans volume persistant attaché, /data vit sur
le système de fichiers de l'hôte et statvfs annonçait « 44 040 192 Go », ce
qui est exact et sans usage. Au-delà de 4 To on considère le volume comme
non dédié : on rapporte ce que ce service occupe réellement, sans prétendre
connaître la place restante.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Supervision : mesure nulle ≠ mesure absente, et charge hôte non alarmante
Samuel ADONE+1: Claude Opus 5
0792e02
Le tableau affichait « indisponible » pour le disque persistant du Space :
la valeur était testée par sa véracité, or un disque vide mesure zéro octet
utilisé — une mesure parfaitement valide. Même confusion possible sur la
mémoire et l'empreinte du process.
La charge système lue dans /proc/loadavg est celle de la machine hôte,
partagée entre Spaces. La rapporter aux cœurs alloués affichait 2,33× en
rouge pour une charge qui n'est pas la nôtre et sur laquelle personne ici ne
peut agir. Elle reste affichée, sans seuil, explicitement étiquetée.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Poste de travail : liste et conversation côte à côte au-delà de 1024 px
Samuel ADONE+1: Claude Opus 5
ec3b8ae
L'application entière sort du cadre « téléphone » sur grand écran : la liste
des groupes tient un volet de 372 px à gauche, la conversation occupe le
reste, et un volet d'accueil s'affiche tant qu'aucun groupe n'est ouvert.
Les bulles restent plafonnées à 1000 px de large : c'est la cohabitation des
deux volets qui rend la largeur utile, pas l'étirement d'une ligne de texte
sur 1600 px. Le bouton « retour » disparaît, la liste étant déjà visible.
Sous 1024 px, rien ne change : même cadre, même navigation plein écran.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Service worker : réseau d'abord pour la feuille de style et le script
Samuel ADONE+1: Claude Opus 5
d58abe7
La stratégie « cache d'abord » servait l'ancien fichier à chaque chargement
et ne rangeait la nouveauté que pour la visite suivante : après un
déploiement, chacun restait une visite en retard — indéfiniment pour qui ne
rouvre pas l'application deux fois. C'est ce qui faisait apparaître la mise
en page mobile sur un poste de travail malgré le déploiement du tableau de
bord.
Le cache reste le secours hors-ligne, indispensable quand le réseau du site
tombe. Le nom de cache passe à v2 pour purger les entrées périmées.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bac à sable superadmin, accusés de lecture, modération, poste de travail
Samuel ADONE+1: Claude Opus 5
3e637ac
Bac à sable : les 20 comptes et 6 groupes `test_` deviennent un festival
fictif réservé au superadmin. Ils ne peuvent plus se connecter — l'écran
d'accueil les traite comme des numéros inconnus — et disparaissent de
l'annuaire, des conversations, des statistiques et du tableau de bord. Le
superadmin y écrit au nom d'un compte fictif et peut déclencher la lecture
par tout le groupe, pour voir basculer les accusés sans second téléphone.
Accusés de lecture : une coche à l'envoi, deux à la remise, deux en cyan à
la lecture ; appui long pour la liste nominative. Aucune table d'accusés —
/receipts renvoie le last_read_id de chaque membre et le client compare. La
version stockée aurait pesé 700 000 lignes à la charge visée.
Modération : vocabulaire surveillé (accès gratuit, revente, insultes) en
trois passes — normalisation des accents et chiffres-substituts, sous-chaîne
sur le texte compacté, distance d'édition bornée. « gr4tuit », « g r a t u i t »
et « gratuiit » sont reconnus. Le messag…
Inscription libre, import de tableur, épinglage, signalement, jeu de test
Samuel ADONE+1: Claude Opus 5
2bc5c2a
Inscription : un bénévole crée son compte même si son numéro n'a jamais été
enregistré. Le compte naît sans groupe et ne peut pas être superadmin ; les
superadmins sont notifiés pour l'affecter. SELF_REGISTRATION=0 restaure la
liste blanche seule.
Import : POST /api/admin/users/import lit un .xlsx ou un .csv et retrouve seul
les colonnes prénom / nom / téléphone (en-têtes français accentués, colonne
« Nom complet », numéros abîmés par Excel, séparateur point-virgule, CP1252,
absence d'en-tête). Aperçu avant écriture, colonnes corrigeables à la main.
Rôles : l'admin de groupe ajoute et retire des bénévoles et épingle les
messages ; seul le superadmin distribue le rôle d'admin. Nouveau signalement
de compte, distinct du blocage, et recherche d'annuaire par numéro espacé.
Stockage : `meta` filtré champ par champ pour qu'aucune image ne puisse être
écrite en base, rétention calée sur la cible réelle (500 messages/groupe,
30 jours), requêtes agrégées sur les écrans rechargés en permanenc…