@@ -199,6 +199,56 @@ def _run_bcasl_before_compile(self, on_done) -> None:
199199 pass
200200
201201
202+ def _bcasl_report_allows_compile (self , report ) -> bool :
203+ """Return True when BCASL pre-compile report allows compilation to continue."""
204+ # Sécurité fail-fast: si BCASL plante/échoue, on bloque la compilation.
205+ try :
206+ if report is None :
207+ log_i18n_level (
208+ self ,
209+ "error" ,
210+ "BCASL a échoué ou n'a pas retourné de rapport. Compilation bloquée." ,
211+ "BCASL failed or returned no report. Compilation blocked." ,
212+ )
213+ return False
214+
215+ if isinstance (report , dict ):
216+ status = str (report .get ("status" , "" )).strip ().lower ()
217+ if status in {"disabled" , "skipped" }:
218+ return True
219+ if "ok" in report :
220+ ok = bool (report .get ("ok" ))
221+ if not ok :
222+ log_i18n_level (
223+ self ,
224+ "error" ,
225+ "BCASL a signalé un échec. Compilation bloquée." ,
226+ "BCASL reported a failure. Compilation blocked." ,
227+ )
228+ return ok
229+ return True
230+
231+ if hasattr (report , "ok" ):
232+ ok = bool (getattr (report , "ok" ))
233+ if not ok :
234+ log_i18n_level (
235+ self ,
236+ "error" ,
237+ "BCASL a signalé des erreurs plugins. Compilation bloquée." ,
238+ "BCASL reported plugin errors. Compilation blocked." ,
239+ )
240+ return ok
241+ except Exception :
242+ log_i18n_level (
243+ self ,
244+ "error" ,
245+ "Erreur lors de la validation du rapport BCASL. Compilation bloquée." ,
246+ "Error while validating BCASL report. Compilation blocked." ,
247+ )
248+ return False
249+ return True
250+
251+
202252def compile_all (self ) -> None :
203253 """
204254 Slot connected to the compile button.
@@ -400,6 +450,9 @@ def _after_bcasl(_report=None) -> None:
400450 "Compilation cancelled before start (BCASL phase)." ,
401451 )
402452 return
453+ if not _bcasl_report_allows_compile (self , _report ):
454+ self .set_controls_enabled (True )
455+ return
403456 try :
404457 log_i18n_level (
405458 self ,
@@ -800,6 +853,10 @@ def _after_bcasl(_report=None) -> None:
800853 )
801854 result ["value" ] = False
802855 return
856+ if not _bcasl_report_allows_compile (self , _report ):
857+ self .set_controls_enabled (True )
858+ result ["value" ] = False
859+ return
803860 ok = False
804861 try :
805862 ok = _do_start ()
0 commit comments