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 מאומתת מול הקוד.

חלק א׳ — מטריצת Override

עקיפה מאופשרת אך ורק ל-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 GateRiskVerdict=PASS נדרש לכל Decision עם decision_idחסוםאין מצב שבו Risk Gate נעקף — אפס עקיפותtradeExecution.ts line 106: checkRiskGatePassed()
עקיפת Approval TTLapproval_expires_at נבדק בכל נתיב ביצועחסוםאישור שפג אינו מבוצע — אין הארכה אוטומטיתtradeExecution.ts line 110 + refreshPortfolioPrices
עקיפת Trade Validityprice_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 מלא

חלק ב׳ — מטריצת Freeze

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 אך עובר תחת FreezeemergencyLiquidation.ts: Case 1
הפעלת Freezeעוברמיידי, ללא re-auth (פעולת הגנה)Dashboard toggleFreeze: immediate
ביטול Freezeעוברדורש re-auth + סיבה (T7.2)Dashboard toggleFreeze + reauthGuard.ts
חלק ג׳ — מטריצת חירום (Emergency Liquidation)

Emergency Liquidation היא תהליך נפרד (CH1-004) הדורש BreakGlassEvent עם approver מאושר. אינה עוקפת Risk Gate או Validity.

#1

Global Freeze פעיל + SELL

זיהוי: isEmergencyLiquidation Case 1: settings.global_freeze === true

דרישה: BreakGlassEvent עם approver

קוד: emergencyLiquidation.ts line 46

#2

עמדה חורגת מ-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)

#3

Manual Emergency Exit (stop_loss + is_protected)

זיהוי: isEmergencyLiquidation Case 3: order_type=stop_loss && is_protected=true

דרישה: BreakGlassEvent עם approver

קוד: emergencyLiquidation.ts line 58

#4

אישור BreakGlassEvent

זיהוי: verifyEmergencyAuthorized: מחפש BreakGlassEvent עם approver

דרישה: approver מוגדר על BreakGlassEvent

קוד: emergencyLiquidation.ts line 114-133 + approveBreakGlass function

תיקון T7.3: T7.3: נוספה פונקציית approveBreakGlass לאישור BreakGlassEvent

חלק ד׳ — פערים שזוהו ותוקנו
T73-GAP-001P1

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 מחושב נכון.

קבצים:
base44/shared/tradeExecution.ts (earlyHoldings fetch + earlyHolding passed)
T73-GAP-002P1

אין פונקציה לאישור BreakGlassEvent — Emergency Liquidation תקוע

נפתר ✅

לפני: requireEmergencyApproval יוצר BreakGlassEvent ללא approver; verifyEmergencyAuthorized דורש approver → חסימה

אחרי: פונקציית approveBreakGlass: מגדיר approver + approved_at + reviewed, מתעד AuditEvent, ומשחרר את ה-Trade מ-escalated_for_review ל-approved

קבצים:
base44/functions/approveBreakGlass/entry.ts (new function)
חלק ה׳ — קריטריוני קבלה ל-T7.3
legacy:true עוקף אך ורק את Decision Gate — אינו עוקף Risk/Freeze/TTL/Validity/Audit
Global Freeze חוסם BUY חדש ואינו חוסם SELL/Reduction/Exit/Protection
Emergency Liquidation דורש BreakGlassEvent עם approver מאושר
שלושת טריגרי החירום (Freeze+Sell, Loss Limit, Manual Exit) מזוהים נכון
פונקציית approveBreakGlass זמינה לאישור פעולות חירום
אין עקיפת Risk Gate, TTL, Validity או Audit בשום מסלול
הפעלת Freeze מיידית; ביטול Freeze דורש re-auth (T7.2)

המלצת מעבר ל-T7.4

T7.3 השלים את מטריצת Override/Freeze/Emergency ותיקן 2 פערי P1. כל שערי ההגנה מאומתים — אפס עקיפות (למעט legacy:true ל-Decision Gate בלבד). ניתן לעבור ל-T7.4 (בדיקות E2E וסגירת CH7).

InvestIQ · CH7 T7.3 · v1.0 Implementation Report · 11 באוגוסט 2026 · BAROUCH SHALIT