fix(learning): כרטיס-אוצֵר כן-3-ערוצים + לכידת ממצאי-אוצֵר (source='curator') #339

Merged
chaim merged 1 commits from worktree-curator-learning-surface into main 2026-06-28 21:28:54 +00:00
Owner

רקע

אבחון לולאת-הלמידה (2026-06-28) חשף שכרטיס ה-curator ב-/training הציג תמיד ממצאי curator = 0. השורש: הכרטיס סופר decision_lessons WHERE source='curator' — ערך שאף מסלול-קוד לא כתב. הלמידה האמיתית זרמה בשני ערוצים אחרים (פאנל→decision_lessons source='panel:...', דיסטילציה→appeal_type_rules), והאוצֵר כתב את ממצאיו האיכותיים כ-comment בלבד (אובד) — דריפט מול הספ (§1.1 + INV-LRN3) שקבע רישום מובנה.

מה ה-PR עושה (TaskMaster #157)

  1. כרטיס-אוצֵר עוצב-מחדש (דרך שער-העיצוב Claude Design — 12b-training-curator.html, אושר ע"י חיים) להציג ביושר את שלושת ערוצי-ההזנה לכותב: דיסטילציה (180, זורם), פאנל (81, ממתין), אוצֵר (source='curator'). get_curator_stats שוכתב להחזיר channels{distillation,panel,curator}. תוקן גם טקסט מצב-הריק השקרי.
  2. יישור הסוכן לספר: נוסף כלי-MCP record_curator_findings(case_number, findings) (resolve corpus_id → decision_lessons source='curator', proposed, dedup) + §A.5b ב-hermes-curator.md. read-only נשמר — הצעה מגודרת-שער.
  3. חיתוך-לא-שקט: get_recent_decision_lessons(limit=15) מתעד WARN על לקחים שנחתכים. הפתרון האמיתי = סינתזת-לקחים (TaskMaster #158).

Invariants

  • מקיים: INV-LRN1/G10 (שער-יו"ר — הכל הצעות), INV-LRN3 (לכידה מובנית), INV-IA2/IA5 (מקור-אמת יחיד לכרטיס), G2 (אותם מאגרים, אין מסלול מקביל), G12 (leak-guard עובר).
  • נוגע: 07-learning.md §1.1 עודכן לשקף את המימוש.

פער-מימוש פתוח (מתועד בספ + #157)

PIPELINE-WAKE BRANCH מסיים מיד על final_learning_* → ניתוח-§A (וממילא record_curator_findings) אינו רץ אוטומטית על mark-final, רק ביקיצת-תגובה/ידנית. ההכרעה (הסוכן ימשיך ל-§A / הצינור יפלוט source='curator') נדחתה לתכנון נפרד — להחלטת חיים.

בדיקות

  • tsc --noEmit ✓ · eslint (קבצים שונו) ✓ (אזהרה קיימת-מראש בלבד) · py_compile ✓ · leak_guard.py ✓ · SQL של ה-endpoint אומת מול ה-DB (180/81/0/56).

פוסט-מיזוג (ידני)

  • npm run api:types לא נדרש (CuratorStats ידני; אין route חדש).
  • לאחר deploy: לוודא ש-record_curator_findings ב-allowlist של סוכן האוצֵר ב-2 החברות + sync_agents_across_companies.py --apply (שינוי hermes-curator.md).

🤖 Generated with Claude Code

## רקע אבחון לולאת-הלמידה (2026-06-28) חשף שכרטיס ה-curator ב-`/training` הציג תמיד `ממצאי curator = 0`. השורש: הכרטיס סופר `decision_lessons WHERE source='curator'` — ערך ש**אף מסלול-קוד לא כתב**. הלמידה האמיתית זרמה בשני ערוצים אחרים (פאנל→`decision_lessons` source='panel:...', דיסטילציה→`appeal_type_rules`), והאוצֵר כתב את ממצאיו האיכותיים כ-comment בלבד (אובד) — דריפט מול הספ (§1.1 + INV-LRN3) שקבע רישום מובנה. ## מה ה-PR עושה (TaskMaster #157) 1. **כרטיס-אוצֵר עוצב-מחדש** (דרך שער-העיצוב Claude Design — `12b-training-curator.html`, אושר ע"י חיים) להציג ביושר את **שלושת ערוצי-ההזנה לכותב**: דיסטילציה (180, זורם), פאנל (81, ממתין), אוצֵר (source='curator'). `get_curator_stats` שוכתב להחזיר `channels{distillation,panel,curator}`. תוקן גם טקסט מצב-הריק השקרי. 2. **יישור הסוכן לספר:** נוסף כלי-MCP `record_curator_findings(case_number, findings)` (resolve corpus_id → `decision_lessons` source='curator', proposed, dedup) + §A.5b ב-`hermes-curator.md`. read-only נשמר — הצעה מגודרת-שער. 3. **חיתוך-לא-שקט:** `get_recent_decision_lessons(limit=15)` מתעד WARN על לקחים שנחתכים. הפתרון האמיתי = סינתזת-לקחים (TaskMaster #158). ## Invariants - **מקיים:** INV-LRN1/G10 (שער-יו"ר — הכל הצעות), INV-LRN3 (לכידה מובנית), INV-IA2/IA5 (מקור-אמת יחיד לכרטיס), G2 (אותם מאגרים, אין מסלול מקביל), G12 (leak-guard עובר). - **נוגע:** `07-learning.md` §1.1 עודכן לשקף את המימוש. ## פער-מימוש פתוח (מתועד בספ + #157) `PIPELINE-WAKE BRANCH` מסיים מיד על `final_learning_*` → ניתוח-§A (וממילא `record_curator_findings`) **אינו רץ אוטומטית על mark-final**, רק ביקיצת-תגובה/ידנית. ההכרעה (הסוכן ימשיך ל-§A / הצינור יפלוט source='curator') נדחתה לתכנון נפרד — להחלטת חיים. ## בדיקות - `tsc --noEmit` ✓ · eslint (קבצים שונו) ✓ (אזהרה קיימת-מראש בלבד) · `py_compile` ✓ · `leak_guard.py` ✓ · SQL של ה-endpoint אומת מול ה-DB (180/81/0/56). ## פוסט-מיזוג (ידני) - `npm run api:types` לא נדרש (CuratorStats ידני; אין route חדש). - **לאחר deploy:** לוודא ש-`record_curator_findings` ב-allowlist של סוכן האוצֵר ב-2 החברות + `sync_agents_across_companies.py --apply` (שינוי `hermes-curator.md`). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-28 21:20:54 +00:00
fix(learning): honest 3-channel curator card + capture curator findings (source='curator')
All checks were successful
G12 Leak-Guard / leak-guard (pull_request) Successful in 4s
Lint — undefined names / undefined-names (pull_request) Successful in 9s
be774ab87e
תיקוני-מבנה ללולאת-הלמידה (TaskMaster #157):

1. כרטיס ה-curator (/training טאב "אוצֵר") ספר decision_lessons WHERE source='curator'
   — ערך שאף מסלול-קוד לא כתב → תמיד 0. עוצב-מחדש (דרך שער-העיצוב Claude Design, אושר)
   להציג ביושר את שלושת ערוצי-ההזנה לכותב: דיסטילציה→appeal_type_rules (180, זורם),
   פאנל→decision_lessons (81, ממתין), אוצֵר→source='curator'. get_curator_stats שוכתב.

2. drift ספ↔סוכן: 07-learning.md §1.1 + INV-LRN3 קבעו שהאוצֵר רושם ממצאים כ-decision_lesson
   source='curator', אך הסוכן כתב comments בלבד — הממצאים האיכותיים אבדו. נוסף כלי-MCP
   record_curator_findings + §A.5b ב-hermes-curator.md (read-only נשמר; הצעה מגודרת-שער).

3. get_recent_decision_lessons(limit=15) חתך בשקט — נוסף WARN על מה שנחתך (חוקה §6);
   הפתרון האמיתי = סינתזת-לקחים (TaskMaster #158).

Invariants: מקיים INV-LRN1/G10 (שער-יו"ר), INV-LRN3 (לכידה מובנית), INV-IA2/IA5 (מקור-אמת
יחיד), G12 (leak-guard עובר), G2 (אין מסלול מקביל — אותם מאגרים). פער-מימוש פתוח מתועד:
§A לא רץ אוטומטית על mark-final (pipeline-wake exits) → נדחה לתכנון נפרד.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit cfcfe4df48 into main 2026-06-28 21:28:54 +00:00
chaim deleted branch worktree-curator-learning-surface 2026-06-28 21:28:54 +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#339