@@ -9,6 +9,7 @@ class ParseWarningCollector:
99
1010 composers_skipped : int = 0
1111 bubbles_skipped : int = 0
12+ composers_processing_failed : int = 0
1213
1314 def record_composer_skipped (self , count : int = 1 ) -> None :
1415 if count > 0 :
@@ -18,9 +19,18 @@ def record_bubble_skipped(self, count: int = 1) -> None:
1819 if count > 0 :
1920 self .bubbles_skipped += count
2021
22+ def record_composer_processing_failure (self , count : int = 1 ) -> None :
23+ """Post-parse assembly failed; not a JSON/schema parse skip."""
24+ if count > 0 :
25+ self .composers_processing_failed += count
26+
2127 @property
2228 def has_warnings (self ) -> bool :
23- return self .composers_skipped > 0 or self .bubbles_skipped > 0
29+ return (
30+ self .composers_skipped > 0
31+ or self .bubbles_skipped > 0
32+ or self .composers_processing_failed > 0
33+ )
2434
2535 def to_api_list (self ) -> list [dict ]:
2636 """Structured warnings for JSON API responses (issue #67)."""
@@ -45,6 +55,16 @@ def to_api_list(self) -> list[dict]:
4555 f"{ n } { noun } could not be loaded due to schema or JSON parse errors"
4656 ),
4757 })
58+ if self .composers_processing_failed :
59+ n = self .composers_processing_failed
60+ noun = "conversation" if n == 1 else "conversations"
61+ warnings .append ({
62+ "type" : "processing_error" ,
63+ "count" : n ,
64+ "detail" : (
65+ f"{ n } { noun } could not be fully assembled after parsing"
66+ ),
67+ })
4868 return warnings
4969
5070 def attach_to (self , payload : dict ) -> dict :
0 commit comments