All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 7s
The agents used /api/agents/{id}/wake (404) with a fallback of INSERT
INTO agent_wakeup_requests. The DB insert creates only the wakeup
record without a heartbeat_run, so the Paperclip dispatcher never
processes it — agents get stuck in queued forever.
Fix:
- All agents: /wake → /wakeup (correct Paperclip API endpoint)
- Remove all DB INSERT fallbacks, replace with warning
- Document the rule in CLAUDE.md: always API, never DB insert
- Save to memory for future conversations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
141 lines
9.5 KiB
Markdown
141 lines
9.5 KiB
Markdown
# עוזר משפטי — Legal Decision Assistant
|
||
|
||
## רקע הפרויקט
|
||
|
||
מערכת AI לסיוע בכתיבת החלטות של **ועדת ערר לתכנון ובניה, מחוז ירושלים**, בראשות **עו"ד דפנה תמיר**.
|
||
|
||
### מה עושה ועדת ערר?
|
||
ועדת ערר היא גוף מעין-שיפוטי שדן בעררים על החלטות ועדות מקומיות לתכנון ובניה. הוועדה מקבלת חומרי מקור (כתבי ערר, תגובות, פרוטוקולים, תכניות), דנה בטענות הצדדים, ומוציאה **החלטה כתובה מנומקת** — מסמך משפטי פורמלי שניתן לביקורת שיפוטית בבית משפט לעניינים מנהליים.
|
||
|
||
### שלושה סוגי עררים
|
||
| סוג | מספרי תיקים | טון | מאפיין |
|
||
|-----|-------------|-----|--------|
|
||
| רישוי ובנייה | 1xxx | חם יחסית | הקשר תכנוני רחב, אלמנטים אנושיים |
|
||
| היטל השבחה | 8xxx | קר ומקצועי | יבש, ללא רגשות |
|
||
| פיצויים (ס' 197) | 9xxx | קר ומקצועי | דומה להיטל השבחה |
|
||
|
||
### מטרת המערכת
|
||
לבנות כלי עבודה שמסייע ליו"ר הוועדה לנסח החלטות:
|
||
1. **ניהול תיקים** — ייבוא חומרי מקור, סיווג מסמכים, מעקב סטטוס
|
||
2. **בסיס ידע** — פסיקה, ביטויי מעבר, לקחים מהחלטות קודמות, חקיקה
|
||
3. **חיפוש סמנטי (RAG)** — מציאת תקדימים רלוונטיים ופסקאות דומות
|
||
4. **סיוע בכתיבה** — ייצור טיוטות לפי ארכיטקטורת 12 בלוקים בסגנון דפנה
|
||
5. **ייצוא DOCX** — מסמך מעוצב מוכן להגשה
|
||
|
||
### מה היה קודם (Legacy)
|
||
המערכת הקודמת היתה **Obsidian vault** עם Claude Code skills על שרת אחר. פותחו:
|
||
- ניתוח סגנון של 3 החלטות (הכט — דחייה, בית הכרם — קבלה חלקית, אריאלי — השוואה)
|
||
- ארכיטקטורת 12 בלוקים מבוססת CREAC / DITA / Akoma Ntoso / Federal Judicial Center
|
||
- כללי כתיבה (רקע ניטרלי, ללא כפילות, טענות מקוריות בלבד)
|
||
- לקחים מהשוואת טיוטות לגרסאות סופיות
|
||
- סקריפט ייצוא DOCX
|
||
|
||
כל החומר הועבר לתיקיית `legacy/` כקריאה בלבד. **הפרויקט הנוכחי** מעביר את הידע הזה למערכת מובנית עם PostgreSQL + pgvector + n8n.
|
||
|
||
---
|
||
|
||
## מסמכי ייחוס
|
||
|
||
| מסמך | תוכן | מתי לקרוא |
|
||
|------|-------|-----------|
|
||
| [`docs/architecture.md`](docs/architecture.md) | ארכיטקטורת המערכת, תרשים רכיבים, זרימת נתונים, 4 שכבות DB | לפני עבודה על תשתית |
|
||
| [`docs/block-schema.md`](docs/block-schema.md) | הגדרת 12 בלוקים — content model, constraints, processing params | **לפני כל כתיבת החלטה** |
|
||
| [`docs/migration-plan.md`](docs/migration-plan.md) | תוכנית מעבר vault → DB — טבלאות, עדיפויות, כמויות | לפני ייבוא נתונים |
|
||
| [`docs/legal-decision-lessons.md`](docs/legal-decision-lessons.md) | לקחים מ-3 החלטות — מה עבד, מה השתנה, ביטויי מעבר חדשים | **לפני כל כתיבת החלטה** |
|
||
| [`docs/decision-methodology.md`](docs/decision-methodology.md) | **מתודולוגיה אנליטית — איך לחשוב על החלטה מעין-שיפוטית** | **לפני כל כתיבת החלטה** |
|
||
| [`docs/corpus-analysis.md`](docs/corpus-analysis.md) | ניתוח שיטתי של 24 החלטות — מפת תוכן, דפוסי דיון תכנוני, פערים | **לפני כל כתיבת החלטה** |
|
||
| [`docs/memory.md`](docs/memory.md) | הקשר כללי — skills, פרויקטים שהושלמו, מבנה vault | להתמצאות כללית |
|
||
| [`skills/decision/SKILL.md`](skills/decision/SKILL.md) | מדריך סגנון מלא של דפנה — טון, מבנה, ביטויים, מתודולוגיה | **לפני כל כתיבת החלטה** |
|
||
|
||
---
|
||
|
||
## שרת Nautilus (158.178.131.193)
|
||
|
||
| שירות | תפקיד | כתובת |
|
||
|-------|--------|-------|
|
||
| Coolify | ניהול containers | `http://158.178.131.193:8000` |
|
||
| PostgreSQL + pgvector | בסיס נתונים ראשי | `legal-ai-postgres` |
|
||
| Redis | תור משימות | `legal-ai-redis` |
|
||
| n8n | אוטומציית workflows | להגדרה |
|
||
| Gitea | מאגר קוד | `gitea.nautilus.marcusgroup.org/ezer-mishpati` |
|
||
| ezer-mishpati-web | ממשק העלאת מסמכים (Docker/Coolify) | `legal-ai.nautilus.marcusgroup.org` |
|
||
| Paperclip | סוכן AI — מריץ Claude Code agents (pm2, מקומי) | `localhost:3100` |
|
||
| Infisical | ניהול סודות | `secret.dev.marcus-law.co.il` |
|
||
|
||
---
|
||
|
||
## מבנה תיקיות
|
||
|
||
```
|
||
/home/chaim/legal-ai/
|
||
├── CLAUDE.md ← הקובץ הזה
|
||
├── Dockerfile ← Docker build
|
||
├── docs/ ← תיעוד + לקחים
|
||
│ ├── architecture.md ארכיטקטורה
|
||
│ ├── block-schema.md 12 בלוקים (המסמך החשוב ביותר)
|
||
│ ├── migration-plan.md תוכנית מעבר vault → DB
|
||
│ ├── legal-decision-lessons.md לקחים מ-3 החלטות
|
||
│ └── memory.md הקשר כללי — skills, פרויקטים
|
||
├── skills/ ← כלי עבודה ומדריכים
|
||
│ ├── decision/ מדריך סגנון + references + 12 בלוקים
|
||
│ ├── assistant/ קטלוג מסמכים
|
||
│ └── docx/ עיצוב DOCX
|
||
├── data/
|
||
│ ├── training/ ← 4 החלטות לאימון (DOCX)
|
||
│ ├── exports/ ← ייצוא legacy (תיקים ישנים)
|
||
│ └── cases/{case-number}/ ← תיקי עררים (מבנה שטוח, סטטוס ב-DB)
|
||
├── web/ ← UI + API + integration clients
|
||
├── mcp-server/ ← MCP server + services + tools
|
||
└── scripts/ ← סקריפטים וכלי עזר
|
||
```
|
||
|
||
---
|
||
|
||
## ניהול משימות — TaskMaster AI
|
||
|
||
הפרויקט משתמש ב-**TaskMaster AI** (MCP server) לניהול משימות מובנה:
|
||
- **תמיד** להשתמש ב-TaskMaster לפירוק, מעקב וניהול משימות — לא ב-TASKS.md ידני
|
||
- קובץ המשימות: `tasks/tasks.json`
|
||
- פקודות עיקריות: `get_tasks`, `next_task`, `add_task`, `update_task`, `expand_task`
|
||
- לפני התחלת עבודה → `next_task` כדי לדעת מה הבא לפי תלויות
|
||
- אחרי סיום משימה → `update_task` עם status=done
|
||
- משימה מורכבת → `expand_task` לפירוק לתתי-משימות
|
||
|
||
---
|
||
|
||
## Paperclip — כללי אינטגרציה קריטיים
|
||
|
||
### Wakeup API — תמיד דרך API, לעולם לא דרך DB
|
||
- **הנתיב הנכון**: `POST /api/agents/{agent-id}/wakeup` עם `{"source": "...", "reason": "..."}`
|
||
- **⚠️ אסור**: `INSERT INTO agent_wakeup_requests` ישירות — זה יוצר רק את הרשומה בטבלה בלי `heartbeat_run`, והסוכן **לא יתעורר לעולם**
|
||
- **הסיבה**: ה-dispatcher של Paperclip מעבד `heartbeat_runs`, לא `agent_wakeup_requests`. רק ה-API יוצר את שניהם אטומית
|
||
- **Board API Key**: שמור ב-DB (`board_api_keys`), מאפשר גישה ל-API מ-CLI
|
||
|
||
### ניתוב comments דרך CEO
|
||
- כשמשתמש כותב תגובה על issue ב-Paperclip, הפלאגין (`plugin-legal-ai`) מעיר את ה-CEO דרך `ctx.agents.invoke()`
|
||
- ה-CEO קורא את ה-comment, מחליט על ניתוב, ויוצר issue לסוכן המתאים
|
||
- כל הסוכנים חייבים לקרוא comments אחרונים לפני שהם מתחילים לעבוד (HEARTBEAT שלבים 2b-2c)
|
||
|
||
---
|
||
|
||
## עקרונות כתיבה קריטיים
|
||
|
||
1. **"מבחן השופט"** — כל החלטה חייבת להיות קריאה לשופט שלא מכיר את התיק
|
||
2. **"רקע ניטרלי"** — בלוק ו = עובדות בלבד. אין ציטוטים מצדדים, אין מילות שיפוט
|
||
3. **"ללא כפילות"** — בלוק י (דיון) מפנה לבלוקים קודמים, לא חוזר עליהם
|
||
4. **"טענות מקוריות בלבד"** — בלוק ז = מכתבי טענות מקוריים בלבד. השלמות → בלוק ח
|
||
5. **ארכיטקטורת 12 בלוקים** — ראה `docs/block-schema.md`
|
||
6. **צ'קליסט תוכן** — בלוק י מקבל צ'קליסט תוכן אוטומטי לפי סוג הערר (ראה `lessons.py: CONTENT_CHECKLISTS`)
|
||
|
||
## הערות יו"ר (Chair Feedback)
|
||
|
||
מנגנון לתיעוד הערות דפנה על טיוטות:
|
||
- **DB**: טבלת `chair_feedback` (case_id, block_id, feedback_text, category, lesson_extracted)
|
||
- **API**: `GET/POST /api/feedback`, `PATCH /api/feedback/{id}/resolve`
|
||
- **MCP tools**: `record_chair_feedback`, `list_chair_feedback`
|
||
- **UI**: דף ניהול ב-`/feedback` (ב-Next.js)
|
||
- **קטגוריות**: missing_content, wrong_tone, wrong_structure, factual_error, style, other
|
||
|
||
## יו"ר: עו"ד דפנה תמיר
|
||
- מדריך סגנון מלא: `skills/decision/SKILL.md`
|