feat(pipeline): עמידות (LangGraph) ל-final_halacha (P0, X16/INV-DUR1, #114) #178

Merged
chaim merged 1 commits from worktree-langgraph-durable-pipeline into main 2026-06-10 09:53:07 +00:00
Owner

מה ולמה

P0 (X16). מביא durable execution לפייפליין-אימות-ההלכות: קריסה/OOM בפאנל הארוך [3] ממשיכה מ-[3] במקום להריץ מחדש את [0]–[2] (מניע: סיכון OOM מ-task-master). תלוי ב-#108 (חילוץ אטומי) שכבר מוזג.

  • scripts/_pipeline_runtime.py — runtime עמידות משותף (G2): עוטף צעדים-async ב-LangGraph StateGraph ליניארי עם AsyncSqliteSaver (checkpoint לכל צעד; resume מדלג על שהושלמו). degradation חיננית — ללא langgraph רץ ליניארי כמו קודם, הכפתור לא נשבר.
  • final_halacha_pipeline.py — 4 הצעדים דרך ה-runtime; CLI זהה + --fresh (ברירת-מחדל auto-resume). thread יציב לכל תיק; dry-run = preview נפרד.
  • pyproject — extra durable (host-only, optional). data/checkpoints/ ב-gitignore.

גבול (X16 §1): LangGraph כמנוע-פנימי בלבד — לא orchestrator (לא מסלול מקביל ל-Paperclip; G2/G12). HITL נשאר בשערי-היו"ר.

Invariants — הצהרה (חובה)

  • נוגע / מקיים: INV-DUR1 (עמידות) · G2 (runtime יחיד לשני הפייפליינים; LangGraph לא-orchestrator) · G3 (idempotency מחוזק ל-checkpoint+resume).

צ'קליסט — פרוטוקול כתיבת-קוד

  • קראתי X16 + final_halacha הקיים
  • לא יוצר מסלול מקביל (G2) — runtime יחיד, fallback ולא capability כפול
  • אין בליעה שקטה — צעדים מייעצים מתעדים שגיאה; פאנל מפיל→checkpoint
  • בדקתי מול X16 — זהו P0
  • בדיקות עוברות

אימות

test_pipeline_runtime.py:
  עם langgraph (venv זמני)  → 3 passed (resume מדלג שהושלמו · fresh מריץ-מחדש · linear)
  בלי langgraph (venv משותף) → 1 passed + 2 skipped (degradation חיננית)
probes (API אמיתי langgraph 1.2.4): resume(ainvoke None) לא מריץ צעד-שהושלם; --fresh מנקה thread
final_halacha_pipeline → py_compile OK; מיובא נקי בשני המצבים (lazy import של langgraph)

⚠️ הפעלת עמידות בייצור (לא חלק מה-merge): cd mcp-server && pip install -e ".[durable]" בעץ הראשי (host-only — הפייפליין local-only). עד אז = ריצה ליניארית. הרצת kill/resume מקצה-לקצה על הפייפליין החי (DB+LLM) מומלצת לאחר ההתקנה.

🤖 Generated with Claude Code

## מה ולמה P0 (X16). מביא **durable execution** לפייפליין-אימות-ההלכות: קריסה/OOM בפאנל הארוך [3] **ממשיכה מ-[3]** במקום להריץ מחדש את [0]–[2] (מניע: סיכון OOM מ-task-master). תלוי ב-#108 (חילוץ אטומי) שכבר מוזג. - **`scripts/_pipeline_runtime.py`** — runtime עמידות משותף (G2): עוטף צעדים-async ב-LangGraph `StateGraph` ליניארי עם `AsyncSqliteSaver` (checkpoint לכל צעד; resume מדלג על שהושלמו). **degradation חיננית** — ללא langgraph רץ ליניארי כמו קודם, הכפתור לא נשבר. - **`final_halacha_pipeline.py`** — 4 הצעדים דרך ה-runtime; **CLI זהה** + `--fresh` (ברירת-מחדל auto-resume). thread יציב לכל תיק; dry-run = preview נפרד. - **`pyproject`** — extra `durable` (host-only, optional). `data/checkpoints/` ב-gitignore. **גבול (X16 §1):** LangGraph כמנוע-פנימי בלבד — לא orchestrator (לא מסלול מקביל ל-Paperclip; G2/G12). HITL נשאר בשערי-היו"ר. ## Invariants — הצהרה (חובה) - **נוגע / מקיים:** **INV-DUR1** (עמידות) · **G2** (runtime יחיד לשני הפייפליינים; LangGraph לא-orchestrator) · **G3** (idempotency מחוזק ל-checkpoint+resume). ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי X16 + final_halacha הקיים - [x] לא יוצר מסלול מקביל (G2) — runtime יחיד, fallback ולא capability כפול - [x] אין בליעה שקטה — צעדים מייעצים מתעדים שגיאה; פאנל מפיל→checkpoint - [x] בדקתי מול X16 — זהו P0 - [x] בדיקות עוברות ## אימות ``` test_pipeline_runtime.py: עם langgraph (venv זמני) → 3 passed (resume מדלג שהושלמו · fresh מריץ-מחדש · linear) בלי langgraph (venv משותף) → 1 passed + 2 skipped (degradation חיננית) probes (API אמיתי langgraph 1.2.4): resume(ainvoke None) לא מריץ צעד-שהושלם; --fresh מנקה thread final_halacha_pipeline → py_compile OK; מיובא נקי בשני המצבים (lazy import של langgraph) ``` ⚠️ **הפעלת עמידות בייצור** (לא חלק מה-merge): `cd mcp-server && pip install -e ".[durable]"` בעץ הראשי (host-only — הפייפליין local-only). עד אז = ריצה ליניארית. הרצת kill/resume מקצה-לקצה על הפייפליין החי (DB+LLM) מומלצת לאחר ההתקנה. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-10 09:53:01 +00:00
scripts/_pipeline_runtime.py — runtime עמידות משותף: עוטף רשימת-צעדים async ב-LangGraph
StateGraph ליניארי עם AsyncSqliteSaver (checkpoint לכל צעד). קריסה/OOM ממשיכה מהצעד
שנכשל במקום להריץ הכל מחדש. degradation חיננית: ללא langgraph → ריצה ליניארית כמו קודם
(הכפתור לא נשבר). מימוש אחד לשני הפייפליינים (G2).

final_halacha_pipeline.py — 4 הצעדים ([0]extract [1]citations [2]corroboration [3]panel)
רצים דרך ה-runtime. CLI זהה + --fresh (ברירת-מחדל auto-resume). thread יציב לכל תיק;
dry-run = preview נפרד (תמיד fresh). קריסה בפאנל [3] → resume מ-[3] (steps 0-2 שמורים).

pyproject: extra "durable" (langgraph + langgraph-checkpoint-sqlite) — host-only,
optional. data/checkpoints/ ב-.gitignore.

גבול (X16 §1): LangGraph רק כמנוע-פנימי של הסקריפט — לא orchestrator (לא מסלול מקביל
ל-Paperclip; G2/G12). #108 (atomic extract) קדם לזה כתנאי.

אימות: test_pipeline_runtime.py — עם langgraph (venv-זמני): 3 passed (resume מדלג צעדים
שהושלמו · fresh מריץ-מחדש · linear). בלי langgraph (venv משותף): 1 passed + 2 skipped
(degradation). final_halacha מתקמפל ומיובא נקי בשני המצבים. הרצה end-to-end על הפייפליין
החי (DB+LLM) — לאחר `pip install -e ".[durable]"` בעץ הראשי.

Invariants: INV-DUR1 (עמידות), G2 (runtime יחיד), G3 (idempotency מחוזק).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit f5650196b7 into main 2026-06-10 09:53:07 +00:00
chaim deleted branch worktree-langgraph-durable-pipeline 2026-06-10 09:53:07 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#178