T7.3 — Override, Freeze ופעולות חירום
v1.0 Implementation Report · 11 באוגוסט 2026 · BAROUCH SHALIT
מטרה: מיפוי ואימות מטריצת Override/Freeze/Emergency מול הקוד. זיהוי ותיקון פערים. חיבור פונקציית אישור BreakGlassEvent.
2/2 פערי P1 זוהו ותוקנו ✅
T73-GAP-001 (isEmergencyLiquidation null portfolio → loss limit מדולג) + T73-GAP-002 (אין אישור BreakGlassEvent → נוספה approveBreakGlass). מטריצת Override/Freeze/Emergency מאומתת מול הקוד.
עקיפה מאופשרת אך ורק ל-legacy:true → Decision Gate. כל שאר השערים אינם ניתנים לעקיפה.
| עקיפה | היקף | מאופשר? | סיבה | מיקום בקוד |
|---|---|---|---|---|
| legacy: true → Decision Gate | עוקף אך ורק את שער Decision (assertDecisionActive) במסלול ידני מהגרף | מאופשר | עסקאות ידניות היסטוריות (pre-CH3-005) ללא Decision — אין RiskVerdict/ApprovalRecord לבדוק | tradeExecution.ts: if (trade.decision_id || trade.legacy !== true) |
| עקיפת Risk Gate | RiskVerdict=PASS נדרש לכל Decision עם decision_id | חסום | אין מצב שבו Risk Gate נעקף — אפס עקיפות | tradeExecution.ts line 106: checkRiskGatePassed() |
| עקיפת Approval TTL | approval_expires_at נבדק בכל נתיב ביצוע | חסום | אישור שפג אינו מבוצע — אין הארכה אוטומטית | tradeExecution.ts line 110 + refreshPortfolioPrices |
| עקיפת Trade Validity | price_drift_threshold נבדק לפני ביצוע | חסום | סטיית מחיר מעל הסף → EXPIRED, לא מבוצע | executeTrade entry.ts + refreshPortfolioPrices |
| עקיפת Audit | כל פעולה כתיבה מתועדת ב-AuditEvent | חסום | AuditEvent עם hash chain — אי-אפשר לעקוף | auditEventLogger.ts + auditOutboxWriter.ts |
| עקיפת Global Freeze (BUY) | checkFreeze חוסם BUY בכל מצב | חסום | Freeze נבדק ראשון, לפני כל שער אחר | tradeExecution.ts line 82: checkFreeze() |
הערת חוב טכנולוגי: חוב טכנולוגי מנוהל — בעלים: BAROUCH SHALIT, תחת Feature Flag + Audit מלא
Global Freeze חוסם BUY חדש בלבד. כל פעולות ההקטנת חשיפה (SELL/Stop/Exit/Reduction) עוברות תמיד.
| פעולה | חסום? | סיבה | מיקום בקוד |
|---|---|---|---|
| פתיחת עמדת BUY חדשה | חסום | checkFreeze חוסם — "פתיחת עמדות חדשות חסומה" | tradeExecution.ts line 63 |
| מכירה (SELL) רגילה | עובר | צמצום חשיפה — עובר תמיד | tradeExecution.ts line 63: if (side !== "buy") return |
| Stop Loss / Take Profit | עובר | פעולות הגנה P0 — עוברות תמיד | tradeExecution.ts + emergencyLiquidation.ts |
| Emergency Exit | עובר | דורש BreakGlassEvent אך עובר תחת Freeze | emergencyLiquidation.ts: Case 1 |
| הפעלת Freeze | עובר | מיידי, ללא re-auth (פעולת הגנה) | Dashboard toggleFreeze: immediate |
| ביטול Freeze | עובר | דורש re-auth + סיבה (T7.2) | Dashboard toggleFreeze + reauthGuard.ts |
Emergency Liquidation היא תהליך נפרד (CH1-004) הדורש BreakGlassEvent עם approver מאושר. אינה עוקפת Risk Gate או Validity.
Global Freeze פעיל + SELL
זיהוי: isEmergencyLiquidation Case 1: settings.global_freeze === true
דרישה: BreakGlassEvent עם approver
קוד: emergencyLiquidation.ts line 46
עמדה חורגת מ-daily_loss_limit_pct
זיהוי: isEmergencyLiquidation Case 2: lossPct >= daily_loss_limit_pct
דרישה: BreakGlassEvent עם approver
קוד: emergencyLiquidation.ts line 49-55
תיקון T7.3: T7.3 fix: earlyHolding מועבר כעת ל-isEmergencyLiquidation (היה null)
Manual Emergency Exit (stop_loss + is_protected)
זיהוי: isEmergencyLiquidation Case 3: order_type=stop_loss && is_protected=true
דרישה: BreakGlassEvent עם approver
קוד: emergencyLiquidation.ts line 58
אישור BreakGlassEvent
זיהוי: verifyEmergencyAuthorized: מחפש BreakGlassEvent עם approver
דרישה: approver מוגדר על BreakGlassEvent
קוד: emergencyLiquidation.ts line 114-133 + approveBreakGlass function
תיקון T7.3: T7.3: נוספה פונקציית approveBreakGlass לאישור BreakGlassEvent
isEmergencyLiquidation נקרא עם null portfolio — Case 2 (loss limit) מדולג
נפתר ✅לפני: tradeExecution.ts line 92: isEmergencyLiquidation(trade, settings, null) — portfolio=null → lossPct=0 → Case 2 לעולם לא מזהה
אחרי: earlyHolding נטען לפני בדיקת החירום ומועבר ל-isEmergencyLiquidation. כעת Case 2 מחושב נכון.
אין פונקציה לאישור BreakGlassEvent — Emergency Liquidation תקוע
נפתר ✅לפני: requireEmergencyApproval יוצר BreakGlassEvent ללא approver; verifyEmergencyAuthorized דורש approver → חסימה
אחרי: פונקציית approveBreakGlass: מגדיר approver + approved_at + reviewed, מתעד AuditEvent, ומשחרר את ה-Trade מ-escalated_for_review ל-approved
המלצת מעבר ל-T7.4
T7.3 השלים את מטריצת Override/Freeze/Emergency ותיקן 2 פערי P1. כל שערי ההגנה מאומתים — אפס עקיפות (למעט legacy:true ל-Decision Gate בלבד). ניתן לעבור ל-T7.4 (בדיקות E2E וסגירת CH7).