feat(watchdog): auto-escalation של zombie-loops ל-chair — סגירת הלולאה (#218+#222) #408

Merged
chaim merged 1 commits from worktree-zombie-auto-escalate into main 2026-07-07 03:38:31 +00:00
Owner

מה

ה-follow-up שמרכיב את 4 הפרוסות שמוזגו לclosed-loop אמיתי: לולאת-recovery → מזוהה (#222) → נמסרת-לאדם (#218) → נספרת (#219), במקום לשרוף budget עד שאדם שם לב. זה ה-watchdog של Gastown (Deacon), דרך ה-reaper הקיים — לא tier חדש.

איך

_zombie_escalation_loop ב-lifespan (כל 15 דק', לצד ה-reaper של #215):

  1. גוזר בריאות per-issue דרך pc_get_agent_health (#222).
  2. כל zombie מתמשך (לולאת-recovery, ≥ ZOMBIE_ESCALATE_MIN_RECOVERY=2 יקיצות-שחזור) → pc_escalate_issue הloop-safe (#218). הטלמטריה agent.escalated (#219) נדלקת מה-Port.
  • שרת-צדי בכוונה — סוכן תקוע-בלולאה לא יכול להסלים-עצמו אמין.
  • אידמפוטנטי מבנייה — issue מוסלם הופך agent-unowned → לא zombie בsweep הבא.
  • החלטה טהורה-testablezombie_escalation(item) ב-agent_health (severity: ≥5→high, אחרת→medium; סף מסנן יקיצה-חולפת מלולאה אמיתית).
  • kill-switchAGENT_ZOMBIE_AUTO_ESCALATE=0 להשבתה (בריאות עדיין נצפית, escalate ידני עדיין ב-endpoint). ברירת-מחדל ON — הלולאות שורפות budget והתרופה (reassign-לchair) מוכחת ידנית.

Invariants

  • G2 — מרחיב את מנגנון-ה-reaper הקיים (לא sweep מקביל); escalate דרך המסלול הקנוני.
  • G12 — הכל ב-web/; המגע מהשער.
  • §6 — כשל-sweep נלכד ולא-קטלני.

בדיקות + בטיחות

4 בדיקות policy חדשות (11 סה"כ ב-test_agent_health.py) . dry-run חי read-only: 6 issues פתוחים → 0 zombies → 0 הסלמות על deploy (blast-radius מינימלי; יפעל רק כשתופיע לולאה אמיתית).

⚠️ לתשומת-לבך

זו התנהגות-ריצה חדשה שמשייכת-מחדש issues-zombie אליך אוטומטית. ברירת-המחדל ON כי לולאות-recovery שורפות budget וה-reassign-לchair הוא בדיוק התיקון הידני שאני מבצע שוב-ושוב. אם תעדיף לצפות קודם — AGENT_ZOMBIE_AUTO_ESCALATE=0 ב-Coolify env.

🤖 Generated with Claude Code

## מה ה-follow-up שמרכיב את 4 הפרוסות שמוזגו ל**closed-loop אמיתי**: לולאת-recovery → **מזוהה** (#222) → **נמסרת-לאדם** (#218) → **נספרת** (#219), במקום לשרוף budget עד שאדם שם לב. זה ה-watchdog של Gastown (Deacon), דרך ה-reaper הקיים — לא tier חדש. ## איך `_zombie_escalation_loop` ב-lifespan (כל 15 דק', לצד ה-reaper של #215): 1. גוזר בריאות per-issue דרך `pc_get_agent_health` (#222). 2. כל **zombie מתמשך** (לולאת-recovery, `≥ ZOMBIE_ESCALATE_MIN_RECOVERY=2` יקיצות-שחזור) → `pc_escalate_issue` הloop-safe (#218). הטלמטריה `agent.escalated` (#219) נדלקת מה-Port. - **שרת-צדי בכוונה** — סוכן תקוע-בלולאה לא יכול להסלים-עצמו אמין. - **אידמפוטנטי מבנייה** — issue מוסלם הופך agent-unowned → לא zombie בsweep הבא. - **החלטה טהורה-testable** — `zombie_escalation(item)` ב-`agent_health` (severity: ≥5→high, אחרת→medium; סף מסנן יקיצה-חולפת מלולאה אמיתית). - **kill-switch** — `AGENT_ZOMBIE_AUTO_ESCALATE=0` להשבתה (בריאות עדיין נצפית, escalate ידני עדיין ב-endpoint). **ברירת-מחדל ON** — הלולאות שורפות budget והתרופה (reassign-לchair) מוכחת ידנית. ## Invariants - **G2** — מרחיב את מנגנון-ה-reaper הקיים (לא sweep מקביל); escalate דרך המסלול הקנוני. - **G12** — הכל ב-web/; המגע מהשער. - **§6** — כשל-sweep נלכד ולא-קטלני. ## בדיקות + בטיחות 4 בדיקות policy חדשות (**11 סה"כ** ב-`test_agent_health.py`) ✅. **dry-run חי read-only**: 6 issues פתוחים → 0 zombies → **0 הסלמות** על deploy (blast-radius מינימלי; יפעל רק כשתופיע לולאה אמיתית). ## ⚠️ לתשומת-לבך זו התנהגות-ריצה חדשה שמשייכת-מחדש issues-zombie אליך אוטומטית. ברירת-המחדל **ON** כי לולאות-recovery שורפות budget וה-reassign-לchair הוא בדיוק התיקון הידני שאני מבצע שוב-ושוב. אם תעדיף לצפות קודם — `AGENT_ZOMBIE_AUTO_ESCALATE=0` ב-Coolify env. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-07-07 03:37:55 +00:00
feat(watchdog): auto-escalation של zombie-loops ל-chair — סגירת הלולאה (#218+#222)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 3s
Lint — undefined names / undefined-names (pull_request) Successful in 11s
c7941a63ec
מרכיב את הפרוסות שמוזגו לכלל closed-loop: watchdog שרת-צדי (_zombie_escalation_loop
ב-lifespan, כל 15 דק') שגוזר בריאות per-issue (#222) ומסלים כל zombie מתמשך
(לולאת-recovery, ≥ZOMBIE_ESCALATE_MIN_RECOVERY=2 יקיצות-שחזור) ל-chair דרך
escalate_issue הloop-safe (#218). הטלמטריה agent.escalated (#219) נדלקת מה-Port.

- מדוע שרת-צדי: סוכן תקוע-בלולאה לא יכול להסלים-עצמו אמין; ה-watchdog (מקביל
  ל-Deacon של Gastown, אבל דרך ה-reaper הקיים ולא tier חדש) עושה זאת.
- אידמפוטנטי מבנייה: issue מוסלם הופך agent-unowned → לא zombie בsweep הבא.
- החלטת-ההסלמה (סף+severity) = helper טהור zombie_escalation ב-agent_health (testable).
  severity: ≥5 יקיצות→high, אחרת→medium.
- kill-switch: AGENT_ZOMBIE_AUTO_ESCALATE=0 להשבתה (הבריאות עדיין נצפית, escalate
  ידני עדיין זמין ב-endpoint). ברירת-מחדל ON — הלולאות שורפות budget והתרופה מוכחת.
- 4 בדיקות policy חדשות (11 סה"כ). dry-run חי: 6 issues→0 hzombies→0 הסלמות
  (blast-radius מינימלי על deploy).

Invariants: מקיים G2 (מרחיב את מנגנון-ה-reaper הקיים, לא sweep מקביל; escalate דרך
המסלול הקנוני), G12 (הכל ב-web/, המגע מהשער), §6 (כשל-sweep נלכד ולא-קטלני).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chaim merged commit a9db657541 into main 2026-07-07 03:38:31 +00:00
chaim deleted branch worktree-zombie-auto-escalate 2026-07-07 03:38:31 +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#408