fix(halacha): rate-limit refusal ≠ empty answer — לא checkpoint chunk בכשל (#144) #267
Reference in New Issue
Block a user
Delete Branch "worktree-halacha-no-empty-checkpoint"
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?
הבעיה (#144)
חילוץ-מחדש תחת rate-limit השאיר תיקים עם פחות הלכות (3→1→0). שורש-הליבה: כש-
claude -pמחזירexit=0עם הודעת-מגבלה/שגיאה כ-result(refusal NOTICE),claude_session.queryהחזיר אותה כהצלחה →halacha_extractor._extract_chunkקיבל[]/non-list וסימן את ה-chunk כ-done-עם-0-הלכות;resumeדילג עליו לתמיד → תת-חילוץ קבוע.התיקון (G1 — אבחנת-מקור · INV-G3/X16 — checkpoint=הושלם-באמת)
claude_session.query:is_errorאו_looks_like_limit_noticeהופכים תוצאת-מגבלה לכשל-חולף → retry → raise אם מתמיד. כך ה-chunk נשאר un-checkpointed ו-resumeמשחזר. תוצאת-JSON אמיתית (מתחילה ב-[/{) לעולם לא מסומנת בטעות. (תיקון רוחבי — כל המחלצים נהנים.)Δdone<0(regress completed→pending) אוΔhal<-2(אובדן-הלכות מעבר לרעש-קונסולידציה) → אזהרה גלויה +churn_okב-JSON. הסימפטום 3→1 לא נשאר שקט.scripts/reconcile_under_extracted_halacha.py:completedעם 0 הלכות למרות ≥3 מקטעי-נימוק → מאפס checkpoints +request_halacha_extraction(נתיב קנוני, G2). dry-run הראה 15 מועמדים (33572-08-18 עם 61 מקטעים, 4843/23 עם 54, ...). שמרני (≥3 → לא נוגע ב-remand לגיטימי; אפס אובדן כי 0 הלכות ממילא). יורץ אחרי הפריסה (כדי שהחילוץ-מחדש ירוץ עם תיקון-הליבה חי).מחוץ-לתחום (נדחה מנומק)
אטומיות-מלאה (
staging_run_id, extract-then-swap) — דורשת מיגרציית-סכמה + שינוי hot-path של dedup. נדחתה: PR #257 כבר מיתן את ה-trigger (cooldown על 429-טרי), ו-(b)+resume מונעים אובדן-קבוע. נרשם כ-follow-up.בדיקות
test_claude_session_limit_notice(חדש) — מזהה refusal-prose, לא מזהה JSON-array/object, edge cases.undefined-names+leak-guardנקיים. (rebased על origin/main העדכני — אין קונפליקט עם #265/#266.)Invariants
checkpointמשקף השלמה-אמיתית; resume לא מדלג על chunk שנכשלchurn_ok)🤖 Generated with Claude Code