feat(telemetry): אירועי-סוכן מובנים בשער-הפלטפורמה — נראוּת לולאות-recovery (#219) #404

Merged
chaim merged 1 commits from worktree-agent-telemetry into main 2026-07-06 20:53:01 +00:00
Owner

מה

פרוסה ראשונה של #219 (למידה מ-Gastown OTel): טלמטריה מובנית על שכבת-הסוכנים, כדי להפוך דיבוג לולאות-recovery מפורנזיקה-ידנית מול Paperclip DB (agent_wakeup_requests/heartbeat_runs) לנראוּת בזמן-אמת.

איך

  • web/agent_telemetry.py — emitter אגנוסטי-לפלטפורמה. emit(event, **fields) + דקורטור instrument(...) שעוטף async-op, מודד duration_ms, גוזר outcome (ok/noop ל-{"ok":False}/error בזריקה), ומרים result_keys (למשל cancelled מה-reaper). schema יציב (ts/v/event/outcome+flat fields), _SINK מבודד → JSON-line על logger agent.telemetry היום, OTLP מחר בלי שינוי call-site.
  • חיווט ב-web/agent_platform_port.py בלבד (התפר היחיד) — כל pc_* משנה-מצב נעטף: כל ה-wakeups (agent.wakeup עם agent_role/case/issue), agent.comment, interaction.reaped/cancelled, run.cancelled, agent.session_reset. השמות הציבוריים והחתימות נשמרים — app.py לא משתנה. פעולות read-only (list_live_runs/get_run_log…) לא מחווטות בכוונה (לא מעירות ולא משנות disposition).

Invariants

  • מקיים G12/INV-PORT1agent_telemetry לא מייבא Paperclip; אירועים בשמות-דומיין שורדים החלפת-פלטפורמה; הפליטה מהשער בלבד. ליבת-האינטליגנציה (mcp-server/src) לא נגעה.
  • מקיים G2 — מסלול-פליטת-טלמטריה יחיד; אין מסלול מקביל.
  • כלל-הנדסה §6 — error מ-op נפלט כאירוע ואז נזרק-מחדש; אין בליעה שקטה. ה-emit עצמו best-effort (כשל-sink לא מפיל את ה-op).
  • store-UTC (feedback_israel_time).

בדיקות

web/tests/test_agent_telemetry.py — 6 בדיקות (schema+drop-None, result_keys, noop, re-raise-after-error, שקיפות-דקורטור, sink-לא-מפיל). עוברות.

המשך

מזין את #222 (טקסונומיית-בריאות Zombie/Stalled — נגזרת מאותם אירועים). backend OTLP = פרוסה נפרדת (_SINK swap).

🤖 Generated with Claude Code

## מה פרוסה ראשונה של **#219** (למידה מ-Gastown OTel): טלמטריה מובנית על שכבת-הסוכנים, כדי להפוך דיבוג לולאות-recovery מ**פורנזיקה-ידנית** מול Paperclip DB (`agent_wakeup_requests`/`heartbeat_runs`) ל**נראוּת בזמן-אמת**. ## איך - **`web/agent_telemetry.py`** — emitter אגנוסטי-לפלטפורמה. `emit(event, **fields)` + דקורטור `instrument(...)` שעוטף async-op, מודד `duration_ms`, גוזר `outcome` (`ok`/`noop` ל-`{"ok":False}`/`error` בזריקה), ומרים `result_keys` (למשל `cancelled` מה-reaper). schema יציב (`ts`/`v`/`event`/`outcome`+flat fields), `_SINK` מבודד → JSON-line על logger `agent.telemetry` היום, OTLP מחר בלי שינוי call-site. - **חיווט ב-`web/agent_platform_port.py` בלבד** (התפר היחיד) — כל `pc_*` **משנה-מצב** נעטף: כל ה-wakeups (`agent.wakeup` עם `agent_role`/`case`/`issue`), `agent.comment`, `interaction.reaped/cancelled`, `run.cancelled`, `agent.session_reset`. השמות הציבוריים והחתימות נשמרים — **app.py לא משתנה**. פעולות read-only (list_live_runs/get_run_log…) לא מחווטות בכוונה (לא מעירות ולא משנות disposition). ## Invariants - **מקיים G12/INV-PORT1** — `agent_telemetry` לא מייבא Paperclip; אירועים בשמות-דומיין שורדים החלפת-פלטפורמה; הפליטה מהשער בלבד. ליבת-האינטליגנציה (`mcp-server/src`) לא נגעה. - **מקיים G2** — מסלול-פליטת-טלמטריה יחיד; אין מסלול מקביל. - **כלל-הנדסה §6** — error מ-op נפלט כאירוע ואז **נזרק-מחדש**; אין בליעה שקטה. ה-emit עצמו best-effort (כשל-sink לא מפיל את ה-op). - store-UTC ([[feedback_israel_time]]). ## בדיקות `web/tests/test_agent_telemetry.py` — 6 בדיקות (schema+drop-None, result_keys, noop, re-raise-after-error, שקיפות-דקורטור, sink-לא-מפיל). ✅ עוברות. ## המשך מזין את **#222** (טקסונומיית-בריאות Zombie/Stalled — נגזרת מאותם אירועים). backend OTLP = פרוסה נפרדת (`_SINK` swap). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-07-06 20:51:56 +00:00
feat(telemetry): אירועי-סוכן מובנים בשער-הפלטפורמה — נראוּת לולאות-recovery (#219)
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 31s
Lint — undefined names / undefined-names (pull_request) Successful in 10s
5dbe970dbc
מוסיף web/agent_telemetry.py — emitter אגנוסטי-לפלטפורמה שפולט אירוע JSON
מובנה לכל פעולת-פלטפורמה משנת-מצב (wakeup/comment/interaction-reap/cancel/
run-cancel/session-reset). מטרה: להפוך דיבוג לולאות-recovery מפורנזיקה-ידנית
מול Paperclip DB (agent_wakeup_requests/heartbeat_runs) לנראוּת בזמן-אמת.

- הפליטה מחווטת ב-web/agent_platform_port.py בלבד (התפר היחיד) — כל pc_* משנה-מצב
  נעטף ב-instrument(); השמות הציבוריים והחתימות נשמרים, app.py לא משתנה.
- אגנוסטי-לפלטפורמה (G12): agent_telemetry לא מייבא Paperclip; אירועים בשמות-דומיין
  שורדים החלפת-פלטפורמה. מסלול-פליטה יחיד (G2).
- OTLP-ready ("logs first"): schema יציב + _SINK מבודד להחלפה עתידית בלי שינוי call-site.
- error מ-op נפלט כאירוע ואז נזרק-מחדש — אין בליעה שקטה (§6).
- store-UTC (feedback_israel_time). 6 בדיקות pytest (web/tests/test_agent_telemetry.py).

Invariants: מקיים G2 (מסלול-טלמטריה יחיד), G12/INV-PORT1 (פליטה מהשער, ליבה נקייה),
כלל-הנדסה §6 (אין בליעה שקטה). מזין את #222 (טקסונומיית-בריאות).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
chaim merged commit 0966a49afb into main 2026-07-06 20:53:01 +00:00
chaim deleted branch worktree-agent-telemetry 2026-07-06 20:53:01 +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#404