Correctifs 0.8 : saisie de la cle de pilotage, identites appairees perdues a la migration

Deux defauts trouves a l'usage :

1. Impossible de saisir la cle de pilotage dans l'UI : le chargement lance une
   dizaine d'appels /api/* en parallele, chaque 401 rouvrait la modale, et
   celle-ci vide son champ a l'ouverture. Les caracteres disparaissaient au fur
   et a mesure de la frappe. Une seule demande de cle est desormais partagee par
   tous les appels concurrents. Au passage, une modale ouverte n'est plus
   ecrasee en silence (sa promesse restait pendante pour toujours).

2. migrate_07 n'importait pas .authorized_users : les identites appairees pour
   le chat chiffre. Symptome trompeur — le tunnel s'etablit, la machine
   s'affiche en ligne, mais le portail refuse toute conversation. Importe et
   couvert par un test.
This commit is contained in:
nathaninline committed 2026-08-07 20:34:43 +02:00
1 parent 98ee293a49
commit eac12112dd
5 files changed
+84 -4

No files matched your search

+10
View File
@@ -4,6 +4,7 @@ import (
"os"
"path/filepath"
"strings"
"sync"
"testing"
)
@@ -40,6 +41,7 @@ func fake07Home(t *testing.T) string {
write("sysprompt.txt", "Tu es AJEAN.\n")
write("conversation.json", `{"seq":42,"messages":[{"role":"user","content":"salut"}]}`)
write("SKILLS/vieux-skill/SKILL.md", "# un skill d'avant\n")
write(".authorized_users", "AABBCCDDEEFF00112233445566778899AABBCCDDEEFF001122334455667788AA\n")
return home
}
@@ -101,6 +103,14 @@ func TestMigration07(t *testing.T) {
if conv.Seq != 42 {
t.Errorf("conversation perdue (seq %d)", conv.Seq)
}
// Les identités appairées : les perdre casse le chat chiffré du portail
// sans que rien ne le dise (le tunnel, lui, s'établit normalement).
// La liste est mise en cache une fois par process (authOnce) : en production
// c'est un process neuf qui sert après l'install, ici il faut le dire.
authOnce, authSet = sync.Once{}, map[string]bool{}
if !isAuthorizedUser("aabbccddeeff00112233445566778899aabbccddeeff001122334455667788aa") {
t.Error("identité appairée perdue : le chat E2E du portail serait refusé")
}
// Les fichiers consommés sont rangés, pas détruits.
for _, archive := range []string{"config.env", "SKILLS"} {