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 עוברים כמות שהן.
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_KEY | secrets.get() | createCheckoutSession | Safe — נטען מ-base44:runtime secrets, אינו נכתב לקוד/UI/לוג | Confirmed |
| STRIPE_WEBHOOK_SECRET | secrets.get() | stripe-webhook | Safe — נטען מ-base44:runtime secrets, חתימה מאומתת ב-constant-time | Confirmed |
| PRICE_ID (Stripe) | Hardcoded | createCheckoutSession | אינו סוד — מזהה ציבורי. מומלץ להעביר ל-Settings ב-T8.2. | Info |
| Yahoo Finance API | No key | marketPrices.ts | אין סוד — API ציבורי ללא מפתח | Confirmed |
| BASE44_APP_ID | Deno.env.get() | createCheckoutSession | Safe — משתנה סביבה, אינו סוד רגיש | 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, CDN | — | Confirmed |
| Secrets Management | runtime secrets store (secrets.get) | קריאה ושימוש בלבד | Confirmed |
| LLM & AI | InvokeLLM platform integration | Prompts, response schemas, logic | Confirmed |
| Email Delivery | SendEmail (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 |
| RBAC | admin/user built-in | PermissionMatrix (DENY default, 4 תפקידים) + checkPermission מחובר ל-executeTrade | Fixed |
| Audit Trail | — | AuditEvent hash chain + secretScanner | Confirmed |
| Incident Management | — | Incident entity (timeline, root_cause, post-incident review) + BreakGlassEvent + Global Freeze | Fixed |
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)
| Endpoint | Auth | Admin | סיכון |
|---|---|---|---|
| /executeTrade | user | — | ביצוע עסקה — קריטי |
| /rejectTrade | user | — | דחיית עסקה |
| /approveBreakGlass | user | — | אישור חירום — קריטי |
| /verifyReauth | user | — | אימות מחדש — קריטי |
| /chatWithAgent | admin | ✅ | צ'אט עם סוכן (LLM) |
| /manageInvite | admin | ✅ | ניהול הזמנות |
| /createCheckoutSession | none | — | תשלום Stripe — פתוח |
| /stripe-webhook | webhook sig | — | Webhook Stripe |
| /activateTrial | workflow | — | הפעלת ניסיון (app_user_auth) |
| /analyzeStock | user | — | ניתוח מניה (LLM) |
| /searchSymbols | none | — | חיפוש סמלים |
| /fetchChartCandles | none | — | נרות גרף — פתוח |
| /refreshPortfolioPrices | workflow | — | ביצוע יחיד — קריטי |
| /runAgentScan | workflow | — | סריקת סוכנים |
| /refreshFxRate | workflow | — | עדכון שער |
| /refreshIndices | workflow | — | עדכון מדדים |
| /generateDailySummary | workflow | — | סיכום יומי |
| /getPortfolioValueHistory | user | — | היסטוריית שווי |
| runCh*AcceptanceTests | workflow | — | בדיקות קבלה (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