feat(web): Agent Platform Port — Paperclip מאחורי seam-import יחיד (R2, G12, #111) #175

Merged
chaim merged 1 commits from worktree-agent-platform-port into main 2026-06-10 09:28:46 +00:00
Owner

מה ולמה

R2 (G12). יוצר web/agent_platform_port.pyהמודול היחיד שמייבא web.paperclip_client/web.paperclip_api. app.py מייבא כעת אך-ורק מה-Port → 0 imports ישירים של paperclip_* (היפוך-תלות פנימה — Ports & Adapters / Dependency Rule). החלפת-פלטפורמה = מימוש-מחדש של מודול אחד, בלי לגעת ב-app.py.

שתי שכבות ב-Port:

  • side-effects של מחזור-חיים נחשפים גם בשם-דומיין (archive_case_project/restore_case_project/create_case_project/notify_case_status) — אירועי-הדומיין המומלצים לקוד חדש.
  • issue/interaction/comment/agent → re-export בשם pc_* (קריאות API, לא אירועים). מעבר מלא לפעלי-דומיין = follow-up; ה-import seam (החלק הניתן-לאכיפה של G12, שעליו יישב leak-guard ב-R4) מוחזק בכל מקרה.

שינוי import-only באתרי-הקריאה (app.py קורא לאותם שמות, כעת מה-Port) → אפס שינוי-התנהגות, regression מינימלי.

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

  • נוגע / מקיים: G12 (שער-הפלטפורמה — seam יחיד; app.py 0 imports ישירים) · G2 (מקור-אמת יחיד למגע-פלטפורמה).

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

  • קראתי 00-constitution + X15 + X7 (paperclip-client) + X3
  • לא יוצר מסלול מקביל (G2) — מרכז את המגע למודול אחד
  • אין בליעה שקטה — re-export שקוף, ללא שינוי-לוגיקה
  • בדקתי מול gap-audit/X15 — זהו R2
  • בדיקות עוברות (ראה אימות)

אימות

app.py imports ישירים של paperclip_client/api  →  0 (clean)
py_compile (port + app.py)                      →  OK
23 הסמלים ש-app.py מייבא נפתרים מה-Port          →  none missing
domain aliases (archive/restore/create/notify)  →  identity-wired ל-pc_*
import runtime של ה-Port (env דמה)              →  27 שמות ב-__all__ נפתרים
test_paperclip_access_guard                      →  5 passed

⚠️ deploy: legal-ai = Coolify Docker — ייכנס לתוקף לאחר build+deploy. שינוי import-only, ללא שינוי-API/סכמה.

🤖 Generated with Claude Code

## מה ולמה R2 (G12). יוצר `web/agent_platform_port.py` — **המודול היחיד שמייבא** `web.paperclip_client`/`web.paperclip_api`. `app.py` מייבא כעת **אך-ורק מה-Port** → 0 imports ישירים של paperclip_* (היפוך-תלות פנימה — Ports & Adapters / Dependency Rule). החלפת-פלטפורמה = מימוש-מחדש של מודול אחד, בלי לגעת ב-app.py. **שתי שכבות ב-Port:** - side-effects של מחזור-חיים נחשפים גם בשם-דומיין (`archive_case_project`/`restore_case_project`/`create_case_project`/`notify_case_status`) — אירועי-הדומיין המומלצים לקוד חדש. - issue/interaction/comment/agent → `re-export` בשם `pc_*` (קריאות API, לא אירועים). מעבר מלא לפעלי-דומיין = follow-up; ה-**import seam** (החלק הניתן-לאכיפה של G12, שעליו יישב leak-guard ב-R4) מוחזק בכל מקרה. **שינוי import-only** באתרי-הקריאה (app.py קורא לאותם שמות, כעת מה-Port) → אפס שינוי-התנהגות, regression מינימלי. ## Invariants — הצהרה (חובה) - **נוגע / מקיים:** **G12** (שער-הפלטפורמה — seam יחיד; app.py 0 imports ישירים) · **G2** (מקור-אמת יחיד למגע-פלטפורמה). ## צ'קליסט — פרוטוקול כתיבת-קוד - [x] קראתי 00-constitution + X15 + X7 (paperclip-client) + X3 - [x] לא יוצר מסלול מקביל (G2) — מרכז את המגע למודול אחד - [x] אין בליעה שקטה — re-export שקוף, ללא שינוי-לוגיקה - [x] בדקתי מול gap-audit/X15 — זהו R2 - [x] בדיקות עוברות (ראה אימות) ## אימות ``` app.py imports ישירים של paperclip_client/api → 0 (clean) py_compile (port + app.py) → OK 23 הסמלים ש-app.py מייבא נפתרים מה-Port → none missing domain aliases (archive/restore/create/notify) → identity-wired ל-pc_* import runtime של ה-Port (env דמה) → 27 שמות ב-__all__ נפתרים test_paperclip_access_guard → 5 passed ``` ⚠️ deploy: legal-ai = Coolify Docker — ייכנס לתוקף לאחר build+deploy. שינוי import-only, ללא שינוי-API/סכמה. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-10 09:28:41 +00:00
יוצר web/agent_platform_port.py כמודול היחיד שמייבא web.paperclip_client/paperclip_api.
app.py מייבא כעת אך-ורק מה-Port — 0 imports ישירים של paperclip_* (היפוך-תלות פנימה,
Ports & Adapters / Dependency Rule). החלפת-הפלטפורמה = מימוש-מחדש של מודול אחד.

שתי שכבות ב-Port: (א) side-effects של מחזור-חיים נחשפים גם בשם-דומיין
(archive_case_project/restore/create/notify_case_status — אירועי-הדומיין המומלצים
לקוד חדש); (ב) פעולות issue/interaction/comment/agent — re-export בשם pc_* (קריאות
API, לא אירועים). מעבר מלא לפעלי-דומיין = follow-up; ה-import seam (החלק הניתן-לאכיפה
ב-G12) מוחזק בכל מקרה.

שינוי import-only באתרי-הקריאה — אפס שינוי-התנהגות, regression מינימלי.

אימות: app.py 0 imports ישירים; py_compile OK; כל 23 הסמלים נפתרים מה-Port;
domain-aliases identity-wired; test_paperclip_access_guard 5 passed.

Invariants: G12 (שער-הפלטפורמה — seam יחיד), G2 (מקור-אמת יחיד למגע-פלטפורמה).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 8a2ae9921a into main 2026-06-10 09:28:46 +00:00
chaim deleted branch worktree-agent-platform-port 2026-06-10 09:28:47 +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#175