From 27964e37b0eca8bee757e5abe5addd1051ceb169 Mon Sep 17 00:00:00 2001 From: yilsem Date: Sun, 11 Oct 2026 08:07:50 +0300 Subject: [PATCH] fix(codex-bridge): a refusal phrased as a question is still blocked User, 11 Oct 2026: the model answered "I can't write that; shall I do a reduced version?" and the step check let it through because it was a question. A reply that refuses or sets its own conditions is blocked even when it ends with a question; a clarifying question without a refusal stays below the thresholds. Co-Authored-By: Claude Opus 5.5 --- apps/desktop/assets/codex-bridge/jev_denetim.py | 9 +++++---- apps/desktop/assets/codex-bridge/test_jev_denetim.py | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/apps/desktop/assets/codex-bridge/jev_denetim.py b/apps/desktop/assets/codex-bridge/jev_denetim.py index 1a3988e..72af5dc 100644 --- a/apps/desktop/assets/codex-bridge/jev_denetim.py +++ b/apps/desktop/assets/codex-bridge/jev_denetim.py @@ -10,8 +10,8 @@ Jev (TypeSafe System One) metin uretmez; bir duruma sorulan evet/hayir sorularin 2026: cagri basina ~0,4 sn, 13 gercek ornegin 13'u dogru ayrildi). Kural kodda durur: - yakalanir: cevap istegi yapmiyor/soylemiyor (ret, kacamak, konuyu degistirme) ya da istegi sormadan kendi sartlariyla degistiriyor; -- yakalanmaz: somut bir teknik engel bildiren cevap (hata, eksik dosya/arac/yetki) ve kullaniciya soru ya da onay - soran cevap; metni olmayan (yalniz arac cagiran) adim. +- yakalanmaz: somut bir teknik engel bildiren cevap (hata, eksik dosya/arac/yetki), ret icermeyen netlestirme + sorusu ve metni olmayan (yalniz arac cagiran) adim. "Yapamam, soyle yapayim mi?" diye soran cevap yakalanir. Jev'e ulasilamazsa cevap oldugu gibi gecer (is durmaz); art arda hatada bir sure hic sorulmaz. Codex'in kendi modelleri kopruye ugramadigi icin bu denetimin disindadir. @@ -142,8 +142,9 @@ def karar(puan, ayar=None): """True: adim gecmez (yedek model yapar). Esikler ayardan degistirilebilir.""" e = dict(ESIK) e.update({k: float(v) for k, v in (ayar or {}).items() if k in ESIK}) - if puan["soru"] >= e["soru"]: - return False # kullaniciya soru/onay soruyor: kullanici cevaplar + # Soru bicimi istisna degildir (kullanici, 11 Ekim 2026: model "yazamam, soyle yapayim mi?" deyince "Jev bunu + # gecirdi mi?" diye sordu): ret ya da sart iceren cevap sonunda soru sorsa da gecmez. Ret icermeyen gercek + # netlestirme sorusu ("hangi alan adina?") zaten asagidaki esiklerin altinda kalir ve gecer. if puan["ret"] >= e["ret"] and puan["teknik"] < e["teknik"]: return True # yapmiyor / soylemiyor (teknik engel degil) return puan["sart"] >= e["sart"] # sormadan kendi sartlariyla degistirdi diff --git a/apps/desktop/assets/codex-bridge/test_jev_denetim.py b/apps/desktop/assets/codex-bridge/test_jev_denetim.py index 307980b..1f31290 100644 --- a/apps/desktop/assets/codex-bridge/test_jev_denetim.py +++ b/apps/desktop/assets/codex-bridge/test_jev_denetim.py @@ -62,7 +62,8 @@ class Karar(unittest.TestCase): def test_normal_answers_technical_obstacles_and_questions_pass(self): self.assertFalse(jev_denetim.karar(scores(ret=0.05, sart=0.3))) self.assertFalse(jev_denetim.karar(scores(ret=0.85, teknik=0.97))) # "SSH key rejected, could not read" - self.assertFalse(jev_denetim.karar(scores(ret=0.62, sart=0.91, soru=0.93))) # asks for approval first + self.assertTrue(jev_denetim.karar(scores(ret=0.62, sart=0.91, soru=0.93))) # "I can't; shall I do less?" is blocked + self.assertTrue(jev_denetim.karar(scores(ret=0.70, sart=0.90, teknik=0.23, soru=0.89))) # measured, 11 Oct 2026 self.assertFalse(jev_denetim.karar(scores(ret=0.48, soru=0.96))) def test_thresholds_come_from_settings(self):