InvestIQ

InvestIQ

ניהול השקעות אוטומטי 1.0

דאשבורדהתראותתיק השקעותחיפוש וניתוח ניירות ערךעסקאותהודעותשווקיםדוח כספים יומישאלות ותשובותשאל את המערכתדוחות מסהגדרותמדריךדף הנחייה למערכת
מצב: PAPER TRADING
info@investiq.co.il054-4860090
InvestIQ — Trigger Engine Specification

מפרט מנוע טריגרים קנוני — M3

גרסה: v0.11תאריך: 9 בספטמבר 2026סטטוס: Candidate for Approvalמסמך: 3 מתוך 5
Candidate for G-TRIGGER — ללא הרשאת קוד, הרצה או שינוי במערכת. v0.11 נגזר מ-Local Engine Pilot Specification v0.31 ו-Canonical Event Schema v0.11 המאושרים. אישור נועל את החוזה הלוגי וההתנהגותי של מנוע הטריגרים עבור M3.

שינויים מ-v0.1 ל-v0.11 — כל 6 הערות הסקירה שולבו

סדר Debounce ↔ Dedup (§5)—הוספת החלטת סדר מפורשת: Debounce נשאר לפני Dedup כי Dedup חל על logical trigger instance כשיר שעדיין לא קיים לפני Debounce. מותר pre-check זול ל-optimization אך אינו מחליף את Dedup הקנוני.
COMPOSITE evaluator (§8)—Design Decision: ב-M3 לא יוגדר COMPOSITE evaluator כללי. תנאי AND/OR מורכבים יוגדרו כ-evaluator דטרמיניסטי ייעודי ומאושר. COMPOSITE generic יישקל רק בשינוי מפרט עתידי כדי למנוע DSL סמוי.
עדכון policy בזמן ריצה (§10)—נוסף כלל evaluation boundary: שינוי policy_version/config_version בזמן ריצה מאפס debounce state תחת הגרסה הישנה; cooldown/dedup שכבר נוצרו מ-FIRE קודם נשמרים למניעת duplicate, אלא אם migration rule מאושר.
Persistence של state (§12)—נוספה דרישה מפורשת: stateful trigger data (debounce, dedup, cooldown) חייב להישמר ב-local persistent storage ל-recovery לאחר restart. אם persistence אינו זמין, stateful capability עובר DEGRADED/HOLD.
Cooldown scope ביניים (§13)—נוסף scope TRIGGER_CATEGORY_SUBJECT (לצד TRIGGER_SUBJECT / TRIGGER_GLOBAL). ברירת מחדל TRIGGER_SUBJECT; CATEGORY scope מותר רק אם הוגדר במפורש ב-policy.
תיקון טיפוסים בדוגמה (§22)—ערכים מספריים בדוגמת ה-JSON שונו מ-strings ל-0 (required_samples, max_sample_gap_ms, duration_ms, max_fires, window_ms) כדי להמחיש את ה-type הצפוי.

1. מטרת המסמך

מסמך זה מגדיר את Trigger Engine של InvestIQ: מנוע דטרמיניסטי, configurable ו-versioned שמזהה תנאים חריגים/משמעותיים ומפיק trigger_fired event קנוני בהתאם ל-Canonical Event Schema v0.11.

המנוע אינו מחליט אם לקנות/למכור, אינו יוצר Trade, אינו משנה Decision/CIO ואינו עוקף Risk Gate. תפקידו היחיד הוא להפוך Observation שעומד בתנאי policy מאושר ל-Event מתועד, ניתן לשחזור ולביקורת.

2. מסמכים מחייבים ותלות

מסמךסטטוסהשפעה על מפרט זה
Target Architecture v0.2מאושרTrigger Engine canonical component; configurable/versioned thresholds; no authority transfer
Migration Plan v0.2מאושרM3, Shadow First, Gates, rollback/stop principles
Local Engine Pilot Specification v0.31מאושרM1-M3 boundaries, no AI/Broker, Trigger ≠ Decision/Trade
Canonical Event Schema v0.11מאושרtrigger_fired contract, envelope, idempotency, validation, schema versioning

במקרה של סתירה, מסמכי היסוד המאושרים וגבולות הסמכות גוברים. שינוי Schema אינו נעשה במסמך זה.

3. Out-of-Scope

  • • אין AI/LLM במנוע M3.
  • • אין Broker connectivity או order creation.
  • • אין Candidate, CIO/Decision או Trade creation.
  • • אין שינוי Risk Gate.
  • • אין שינוי System of Record; Base44 נשאר System of Record.
  • • אין hardcoded operational thresholds.
  • • אין production enforcement ב-M3; מצב M3 הוא SHADOW.
  • • אין News interpretation ב-M3; NEWS category שמורה לחיבור עתידי לאחר milestone מתאים.
  • • אין שינוי Event Schema v0.11 מתוך הקוד או מתוך Trigger configuration.

4. עקרונות מחייבים

עיקרוןכלל מחייב
Deterministicאותו input + אותה policy version + אותו state רלוונטי → אותה תוצאת evaluation.
Configurablethresholds, windows, debounce, cooldown, priority ו-enablement מגיעים מ-policy/config.
Versionedכל evaluation ו-trigger_fired ניתנים לשיוך ל-policy_version/config_version.
Shadow Firstב-M3 המנוע מתעד בלבד ואינו משנה סמכות/מצב מסחרי.
Event Drivenרק condition משמעותי שעבר gating מפיק trigger_fired.
Idempotentאותו logical trigger instance אינו מייצר side effect כפול.
Fail Closedpolicy לא תקין/חסר או input לא כשיר → אין trigger תקין; warning/health בהתאם.
Observableכל evaluation aggregate, fire, suppress ו-error ניתנים למדידה ול-audit.

5. Trigger Lifecycle

#שלבפעולהפלט
1INPUTקבלת observation/state עם timestamp/source/freshnessEvaluation Context
2VALIDATEschema, freshness, required fields, policy availabilityVALID / REJECTED
3EVALUATEהפעלת condition דטרמיניסטיTRUE / FALSE / UNKNOWN
4DEBOUNCEאימות persistence/מספר דגימות אם policy דורשQUALIFIED / SUPPRESSED
5DEDUPבדיקת logical duplicateNEW / DUPLICATE
6COOLDOWNבדיקת חלון השתקהREADY / SUPPRESSED
7RATE LIMITהגבלת event floodREADY / SUPPRESSED
8FIREיצירת trigger instancetrigger_fired event
9RECORDaudit/metrics/state מקומיTrace + counters

FALSE אינו failure. UNKNOWN נוצר כאשר אין די מידע אמין להכרעה, ובמקרה כזה אין trigger_fired; הסיבה מתועדת.

החלטת סדר (v0.11): Debounce נשאר לפני Dedup. הסיבה היא ש-Dedup חל על logical trigger instance כשיר; לפני השלמת Debounce עדיין אין FIRE candidate לוגי יציב. כדי לחסוך משאבים, מותר לבצע pre-check זול ל-duplicate observation לצורך optimization בלבד, אך הוא אינו מחליף את Dedup הקנוני בשלב 5 ואינו משנה semantics.

6. Trigger Definition — חוזה לוגי

שדהטיפוסחובהמשמעות
trigger_idstringכןמזהה יציב של הגדרת trigger.
namestringכןשם תפעולי.
enabledbooleanכןהפעלה/השבתה דרך config/policy.
categoryenumכןMARKET / NEWS / STATE_RISK / OPERATIONAL.
scopeobjectכןmarket/watchlist/component/context שאליהם ההגדרה חלה.
condition_typeenum/stringכןסוג evaluator דטרמיניסטי מאושר.
parametersobjectכןthresholds/windows/parameters; ללא hardcoding.
priorityenumכןLOW / NORMAL / HIGH / CRITICAL.
debounce_policyobjectכןכללי persistence/samples; NONE מותר.
cooldown_policyobjectכןחלון cooldown; NONE מותר.
rate_limit_policyobjectכןמגבלת fires; NONE רק אם אושר במפורש.
freshness_policy_refstringכןהפניה למדיניות freshness החלה.
policy_versionstringכןגרסת policy.
config_versionstringכןגרסת config.
effective_fromtimestamp UTCכןמועד תחולה.
effective_untiltimestamp/nullכןמועד סיום אם קיים.

7. Trigger Categories

קטגוריהM3דוגמאות מותרותהערה
MARKETפעיל ב-Shadowprice movement, volume anomaly, spread/freshness threshold, indicator crossingדטרמיניסטי בלבד
OPERATIONALפעילqueue/storage/clock/config/data-source conditionsאינו trigger מסחרי
STATE_RISKמוגבל/Shadowstate/exposure observation בלבד כאשר input קיים ומאושראינו Risk Gate ואינו חוסם Trade
NEWSReservednew-item detection בלבד בעתידאין semantic/news AI ב-M3

הפעלת category או condition חדש דורשת configuration/policy מאושרים ובדיקת compatibility; אין הרחבה אד-הוק.

8. Condition Evaluators

condition_typeתיאורדוגמת פרמטרים
THRESHOLD_ABOVEvalue > configured thresholdfield, threshold
THRESHOLD_BELOWvalue < configured thresholdfield, threshold
CROSS_UPמעבר מלמטה למעלה דרך thresholdfield, threshold, prior_window
CROSS_DOWNמעבר מלמעלה למטה דרך thresholdfield, threshold, prior_window
PERCENT_CHANGEשינוי אחוזי מול reference/windowfield, reference, percent, window
RANGE_OUTSIDEערך מחוץ לטווח מאושרfield, min, max
STALE_DATAגיל מקור חורג ממדיניותsource_data_age_ms, freshness_policy_ref
STATE_MATCHstate תפעולי שווה לערך מוגדרfield, expected_state

הרשימה היא Registry ראשוני. evaluator חדש הוא שינוי מפרט/registry, לא string חופשי שמכניס לוגיקה בלתי מבוקרת.

Design Decision — COMPOSITE (v0.11): ב-M3 לא יוגדר COMPOSITE evaluator כללי. תנאי AND/OR מורכבים לא יורכבו אד-הוק ממספר trigger_fired events. אם נדרש תנאי מורכב מהותי, הוא יוגדר כ-evaluator דטרמיניסטי ייעודי ומאושר עם inputs/parameters מפורשים. COMPOSITE generic יישקל רק בשינוי מפרט עתידי כדי למנוע DSL סמוי ולוגיקה בלתי מבוקרת.

9. Evaluation Context

שדהחובהמשמעות
evaluation_idכןמזהה evaluation יחיד.
trigger_idכןהגדרת trigger שנבדקת.
observed_atכןזמן observation ב-UTC.
sourceכןמקור observation.
source_timestampמותנהזמן המקור כאשר קיים.
source_data_age_msמותנהגיל המקור לפי Canonical Event semantics.
subject_keyכןasset/component/context ללא PII.
observed_valuesכןערכים נדרשים ל-condition בלבד.
prior_stateמותנהנדרש ל-cross/debounce/stateful evaluators.
policy_versionכןגרסת policy.
config_versionכןגרסת config.
engine_versionכןגרסת engine.

10. Thresholds & Policy Governance

  • • אין threshold מספרי מחייב במסמך זה.
  • • כל threshold מגיע מ-SystemSettings/config/policy המאושרים ב-Base44 ומסונכרן ל-Local Engine.
  • • כל trigger_fired שומר threshold_snapshot רק לערכים שהשתתפו בפועל בהחלטת trigger.
  • • שינוי threshold יוצר config/policy version חדש או versioned revision לפי מנגנון ה-Config המאושר.
  • • Local Engine אינו רשאי להמציא default תפעולי כאשר ערך מחייב חסר. Missing/invalid policy → evaluation UNKNOWN + warning.
  • • Policy rollback חייב להיות traceable; events לאחר rollback נושאים את הגרסה הפעילה בפועל.
עדכון policy בזמן ריצה (v0.11): שינוי policy_version/config_version בזמן ריצה יוצר evaluation boundary: debounce state תחת הגרסה הישנה מתאפס ואינו מועבר לגרסה החדשה; evaluation חדש מתחיל תחת הגרסה החדשה. cooldown/dedup שכבר נוצרו מ-FIRE קודם נשמרים לצורך מניעת duplicate, אלא אם migration rule מאושר ומפורש מגדיר אחרת.

11. Debounce

Debounce נועד למנוע trigger על spike רגעי כאשר policy דורש persistence. הוא אינו משנה threshold אלא מגדיר כמה זמן/דגימות התנאי חייב להישאר TRUE.

שדהמשמעות
modeNONE / CONSECUTIVE_SAMPLES / DURATION
required_samplesמספר דגימות רצופות; רלוונטי רק ל-CONSECUTIVE_SAMPLES
required_duration_msמשך TRUE; רלוונטי רק ל-DURATION
max_sample_gap_msפער מרבי בין דגימות כדי להיחשב רציפות

דגימה UNKNOWN שוברת רצף אלא אם policy עתידי מאושר מגדיר אחרת.

12. Dedup & Logical Trigger Instance

  • • trigger_instance_id מזהה fire יחיד לאחר qualification.
  • • dedup_key נגזר באופן דטרמיניסטי מ-trigger_id + subject_key + logical condition window/context.
  • • retry של אותו trigger_fired שומר event_id ו-idempotency_key בהתאם ל-Canonical Event Schema v0.11.
  • • Dedup של Trigger Engine קודם ל-event delivery idempotency; אלה שתי שכבות שונות.
  • • duplicate condition בתוך אותו dedup context אינו מפיק trigger_fired נוסף; counter של suppression מתעד זאת.
Persistence (v0.11): Stateful trigger data — debounce counters/timestamps, dedup state ו-cooldown state — חייב להישמר ב-local persistent storage באופן שמאפשר recovery לאחר restart. אם persistence אינו זמין/תקין, stateful capability עובר DEGRADED/HOLD ואין FIRE שאינו יכול להבטיח את כללי state.

13. Cooldown

Cooldown מתחיל לאחר FIRE מוצלח לוגית, לא לאחר ACK transport. מטרתו למנוע fire חוזר תכוף של אותה תופעה.

שדהמשמעות
modeNONE / FIXED_DURATION / UNTIL_CONDITION_RESET
duration_msל-FIXED_DURATION בלבד
reset_conditionל-UNTIL_CONDITION_RESET בלבד
scopeTRIGGER_SUBJECT / TRIGGER_CATEGORY_SUBJECT / TRIGGER_GLOBAL. ב-M3 ברירת המחדל היא TRIGGER_SUBJECT; CATEGORY scope מותר רק אם הוגדר במפורש ב-policy.

CRITICAL priority אינו עוקף cooldown אלא אם policy version מאושרת מגדירה override מפורש.

14. Rate Limiting

  • • Rate limit נועד להגן על queue/Base44 מפני event storm, לא להסתיר מצב שוק.
  • • Rate limiting מתבצע לאחר condition/debounce/dedup/cooldown.
  • • suppressed event אינו נעלם: counter + reason נרשמים ב-metrics/audit.
  • • CRITICAL אינו פטור אוטומטית מ-rate limit; מדיניות חריגה חייבת להיות מפורשת.
  • • אם rate limit עצמו גורם לאובדן visibility מהותי, engine עובר DEGRADED ומפיק warning/health בהתאם.

15. Freshness Gate

  • • Trigger המבוסס על market/data input לא יוערך כ-TRUE אם freshness policy מגדירה את הנתון כלא כשיר.
  • • stale input → UNKNOWN או STALE_DATA trigger ייעודי, בהתאם להגדרה; אין שימוש בנתון ישן כאילו הוא live.
  • • source_data_age_ms הוא per-observation; Engine Health הוא מצב מערכתי נפרד.
  • • הספים המדויקים יינעלו ב-Heartbeat/Freshness Policy v0.1 ולא במסמך זה.

16. trigger_fired Mapping ל-Canonical Event Schema v0.11

Canonical fieldמקור ב-Trigger Engine
event_typetrigger_fired
statusFIRED
sourcetrigger_engine
correlation_idscan/evaluation/flow correlation
idempotency_keystable key ל-logical event instance
source_data_age_msEvaluation Context
policy_versionTrigger Definition הפעילה
config_versionConfig הפעיל
payload.trigger_idTrigger Definition
payload.trigger_instance_idFire instance
payload.trigger_categorycategory
payload.reason_code/textevaluator result
payload.threshold_snapshotרק parameters רלוונטיים
payload.observed_valuesרק observed inputs רלוונטיים
payload.priorityTrigger Definition
payload.dedup_keyDedup layer
payload.cooldown_untilCooldown state

payload.policy_version חייב להתאים ל-envelope.policy_version; mismatch הוא REJECT_SCHEMA בהתאם ל-v0.11.

17. Suppression & Audit

suppression_reasonמתי
CONDITION_FALSEcondition לא התקיים
INPUT_UNKNOWNinput חסר/לא אמין
STALE_INPUTfreshness gate נכשל
DEBOUNCE_PENDINGטרם הושלמה persistence
DEDUPLICATEDlogical duplicate
COOLDOWN_ACTIVEבתוך cooldown
RATE_LIMITEDחריגה ממגבלת fire
TRIGGER_DISABLEDהגדרה מושבתת
POLICY_INVALIDpolicy/config חסר או לא תקין

לא כל suppression מפיק warning event. כולם נמדדים ב-Metrics/Audit; warning מופק כאשר מדובר בכשל תפעולי/איכותי שמחייב visibility.

18. Metrics / Telemetry

Metricמשמעות
trigger_evaluations_totalמספר evaluations
trigger_true_totalcondition TRUE לפני gates
trigger_fired_totalevents לוגיים שנוצרו
trigger_suppressed_totalסך suppressions
trigger_suppressed_by_reasonפירוט לפי reason
trigger_unknown_totalUNKNOWN evaluations
evaluation_latency_msזמן evaluation
policy_validation_failurespolicy/config invalid
trigger_event_delivery_failuresכשלי delivery לאחר fire

Metrics אלה משתלבים ב-metrics_snapshot של Canonical Event Schema. אין חובה שכל metric יהיה field top-level; payload metrics יוכל להתרחב backward-compatibly בהתאם לאישור.

19. Failure Modes & Safe Behavior

Failureהתנהגות
Missing/invalid policyUNKNOWN; אין fire תקין; warning; ללא fallback threshold.
Stale market dataUNKNOWN/STALE_DATA לפי policy; אין market fire כאילו data live.
Clock skew חריגDEGRADED/HOLD capability לפי Health Policy.
Disk full/local state unavailableDEGRADED/HOLD; אין stateful trigger שאינו יכול להבטיח dedup/cooldown.
Queue unavailableאין אובדן שקט; local recovery/warning/DEGRADED לפי M1 rules.
Base44 unavailableevaluation מקומי יכול להמשיך רק אם config/policy המאושרים וה-freshness שלהם תקפים; events queued.
Config version mismatchאין הפעלה תחת גרסה לא מזוהה; warning/UNKNOWN.
Evaluator exceptionאין fire; error logged/redacted; warning/metrics.

20. Shadow Mode — M3

  • • כל trigger ב-M3 פועל במצב SHADOW.
  • • אין שינוי Candidate/Decision/Trade/Portfolio/Execution כתוצאה מ-trigger_fired.
  • • התוצאות מושוות להתנהגות/נתוני הייחוס המאושרים לצורך Quality Baseline.
  • • False positives/false negatives, latency, coverage ו-suppression reasons נמדדים.
  • • המעבר מ-SHADOW ל-PRODUCTION/ENFORCED אינו חלק מ-G-TRIGGER ודורש Gate עתידי מפורש.

21. Acceptance Categories ל-Trigger Engine

קטגוריהPASS עקרוני
Determinismאותו input/policy/state מייצר אותה evaluation result.
Policy Integrityאין hardcoded threshold ואין evaluation תחת policy לא מזוהה.
Freshnessstale input אינו מוצג/מוערך כ-live.
Deduplogical duplicate אינו מייצר fire נוסף.
Cooldownfire חוזר suppressed לפי policy.
Rate Limitevent storm נשלט בלי אובדן visibility שקט.
Event Contractכל trigger_fired עובר Canonical Schema v0.11 validation.
Authority Boundaryאפס side effects על Candidate/Decision/Trade/Risk/Execution.
Observabilityevaluations/fires/suppressions/failures ניתנים למדידה.
Recoveryrestart/state recovery אינו יוצר duplicate fire בלתי מוסבר.

הספים המספריים ו-test cases הסופיים יינעלו ב-Pilot Acceptance Test Plan v0.1.

22. דוגמת Trigger Definition — תיעודית בלבד

{
  "trigger_id": "trg-example-market-change",
  "name": "Example configured market change",
  "enabled": true,
  "category": "MARKET",
  "scope": {
    "market": "EXAMPLE",
    "subjects": "configured-watchlist"
  },
  "condition_type": "PERCENT_CHANGE",
  "parameters": {
    "field": "price",
    "reference": "configured-reference",
    "percent": "configured-value",
    "window": "configured-window"
  },
  "priority": "NORMAL",
  "debounce_policy": {
    "mode": "CONSECUTIVE_SAMPLES",
    "required_samples": 0,
    "max_sample_gap_ms": 0
  },
  "cooldown_policy": {
    "mode": "FIXED_DURATION",
    "duration_ms": 0,
    "scope": "TRIGGER_SUBJECT"
  },
  "rate_limit_policy": {
    "max_fires": 0,
    "window_ms": 0
  },
  "freshness_policy_ref": "freshness-policy-ref",
  "policy_version": "pol-vX",
  "config_version": "cfg-vX",
  "effective_from": "2026-09-09T00:00:00.000Z",
  "effective_until": null
}

כל הערכים בדוגמה הם placeholders. אין בדוגמה threshold, interval או limit תפעולי מאושר. ערכים מספריים מופיעים כ-0 להמחשת ה-type הצפוי (v0.11).

23. Derivation Trace

דרישהמקור
Trigger Engine deterministic/configurable/versionedTarget Architecture v0.2; Local Engine Pilot v0.31 §10
M3 / Shadow FirstMigration Plan v0.2 M3; v0.31 §6, §10
Trigger ≠ Candidate/Decision/Tradev0.31 §10; Canonical Event Schema v0.11 §12
trigger_fired payload/envelopeCanonical Event Schema v0.11 §12, §16
policy/config versionsCanonical Event Schema v0.11 envelope; v0.31 §7-10
Freshness separationv0.31 §9; Canonical Event Schema v0.11 §5
Debounce/Cooldown/Rate Limit/Idempotencyv0.31 §10; Canonical Event Schema v0.11 §13
Metrics/Telemetryv0.31 §7; Canonical Event Schema v0.11 metrics_snapshot
No AI/Broker M1-M3v0.31 §12-13
DEGRADED/HOLD failure behaviorv0.31 §9, §14; Canonical Event Schema v0.11 health/warning

New Requirement מפורט במסמך זה: Trigger Definition contract, evaluator registry, suppression reason registry וסדר lifecycle מלא. אלה פירוט טכני הנדרש ליישום הדרישות המאושרות, ומובאים לאישור מפורש במסגרת G-TRIGGER.

24. שאלות לצוות לפני G-TRIGGER

  1. האם Trigger Definition contract כולל את כל השדות הדרושים ל-M3 ללא הכנסת סמכות מסחרית?
  2. האם evaluator registry הראשוני מספיק ל-M3, או חסר evaluator דטרמיניסטי חיוני?
  3. האם category STATE_RISK צריך להישאר מוגבל/Shadow כפי שמוגדר, כדי למנוע חפיפה עם Risk Gate?
  4. האם NEWS צריך להישאר Reserved בלבד ב-M3?
  5. האם סדר lifecycle: Validate → Evaluate → Debounce → Dedup → Cooldown → Rate Limit → Fire נכון?
  6. האם cooldown צריך להתחיל ב-FIRE הלוגי ולא ב-ACK transport כפי שמוצע?
  7. האם dedup_key scope צריך להינעל במסמך זה או להיות evaluator-specific לפי policy?
  8. האם suppression registry מספק לצורך audit ו-Acceptance Plan?
  9. האם metrics המוגדרים מספיקים למדידת false positives/false negatives, latency ו-coverage?
  10. האם קיים blocker לפני מעבר ל-Heartbeat/Freshness Policy v0.1?

25. Gate G-TRIGGER

אישור Trigger Engine Specification v0.11 נועל את החוזה הלוגי וההתנהגותי של מנוע הטריגרים עבור M3. האישור אינו הרשאת קוד, הרצה או שינוי ב-Base44.

לאחר אישור G-TRIGGER, המסמך הבא בסדר המחייב הוא Heartbeat/Freshness Policy v0.1.

26. החלטה מוצעת

לאשר את InvestIQ Trigger Engine Specification v0.11 כמפרט המחייב ל-M3, בכפוף להערות הצוות ולנעילת G-TRIGGER.

InvestIQ Trigger Engine Specification v0.11 | Candidate for Approval | 9 September 2026

info@investiq.co.il054-4860090