fix(arguments): validate claim_ids + per-row savepoint in argument_aggregator (#156) #330
Reference in New Issue
Block a user
Delete Branch "worktree-fix-argument-aggregator-savepoint"
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?
הבעיה (דווח ב-CMP-186, TaskMaster legal-ai #156)
aggregate_claims_to_argumentsנכשל עםcurrent transaction is aborted, commands ignored until end of transaction blockבתיקים גדולים (אומת על 1027-04-26, 195 טענות).שורש: ב-
argument_aggregator.pyה-INSERT ל-legal_argument_propositionsהיה עטוף ב-except Exceptionרחב ללא savepoint. כש-ה-LLM מחזירclaim_idתקין-תחבירית אך לא-קיים, הפרת ה-FK (legal_argument_propositions_claim_id_fkey) משאירה את טרנזקציית asyncpg במצב aborted. ה-exceptתפס רק את חריגת ה-INSERT הספציפי אך מעולם לא ביצעROLLBACK TO SAVEPOINT— ולכן הפקודה הבאה (INSERT legal_argumentsשל הטיעון הבא) זרקהInFailedSQLTransactionErrorשלא נתפסה והקריסה את כל הקריאה. בתיק עם הרבה טענות ההסתברות ל-UUID פגום גבוהה → כשל עקבי.התיקון
claim_idנבדק מול קבוצת ה-id-ים של הטענות שכבר נשלפו לתיק (valid_claim_ids) לפני ה-INSERT, כך ש-id הזוי לא מגיע ל-DB. UUID פגום-תחבירית כבר נזרק ב-_normalize_argument; כאן נתפסים התקינים-אך-לא-קיימים.async with conn.transaction()(asyncpg מקנן כ-SAVEPOINT), כך שכל הפרת-constraint בלתי-צפויה מגלגלת לאחור לנקודת-השמירה במקום להרעיל את הטרנזקציה המקיפה.Invariants
logger.warning.בדיקה
python -m py_compileעובר. ניתן לאמת על 1027-04-26 לאחר redeploy של ה-MCP:aggregate_claims_to_argumentsאמור לסייםcompletedעם דילוג מתועד על claim_ids לא-קיימים במקום קריסה.🤖 Generated with Claude Code