fix(ops): ייבוש backlog-רפאים של חילוץ-מטא — נרמול-במקור (G1) #210

Merged
chaim merged 1 commits from worktree-metadata-backlog-fix into main 2026-06-11 22:11:08 +00:00
Owner

הבעיה

מונה "ממתין (בקלוג)" ב-/operations הציג 140 פריטים תקועים, בעוד דריינר-המטא (Gemini Flash, כל 15 דק') דיווח total_pending=0 בכל ריצה. אי-התאמה בין שתי הגדרות-תור:

  • ה-UI סופר metadata_extraction_status = 'pending' — וזהו ברירת-המחדל של העמודה (DEFAULT 'pending').
  • הדריינר סורק רק metadata_extraction_requested_at IS NOT NULL.

שורות שקיבלו מטא-דאטה במסלול אחר נשארו על ברירת-המחדל 'pending' לנצח → backlog-רפאים שהדריינר עיוור אליו.

פילוח ה-140: 82 internal_committee (מטא דטרמיניסטי מרשומת-התיק, מחוץ לצנרת-Gemini — המחלץ מחזיר להן no_metadata) · 31 cited_only (שורות-גדם, אין טקסט לחלץ) · 27 external_upload (כבר מלאים).

התיקון (G1 — נרמול-במקור, לא תיקון-בקריאה)

  1. db.create_internal_committee_decision — ה-INSERT וה-ON CONFLICT DO UPDATE קובעים metadata_extraction_status='completed' ישירות, כך שהחלטות פנימיות לא נכנסות שוב למצב-הרפאים. זהו המקור החוזר.
  2. scripts/reconcile_metadata_status.py — נרמול חד-פעמי / re-runnable של שורות קיימות: internal + external-מלא → completed; external עם טקסט וחסר שם/תקציר → חותם requested_at (הדריינר יטפל); cited_only → skipped. הורץ: 82+27→completed, 31→skipped, pending=0.
  3. web-ui /operations — התווית "ממתין (בקלוג)""ממתין" (הסרת המילה הלועזית, לבקשת היו"ר) + tooltip מדויק; הערת operations.ts עודכנה.

Invariants

  • G1 — נרמול-במקור (status מיושב בעת ה-INSERT + reconcile חד-פעמי), לא תיקון-בקריאה במונה.
  • INV-IA — מונה-אמת / מקור-אמת-יחיד למשטח-ההפעלה.

בדיקות

  • py_compile עבר על db.py + הסקריפט.
  • שינויי web-ui = החלפת מחרוזת-תווית + הערה (אין סיכון-טיפוס); build מלא יאומת ב-CI/Coolify.
  • reconcile הורץ מול ה-DB: התפלגות סופית completed=309, skipped=31, pending=0.

🤖 Generated with Claude Code

## הבעיה מונה **"ממתין (בקלוג)"** ב-`/operations` הציג **140 פריטים תקועים**, בעוד דריינר-המטא (Gemini Flash, כל 15 דק') דיווח `total_pending=0` בכל ריצה. אי-התאמה בין **שתי הגדרות-תור**: - **ה-UI** סופר `metadata_extraction_status = 'pending'` — וזהו **ברירת-המחדל של העמודה** (`DEFAULT 'pending'`). - **הדריינר** סורק רק `metadata_extraction_requested_at IS NOT NULL`. שורות שקיבלו מטא-דאטה במסלול אחר נשארו על ברירת-המחדל `'pending'` לנצח → backlog-רפאים שהדריינר עיוור אליו. פילוח ה-140: **82 internal_committee** (מטא דטרמיניסטי מרשומת-התיק, מחוץ לצנרת-Gemini — המחלץ מחזיר להן `no_metadata`) · **31 cited_only** (שורות-גדם, אין טקסט לחלץ) · **27 external_upload** (כבר מלאים). ## התיקון (G1 — נרמול-במקור, לא תיקון-בקריאה) 1. **`db.create_internal_committee_decision`** — ה-INSERT וה-`ON CONFLICT DO UPDATE` קובעים `metadata_extraction_status='completed'` ישירות, כך שהחלטות פנימיות לא נכנסות שוב למצב-הרפאים. זהו המקור החוזר. 2. **`scripts/reconcile_metadata_status.py`** — נרמול חד-פעמי / re-runnable של שורות קיימות: internal + external-מלא → `completed`; external עם טקסט וחסר שם/תקציר → חותם `requested_at` (הדריינר יטפל); cited_only → `skipped`. **הורץ:** 82+27→completed, 31→skipped, **pending=0**. 3. **web-ui `/operations`** — התווית `"ממתין (בקלוג)"` → `"ממתין"` (הסרת המילה הלועזית, לבקשת היו"ר) + tooltip מדויק; הערת `operations.ts` עודכנה. ## Invariants - **G1** — נרמול-במקור (status מיושב בעת ה-INSERT + reconcile חד-פעמי), לא תיקון-בקריאה במונה. - **INV-IA** — מונה-אמת / מקור-אמת-יחיד למשטח-ההפעלה. ## בדיקות - `py_compile` עבר על db.py + הסקריפט. - שינויי web-ui = החלפת מחרוזת-תווית + הערה (אין סיכון-טיפוס); build מלא יאומת ב-CI/Coolify. - reconcile הורץ מול ה-DB: התפלגות סופית `completed=309, skipped=31, pending=0`. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
chaim added 1 commit 2026-06-11 22:10:29 +00:00
מונה "ממתין (בקלוג)" ב-/operations הציג 140 פריטים תקועים שהדריינר (Gemini, כל
15 דק') דיווח עליהם total_pending=0 — אי-התאמה בין שתי הגדרות-תור:
ה-UI סופר status='pending' (ברירת-מחדל של העמודה), בעוד הדריינר סורק רק
metadata_extraction_requested_at IS NOT NULL. שורות שקיבלו מטא במסלול אחר
(internal דטרמיניסטי, cited_only חסר-טקסט) נשארו על ברירת-המחדל 'pending' לנצח.

פילוח ה-140: 82 internal_committee (מטא דטרמיניסטי, מחוץ לצנרת-Gemini) ·
31 cited_only (אין טקסט לחלץ) · 27 external_upload (כבר מלאים).

תיקון-במקור (G1 — נרמול במקור, לא תיקון-בקריאה):
- db.create_internal_committee_decision: INSERT + ON CONFLICT קובעים
  metadata_extraction_status='completed' ישירות → שורות פנימיות לא נכנסות
  שוב למצב-הרפאים.
- scripts/reconcile_metadata_status.py: נרמול חד-פעמי/re-runnable של שורות
  קיימות (internal/external מלא→completed · external חסר→requeue · cited_only→skipped).
  הורץ: 82+27→completed, 31→skipped, pending=0.
- web-ui /operations: התווית "ממתין (בקלוג)" → "ממתין" (הסרת המילה הלועזית)
  + tooltip מדויק; הערת operations.ts מעודכנת.

Invariants: מקיים G1 (normalize-at-source) ו-INV-IA (מונה-אמת/מקור-אמת-יחיד).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chaim merged commit 13b8a6ef05 into main 2026-06-11 22:11:08 +00:00
chaim deleted branch worktree-metadata-backlog-fix 2026-06-11 22:11:08 +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#210