V2-CH2-005 — תחזוקה ו-Reconciliation
כרך 2 · פרק 2 · משימה 005 · sweepExpired, reconcileStuckPromoting, Workflow, TTL
v1.0 Approved · 11.8.2026
מטרת המסמך
הגדרה פורמלית של תחזוקת מחזור החיים של Candidate: sweepExpired (פינוי Candidates שפג תוקפם), reconcileStuckPromoting (השלמת קידום תקוע), ו-workflow אוטומטי. סגירת קריטריונים C7 + C6 (Reconciliation) מ-V2-CH2-001.
גבול כרך 1: הלוגיקה וה-workflow כבר ממומשים (Shadow Active). מסמך תיאורי — אינו מוסיף שדות.
פונקציות תחזוקה
| פונקציה | טריגר | תיאור | החזרה |
|---|---|---|---|
| sweepExpired() | scheduled (5 min) | מעבר על Candidates עם expires_at < now() או analysis_deadline < now() (ללא quorum). מסמן כ-expired. אין קידום. | { expired: number } |
| reconcileStuckPromoting() | scheduled (5 min) | מעבר על Candidates עם status=promoting ו-promotion_locked_at < now() - 60s. אם decision_id קיים → promoted. אחרת → rejected. | { reconciled: number } |
Workflow
| שדה | ערך |
|---|---|
| name | Candidate Lifecycle Sweep |
| file | base44/workflows/Candidate Lifecycle Sweep.jsonc |
| function | sweepCandidates |
| schedule | כל 5 דקות (UTC) |
| mode | Shadow (תוספתי, לא-חוסם) |
| last_result | { expired: 3, reconciled: 0 } (11.8.2026) |
כללי TTL
| מזהה | חומרה | כלל |
|---|---|---|
| T1 | P1 | expires_at = created_date + 30 דקות (ברירת מחדל). |
| T2 | P0 | analysis_deadline ≤ expires_at. חייב להיות מוקדם יותר או שווה. |
| T3 | P0 | Candidate שעבר expires_at ו-status ב-discovered/analyzing → expired. אין קידום. |
| T4 | P0 | Candidate שעבר analysis_deadline ללא quorum → expired. אין קידום אוטומטי. |
| T5 | P0 | Candidate עם status=promoted אינו נמחק ואינו נסרק (immutable). |
| T6 | P1 | Candidate עם status=rejected/expired אינו נמחק — נשמר ל-audit והיסטוריה. |
קריטריוני קבלה
| מזהה | קריטריון | תוצאה |
|---|---|---|
| M1 | sweepExpired() מסמן Candidates שעברו expires_at או analysis_deadline כ-expired. | PASS |
| M2 | reconcileStuckPromoting() מטפל ב-Candidates תקועים ב-PROMOTING > 60 שניות. | PASS |
| M3 | Workflow "Candidate Lifecycle Sweep" פעיל — כל 5 דקות, קורא ל-sweepCandidates. | PASS |
| M4 | אין קידום של Candidate שפג תוקפו. פג תוקף → EXPIRED בלבד. | PASS |
| M5 | Candidates עם status=promoted/rejected/expired אינם נמחקים — נשמרים ל-audit. | PASS |
| M6 | ניסיון בדיקה: sweepCandidates החזיר { expired: 3, reconciled: 0 } — תקין. | PASS |
מפרט · v1.0 Approved · 11.8.2026 · נעול
חזרה ל-V2-CH2-004