feat(seance): predecessor by-case לצריכת-סוכן דרך ה-plugin (#220 המשך) #410

Merged
chaim merged 1 commits from worktree-predecessor-by-case into main 2026-07-07 05:09:13 +00:00
Owner

מה

צעד-Backend של follow-up #1 (predecessor לסוכנים). מוסיף נתיב by-case ל-predecessor כך שכלי-ה-plugin legal_predecessor_context (PR נפרד ב-plugin-legal-ai) יוכל לספק לסוכן "מה ריצות קודמות על התיק הסיקו" — הסוכנים חושבים ב-case_number, לא ב-issue-UUID.

איך

get_predecessor_for_case(case_number) — האח case-scoped של get_predecessor_context (by-issue): מזהה את פרויקט-התיק, ומחזיר summary של ריצות-heartbeat_runs שהסתיימו על-פני כל issues של התיק, newest-first, עם summary בלבד (ריצות cancelled ריקות מסוננות).

  • shaper משותף _shape_predecessor_run — נתיב-shaping יחיד ל-by-issue+by-case (G2).
  • join בטוח i.id::text = payload->>'issueId' (לא cast של payload חופשי ל-uuid — payload פגום לא שובר את ה-query).
  • Port pc_get_predecessor_for_case (read-only); endpoint GET /api/operations/cases/{case_number}/predecessor.

למה plugin ולא mcp→web

זו ההכרעה מהדיון: הכלי יחיה ב-plugin-legal-ai (המעטפת המוצהרת — מותר לה לדבר גם Paperclip וגם legal-ai web), לא ב-mcp-server (הליבה נשארת עיוורת-פלטפורמה, G12). ה-backend כאן הוא ה-endpoint הדומייני שהכלי יקרא.

בדיקות

18 pytest (2 חדשות: shaping+identifier, case-לא-נמצא).
אומת חי read-only: 1043-02-26/8125-09-24 → מסקנות-דיספוזיציה אמיתיות ("הפקתי את טיוטת-הביניים…", "The loop is now broken durably…").

המשך (מוצהר)

  • PR ב-plugin-legal-ai: כלי legal_predecessor_context(case_number) שקורא ל-endpoint (בונה npm build → plugin install → pm2 restart paperclip).
  • HEARTBEAT: הוראה לסוכן לקרוא בעת continuation (תוקף דרך host git pull) — אחרי שהכלי קיים.

🤖 Generated with Claude Code

## מה צעד-Backend של **follow-up #1** (predecessor לסוכנים). מוסיף נתיב **by-case** ל-predecessor כך שכלי-ה-plugin `legal_predecessor_context` (PR נפרד ב-`plugin-legal-ai`) יוכל לספק לסוכן "מה ריצות קודמות על התיק הסיקו" — הסוכנים חושבים ב-`case_number`, לא ב-issue-UUID. ## איך `get_predecessor_for_case(case_number)` — האח case-scoped של `get_predecessor_context` (by-issue): מזהה את פרויקט-התיק, ומחזיר `summary` של ריצות-`heartbeat_runs` שהסתיימו על-פני **כל issues של התיק**, newest-first, **עם summary בלבד** (ריצות cancelled ריקות מסוננות). - **shaper משותף** `_shape_predecessor_run` — נתיב-shaping יחיד ל-by-issue+by-case (G2). - **join בטוח** `i.id::text = payload->>'issueId'` (לא cast של payload חופשי ל-uuid — payload פגום לא שובר את ה-query). - **Port** `pc_get_predecessor_for_case` (read-only); **endpoint** `GET /api/operations/cases/{case_number}/predecessor`. ## למה plugin ולא mcp→web זו ההכרעה מהדיון: הכלי יחיה ב-**`plugin-legal-ai`** (המעטפת המוצהרת — מותר לה לדבר גם Paperclip וגם legal-ai web), **לא** ב-`mcp-server` (הליבה נשארת עיוורת-פלטפורמה, G12). ה-backend כאן הוא ה-endpoint הדומייני שהכלי יקרא. ## בדיקות 18 pytest (2 חדשות: shaping+identifier, case-לא-נמצא). ✅ **אומת חי read-only**: `1043-02-26`/`8125-09-24` → מסקנות-דיספוזיציה אמיתיות ("הפקתי את טיוטת-הביניים…", "The loop is now broken durably…"). ## המשך (מוצהר) - **PR ב-`plugin-legal-ai`**: כלי `legal_predecessor_context(case_number)` שקורא ל-endpoint (בונה `npm build` → plugin install → `pm2 restart paperclip`). - **HEARTBEAT**: הוראה לסוכן לקרוא בעת continuation (תוקף דרך host git pull) — אחרי שהכלי קיים. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-07-07 05:08:09 +00:00
feat(seance): predecessor by-case לצריכת-סוכן דרך ה-plugin (#220 המשך)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
ad04291d39
מוסיף get_predecessor_for_case(case_number) — האח case-scoped של
get_predecessor_context (by-issue). סוכנים חושבים ב-case_number (לא issue-UUID),
לכן זהו הנתיב שכלי-ה-plugin legal_predecessor_context (PR נפרד ב-plugin-legal-ai)
יקרא. מחזיר מסקנות (summary) של ריצות-heartbeat שהסתיימו על-פני issues של התיק,
newest-first, עם summary בלבד (ריצות cancelled ריקות מסוננות).

- shaper משותף _shape_predecessor_run (G2 — נתיב-shaping יחיד ל-by-issue+by-case).
- join בטוח i.id::text = payload->>'issueId' (לא cast של payload חופשי ל-uuid).
- Port pc_get_predecessor_for_case (read-only); endpoint
  GET /api/operations/cases/{case_number}/predecessor.
- 2 בדיקות (shaping+identifier, case-לא-נמצא). אומת חי: 1043-02-26/8125-09-24
  מחזירים מסקנות-דיספוזיציה אמיתיות.

Invariants: G12 (fetch מהמעטפת, המגע מהשער; הכלי יחיה ב-plugin=מעטפת מוצהרת, לא
ב-mcp-server), G2 (shaper יחיד). המשך: PR ב-plugin-legal-ai (כלי) + הוראת-HEARTBEAT.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chaim merged commit 7d1fc49e35 into main 2026-07-07 05:09:13 +00:00
chaim deleted branch worktree-predecessor-by-case 2026-07-07 05:09:13 +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#410