Lot 38 : l'outil criteria du mode Code exécuté par la façade

L'outil par lequel le modèle tient les critères d'acceptation de sa tâche
(poser, marquer faits, lister, effacer) partait au Go, qui renvoyait la
liste à la façade comme delta. Il s'exécute maintenant dans le tour de la
façade (chat/crittool.rs, port de toolCriteria) : mêmes messages, ids en
nombre ou en chaîne, vingt critères au plus, `passed` réservé à la passe de
vérification, rangement scellé (chat/crit:<id>), liste poussée à l'écran à
chaque changement par un nouveau champ `deltas` de l'hôte du tour.

Les critères sont rangés sous la discussion du tour (le Go prenait la
discussion active : elles ne diffèrent que si l'utilisateur en change
pendant la génération). see_image reste au Go (préparation de l'image).

Parité : journal de 22 appels tiré du Go (parity_criteria_test.go →
tests/parity_tools/criteria.json), rejoué par tests/tools.rs ; le contrat
du mode Code de tests/lot6.rs est désormais vérifié par la façade seule.

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 04:01:03 +00:00
1 parent 1d33ca5a49
commit 76d9dce74a
12 files changed
+1119 -21

No files matched your search

+16 -1
View File
@@ -696,6 +696,7 @@ async fn tour_complet_par_le_go() {
kwargs: Default::default(),
},
queued: Box::new(Vec::new),
deltas: Box::new(|_| {}),
perf_kind: "main",
side_slot: Default::default(),
projsnap: None,
@@ -1089,6 +1090,7 @@ async fn hote_et_sonde_de_gabarit() {
kwargs: Default::default(),
},
queued: Box::new(Vec::new),
deltas: Box::new(|_| {}),
perf_kind: "main",
side_slot: Default::default(),
projsnap: None,
@@ -1259,7 +1261,20 @@ async fn contrat_verifie_par_la_facade() {
Verify each non-passed criterion now (git_diff first), and record every verdict with the criteria tool."
);
assert_eq!(v["tools"][0]["function"]["name"], "criteria");
assert_eq!(*go.tool_log.lock().unwrap(), ["criteria verifier"]);
// L'outil criteria s'exécute dans la façade (lot 38) : rien par le Go ;
// le critère rangé (scellé) passe à « passed », et l'écran reçoit la
// liste.
assert!(go.tool_log.lock().unwrap().is_empty(), "{:?}", go.tool_log);
let stored = go.get("chat", &format!("crit:{id}")).unwrap();
assert_eq!(
stored,
r#"SCELLE:[{"id":1,"text":"les tests passent","status":"passed"}]"#
);
let crit = deltas(&svc, "criteria");
assert_eq!(
crit,
[serde_json::json!([{"id":1,"text":"les tests passent","status":"passed"}])]
);
assert_eq!(
deltas(&svc, "role"),
[serde_json::json!("verifier"), serde_json::json!("")]