CH3-001 — מיפוי וניתוח
שלב 3 — ללא שינוי קוד | 27.8.2026
חזרה למפרט
הכרעת Message entity

אפשרי ללא שינוי סכמה — קידוד בשדות קיימים.

המלצה: אמץ את אפשרות A (קידוד ללא שינוי סכמה). CH3-001 נשאר ללא שינוי סכמה — לא דורש אישור Architect.
1. קבצים מושפעים
קובץתפקיד נוכחישורותשינוי נדרשסיכון
base44/functions/refreshPortfolioPrices/entry.tsOrchestrator נוכחי — מבצע הכל בפונקציה אחת~550פיצול ל-6 שלבים דטרמיניסטיים + הסרת החלטות LLM (Timeout/Retry)גבוה — לוגיקה מרכזית, יש לפצל בזהירות
base44/functions/runAgentScan/entry.tsCIO + יצירת/ביצוע עסקאות באותה ריצה~600הפיכה ל-CIO טהור: פלט Structured Output בלבד, העברת יצירת/ביצוע לשלבים 4–6גבוה — משפיע על כל זרימת הקנייה/מכירה
base44/shared/orchestrator.tsחדש — רץ השלבים הדטרמיניסטי0 (חדש)יצירה: רץ שלבים + תיעוד step eventsנמוך — קובץ חדש, אין תלות קיימת
base44/shared/auditSteps.tsחדש — כתיבת step events ל-Message entity0 (חדש)יצירה: פונקציית logStep(b, {runId, stepName, status, actor, details})נמוך — תלוי בהכרעת Message entity (ראה למטה)
2. תלויות (imports + entities + integrations)
refreshPortfolioPrices/entry.ts
imports: finance (round2), marketPrices (fetchQuote, toUsd, isMarketOpen), protectionReview (resolveProtection), tradeExecution (executeTrade, logProtectionBlock), orderTypes (shouldFillBuy)
entities: SystemSettings, Trade, Portfolio, Alert, Message, AgentConfig, BankConnection, CommissionSchedule, User
integrations: InvokeLLM, SendEmail
runAgentScan/entry.ts
imports: tradeExecution (executeTrade, logProtectionBlock), finance (round2), marketPrices (toYahooSymbol, fetchQuote, toUsd, isMarketOpen)
entities: SystemSettings, AgentConfig, AgentLog, Portfolio, Trade, Alert, WatchList, Message, CommissionSchedule, BankConnection, User
integrations: InvokeLLM, SendEmail
tradeExecution.ts (shared)
imports: finance (computeCommission, computeRealizedGain, getTaxYear, round2), taxReport (upsertReport)
entities: SystemSettings, Trade, Portfolio, BankConnection
integrations:
3. מיפוי שלבים — קוד נוכחי → יעד
שלבמיקום נוכחי בקודיעד לאחר פיצולLLM
1. PRICE_REFRESHשורות 208–250 ב-refreshPortfolioPricesshared/orchestrator.ts → fetchQuotes + updatePortfolioלא
2. TRADE_VALIDITYשורות 30–153 (pending buys + stale proposals)shared/orchestrator.ts → validatePendingTradesלא
3. CIO_SCANrunAgentScan entry.ts — analyzeAgent() + InvokeLLMrunAgentScan → Structured Output בלבד, ללא יצירת Tradeכן
4. RISK_GATEמפוזר ב-runAgentScan שורות 142–260 (cash/freeze/exposure)shared/orchestrator.ts → riskGate(scanResult, settings)לא
5. APPROVALמפוזר — auto/semi/manual בתוך runAgentScanshared/orchestrator.ts → setApproval(decision, managementMode)לא
6. EXECUTIONexecuteTrade בתוך runAgentScan + refreshPortfolioPricesshared/orchestrator.ts → executeTrade(...) — קריאה יחידהלא
4. Workflows מושפעים
WorkflowCronקורא להשפעה
Continuous Agent Scan*/10 * * * *runAgentScanמופעל כל 10 דקות — יושפע מפיצול CIO
Portfolio Price Refresh*/15 * * * *refreshPortfolioPricesמופעל כל 15 דקות — יושפע מפיצול Orchestrator
5. בדיקת Message entity — שדות זמינים
שדהסוגשימוש אפשרי ל-step auditניתן לשאילתה
typeenumכן — נשתמש ב-info (ללא שינוי enum)
titlestringכן — נקודד [orchestrator:${runId}] ${step} — ${status}חלקית (filter title)
summarystringכן — פרטים מובנים (JSON או טקסט)
sourcestringכן — שחקן: "Orchestrator:price_refresh"כן (filter source)
severityenumכן — info (started/completed), warning (failed)
created_datedateכן — timestamp אוטומטיכן (sort/filter)
symbol/name/market/pricevariousלא נדרש ל-step audit
שדות חסרים — workaround
שדהחומרהפתרון מקודד
correlation_idנמוךמקודד ב-title: [orchestrator:${runId}] — ניתן לסנן לפי prefix אך לא אינדקס
trade-offs
  • הודעות audit יופיעו בעמוד "הודעות" (רעש) — ניתן לסנן לפי source="Orchestrator:..." או title prefix "[orchestrator:".
  • שמירה: 30 ימים (info type) — מספיק ל-step audit; risk_warning מקבל 90 ימים.
  • אין אינדקס על correlation_id — שאילתות לפי runId דורשות filter title (סריקה). מקובל ל-v0.2.
  • אם תידרש שאילתה תכופה לפי runId בעתיד — יישקל שדה ייעודי (שינוי סכמה, CH3 עתידי).
הכרעה: אפשרי ללא שינוי סכמה — קידוד בשדות קיימים
המלצה: אמץ את אפשרות A (קידוד ללא שינוי סכמה). CH3-001 נשאר ללא שינוי סכמה — לא דורש אישור Architect.
שאלות פתוחות לאישור
  • 1.האם נכון לשמור את evaluateProtectionStatus (runAgentScan שורות 551–597) כחלק מ-CIO_SCAN, או להפריד לשלב נפרד? המלצה: השאר ב-CIO_SCAN — זה ניתוח LLM.
  • 2.הפונקציות autoSellHolding ו-evaluateTakeProfit ב-refreshPortfolioPrices — אלו שלבי EXECUTION שמופעלים מתוך PRICE_REFRESH. לאחר הפיצול הן יעברו לשלב 6.
  • 3.תיעוד step events: האם לתעד גם שלבים שלא שינו דבר (למשל PRICE_REFRESH כשאין holdings)? המלצה: כן, ליכולת תחקור מלאה.
  • 4.סדר הרצת ה-workflows: האם להשאיר את ה-cron הנוכחי (*/10 סריקה, */15 רענון) או לתאם? המלצה: להשאיר כמו שהוא ב-CH3-001, לא שינוי scheduling.
השלב הבא

✅ מיפוי זה אושר ו-CH3-001 בוצע במלואו (v0.2.3 — 9/9 קריטריוני קבלה עברו). orchestrator.ts ו-auditSteps.ts נוצרו, refreshPortfolioPrices פוצל ל-4 שלבים, runAgentScan הפך ל-CIO טהור. ראה דוח ביצוע CH3-001. CH3-002/003/005 גם ננעלו ומומשו.

CH3-001 מיפוי וניתוח — 27.8.2026 | ממתין לאישור בכתב