CH3-001 — מיפוי וניתוח
שלב 3 — ללא שינוי קוד | 27.8.2026
הכרעת Message entity
אפשרי ללא שינוי סכמה — קידוד בשדות קיימים.
המלצה: אמץ את אפשרות A (קידוד ללא שינוי סכמה). CH3-001 נשאר ללא שינוי סכמה — לא דורש אישור Architect.
1. קבצים מושפעים
| קובץ | תפקיד נוכחי | שורות | שינוי נדרש | סיכון |
|---|---|---|---|---|
| base44/functions/refreshPortfolioPrices/entry.ts | Orchestrator נוכחי — מבצע הכל בפונקציה אחת | ~550 | פיצול ל-6 שלבים דטרמיניסטיים + הסרת החלטות LLM (Timeout/Retry) | גבוה — לוגיקה מרכזית, יש לפצל בזהירות |
| base44/functions/runAgentScan/entry.ts | CIO + יצירת/ביצוע עסקאות באותה ריצה | ~600 | הפיכה ל-CIO טהור: פלט Structured Output בלבד, העברת יצירת/ביצוע לשלבים 4–6 | גבוה — משפיע על כל זרימת הקנייה/מכירה |
| base44/shared/orchestrator.ts | חדש — רץ השלבים הדטרמיניסטי | 0 (חדש) | יצירה: רץ שלבים + תיעוד step events | נמוך — קובץ חדש, אין תלות קיימת |
| base44/shared/auditSteps.ts | חדש — כתיבת step events ל-Message entity | 0 (חדש) | יצירה: פונקציית 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 ב-refreshPortfolioPrices | shared/orchestrator.ts → fetchQuotes + updatePortfolio | לא |
| 2. TRADE_VALIDITY | שורות 30–153 (pending buys + stale proposals) | shared/orchestrator.ts → validatePendingTrades | לא |
| 3. CIO_SCAN | runAgentScan entry.ts — analyzeAgent() + InvokeLLM | runAgentScan → Structured Output בלבד, ללא יצירת Trade | כן |
| 4. RISK_GATE | מפוזר ב-runAgentScan שורות 142–260 (cash/freeze/exposure) | shared/orchestrator.ts → riskGate(scanResult, settings) | לא |
| 5. APPROVAL | מפוזר — auto/semi/manual בתוך runAgentScan | shared/orchestrator.ts → setApproval(decision, managementMode) | לא |
| 6. EXECUTION | executeTrade בתוך runAgentScan + refreshPortfolioPrices | shared/orchestrator.ts → executeTrade(...) — קריאה יחידה | לא |
4. Workflows מושפעים
| Workflow | Cron | קורא ל | השפעה |
|---|---|---|---|
| Continuous Agent Scan | */10 * * * * | runAgentScan | מופעל כל 10 דקות — יושפע מפיצול CIO |
| Portfolio Price Refresh | */15 * * * * | refreshPortfolioPrices | מופעל כל 15 דקות — יושפע מפיצול Orchestrator |
5. בדיקת Message entity — שדות זמינים
| שדה | סוג | שימוש אפשרי ל-step audit | ניתן לשאילתה |
|---|---|---|---|
| type | enum | כן — נשתמש ב-info (ללא שינוי enum) | |
| title | string | כן — נקודד [orchestrator:${runId}] ${step} — ${status} | חלקית (filter title) |
| summary | string | כן — פרטים מובנים (JSON או טקסט) | |
| source | string | כן — שחקן: "Orchestrator:price_refresh" | כן (filter source) |
| severity | enum | כן — info (started/completed), warning (failed) | |
| created_date | date | כן — timestamp אוטומטי | כן (sort/filter) |
| symbol/name/market/price | various | לא נדרש ל-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 | ממתין לאישור בכתב