CH5-005 · גרסאות ידע, Audit, Lineage ו-Retention
גרסה 0.2 · 9.8.2026, 10:03 · המפרט החמישי של CH5 — Versioned Stores + Audit Append-Only + Lineage + Retention + Tombstone
נכון לעדכון אחרון: 27.8.2026, 14:32
✅ Approved for Implementation — Version 0.2 (09.08.2026)
מפרט CH5-005 v0.2 אושר לביצוע ב-09.08.2026. לא נדרש סבב Review נוסף. חמשת התיקונים יושמו במלואם ובעקביות: (1) הפרדת גרסאות — PolicyVersion (מדיניות וספי סיכון בלבד), SystemSettingsVersion (הגדרות מערכת ותפעול), AgentConfigVersion (תצורת סוכן); AgentConfig מכיל current_config_version_id ו-current_profile_version_id בנפרד. (2) שלמות Audit — AuditEvent כולל idempotency_key, sequence_number, previous_event_hash, event_hash, hash_algorithm/hash_version, schema_version; שינוי קריטי וכתיבת Audit מתבצעים ב-Transaction מקומי + Outbox; שינוי Policy/הרשאה/מחיקה/Admin אינו מוצלח בלי Audit אמין. (3) Retention ומחיקה — מספרים מסומנים Proposed Baseline; נוספו legal_hold, purge_due_at, אישור מחיקה, סיבת החרגה; מחיקה פיזית של Payload מותרת לפרטיות/רישוי עם Tombstone לא-רגיש; Tombstone נשמר עד תום Retention או Legal Hold. (4) הפעלת גרסה ו-Restore — הפעלה באמצעות VersionActivationEvent או מצביע פעיל עם CAS ו-Audit; Restore יוצר גרסה חדשה המקושרת למקור, לא דורס גרסה פעילה. (5) עדכון תלות — CH5-004 אושר לביצוע כ-v0.4. Version 1.0 ייקבע לאחר המימוש ואישור דוח הביצוע.
עיקרון מחייב: Append-Only — שרשרת ראיות בלתי-נשברת
Audit הוא Append-Only עם שרשרת Hash (previous_event_hash, event_hash, sequence_number) — אין עדכון או מחיקה, ושרשרת Hash מוכיחה שלא בוצע שינוי. שינוי קריטי (Policy, הרשאה, מחיקה, Admin) וכתיבת Audit מתבצעים ב-Transaction מקומי + Outbox — אינו נחשב מוצלח בלי Audit אמין. מחיקה מורשית יוצרת Tombstone עם legal_hold ו-purge_due_at — מחיקת Payload פיזית מותרת לפרטיות/רישוי עם Tombstone לא-רגיש. Tombstone נשמר עד תום Retention או Legal Hold. הפעלת גרסה דרך VersionActivationEvent עם CAS. Restore יוצר גרסה חדשה — אינו דורס גרסה פעילה. Secrets אינם נשמרים ב-Audit, Tombstone או Snapshot.
CH5-001 זיהה פערים: SystemSettings אינו גרסאי — שינוי מדיניות מוחק את הקודם ללא יכולת שחזור; AgentConfig ו-AgentProfile אינם מקושרים גרסאית ל-AnalysisOutput; אין Audit Append-Only מאוחד לכל שינוי מרכזי (מחיקה, ייצוא, הרשאה, Restore); אין Lineage מקצה לקצה החוצה את כל הישויות; ואין Retention מדורג — נתונים נשמרים או נמחקים ללא מדיניות רישוי/רגישות/עלות. בנוסף, מחיקה מורשית שוברת שרשרת ראיות — אין Tombstone. ללא ישות AuditEvent ייעודית, לא ניתן לשחזר מחזור החלטה מלא או להוכיח שרשרת ראיות.
להבטיח שחזור מלא, גרסאות Policy/Model/Prompt ו-Tombstone למחיקה מורשית ללא שבירת שרשרת ראיות. המפרט הופך את Prompt, Model, Policy, SystemSettings, Schema ו-AgentProfile לישויות גרסאיות; מקשר כל Analysis/Decision לגרסאות ו-input_refs ששימשו אותו; יוצר Audit Append-Only לכל שינוי מרכזי; מגדיר Lineage מקצה לקצה לפי מזהי מחזור; ומנהיג Retention מדורג ו-Tombstone.
גרסאות מדיניות וספי סיכון בלבד — max_per_trade_pct, max_single_position_pct, max_sector_exposure_pct, daily_loss_limit_pct, auto_execute_threshold, automation_mode. אינו מכיל הגדרות מערכת תפעוליות. שינוי Policy פעיל מחייב גרסה, approved_by ו-effective_from.
גרסאות הגדרות מערכת ותפעול — fx_rate_usd_ils, scan_interval_minutes, trading_mode, tax_rate, tax_method, response_timeout_sec, market_fill_timeout_sec, cancel_timeout_sec, approval_ttl_hours, proposal_ttl_hours. נפרד מ-PolicyVersion.
גרסאות תצורת סוכן — sources, strategy, schedule_cron, region, market, asset_types. נפרד מ-AgentProfileVersion (חוזי אחריות). AgentConfig מכיל current_config_version_id ו-current_profile_version_id בנפרד.
גרסאות Prompt לסוכנים — כל שינוי יוצר גרסה חדשה. AnalysisOutput מקושר לגרסת ה-Prompt ששימשה.
גרסאות מודל LLM — כל שינוי model_profile יוצר גרסה. AnalysisOutput מצביע על המודל שהפיק אותו.
גרסאות סכמת ישויות — כל שינוי Schema יוצר גרסה. רשומות ישנות נשארות קריאות בגרסתן המקורית.
גרסאות AgentProfile — mission, responsibilities, prohibited_actions, activation_policy. מקושר ל-AnalysisOutput.profile_version.
AuditEvent הוא Append-Only — אין עדכון או מחיקה. כל שינוי מרכזי, מחיקה, ייצוא, הרשאה, Restore ופעולת אדמין יוצרים רשומת Audit חדשה.
שדות: event_id, event_type (CREATE/UPDATE/DELETE/EXPORT/RESTORE/PERMISSION/ADMIN), entity_type, entity_id, actor (user_id / agent_id / system), action_detail, before_ref, after_ref, decision_cycle_id (אם רלוונטי), correlation_id (אם רלוונטי), timestamp (UTC), ip_address, session_id, idempotency_key, sequence_number, previous_event_hash, event_hash, hash_algorithm, hash_version, schema_version
אינווריאנטים
- Append-Only — אין עדכון או מחיקה של רשומת Audit.
- שרשרת Hash — כל אירוע מכיל previous_event_hash ו-event_hash; שינוי כלשהו יתגלה ב-hash chain.
- sequence_number רציף ומונוטוני — אין פערים או כפילויות.
- שינוי קריטי (Policy, הרשאה, מחיקה, Admin) וכתיבת Audit מתבצעים ב-Transaction מקומי + Outbox — אינו נחשב מוצלח בלי Audit שנשמר באופן אמין.
- Secrets ו-Tokens אינם נשמרים ב-AuditEvent.
- אין Cascade Delete לשרשרת החלטה — מחיקת Trade אינה מוחקת את ה-Audit שלו.
- כל אירוע Audit מקושר ל-decision_cycle_id ו-correlation_id אם רלוונטי.
Lineage מקצה לקצה — מ-Derived דרך Canonical ל-Raw (CH5-004), ומ-Decision דרך Trade ל-Fill ל-Position (CH5-003). כל ישות במסלול מקושרת ל-decision_cycle_id ו-correlation_id.
שאילתת שחזור: recoverFullLineage(decision_cycle_id) → מחזיר: Snapshots (CH5-003), Data Lineage (CH5-004), ישויות מסלול (Candidate→Fill), גרסאות (Policy/Prompt/Model), וכל אירועי ה-Audit הקשורים.
מחיקה מורשית יוצרת Tombstone — רשומת מצבה שמתעדת מה נמחק, מתי, על-ידי מי ומדוע. אין מחיקה פיזית של שרשרת ראיות. כאשר פרטיות או רישוי מחייבים מחיקה פיזית, מותר למחוק את ה-Payload ולשמור Tombstone לא-רגיש עם Hash והפניה. Tombstone אינו נשמר לנצח — הוא נשמר עד תום Retention או Legal Hold.
שדות: tombstone_id, entity_type, entity_id, deleted_by, deleted_at (UTC), reason, data_summary (סיכום ללא נתונים רגישים), payload_hash (Hash של ה-Payload שנמחק), retention_until (UTC), purge_due_at (UTC — מועד מחיקה פיזית מלאה), legal_hold (boolean), deletion_approved_by, deletion_approval_date (UTC), exception_reason (סיבת החרגה למחיקה פיזית של Payload), cascade_ref (אם מחיקת אב לבנים)
אינווריאנטים
- Tombstone נשמר עד תום Retention או Legal Hold — אינו נשמר לנצח.
- legal_hold=true חוסם מחיקה/מחיקה פיזית מלאה עד להסרה מפורשת.
- מחיקת Payload פיזית מותרת רק כאשר פרטיות או רישוי מחייבים — עם אישור מחיקה וסיבת החרגה מתועדים.
- לאחר מחיקת Payload פיזית — Tombstone הלא-רגיש (עם Hash והפניה) נשמר עד תום Retention או Legal Hold.
- מחיקת Trade אינה מוחקת את ה-Fill או ה-Audit הקשורים.
- נתונים רגישים (Secrets, PII) אינם נשמרים ב-data_summary.
- Cascade Delete אסור לשרשרת החלטה — רק Tombstone מקושר.
Archive ושחזור גרסה ללא שינוי timestamps או versions מקוריים. Restore אינו מחזיר רשומה ישנה למקומה ואינו דורס גרסה פעילה — הוא יוצר גרסה חדשה המקושרת לגרסה ששוחזרה, תוך שמירת הזמנים והגרסה המקוריים כמטא-נתונים.
שדות: archive_id, entity_type, entity_id, version, archived_at (UTC), archived_by, original_timestamps_preserved (true), restore_count, storage_tier, restored_as_version_id (הגרסה החדשה שנוצרה מהשחזור), restored_from_version_id (הגרסה המקורית ששוחזרה)
אינווריאנטים
- Archive אינו משנה timestamps או versions מקוריים.
- Restore אינו דורס גרסה פעילה — הוא יוצר גרסה חדשה המקושרת למקור.
- הגרסה החדשה מכילה מטא-נתונים: restored_from_version_id, original timestamps.
- Restore יוצר רשומת Audit נפרדת (RESTORE).
- Archive ניתן לבדיקה — Restore מוצלח מוכיח שלמות.
הפרדת גרסאות: PolicyVersion (מדיניות וספי סיכון בלבד), SystemSettingsVersion (הגדרות מערכת ותפעול), AgentConfigVersion (תצורת סוכן) — עם supersedes_version. AgentConfig מכיל current_config_version_id ו-current_profile_version_id בנפרד.
הפיכת Prompt, Model, Schema ו-AgentProfile לישויות גרסאיות נפרדות.
קישור כל AnalysisOutput ו-Decision לגרסאות Policy/Prompt/Model/Schema/Profile/Config ששימשו אותן (input_refs).
יצירת AuditEvent Append-Only עם שרשרת Hash (previous_event_hash, event_hash), sequence_number, idempotency_key, hash_algorithm/hash_version, schema_version — לכל שינוי מרכזי, מחיקה, ייצוא, הרשאה, Restore ופעולת אדמין.
שינוי קריטי (Policy, הרשאה, מחיקה, Admin) וכתיבת Audit מתבצעים ב-Transaction מקומי + Outbox — אינו נחשב מוצלח בלי Audit אמין.
קישור כל AuditEvent ל-entity_type, entity_id, decision_cycle_id (אם רלוונטי) ו-correlation_id.
הפעלת גרסה באמצעות VersionActivationEvent או מצביע פעיל עם CAS ו-Audit — אין עדכון effective_to של גרסה ישנה (Append-Only).
Lineage מקצה לקצה משולב: Data Lineage (CH5-004) + Decision Lineage (CH5-003) + Version Lineage + Audit Lineage.
כלי שחזור משולב: recoverFullLineage(decision_cycle_id) — מחזיר Snapshots, Data, ישויות מסלול, גרסאות ו-Audit.
Tiered Retention לפי סוג מידע, שימוש בהחלטה, רישוי, רגישות ועלות — מספרים מסומנים Proposed Baseline עד אישור משפטי/רישוי/עלות.
Tombstone למחיקה מורשית — עם legal_hold, purge_due_at, אישור מחיקה, סיבת החרגה. מחיקת Payload פיזית מותרת לפרטיות/רישוי עם Tombstone לא-רגיש (Hash + הפניה). Tombstone נשמר עד תום Retention או Legal Hold.
Archive ושחזור גרסה — Restore יוצר גרסה חדשה המקושרת למקור, לא דורס גרסה פעילה. שמירת timestamps ו-versions מקוריים כמטא-נתונים.
Migration של SystemSettings ו-AgentConfig למודל גרסאי — עם Backfill ו-Feature Flag.
סריקת Secrets — אין Secrets/Tokens ב-Prompt, Snapshot, Audit או Tombstone.
Shadow comparison מול המצב הקיים עד למעבר מלא.
למידה אינה משנה Production אוטומטית — גרסאות נוצרות אך אינן מופעלות ללא אישור.
Secrets ו-Tokens אינם נשמרים ב-AuditEvent, Tombstone או Snapshot.
אין Cascade Delete לשרשרת החלטה — מחיקת Trade אינה מוחקת Fill/Audit.
Retention מספרי הוא Proposed Baseline — אינו ננעל לפני בדיקת רישוי/משפט/עלות.
שינוי Policy פעיל מחייב גרסה, approved_by ו-effective_from; הפעלה דרך VersionActivationEvent או מצביע פעיל עם CAS.
AuditEvent הוא Append-Only עם שרשרת Hash — אין עדכון או מחיקה; שרשרת Hash מוכיחה שלא בוצע שינוי.
שינוי קריטי (Policy, הרשאה, מחיקה, Admin) אינו נחשב מוצלח בלי Audit שנשמר ב-Transaction + Outbox.
ישות גרסאית Append-Only אינה מעדכנת effective_to של גרסה ישנה — הפעלה דרך VersionActivationEvent או מצביע פעיל.
Restore אינו דורס גרסה פעילה — הוא יוצר גרסה חדשה המקושרת למקור.
Archive אינו משנה timestamps או versions מקוריים.
Tombstone נשמר עד תום Retention או Legal Hold — אינו נשמר לנצח. מחיקת Payload פיזית מותרת לפרטיות/רישוי עם Tombstone לא-רגיש.
legal_hold=true חוסם מחיקה/מחיקה פיזית מלאה עד להסרה מפורשת.
לא ניתן לחבר AuditEvent ל-Decision Snapshot לפני ש-CH5-003 ממומש ו-PUBLISHED.
לא ניתן לחבר Data Lineage לפני ש-CH5-004 ממומש.
הפרדת גרסאות: PolicyVersion (מדיניות וספי סיכון), SystemSettingsVersion (הגדרות תפעול), AgentConfigVersion (תצורת סוכן) — נפרדים; PolicyVersion אינו מכיל את כל SystemSettings.
AgentConfig מכיל current_config_version_id ו-current_profile_version_id בנפרד.
כל AnalysisOutput מקושר לגרסאות Policy/Prompt/Model/Schema/Profile/Config ששימשו (input_refs).
AuditEvent Append-Only עם שרשרת Hash — previous_event_hash, event_hash, sequence_number, idempotency_key, hash_algorithm/hash_version, schema_version; שרשרת Hash מוכיחה שלא בוצע שינוי.
כל AuditEvent מקושר ל-entity_type, entity_id, decision_cycle_id (אם רלוונטי) ו-correlation_id.
שינוי קריטי (Policy, הרשאה, מחיקה, Admin) וכתיבת Audit מתבצעים ב-Transaction מקומי + Outbox — אינו נחשב מוצלח בלי Audit אמין.
recoverFullLineage(decision_cycle_id) משחזר: Snapshots, Data Lineage, ישויות מסלול, גרסאות ו-Audit — ללא חיפוש ידני ב-Log.
Retry או עדכון אינם דורסים היסטוריה — גרסאות ישנות נשמרות.
הפעלת גרסה דרך VersionActivationEvent או מצביע פעיל עם CAS ו-Audit — אין עדכון effective_to של גרסה ישנה.
מחיקה מורשית יוצרת Tombstone — עם legal_hold, purge_due_at, אישור מחיקה, סיבת החרגה.
מחיקת Payload פיזית מותרת לפרטיות/רישוי עם Tombstone לא-רגיש (Hash + הפניה) — אין מחיקה פיזית של שרשרת ראיות ללא אישור.
Tombstone נשמר עד תום Retention או Legal Hold — אינו נשמר לנצח. legal_hold=true חוסם מחיקה.
Cascade Delete אסור לשרשרת החלטה.
Restore אינו דורס גרסה פעילה — יוצר גרסה חדשה המקושרת למקור עם מטא-נתונים.
Archive אינו משנה timestamps או versions מקוריים.
אין Secret ב-Prompt, Snapshot, Audit או Tombstone — סריקה אוטומטית.
Retention matrix — Proposed Baseline; מספרים אינם נעולים לפני בדיקת רישוי/משפט/עלות.
Shadow comparison מול המצב הקיים עומדת בסבילות המאושרת.
Migration של SystemSettings/AgentConfig למודל גרסאי — Idempotent, עם Rollback.
המפרט אושר לפני תחילת ביצוע.
כל שינוי זוהה לפי קובץ/Entity/Function/Workflow וכולל תוכנית Rollback.
כל תנאי קבלה קיבל בדיקה ותוצאה.
לא נוצרה נסיגה בהגנות, ב-State Machine או ב-Idempotency של CH3.
חוזי הסוכנים וה-CIO Shadow של CH4 נשמרו.
Audit Append-Only עם שרשרת Hash אינו ניתן לעדכון/מחיקה — נבדק; שרשרת Hash מוכיחה שלמות.
Transaction + Outbox לשינויים קריטיים — נבדק; אין שינוי מוצלח בלי Audit.
הפרדת גרסאות — PolicyVersion אינו מכיל הגדרות תפעול; AgentConfig מכיל config_version_id ו-profile_version_id נפרדים — נבדק.
הפעלת גרסה דרך VersionActivationEvent — אין עדכון effective_to של גרסה ישנה — נבדק.
Restore יוצר גרסה חדשה — אינו דורס גרסה פעילה — נבדק.
Tombstone עם legal_hold ו-purge_due_at — נבדק; מחיקת Payload פיזית מותרת לפרטיות/רישוי.
שרשרת ראיות אינה נשברת במחיקה מורשית — נבדק.
הופק דוח ביצוע הכולל ראיות, חריגות והמלצת סגירה.
רק לאחר אישור דוח הביצוע משתנה סטטוס המפרט ל-Version 1.0 — Closed.
base44/entities/PolicyVersion.jsonc — ישות חדשה (מדיניות וספי סיכון בלבד; Append-Only גרסאי).
base44/entities/SystemSettingsVersion.jsonc — ישות חדשה (הגדרות תפעול; Append-Only גרסאי).
base44/entities/AgentConfigVersion.jsonc — ישות חדשה (תצורת סוכן; Append-Only גרסאי).
base44/entities/VersionActivationEvent.jsonc — ישות חדשה (הפעלת גרסה עם CAS ו-Audit).
base44/entities/PromptVersion.jsonc — ישות חדשה (Append-Only גרסאי).
base44/entities/ModelVersion.jsonc — ישות חדשה (Append-Only גרסאי).
base44/entities/SchemaVersion.jsonc — ישות חדשה (Append-Only גרסאי).
base44/entities/AgentProfileVersion.jsonc — ישות חדשה (Append-Only גרסאי).
base44/entities/AuditEvent.jsonc — ישות חדשה (Append-Only עם שרשרת Hash).
base44/entities/AuditOutbox.jsonc — ישות חדשה (Transaction + Outbox לשינויים קריטיים).
base44/entities/Tombstone.jsonc — ישות חדשה (עם legal_hold, purge_due_at, אישור מחיקה, סיבת החרגה).
base44/entities/ArchiveRecord.jsonc — ישות חדשה (Restore יוצר גרסה חדשה).
base44/entities/AnalysisOutput.jsonc — הוספת input_refs (כולל settings_version_id, config_version_id).
base44/entities/SystemSettings.jsonc — Migration לגרסאי (current_policy_version_id + current_settings_version_id).
base44/entities/AgentConfig.jsonc — Migration לגרסאי (current_config_version_id + current_profile_version_id נפרדים).
base44/shared/versionManager.ts (חדש) — ניהול גרסאות + הפעלה דרך VersionActivationEvent.
base44/shared/auditEventLogger.ts (חדש) — Audit Append-Only עם שרשרת Hash + סריקת Secrets.
base44/shared/auditOutboxWriter.ts (חדש) — Transaction + Outbox לשינויים קריטיים.
base44/shared/lineageRecovery.ts (חדש) — שחזור משולב.
base44/shared/tombstoneManager.ts (חדש) — מחיקה מורשית + legal_hold + מחיקת Payload + חסימת Cascade.
base44/shared/archiveManager.ts (חדש) — Archive/Restore (יוצר גרסה חדשה).
base44/shared/retentionPolicy.ts (חדש) — מטריצת Retention + Legal Hold + purge_due_at.
base44/shared/secretScanner.ts (חדש) — סריקת Secrets.
base44/shared/settingsMigration.ts (חדש) — Migration למודל גרסאי מופרד.
src/pages/Ch5Spec005.jsx — עמוד מפרט זה (תיעוד).
1. יצירת ישויות גרסאיות נפרדות: PolicyVersion (מדיניות), SystemSettingsVersion (תפעול), AgentConfigVersion (תצורת סוכן), PromptVersion, ModelVersion, SchemaVersion, AgentProfileVersion.
2. יצירת VersionActivationEvent — הפעלת גרסה עם CAS ו-Audit.
3. יצירת AuditEvent (Append-Only עם שרשרת Hash), AuditOutbox, Tombstone (עם legal_hold/purge_due_at), ArchiveRecord.
4. יצירת base44/shared/versionManager.ts — יצירה/הפעלה (VersionActivationEvent)/שאילת גרסאות.
5. יצירת base44/shared/auditEventLogger.ts — תיעוד Append-Only עם שרשרת Hash + סריקת Secrets.
6. יצירת base44/shared/auditOutboxWriter.ts — Transaction + Outbox לשינויים קריטיים.
7. יצירת base44/shared/lineageRecovery.ts — recoverFullLineage (משלב CH5-003/004).
8. יצירת base44/shared/tombstoneManager.ts — מחיקה מורשית + legal_hold + מחיקת Payload + חסימת Cascade.
9. יצירת base44/shared/archiveManager.ts — Restore יוצר גרסה חדשה; ללא שינוי timestamps.
10. יצירת base44/shared/retentionPolicy.ts — מטריצת Retention (Proposed Baseline) + Legal Hold + purge_due_at.
11. יצירת base44/shared/secretScanner.ts — סריקה לפני שמירה.
12. יצירת base44/shared/settingsMigration.ts — Migration למודל גרסאי מופרד (Policy/Settings/Config/Profile).
13. הוספת input_refs (גרסאות, כולל settings_version_id ו-config_version_id) ל-AnalysisOutput.
14. חיבור AuditEvent ל-decision_cycle_id/correlation_id (לאחר CH5-003 ממומש ו-PUBLISHED).
15. חיבור Data Lineage (לאחר CH5-004 ממומש ו-PUBLISHED).
16. Feature Flag: Shadow comparison מול המצב הקיים.
17. בדיקות קבלה: Versioning, Audit (שרשרת Hash), Transaction+Outbox, Lineage, Tombstone (legal_hold), Archive (Restore גרסה חדשה), Retention, Secrets.
18. הפקת דוח ביצוע CH5-005 עם כל הראיות.
תלות
CH5-003 מאושר לביצוע v0.3 (Snapshots ומזהי מחזור — נדרש ממומש ו-PUBLISHED לחיבור Audit ל-Decision Snapshot); CH5-004 v0.4 Approved for Implementation (שכבות נתונים ו-Data Lineage — נדרש ממומש ל-Lineage מקצה לקצה). ניתן להכין Versioned Stores ו-AuditEvent במקביל, אך חיבור ל-Lineage מלא דורש CH5-003/004 ממומשים.
מחוץ לתכולה
שינוי Policy עסקית, הפעלת למידה אוטומטית, מחיקה פיזית של שרשרת ראיות, או שינוי חוזי סוכן.