Lot 28 : tests contre les mutations survivantes de l'optimiseur

105 mutations du verrou et du job ; le premier passage en tuait 39. Les
survivantes le sont désormais par des tests ajoutés :

- l'essai noté dans le verrou pendant la mesure, la sauvegarde notée avant
  d'écrire, l'application refusée pendant la mesure, la cible inconnue ;
- l'application gardée : preset qui n'est plus en service, API externe,
  clé changée ailleurs pendant l'application (défaite) ;
- l'application planifiée : clé sur option refusée sans l'option ;
- l'essai muet (délai de chargement), /props sans
  default_generation_settings, SIDE_SLOT sur un seul slot, threads comptés
  sur les cœurs de la sonde, aucun changement de moteur signalé quand son
  build est inconnu ;
- VRAM mesurée par un faux nvidia-smi, budget, profondeur, notes et poids,
  écarts de mesure, essais écartés, moteur piloté par la façade.

nvidia-smi, la pause entre deux lectures de VRAM et l'unité du budget
deviennent réglables (tests). Le test de l'essai orphelin lit l'identité
du processus une fois l'exec visible dans /proc : lue trop tôt, elle
portait l'exécutable du test (échec intermittent en CI).

Les vingt survivantes restantes, équivalentes ou hors de portée d'un test
(courses, estimation seulement), sont décrites dans la spec.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016tcGfJWefW5kUGoC2wL8cv
This commit is contained in:
Claude committed 2026-10-16 03:46:44 +00:00
1 parent c157da2141
commit 9dfce204bf
6 files changed
+963 -52

No files matched your search

+6
View File
@@ -81,6 +81,9 @@ pub struct FakeGo {
/// /internal/v1/preset/apply écrit-il le preset dans la configuration
/// (`applyPresetFile` : clés « appareil » et BIN de la machine gardés) ?
pub apply_presets: Mutex<bool>,
/// Clés que l'application d'un preset ajoute à la configuration (un
/// réglage changé ailleurs pendant l'application).
pub apply_extra: Mutex<Vec<(String, String)>>,
/// /internal/v1/chat/generating : le Go écrit une réponse.
pub generating: Mutex<bool>,
/// /internal/v1/service/prestart reçus.
@@ -571,6 +574,9 @@ async fn handle(st: Arc<FakeGo>, req: Request<Incoming>) -> Response<Full<Bytes>
if let Some(bin) = cur.get("BIN").filter(|v| !v.is_empty()) {
next.insert("BIN".into(), String::from_utf8_lossy(bin).into_owned());
}
for (k, v) in st.apply_extra.lock().unwrap().iter() {
next.insert(k.clone(), v.clone());
}
*cur = next.into_iter().map(|(k, v)| (k, v.into_bytes())).collect();
}
st.preset_applies.lock().unwrap().push((path, mode));