feat(mcp): FU-14 GAP-48 פרוסה 1 — envelope אחיד (SSoT) + משפחת-חיפוש #71

Merged
chaim merged 1 commits from fix/fu14-gap48-envelope-ssot into main 2026-06-06 16:32:33 +00:00
Owner

מה

תחילת המיגרציה של GAP-48 (INV-TOOL1 — envelope-תשובה עקבי). נוצר mcp-server/.../tools/envelope.py כמקור-אמת יחיד: ok/empty/err{status, data, message}, כש-status ∈ {ok, empty, error} מבחין מפורשות בין הצלחה, מצב-ריק, ושגיאה.

פרוסה 1 ממירה את משפחת-החיפוש (4 כלים): search_decisions, search_case_documents, find_similar_cases, search_internal_decisions.

למה

הכלים החזירו 3 מוסכמות סותרות — raw payload / {error} / {status,message} אד-הוק — + 5 עותקים משוכפלים של _ok/_err עם התנהגויות שונות. זה drift (G2) והפרת INV-TOOL1.

תאימות — חוזה-ה-API נשמר במלואו

web/app.py (/api/search, /api/cases/{}/search) מפרק את המעטפת דרך envelope_unwrap → תשובת-ה-HTTP זהה לקודם (list על hits, {"message"} על ריק/שגיאה). לכן web-ui לא מושפע.

החלטה הנדסית: הדרגתי, לא big-bang

מיפוי-צרכנים (סוכן Explore) הראה: server.py הוא pass-through, web-ui מבודד (/api/*), ורק 17 כלים מתוך 77 נצרכים ישירות מ-app.py. לכן מיגרציה לפי-משפחה ממזערת את הסיכון לסוכני-Paperclip החיים. ~73 כלים נותרו לפרוסות הבאות.

בדיקות

  • test_search_domain_scope עודכן לחוזה החדש — 5/5 עוברים.
  • collection של כל החבילה (182 טסטים) — אפס שגיאות-import.
  • compile נקי ל-envelope.py / search.py / web/app.py.

Invariants

  • מקדם INV-TOOL1 (envelope עקבי) + G2 (SSoT, ביטול כפילות _ok/_err).
  • מתועד ב-X9 INV-TOOL1 + gap-audit FU-14 פרוסה 5.

עבודה ב-worktree מבודד

בוצע ב-~/legal-ai-wt-gap48 לפי הכלל החדש (PR #68) — לא בעץ המשותף.

🤖 Generated with Claude Code

## מה תחילת המיגרציה של GAP-48 (INV-TOOL1 — envelope-תשובה עקבי). נוצר **`mcp-server/.../tools/envelope.py`** כמקור-אמת יחיד: `ok`/`empty`/`err` → `{status, data, message}`, כש-`status ∈ {ok, empty, error}` מבחין מפורשות בין הצלחה, מצב-ריק, ושגיאה. **פרוסה 1 ממירה את משפחת-החיפוש** (4 כלים): `search_decisions`, `search_case_documents`, `find_similar_cases`, `search_internal_decisions`. ## למה הכלים החזירו **3 מוסכמות סותרות** — raw payload / `{error}` / `{status,message}` אד-הוק — + **5 עותקים משוכפלים** של `_ok`/`_err` עם התנהגויות שונות. זה drift (G2) והפרת INV-TOOL1. ## תאימות — חוזה-ה-API נשמר במלואו `web/app.py` (`/api/search`, `/api/cases/{}/search`) **מפרק** את המעטפת דרך `envelope_unwrap` → תשובת-ה-HTTP **זהה** לקודם (list על hits, `{"message"}` על ריק/שגיאה). לכן **web-ui לא מושפע**. ## החלטה הנדסית: הדרגתי, לא big-bang מיפוי-צרכנים (סוכן Explore) הראה: `server.py` הוא pass-through, web-ui מבודד (`/api/*`), ורק **17 כלים** מתוך 77 נצרכים ישירות מ-app.py. לכן מיגרציה **לפי-משפחה** ממזערת את הסיכון לסוכני-Paperclip החיים. ~73 כלים נותרו לפרוסות הבאות. ## בדיקות - `test_search_domain_scope` עודכן לחוזה החדש — **5/5 עוברים**. - collection של כל החבילה (182 טסטים) — אפס שגיאות-import. - compile נקי ל-envelope.py / search.py / web/app.py. ## Invariants - **מקדם INV-TOOL1** (envelope עקבי) + **G2** (SSoT, ביטול כפילות `_ok`/`_err`). - מתועד ב-X9 INV-TOOL1 + gap-audit FU-14 פרוסה 5. ## עבודה ב-worktree מבודד בוצע ב-`~/legal-ai-wt-gap48` לפי הכלל החדש (PR #68) — לא בעץ המשותף. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-06 16:32:28 +00:00
INV-TOOL1: כלי-ה-MCP החזירו 3 מוסכמות סותרות (raw payload / {error} /
{status,message} אד-הוק) + 5 עותקי _ok/_err משוכפלים. נוצר tools/envelope.py
כמקור-אמת יחיד: ok/empty/err → {status,data,message}, כש-status מבחין
מפורשות הצלחה/ריק/שגיאה.

פרוסה 1 ממירה את משפחת-החיפוש (search_decisions, search_case_documents,
find_similar_cases, search_internal_decisions). web/app.py מפרק את המעטפת
דרך envelope_unwrap כדי לשמר את חוזה-ה-UI↔API (X6) ללא-שינוי — תשובת ה-HTTP
זהה (list על hits, {"message"} על ריק/שגיאה). טסט test_search_domain_scope
עודכן לחוזה החדש (5/5 עוברים).

החלטה: הדרגתי לפי-משפחה ולא big-bang. מפת-צרכנים: server.py pass-through,
web-ui מבודד (/api/*), רק 17 כלים נצרכים ישירות מ-app.py → סיכון מינימלי
לסוכנים החיים. ~73 כלים נותרו לפרוסות הבאות.

Invariants: מקדם INV-TOOL1 (envelope עקבי) + G2 (SSoT, ביטול כפילות _ok/_err).
לא נוגע ב-G1.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit f17e0e382a into main 2026-06-06 16:32:33 +00:00
chaim deleted branch fix/fu14-gap48-envelope-ssot 2026-06-06 16:32:33 +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#71