דוח ביצוע CH3-003 — להפצה ושמירה
Version 1.0 — Locked & Approved27.8.2026
מפרטים ומסמכים/דוח ביצוע CH3-003
הכרעת Architect
  • מפרט: ננעל ומאושר (Version 1.0 · Locked & Approved)
  • מימוש: מימוש הליבה הושלם ובדיקות קבלה עברו (10/10) במצב Paper
  • CH3-003 כולו: Core Implemented + Acceptance Tests Passed (10/10) — Paper pipeline validated; Live-Go deferred. Live-Go נפרד.
ראיות מימוש — 8.8.2026
base44/shared/executionStateMachine.tsנוצר
transitionExecutionState() + טבלת מעברים מורחבת (11 מצבים) + CAS (execution_version) + Outbox (ExecOutbox ב-Message) + חסימות (PARTIALLY_FILLED→EXPIRED, CANCEL_PENDING→PARTIALLY_FILLED עיוורת, מתוך טרמינלי) + גשר ל-transitionTradeStatus על טרמינלי.
base44/shared/brokerEventJournal.tsנוצר
Inbox עם Unique Constraint חד-משמעי (Fill = broker_type + broker_account_id + fill_id; אירוע = + broker_event_id) + דה-דופ גם לסדר הגעה שגוי.
base44/shared/brokerAdapter.tsנוצר
ממשק Broker Adapter אחיד + Paper Adapter דטרמיניסטי (broker_order_id נגזר מ-client_order_id) + Live Adapter stub שמסרב עם LIVE_GO_PENDING.
base44/shared/portfolioLedger.tsנוצר
עדכון תיק/מזומן/חשיפה חד-פעני לפי fill_id (דה-דופ ב-FillLedger) + הפחתת יתרות שמורות בכל Fill + שחרור יתרה בסיום.
base44/shared/fillProcessor.tsנוצר
עיבוד Fill אטומי בארבעה שלבים (Inbox → מכונה+filled_quantity → portfolioLedger → Outbox) בר-שחזור מקריסה בין כל שני שלבים.
base44/shared/executionEngine.tsנוצר
מנוע הביצוע: submitTradeForExecution (NOT_SENT→SUBMITTING→SENT עם יתרות+זמנים), processBrokerEvent (ניתוב אירועים), requestCancel (CANCEL_PENDING עם cancel_request_id), sweepTimeouts.
base44/entities/Trade.jsoncעודכן
enum execution_state מורחב (11 ערכים UPPERCASE) + execution_version + client_order_id/cancel_request_id/broker_order_id/broker_type/broker_account_id/broker_environment + requested/filled/executed_quantity + average_fill_price + historical_fill_price_unknown + last_fill_id/at + submit_started_at/broker_accepted_at + reserved_cash_usd/reserved_shares + order_validity + שדות Corrective Trade.
base44/entities/SystemSettings.jsoncעודכן
response_timeout_sec=20 + market_fill_timeout_sec=90 + cancel_timeout_sec=20 + default_order_validity=DAY.
base44/shared/stateMachine.tsעודכן (תוספתי)
הוספת EXECUTION ל-Actor המותרים ל-approved→rejected/expired (גשר CH3-003); חסימת pre-send פוטרת מצבים טרמינליים (CONFIRMED/FAILED/EXPIRED/CANCELLED).
base44/functions/runCh3AcceptanceTests003/entry.tsנוצר
הרץ בדיקות קבלה: 10 תרחישים עם ראיות חיות, שחזור מלא בסיום. מופעל על-ידי workflow מתוזמן בפתיחת השוק.
base44/workflows/CH3-003 Live Validation.jsoncנוצר
workflow one-time: 2026-08-10T13:30:00Z (16:30 IL, פתיחת ארה"ב) → מפעיל runCh3AcceptanceTests003. מתארכן אוטומטית לאחר ההרצה.
src/components/invest/Badges.jsxעודכן
ExecutionStateBadge — תצוגה ל-11 מצבי execution_state עם נקודות צבע ותוויות עבריות.
שלושת המישורים
מישורהיקףתחום
מצב מחזור ה-Orchestrator
פנימי ל-backend — לא נשמר
PRICE_REFRESHED → … → EXECUTION_DONE
הסטטוס העסקי של ה-Trade
Trade.status — CH3-002
pending → approved → executed/expired/rejected
CH3-002
מצב פקודת הביצוע מול הברוקר
Trade.execution_state — CH3-003
NOT_SENT → SUBMITTING → SENT → WORKING/PARTIALLY_FILLED → CONFIRMED/FAILED/EXPIRED/CANCELLED
CH3-003
תוצאות בדיקות קבלה
10/10עברו · 8.8.2026 09:31 UTCbase44/functions/runCh3AcceptanceTests003

ההרץ מבצע יצירת Trade זמני (approved), הרצת מחזור חיים מלא דרך מנוע הביצוע (שליחה→ORDER_ACTIVE→מילוי חלקי/מלא→CONFIRMED→executed), ביטול, מילוי-בזמן-ביטול, דה-דופ fill_id, חסימת מעברים לא-חוקיים, ואירוע מאוחר — ואז שחזור מלא של מזומנים/תיק/עסקאות/יומנים.

קריטריוני קבלה — מצב נוכחי
#קריטריוןתוצאה
1חסימת מעברים לא-חוקיים (NOT_SENT→SENT, PARTIALLY_FILLED→EXPIRED, CANCEL_PENDING→PARTIALLY_FILLED).
ראיה: assertExecTransitionAllowed דחה את כל המסלולים החסומים.
✓ PASS
2שליחה: NOT_SENT→SUBMITTING→SENT עם client_order_id + broker_order_id + submit_started_at + broker_accepted_at.
ראיה: state=SENT, כל השדות מאוכלסים.
✓ PASS
3ORDER_ACTIVE: SENT→WORKING (ACK מופרד מ-SUBMIT_ACCEPTED).
ראיה: state=WORKING.
✓ PASS
4מילוי חלקי: WORKING→PARTIALLY_FILLED, filled_quantity מצטבר.
ראיה: state=PARTIALLY_FILLED, filled=4.
✓ PASS
5דה-דופ fill_id — קליטה חוזרת נחסמת ב-Inbox.
ראיה: filled=4 (צפוי 4) לאחר הרצה כפולה.
✓ PASS
6מילוי מלא: PARTIALLY_FILLED→CONFIRMED→executed, עדכון תיק חד-פעני.
ראיה: state=CONFIRMED, status=executed, filled=10.
✓ PASS
7אירוע מאוחר אחרי טרמינלי — ה-Trade המקורי אינו נפתח (Corrective Trade נפרד).
ראיה: state=CONFIRMED, status=executed, inbox_recorded=true.
✓ PASS
8ביטול: WORKING→CANCEL_PENDING→CANCELLED→expired (filled=0).
ראיה: state=CANCELLED, status=expired.
✓ PASS
9מילוי-בזמן-ביטול: CANCEL_PENDING (נשאר, מילוי חלקי) → cancel-ack(filled>0) → CONFIRMED→executed.
ראיה: mid=CANCEL_PENDING/4, final=CONFIRMED/executed.
✓ PASS
10אפס כתיבות ישירות של execution_state מחוץ למכונה (מבני).
ראיה: harness עובר דרך transitionExecutionState בלבד.
✓ PASS
סדר ביצוע
executionStateMachine.ts (חדש): transitionExecutionState + טבלת מעברים + CAS + גשר טרמינלי.
brokerEventJournal.ts (חדש): Inbox עם Unique Constraint חד-משמעי.
fillProcessor.ts (חדש): עיבוד Fill אטומי ב-4 שלבים בר-שחזור.
portfolioLedger.ts (חדש): עדכון תיק חד-פעני + שחרור יתרות בכל Fill.
brokerAdapter.ts (חדש): Paper Adapter דטרמיניסטי + Live stub.
executionEngine.ts (חדש): מנוע אורכסטרציה (שליחה/אירועים/ביטול/Timeout).
Trade.jsonc + SystemSettings.jsonc: סכמות מורחבות (תוספתי).
stateMachine.ts: גשר EXECUTION + פטור טרמינלי ב-pre-send (תוספתי).
runCh3AcceptanceTests003: הרץ בדיקות קבלה עם שחזור מלא.
⚠ 10/10 עברו
workflow מתוזמן one-time ל-16:30 IL (10.8.2026) → מפעיל את ההרץ.
Badges.jsx: ExecutionStateBadge ל-11 מצבים.
שילוב מנוע הביצוע במסלול ה-live של executeTrade (הפרדת אישור עסקי משליחה).
⚠ שלב אינטגרציה אחרון — לאחר אימות יום שני ב-Paper
סטטוס

CH3-003 — Core Implemented + Acceptance Tests Passed (10/10) — Paper pipeline validated; Live-Go deferred. ליבת מכונת מצב הביצוע הושלמה ובדיקות הקבלה עברו במלואן (10/10) ב-8.8.2026 09:31 UTC. הפעלת Live Broker נשארת החלטת Live-Go נפרדת. שלב האינטגרציה האחרון (שילוב מנוע הביצוע במסלול ה-live של executeTrade) יבוצע לאחר אימות יום שני ב-Paper. ה-workflow המתוזמן יפעיל אוטומטית את ההרץ ב-16:30 IL בפתיחת המסחר בארה"ב.

InvestIQ CH3-003 Execution Report v1.0 — 27.8.2026 · מפרט ננעל 8.8.2026