fix(aggregator): צד שלם נמחק בשקט — chunking לפי גודל + כשל שמדווח (#233) #430
Reference in New Issue
Block a user
Delete Branch "worktree-aggregator-chunking"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
הבעיה
בתיק 1069-04-26 נשלחו 310 טענות עוררים בקריאת-Claude אחת. הקריאה החזירה לא-JSON, הקוד רשם
warningוהחזיר[], והפעולה דיווחה:הצד המרכזי בערר נעלם, והסטטוס אמר שהכול תקין.
נשללו כסיבה: באג פיצול-המשיבים (#224 — הוא דווקא עבד), ניקוי נספח 7, ו-timeout (אומת בהרצה ישירה מהמארח בלי הגבלה).
שתי תקלות מובחנות — שתיהן מתוקנות
1 · הקריאה גדולה מדי
הפיצול הפר-כתב-טענות שנוסף למשיבים ב-#224 הסתיר את זה במקרה — הוא שמר על קריאות קטנות. אבל עוררים וּועדה "speak with a single voice" ואינם מפוצלים לעולם, כך שערר גדול יוצא בקריאה אחת ענקית.
וההערה בקוד כבר תיעדה בדיוק את הכשל הזה, אצל צד אחר:
התיקון ההוא פשוט לא הוחל על העוררים. עכשיו כל צד מעל
MAX_PROPS_PER_CALL=80נצבר בכמה קריאות ומשורשר.המחיר, במפורש: כל chunk מקובץ בבידוד, ולכן צד שמתפצל עלול לקבל יותר טיעונים — וחופפים במקצת — מאשר במעבר יחיד. לאבד ליטיגנט שלם גרוע יותר, והחלופה (פרומפט קטן לכל פרופוזיציה) הייתה מנוונת כל תיק כדי לתקן את הגדולים. החיתוך שומר על הסדר, כי טענות מגיעות ממוינות לפי
claim_indexושכנות שייכות בדרך-כלל לאותו ראש-טיעון.2 · הכשל נבלע
return []על תשובה לא-רשימה אינו ניתן להבחנה מ"לצד הזה אין טיעונים". עכשיו נזרקתAggregationFailed, הקורא רושם ב-errors, והסטטוס יורד ל-completed_with_errors(כלל-הנדסה §6).ההודעה נוקבת בשם הצד ובמספר הפרופוזיציות — אחרת מפעיל שרואה
completed_with_errorsלא יודע איזה ליטיגנט נעלם.מבחני רגרסיה
לא היה קובץ-מבחן לצובר כלל. נוסף:
בקובץ יש הערה מפורשת: אם המבחן השני יחזור אי-פעם לטעון
== []— באג הבליעה הוחזר.Invariants
אחרי המיזוג
להריץ
aggregate_claims_to_arguments("1069-04-26", force=true)ולאמת שכל ארבעת הצדדים מיוצגים, ואזvalidate_decisionלמדד-כיסוי אמיתי לטיוטה שכבר נכתבה.