מפרטים ומסמכים/CH8/T8.1 — מיפוי As-Is

T8.1 — מיפוי As-Is ואחריות תשתיתית

T8.1 v1.0 — As-Is Inventory (Read-Only) · 11 באוגוסט 2026

מיפוי קריאת-קוד בלבד. לא בוצע שינוי במערכת. כל טענה מסווגת Confirmed / Gap / Not Found.

31
Confirmed ✅
8
Gaps פתוחים
4
Partial / Info
18
פונקציות חשופות (P1)

ממצא קריטי — חשיפת error.message ב-Response.json(18)

✅ נפתר ב-T8.2: כל 18 הפונקציות משתמשות ב-errorSanitizer.ts

safeErrorResponse מחזיר הודעה כללית ללקוח, רושם פירוט ל-console.error עם correlation_id. רק validation errors עוברים כמות שהן.

P1
executeTradeerror.message → 500מדליף exception/stack ללקוח. עלול לחשוף נתיבי קובץ או מבנה פנימי.
P1
stripe-webhookerror.message → 500מדליף שגיאת Stripe/פנימית לקורא ה-Webhook.
P1
verifyReautherror.message → 500מדליף שגיאת אימות פנימית.
P1
approveBreakGlasserror.message → 500מדליף שגיאה בפעולת חירום.
P1
createCheckoutSessionerror.message → 500מדליף שגיאת Stripe או פנימית.
P1
chatWithAgenterror.message → 500מדליף שגיאת LLM או פנימית.
P1
manageInviteerror.message → 500 + console.errorמדליף שגיאה + כותב ל-console (לא מתועד).
P1
activateTrialerror.message → 500 + console.errorמדליף שגיאה + כותב ל-console.
P1
analyzeStock"שגיאה פנימית: " + error.messageמדליף שגיאה עם קידומת עברית.
P1
searchSymbolserror.message → 500מדליף שגיאת Yahoo/פנימית.
P1
fetchChartCandleserror.message (ללא סטטוס!)מדליף שגיאה ללא קוד HTTP 500 — תקלת תקשורת.
P1
refreshPortfolioPriceserror.message → 500מדליף שגיאת ביצוע פנימית — הפונקציה הקריטית ביותר.
P1
runAgentScanerror.message → 500מדליף שגיאת סריקה/LLM.
P1
rejectTradeerror.message → 500מדליף שגיאת מכונת מצבים.
P1
refreshFxRateerror.message → 500מדליף שגיאת LLM/רישום.
P1
refreshIndiceserror.message → 500מדליף שגיאת LLM/רישום.
P1
generateDailySummaryerror.message → 500מדליף שגיאת סיכום.
P1
getPortfolioValueHistoryerror.message → 500מדליף שגיאת Yahoo/פנימית.

Service Identity Inventory(5)

Confirmed
base44.asServiceRolePlatform Service Role · כל ה-backend functionsתפקיד שירות יחיד לכל הפונקציות. אין הפרדת זהויות בין פונקציה לפונקציה. גישה רחבה לכל הישויות.
Confirmed
AgentConfig.nameLogical Agent Name · runAgentScan, refreshPortfolioPricesזיהוי לוגי בלבד — אינו משמש לאימות או הרשאות. מופיע ב-actor/agent_name ב-Audit.
Confirmed
actor_typeAudit Field · AuditEventuser / agent / system / scheduler. נוסף ב-CH7 T7.2. אינו מחליף service_identity יציב.
Confirmed
logical_roleAudit Field · AuditEventOperator / Scanner / Risk Gate / Execution / Broker / System Admin / Security Admin / Auditor / CIO Shadow. נוסף ב-CH7 T7.2.
Gap
service_identity (פורמלי)Missing · —אינו קיים. אין זהות שירות יציבה עם סוד ייעודי. כל הפונקציות פועלות תחת asServiceRole אחד. T8.2 ימפה ויממש.

Secrets Inventory(5)

שםמקורנצרך ע"יחשיפהסטטוס
STRIPE_SECRET_KEYsecrets.get()createCheckoutSessionSafe — נטען מ-base44:runtime secrets, אינו נכתב לקוד/UI/לוגConfirmed
STRIPE_WEBHOOK_SECRETsecrets.get()stripe-webhookSafe — נטען מ-base44:runtime secrets, חתימה מאומתת ב-constant-timeConfirmed
PRICE_ID (Stripe)HardcodedcreateCheckoutSessionאינו סוד — מזהה ציבורי. מומלץ להעביר ל-Settings ב-T8.2.Info
Yahoo Finance APINo keymarketPrices.tsאין סוד — API ציבורי ללא מפתחConfirmed
BASE44_APP_IDDeno.env.get()createCheckoutSessionSafe — משתנה סביבה, אינו סוד רגישConfirmed

External Dependencies(6)

Confirmed
Yahoo Finance APIquery1/query2.finance.yahoo.comauth: ללא (ציבורי) · data: מחירי שוק, נרותrisk: נקודת כשל יחידה; אין SLA; חסימת rate-limit אפשרית
Confirmed
Stripe APIapi.stripe.comauth: STRIPE_SECRET_KEY · data: תשלומים ומנוייםrisk: סוד מאובטח ב-runtime; חתימת Webhook מאומתת
Confirmed
Base44 InvokeLLMbase44 platformauth: asServiceRole · data: ניתוח AI, סיכומים, שער יציגrisk: מודל gemini_3_flash; צריכת credits; השהיה אפשרית
Confirmed
Base44 SendEmailbase44 platformauth: asServiceRole · data: הודעות למשתמשים רשומיםrisk: מגיע רק למשתמשים רשומים
Fixed
Bank of Israel (שער יציג)api.boi.org.il — חסום (Incapsula)auth: ללא · data: שער USD/ILS — לא נגישrisk: BOI API חסום; Frankfurter (ECB) משמש כמקור ראשי
Confirmed
Frankfurter API (ECB)api.frankfurter.appauth: ללא (ציבורי) · data: שער USD/ILS (ECB reference)risk: נמוך — קריאה ישירה, אמין

Responsibility Matrix — Base44 vs InvestIQ(12)

תחוםBase44 (פלטפורמה)InvestIQ (אפליקציה)סטטוס
Authentication & Sessionsניהול טוקנים, סשנים, אימות אימיילבדיקת role (admin/user) בלבדConfirmed
Database & Storageאחסון ישויות, RLS, גיבוי תשתיתסכמות ישויות, לוגיקה עסקיתConfirmed
Hosting & TLSאירוח, TLS, CDNConfirmed
Secrets Managementruntime secrets store (secrets.get)קריאה ושימוש בלבדConfirmed
LLM & AIInvokeLLM platform integrationPrompts, response schemas, logicConfirmed
Email DeliverySendEmail (registered users only)תוכן וטריגריםConfirmed
At-Rest Encryptionאחריות פלטפורמהאין קוד ייעודיConfirmed
Backup & Restoreגיבוי תשתיתי5 RpoRtoPolicy + 5 BackupPolicy records (proposed_baseline; infrastructure_verified=false)Partial
Monitoring & Alertsתשתית בסיסיתAgentLog/Alert/Message/DataQualityLog (Business + Data Quality)Partial
RBACadmin/user built-inPermissionMatrix (DENY default, 4 תפקידים) + checkPermission מחובר ל-executeTradeFixed
Audit TrailAuditEvent hash chain + secretScannerConfirmed
Incident ManagementIncident entity (timeline, root_cause, post-incident review) + BreakGlassEvent + Global FreezeFixed

Schema & Encryption(6)

Confirmed
Entities (20+)mechanism: Base44 JSON schema + RLSencryption: Base44 at-rest (platform)
Confirmed
AuditEventmechanism: Append-Only + SHA-256 hash chainencryption: Base44 at-rest + hash integrity
Confirmed
Secretsmechanism: base44:runtime secrets storeencryption: Platform-managed
Confirmed
Webhook Signaturemechanism: HMAC-SHA256 via Web Cryptoencryption: Signature verification (constant-time)
Confirmed
User Passwordsmechanism: Base44 auth (bcrypt)encryption: Platform-managed
Partial
Backupsmechanism: 5 BackupPolicy records (encryption=true, off-site, retention)encryption: מוגדר — לא מאומת עד T8.5

Logs & Alerts(9)

Confirmed
AuditEventBusiness + Security · Append-only hash chain, actor_type/logical_role, secret scanretention: TBD (retentionPolicy.ts)
Confirmed
AgentLogBusiness · פעילות סוכנים (שם, סוג, סיכום, ביטחון)retention: TBD
Confirmed
AlertBusiness · איתותי קנייה/מכירה/סיכוןretention: TBD
Confirmed
MessageBusiness (Audit Trail) · הודעות מערכת, צעדי ריצה (runStep)retention: 30 ימים (cleanupOldMessages)
Confirmed
SmokeTestResultBusiness · תוצאות בדיקות עשןretention: TBD
Fixed
console.errorInfrastructure · manageInvite, activateTrial — הוסר; safeErrorResponse מרכז רישוםretention: ארעי (server console)
Gap
Infrastructure LogsInfrastructure · לא קיים באפליקציה (Base44 platform)retention: לא ידוע
Gap
Security LogsSecurity · לא קיים כזרם עצמאיretention:
Fixed
Data Quality LogsData Quality · DataQualityLog entity + logDataQuality() — פעילretention: מתמשך (entity store)

Endpoints & Access Control(19)

EndpointAuthAdminסיכון
/executeTradeuserביצוע עסקה — קריטי
/rejectTradeuserדחיית עסקה
/approveBreakGlassuserאישור חירום — קריטי
/verifyReauthuserאימות מחדש — קריטי
/chatWithAgentadminצ'אט עם סוכן (LLM)
/manageInviteadminניהול הזמנות
/createCheckoutSessionnoneתשלום Stripe — פתוח
/stripe-webhookwebhook sigWebhook Stripe
/activateTrialworkflowהפעלת ניסיון (app_user_auth)
/analyzeStockuserניתוח מניה (LLM)
/searchSymbolsnoneחיפוש סמלים
/fetchChartCandlesnoneנרות גרף — פתוח
/refreshPortfolioPricesworkflowביצוע יחיד — קריטי
/runAgentScanworkflowסריקת סוכנים
/refreshFxRateworkflowעדכון שער
/refreshIndicesworkflowעדכון מדדים
/generateDailySummaryworkflowסיכום יומי
/getPortfolioValueHistoryuserהיסטוריית שווי
runCh*AcceptanceTestsworkflowבדיקות קבלה (10+ פונקציות)

RPO/RTO — Proposed Baseline (לא מאומת)(5)

כל ערכי ה-RPO/RTO הם Proposed Baseline בלבד. infrastructure_verified=false. לא בוצע Restore או DR Drill. חסם ל-T8.5.

Gap
Entities (primary store)RPO: Proposed: 0 (platform-managed) · RTO: Proposed: 1h
Gap
AuditEvent (hash chain)RPO: Proposed: 0 (append-only) · RTO: Proposed: 1h
Gap
Message (audit trail)RPO: Proposed: 30d retention · RTO: Proposed: 1h
Gap
AgentLogRPO: Proposed: 90d · RTO: Proposed: 4h
Gap
File StorageRPO: Proposed: 24h · RTO: Proposed: 4h

Smoke — תקינות מינימלית

18 backend functions — קריאה הצליחה
28+ shared modules — קריאה הצליחה
2 סודות (Stripe) — מאובטחים ב-runtime
✅ 18 פונקציות — errorSanitizer הוחל (T8.2)
✅ RBAC checkPermission מחובר ל-executeTrade (T8.2)
✅ Frankfurter API מחליף LLM ב-refreshFxRate (T8.2)

הצלבת T8.2 — פריטים שנפתרו

P1 ✅ סניטציה: errorSanitizer.ts הוחל על 18 פונקציות — הודעה כללית + רישום פנימי עם correlation_id.
P1 ✅ Bank of Israel: refreshFxRate עבר ל-Frankfurter API ישיר (ECB), fallback ל-LLM.
P1 ✅ RBAC: checkPermission מחובר ל-executeTrade; 10 רשומות PermissionMatrix (DENY default, 4 admin roles).
P2 ✅ Incident entity נוצרה עם timeline, root_cause, post_incident_review, correlation_id.
P2 ✅ DataQualityLog entity + logDataQuality() — כל בדיקת איכות נרשמת למאגר.
P2 ✅ BackupPolicy: 5 רשומות עם encryption, retention, restore_test_frequency.
P2 ✅ console.error הוסר מ-manageInvite/activateTrial — safeErrorResponse מרכז רישום.
P1 פתוח: service_identity פורמלי — דרוש מודל זהויות נפרד לפונקציות רגישות.
P3 פתוח: PRICE_ID hardcoded ב-createCheckoutSession — דרוש העברה ל-Settings.
P1 חלקי: RPO/RTO — 5 רשומות נוצרו, אך infrastructure_verified=false — חסם T8.5 (DR Drill).
InvestIQ · CH8 T8.1 · T8.1 v1.0 — As-Is Inventory (Read-Only) · 11 באוגוסט 2026