fix: exclude exported cases from stale; add weekly-feedback-job handler to CEO
All checks were successful
Build & Deploy / build-and-deploy (push) Successful in 8s

- /api/cases/stale: exclude 'exported' status — exported cases await Dafna's
  review intentionally, they are not stuck
- legal-ceo.md: add routing for weekly-feedback-job reason + explicit handler
  (analyze feedback, update decision-lessons.md, close issue)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-17 10:35:39 +00:00
parent a3468d5b2f
commit 8dc7a40fa2
2 changed files with 22 additions and 2 deletions

View File

@@ -161,6 +161,7 @@ Paperclip חוסם אוטומטית כל issue ב-`in_progress` שאין לו ru
- אם ה-reason מכיל `user_commented`**דלג ישירות לסעיף "טיפול בתגובות חדשות מחיים"**. אל תסרוק תיקים אחרים, אל תבדוק issues, אל תעשה heartbeat רגיל. **טפל רק בתגובה.**
- אם ה-reason מכיל `agent_completion` → דלג לשלב E/F בהתאם לסוכן שסיים
- אם ה-reason מכיל `precedent_extraction_`**דלג לסעיף "חילוץ פסיקה אוטומטי"**. אל תיגע בתיקים — זו עבודת ספרייה.
- אם ה-reason מכיל `weekly-feedback-job`**דלג לסעיף "ניתוח פידבק שבועי"**. אל תיגע בתיקים פעילים.
- אחרת → המשך לשלב A (heartbeat רגיל)
### חילוץ פסיקה אוטומטי
@@ -187,6 +188,25 @@ Paperclip חוסם אוטומטית כל issue ב-`in_progress` שאין לו ru
**אל**: אל תיצור issues של ביצוע בתיקי ערר, אל תיכנס לתהליך כתיבת החלטה — זו רק עבודת תחזוקה של ספריית הפסיקה.
### ניתוח פידבק שבועי (weekly-feedback-job)
**מתי:** `$PAPERCLIP_WAKE_REASON` מכיל `weekly-feedback-job`
ה-prompt שתקבל מכיל סיכום של כל הפידבק מיו"ר מהשבוע האחרון, בפורמט:
```
- תיק X (קטגוריה): טקסט הפידבק
- תיק Y (קטגוריה): ...
```
**מה לעשות:**
1. **קרא את `docs/legal-decision-lessons.md`** — הבן מה כבר מתועד שם.
2. **נתח את הפידבק** — אילו דפוסים חוזרים? מה חדש שלא מופיע בלקחים?
3. **עדכן את `docs/legal-decision-lessons.md`** — הוסף רק לקחים חדשים ומהותיים (לא כפל). כל לקח = משפט אחד ברור.
4. **פרסם comment על ה-issue** עם סיכום: כמה פידבק נסקר, כמה לקחים חדשים נוספו, מה הדפוס הבולט השבוע.
5. **סגור את ה-issue** (`status=done`).
**כלל:** אל תגע בתיקים פעילים, אל תעיר סוכנים אחרים, אל תבצע heartbeat רגיל — זו משימת תחזוקה בלבד.
### שלב A: בדיקת מצב — שלמות, בדיקות שליליות, תאימות מתודולוגיה
בכל heartbeat **רגיל** (לא comment routing):

View File

@@ -1137,7 +1137,7 @@ async def list_cases(
@app.get("/api/cases/stale")
async def api_stale_cases(days: int = 3):
"""Return cases that haven't been updated in N days and are not in 'final' or 'new' status."""
"""Return cases that haven't been updated in N days and are not in a terminal/waiting status."""
if days <= 0:
return {"cases": [], "total": 0}
pool = await db.get_pool()
@@ -1147,7 +1147,7 @@ async def api_stale_cases(days: int = 3):
SELECT case_number, title, status,
EXTRACT(DAY FROM (now() - updated_at))::int AS days_stale
FROM cases
WHERE status NOT IN ('final', 'new')
WHERE status NOT IN ('final', 'new', 'exported')
AND updated_at < now() - make_interval(days => $1)
ORDER BY updated_at ASC -- oldest stale first (longest overdue = highest priority)
""",