fix(ops): שרת ה-MCP עובר ל-S3 — סוגר את דריפט האחסון מול הקונטיינר #467

Merged
chaim merged 1 commits from worktree-mcp-s3 into main 2026-08-05 14:03:51 +00:00
Owner

מסמך שסוכן כתב דרך MCP נחת על הדיסק בעוד ה-web חיפש אותו ב-S3 — שני מסלולים לאותו נכס (G2 / INV-STG1).

שני חסמים שהתגלו בדרך:

  1. הסודות לא היו במקור-האמתMINIO_ENDPOINT/ACCESS_KEY/SECRET_KEY חיו רק ב-Coolify. נוצרו ב-Infisical /apps/legal-ai (tag credentials, באישור חיים), נטענים ל-~/.legal-mcp-http.env כמו MCP_HTTP_SHARED_SECRET. הערכים עברו ב-stdin — לא ב-argv ולא בהיסטוריה.
  2. aioboto3 לא היה מותקן ב-venv — מוצהר ב-pyproject אך חסר. מסלול ה-S3 מייבא אותו עצלנית, כך שהשירות היה עולה יפה ונשבר רק בפעולת-הקובץ הראשונה. כשל שקט עד לשימוש — בדיוק למה הבדיקה רצה לפני ההפעלה.

אימות מהמארח: put/get/delete מלא מול https://s3.nautilus.marcusgroup.org + קריאת בלוב-ייצור קיים (573KB) מתוך 2,283 אובייקטים.

ה-runbook: בלוק-האזהרה הוחלף בתיעוד המצב הסגור, עם מלכודת הייבוא-העצל ופקודת-אימות להעתקה.

invariants: G2 · INV-STG1 · §6

מסמך שסוכן כתב דרך MCP נחת על הדיסק בעוד ה-web חיפש אותו ב-S3 — שני מסלולים לאותו נכס (G2 / INV-STG1). **שני חסמים שהתגלו בדרך:** 1. **הסודות לא היו במקור-האמת** — `MINIO_ENDPOINT`/`ACCESS_KEY`/`SECRET_KEY` חיו רק ב-Coolify. נוצרו ב-Infisical `/apps/legal-ai` (tag `credentials`, באישור חיים), נטענים ל-`~/.legal-mcp-http.env` כמו `MCP_HTTP_SHARED_SECRET`. הערכים עברו ב-stdin — לא ב-argv ולא בהיסטוריה. 2. **`aioboto3` לא היה מותקן ב-venv** — מוצהר ב-pyproject אך חסר. מסלול ה-S3 מייבא אותו **עצלנית**, כך שהשירות היה עולה יפה ונשבר רק בפעולת-הקובץ הראשונה. כשל שקט עד לשימוש — בדיוק למה הבדיקה רצה **לפני** ההפעלה. **אימות מהמארח:** put/get/delete מלא מול `https://s3.nautilus.marcusgroup.org` + קריאת בלוב-ייצור קיים (573KB) מתוך **2,283** אובייקטים. ה-runbook: בלוק-האזהרה הוחלף בתיעוד המצב הסגור, עם מלכודת הייבוא-העצל ופקודת-אימות להעתקה. **invariants:** G2 · INV-STG1 · §6
chaim added 1 commit 2026-08-05 14:03:37 +00:00
fix(ops): שרת ה-MCP עובר ל-S3 — סוגר את דריפט האחסון מול הקונטיינר
All checks were successful
INV-AG3 Agent Tool Grants / agent-tool-grants (pull_request) Successful in 5s
G12 Leak-Guard / leak-guard (pull_request) Successful in 5s
Lint — undefined names / undefined-names (pull_request) Successful in 12s
adb9586055
הקונטיינר רץ `STORAGE_BACKEND=s3` ושרת ה-MCP נפל ל-`filesystem`. כלומר
מסמך שסוכן כתב דרך MCP נחת על הדיסק בעוד ה-web חיפש אותו ב-S3 — שני
מסלולים לאותו נכס, שמתפצלים בשקט (G2 / INV-STG1).

מה נדרש כדי לסגור, ומה נמצא בדרך
- **הסודות לא היו קיימים במקור-האמת.** `MINIO_ENDPOINT`/`ACCESS_KEY`/
  `SECRET_KEY` חיו רק ב-env של Coolify. נוצרו ב-Infisical תחת
  `/apps/legal-ai` (tag `credentials`, באישור חיים) ונטענים
  ל-`~/.legal-mcp-http.env` — אותו דפוס כמו MCP_HTTP_SHARED_SECRET.
  הערכים עברו ב-stdin דרך infisical-set.sh; לא ב-argv ולא בהיסטוריה.
- **`aioboto3` לא היה מותקן ב-venv המקומי.** מוצהר ב-pyproject אך חסר.
  מסלול ה-S3 מייבא אותו **עצלנית**, ולכן השירות היה עולה בהצלחה ונשבר
  רק בפעולת-הקובץ הראשונה — כשל שקט עד לשימוש. זו בדיוק הסיבה שהבדיקה
  רצה לפני ההפעלה ולא אחריה.

אימות מהמארח לפני ההפעלה: put/get/delete מלא מול
https://s3.nautilus.marcusgroup.org, וקריאת בלוב-ייצור קיים
(573KB) מתוך 2,283 אובייקטים בדלי.

ה-runbook עודכן: בלוק-האזהרה הוחלף בתיעוד המצב הסגור, כולל מלכודת
הייבוא-העצל ופקודת-אימות שאפשר להעתיק.

invariants: G2 (מסלול-אחסון אחד לשתי הדלתות) · INV-STG1 · §6
chaim merged commit 50e3fa4023 into main 2026-08-05 14:03:51 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ezer-mishpati/legal-ai#467