feat(mcp): FU-14 GAP-48 פרוסה 1 — envelope אחיד (SSoT) + משפחת-חיפוש #71
Reference in New Issue
Block a user
Delete Branch "fix/fu14-gap48-envelope-ssot"
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?
מה
תחילת המיגרציה של 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 עוברים.Invariants
_ok/_err).עבודה ב-worktree מבודד
בוצע ב-
~/legal-ai-wt-gap48לפי הכלל החדש (PR #68) — לא בעץ המשותף.🤖 Generated with Claude Code
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>