fix(X13): הקשחה נגד דליפת-זיכרון מדפדפנים + reaper ל-task-master-mcp #115

Merged
chaim merged 1 commits from worktree-court-fetch-harden into main 2026-06-07 19:44:27 +00:00
Owner

למה

בעקבות השאלה "האם לא תהיה דליפת-זיכרון?" — חיזוק שירות-האחזור (X13 Tier-1) נגד דפדפנים יתומים, + טיפול בדליפה הגדולה בפועל שהתגלתה בכיול: task-master-mcp.

שלוש שכבות-הגנה לשירות-האחזור

  1. async with AsyncCamoufox — סוגר את הדפדפן בכל exception (כבר היה).
  2. asyncio.wait_for קשיח (COURT_FETCH_HARD_TIMEOUT_S, ברירת-מחדל 180ש') סביב כל ה-fetch — דפדפן שנתקע מבוטל, ה-__aexit__ מפרק אותו.
  3. reaper של camoufox-bin יתומים (ppid=1) לפני ואחרי כל fetch (_reap_orphan_browsers). סדרתיות (INV-CF4) מבטיחה שכל ppid=1 הוא שארית בטוחה-להריגה.
    • תקרת max_memory_restart: 1.5G בשירות (כבר קיימת) = רשת-ביטחון ברמת-התהליך.

הדליפה הגדולה: task-master-mcp

תהליכי task-master-mcp (כלי TaskMaster) שמתייתמים (ppid=1) ומתנפחים ל~3GB כל אחד הם מה שהרווה את השרת בפועל (1.6Gi פנוי, swap מוצה) וקרס את הדפדפן בכיול.

  • scripts/reap_orphan_procs.py — reaper כללי: הורג task-master-mcp + camoufox-bin רק כשהם ppid=1 (תהליך עם הורה-חי לעולם לא נוגעים). /proc טהור (בלי psutil). --dry-run / --loop N.
  • scripts/legal-reaper.config.cjs — דמון pm2 (loop 180ש', max_memory_restart 100M).

בטיחות

ה-reaper נוגע רק ב-ppid=1 (יתומים). MCP-servers מחוברים (הורה = תוסף Claude, ~190MB) ודפדפן ש-fetch חי משתמש בו (הורה = ה-python) — לא נוגעים בהם.

אימות

  • compile + import; _reap_orphan_browsers() → 0 (אין יתומים כעת); find_orphans() → 0 (אין false-positives); --dry-run נקי.
  • עודכנו X13 spec (§5) + SCRIPTS.md.

התקנה (host)

pm2 start scripts/legal-reaper.config.cjs && pm2 save

🤖 Generated with Claude Code

## למה בעקבות השאלה "האם לא תהיה דליפת-זיכרון?" — חיזוק שירות-האחזור (X13 Tier-1) נגד דפדפנים יתומים, + טיפול בדליפה **הגדולה בפועל** שהתגלתה בכיול: `task-master-mcp`. ## שלוש שכבות-הגנה לשירות-האחזור 1. **`async with AsyncCamoufox`** — סוגר את הדפדפן בכל exception (כבר היה). 2. **`asyncio.wait_for` קשיח** (`COURT_FETCH_HARD_TIMEOUT_S`, ברירת-מחדל 180ש') סביב כל ה-fetch — דפדפן שנתקע מבוטל, ה-`__aexit__` מפרק אותו. 3. **reaper של `camoufox-bin` יתומים** (`ppid=1`) לפני **ו**אחרי כל fetch (`_reap_orphan_browsers`). סדרתיות (INV-CF4) מבטיחה שכל `ppid=1` הוא שארית בטוחה-להריגה. + תקרת `max_memory_restart: 1.5G` בשירות (כבר קיימת) = רשת-ביטחון ברמת-התהליך. ## הדליפה הגדולה: task-master-mcp תהליכי `task-master-mcp` (כלי TaskMaster) שמתייתמים (`ppid=1`) ומתנפחים ל~3GB כל אחד הם מה שהרווה את השרת בפועל (1.6Gi פנוי, swap מוצה) וקרס את הדפדפן בכיול. - **`scripts/reap_orphan_procs.py`** — reaper כללי: הורג `task-master-mcp` + `camoufox-bin` **רק כשהם `ppid=1`** (תהליך עם הורה-חי לעולם לא נוגעים). `/proc` טהור (בלי psutil). `--dry-run` / `--loop N`. - **`scripts/legal-reaper.config.cjs`** — דמון pm2 (loop 180ש', `max_memory_restart 100M`). ## בטיחות ה-reaper נוגע **רק** ב-`ppid=1` (יתומים). MCP-servers מחוברים (הורה = תוסף Claude, ~190MB) ודפדפן ש-fetch חי משתמש בו (הורה = ה-python) — לא נוגעים בהם. ## אימות - ✅ compile + import; `_reap_orphan_browsers()` → 0 (אין יתומים כעת); `find_orphans()` → 0 (אין false-positives); `--dry-run` נקי. - ✅ עודכנו X13 spec (§5) + SCRIPTS.md. ## התקנה (host) `pm2 start scripts/legal-reaper.config.cjs && pm2 save` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-07 19:44:20 +00:00
שלוש שכבות-הגנה נגד דליפת-זיכרון מדפדפנים יתומים, + טיפול בדליפה הגדולה
בפועל בשרת (task-master-mcp).

- camofox_client.py:
  - asyncio.wait_for קשיח סביב כל ה-fetch (COURT_FETCH_HARD_TIMEOUT_S=180ש')
    — hang → ביטול → async-with tear-down → reap.
  - _reap_orphan_browsers(): הורג camoufox-bin יתומים (ppid=1) לפני ואחרי כל
    fetch. סדרתיות (INV-CF4) → כל ppid=1 הוא שארית בטוחה.
- scripts/reap_orphan_procs.py: reaper כללי ל-task-master-mcp (~3GB יתומים)
  + camoufox-bin. רק ppid=1; /proc טהור. --dry-run / --loop N.
- scripts/legal-reaper.config.cjs: דמון pm2 (loop 180s, max_memory_restart 100M).
- X13 spec + SCRIPTS.md: תיעוד שכבות-ההגנה.

max_memory_restart בשירות (1.5G) כבר נותן רשת-ביטחון ברמת-התהליך.
Invariants: מקיים INV-CF4 (politeness/serial) — ללא שינוי חוזה.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit e82eeaad9f into main 2026-06-07 19:44:27 +00:00
chaim deleted branch worktree-court-fetch-harden 2026-06-07 19:44:27 +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#115