Correctif vim, audit qualité, tests d'intégration, et durcissement de l'agent #2
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/onglet-edition-vim"
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?
Six commits : le correctif du retour d'usage sur vim, puis une passe de fond sur
la qualité et la robustesse. Chaque défaut listé ici a été trouvé en écrivant
son test, et chaque test anti-régression a été vérifié en retirant le
correctif — sinon il ne prouve rien.
1. Édition vim : ne plus ouvrir un shell nu à côté de l'onglet demandé
onMountde l'onglet Shell créait systématiquement un shell de connexion, enplus de l'onglet vim ouvert par la demande. Selon l'ordre des effets, l'onglet
actif pouvait être le shell nu. Symptôme confirmé disparu côté utilisateur.
L'agent journalise désormais ce qu'il lance : un
programvide qui retombe surle shell est sinon indiscernable d'un shell demandé exprès (
psmontre/bin/bashdans les deux cas), ce qui avait rendu ce diagnostic inutilementlong.
2. Audit et qualité du code, dans la CI
Cible
make auditet job de CI dédié :cargo audit --deny warningssur lesdeux
Cargo.lock, un jeu de lints clippy au-delà de-D warnings, et les liensintra-doc.
Zéro vulnérabilité. Huit alertes « non maintenu / non sûr » subsistent, toutes
transitives (
portable-pty, arbre GTK de Tauri) : listées et justifiées avecleur chemin de dépendance dans
.cargo/audit.toml, pour qu'une nouvellealerte arrête le build.
clippy::pedanticen entier a été écarté après mesure (228 avertissements,31 lints, l'essentiel du style) ; le raisonnement est dans le README.
Cinq défauts trouvés : la géométrie de terminal reçue du fil était tronquée
en silence (proto3 n'a pas d'entier 16 bits — la conséquence même que j'avais
signalée en recommandant gRPC) ; le code de sortie d'un shell pouvait se replier
en négatif ; la taille d'une clé RSA tronquait une valeur non contrôlée ; le
préfixe de longueur du dialecte de compatibilité annonçait une longueur fausse
au lieu d'échouer ; trois compteurs de conversion tronquaient au lieu de saturer.
3. Tests d'intégration gRPC, et deux annulations qui ne coupaient rien
18 tests montent le service sur un port éphémère et le pilotent avec le client
généré : ni mesh, ni hôte, mais le vrai transport. C'était le trou le plus large
— seul
agent probeexerçait ces chemins, et il ne tourne pas en CI.Trois régressions de la migration, trouvées là :
FilePutn'avait plus aucune borne de tailleExecne tuait pas la commandejournalctl/tailsurvivait au clientLes deux annulations réagissent maintenant à
tx.closed(). J'avais écrit« lâcher un flux suffit » : c'était vrai des producteurs qui envoient à chaque
tour, faux de ceux qui attendent autre chose entre deux envois.
4. Plafond de sessions
Aucune limite n'existait : autant de PTY, de suivis et d'exécutions que voulu,
chacun avec son processus et son thread. Compteur plafonné à 64, avec un jeton
qui libère la place en tombant — la comptabilité suit alors la vie réelle de
la session, sans décrément à ne pas oublier sur chaque sortie.
Le second test a été écrit après avoir constaté que le jeton du shell était
libéré dès le retour de la méthode : les sessions les plus lourdes ne comptaient
pas du tout.
5. Harnais de test de composants, et binaires plus légers
vitesttournait sans DOM : seulutil.jsétait testable, et c'est ce trou quia laissé passer le bug de l'onglet vim. jsdom +
@testing-library/svelteouvrent cette classe de tests ; quatre premiers cas exercent le tri d'un tableau
du clic à l'ordre des lignes, donc les tables de clés écrites à la main.
lto = "fat"+codegen-units = 1, mesuré : agent 5,78 → 3,88 Mo (−33 %),console Windows 24,2 → 13,0 Mo (−46 %). Rien ne change au comportement, et
ça compte pour un agent poussé sur le mesh à chaque mise à jour.
spike/compile désormais en CI (il aurait pourri en silence), et le critère desuppression du dialecte de compatibilité est écrit dans
identity.rs.6. Jeton partagé optionnel
L'agent acceptait tout ce qui vient du mesh. Assumé pour un banc d'essai, mais
le rayon d'action a grandi : binaire remplaçable à distance, écriture de
fichiers, PTY, lancement d'un programme. Un hôte compromis donnait la main sur
tous les autres.
--token-fileferme cette porte sans rien casser : sans l'option, lecomportement est inchangé, donc l'activation se fait hôte par hôte. Refus dans
un intercepteur, donc avant le service et sur toutes les méthodes — vérifié sur
un appel unaire, un flux sortant et un flux entrant. Comparaison en temps
constant, message qui ne distingue pas « absent » de « faux ».
Ce que ça protège : un autre hôte du mesh. Ce que ça ne protège pas : qui sait
lire le fichier. C'est un secret partagé, pas une identité par hôte ; le mTLS
reste un autre chantier.
Vérifications
133 tests Rust (84 protocol+agent, 49 console) et 31 frontend.
make cipasse en entier : fmt, clippy strict, tests, audit, liens de doc,frontend, cohérence du
dist, compilation du banc d'essai.Jeton vérifié de bout en bout contre un agent local ; le reste l'a été contre
ep1etvps.kxh-studio.fr.Reste à faire, hors de cette PR
Cinq agents à redéployer par SSH (
ep2,forge,monitor,pbs1,pve1—mtmginjoignable), et le rendu visuel du tri, que je n'ai pas pu contrôlerà l'écran.
🤖 Generated with Claude Code
https://claude.ai/code/session_01GzHyvUbKutGrRcWjyfwDkT
Édition vim : ne plus ouvrir un shell nu à côté de l'onglet demandéto Correctif de l'édition vim, et passe d'audit / qualité du codeCorrectif de l'édition vim, et passe d'audit / qualité du codeto Correctif vim, audit qualité, tests d'intégration, et durcissement de l'agent