feat(health): טקסונומיית-בריאות לסוכן — zombie/stalled/working/idle (#222) #406

Merged
chaim merged 1 commits from worktree-agent-health into main 2026-07-07 03:06:38 +00:00
Owner

מה

פרוסה ראשונה של #222 (למידה מ-Gastown gt feed --problems): טקסונומיית-בריאות שממפה כל issue פתוח+משויך-סוכן למצב-בריאות חד — כדי שה-stranded-child / recovery-loop שאובחנו ידנית (reference_recovery_loop_stranded_child) יעלו אוטומטית. מרכיב ישירות על אירועי #219 (אותם reason של recovery).

איך

  • web/agent_health.py — מסווג-טהור classify_issue_health(has_live_run, recovery_wakeups, total_wakeups) (agent-agnostic, ללא-I/O, testable) + is_recovery_reason (סמני-loop מיומני-התקלות).
    • working = run חי · zombie = אין run חי + wakeup-recovery (assigned+active-כביכול אך כלום לא רץ) · stalled = ננער חוזר בלי progress · idle = המתנה בנונית.
  • paperclip_client.get_agent_health() (מעטפת) — גוזר את 3 הפרימיטיבים מ-heartbeat_runs (finished_at IS NULL בחלון 30ד') + agent_wakeup_requests (total+recovery בחלון 2ש'), מסווג, מחזיר worst-first + counts. read-only, scoped ל-2 החברות.
  • Port: pc_get_agent_health (read-only — לא עטוף-טלמטריה, לפי הכלל). endpoint: GET /api/operations/agents/health.

Invariants

  • G12/INV-PORT1 — המסווג agent-agnostic (ליבה); ה-fetch במעטפת; המגע מהשער.
  • G2 — מקור-בריאות יחיד; לא מסלול מקביל.

בדיקות

web/tests/test_agent_health.py — 7 (מסווג-טהור לכל 4 המצבים + is_recovery_reason + fetch fake-asyncpg שמסווג וממיין). . אומת חי read-only מול Paperclip DB: 6 issues פתוחים→idle נכון, אפס zombie (מערכת בריאה כרגע).

follow-up מגודר-עיצוב

צריכת-ה-UI ב-/operations (צ'יפ-בריאות/תצוגת-problems) חייבת קודם שער-Claude-Design (feedback_claude_design_gate) — לא בפרוסה זו.

🤖 Generated with Claude Code

## מה פרוסה ראשונה של **#222** (למידה מ-Gastown `gt feed --problems`): **טקסונומיית-בריאות** שממפה כל issue פתוח+משויך-סוכן למצב-בריאות חד — כדי שה-stranded-child / recovery-loop שאובחנו **ידנית** ([[reference_recovery_loop_stranded_child]]) יעלו אוטומטית. מרכיב ישירות על אירועי **#219** (אותם `reason` של recovery). ## איך - **`web/agent_health.py`** — מסווג-טהור `classify_issue_health(has_live_run, recovery_wakeups, total_wakeups)` (agent-agnostic, ללא-I/O, testable) + `is_recovery_reason` (סמני-loop מיומני-התקלות). - `working` = run חי · `zombie` = אין run חי + wakeup-recovery (assigned+active-כביכול אך כלום לא רץ) · `stalled` = ננער חוזר בלי progress · `idle` = המתנה בנונית. - **`paperclip_client.get_agent_health()`** (מעטפת) — גוזר את 3 הפרימיטיבים מ-`heartbeat_runs` (`finished_at IS NULL` בחלון 30ד') + `agent_wakeup_requests` (total+recovery בחלון 2ש'), מסווג, מחזיר worst-first + `counts`. read-only, scoped ל-2 החברות. - **Port**: `pc_get_agent_health` (read-only — **לא** עטוף-טלמטריה, לפי הכלל). **endpoint**: `GET /api/operations/agents/health`. ## Invariants - **G12/INV-PORT1** — המסווג agent-agnostic (ליבה); ה-fetch במעטפת; המגע מהשער. - **G2** — מקור-בריאות יחיד; לא מסלול מקביל. ## בדיקות `web/tests/test_agent_health.py` — 7 (מסווג-טהור לכל 4 המצבים + `is_recovery_reason` + fetch fake-asyncpg שמסווג וממיין). ✅. **אומת חי read-only** מול Paperclip DB: 6 issues פתוחים→`idle` נכון, אפס zombie (מערכת בריאה כרגע). ## follow-up מגודר-עיצוב צריכת-ה-UI ב-/operations (צ'יפ-בריאות/תצוגת-problems) חייבת קודם שער-Claude-Design ([[feedback_claude_design_gate]]) — לא בפרוסה זו. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-07-07 03:05:41 +00:00
feat(health): טקסונומיית-בריאות לסוכן — zombie/stalled/working/idle (#222)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 31s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
bfc352c7b5
מוסיף web/agent_health.py — מסווג-טהור classify_issue_health (agent-agnostic,
testable) שממפה כל issue פתוח+משויך-סוכן למצב-בריאות אחד, ו-get_agent_health
ב-paperclip_client שגוזר את הפרימיטיבים מ-heartbeat_runs (run חי=finished_at null
בחלון) + agent_wakeup_requests (total + recovery-markers בחלון). מרכיב על אירועי
#219 (אותם reasons של recovery).

- zombie = פתוח+משויך-סוכן, אין run חי, יש wakeup-recovery → הstranded-child שאובחן
  ידנית (reference_recovery_loop_stranded_child) עולה אוטומטית.
- stalled = ננער חוזר בלי progress; working = run חי; idle = המתנה בנונית.
- Port: pc_get_agent_health (read-only, לא עטוף-טלמטריה לפי הכלל); endpoint
  GET /api/operations/agents/health (worst-first, +counts).
- 7 בדיקות pytest (מסווג-טהור + fetch fake-asyncpg). אומת חי read-only מול
  Paperclip DB: 6 issues→idle נכון, אפס zombie.

Invariants: מקיים G12 (מסווג אגנוסטי; fetch מהמעטפת; המגע מהשער), G2 (מקור-בריאות
יחיד). UI ב-/operations = follow-up מגודר-שער-עיצוב (feedback_claude_design_gate).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chaim merged commit 00d362ec5d into main 2026-07-07 03:06:38 +00:00
chaim deleted branch worktree-agent-health 2026-07-07 03:06:38 +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#406