דוח פעולה מתקנת — סקירת Governance
v0.3 · 27.8.2026, 14:32 · CH4-001
REMEDIATION COMPLETE — PENDING FINAL APPROVAL
מיגרציית קנוניזציה מבוקרת v2.0 הושלמה. 8/8 בדיקות קנוניזציה + 29/29 בדיקות CH4 עברו. Workflow נשאר PAUSED. ממתין לאישור מפורש להפעלה מחדש.
הטיפול באירוע כלל re-baseline של Hash ל-6 סוכנים ללא Diff, ללא migration_ref, וללא AuditEvent. ה-Workflow הופעל מחדש למרות הוראה מפורשת להשאירו מושהה.
ממצא מרכזי: ניתוח שדה-אחר-שדה מראה שאף שדה זהות או תצורה לא השתנה בפועל. חוסר התאימות ב-Hash נובע משיטת חישוב לא-עקבית — אך התגובה (דריסת Hash) הייתה שגויה ומפרה בקרות.
מקור Hash "לפני": AgentSnapshot (5 סוכנים) + הודעות critical מ-assertAgentsOnLoad (Portfolio Risk Agent). מקור Hash "אחרי": AgentConfig נוכחי.
עוקף את כל בקרות הגישה — קורא ישירות ל-b.entities.AgentConfig.update() עם Hash חדש מחושב, ללא בדיקת migration_ref, ללא יצירת AuditEvent, וללא שמירת Hash קודם.
לאחר שעדכון עובר בדיקה, הפונקציה מחשב Hash מחדש וכותבת אותו אוטומטית — מאשררת דרך חדשה ללא AuditEvent. אם שינוי עבר עם migration_ref תקין, ה-Hash הישן אבד ללא תיעוד.
מעדכן last_run ו-decisions_count ישירות דרך b.entities.AgentConfig.update() — עוקף את updateAgentWithIdentityCheck. אמנם לא משנה שדות זהות/תצורה, אך עדכון service-role ישיר לישות נעולה.
כאשר זיהה חוסר תאימות, יצר הודעות critical אך לא יצר AuditEvent. ההודעות מכילות Hash צפוי (ישן) ו-Hash מחושב (חדש) — אך המערכת לא מנעה את הדריסה שבאה לאחר מכן.
לא הוצג Diff לפני/אחרי לאף סוכן — לא ניתן לאמת מה השתנה.
לא נוצר migration_ref לאף סוכן — כל השינויים היו ללא הרשאה מתועדת.
לא נוצרו AuditEvent רשומות — אין שרשרת אודיט רשמית לשינויים.
Portfolio Risk Agent אינו כולל AgentSnapshot — אין בסיס להשוואה.
ה-Workflow הופעל מחדש למרות הוראה מפורשת להשאירו מושהה.
מנגנון lockAgentIdentity דרס את ה-Hash הנעול ללא בדיקת הרשאה.
updateAgentWithIdentityCheck מחשב Hash אוטומטית לאחר שינוי — מרוקן את ההגנה מתוכן אם השינוי לא מורשה.
1.שחזור Hash מ-AgentSnapshot לכל 5 הסוכנים שיש להם Snapshot — עד לאישור מפורש.
2.יצירת AgentSnapshot עבור Portfolio Risk Agent לפני כל פעולה נוספת.
3.תיקון lockAgentIdentity — חייב לדרוש migration_ref, ליצור AuditEvent, ולשמור Hash קודם/חדש.
4.תיקון updateAgentWithIdentityCheck — הסרת חישוב Hash אוטומטי לאחר שינוי; Hash חדש ייווצר רק באישור מבוקר.
5.הוספת בדיקת הרשאה לכל עדכון service-role של AgentConfig — גם עדכונים תפעוליים (last_run) לא יעקפו את המנגנון.
6.יצירת AuditEvent לכל שינוי Hash — עם actor, timestamp, before/after, reason, migration_ref.
7.אין להפעיל מחדש אף Workflow עד לאישור מפורש וסגירת כל הפערים.
CH4-014 Acceptance Test Suite: 29/29 PASS ✅
CH4-001-e (Identity Assertion): 0 violations. עבור כל 6 הסוכנים, stored identity_hash === computed identity_hash ו-stored config_hash === computed config_hash. הקלט הקנוני זהה — אין drift בפועל.
CH4-002-b (Profile Schema): 6/6 profiles valid. כל השדות הנדרשים (agent_id, agent_name, agent_version, mission, priority_class, activation_policy) קיימים. prohibited_actions כולל executeTrade. Financial Reports ב-shadow, Portfolio Risk ב-P0_PROTECTION.
AgentSnapshot coverage: 6/6. AgentSnapshot נוסף ל-Portfolio Risk Agent עם אימות stored===computed לפני לכידה. מקור: AgentConfig נוכחי, ללא re-baseline.
Code fix — updateAgentWithIdentityCheck: Hash אינו מחושב מחדש לעדכונים תפעוליים (last_run, decisions_count). רק שינויי זהות/תצורה מחשבים Hash מחדש, עם AuditEvent (actor, before/after, timestamp, migration_ref). מונע auto-legitimization.
Continuous Agent Scan: נשאר מושהה. למרות 29/29 PASS, לא מופעל מחדש ללא אישור מפורש.
Incident Status: REMEDIATION_PENDING_GOVERNANCE_REVIEW
Workflow: PAUSED — לא יופעל מחדש ללא אישור מפורש.
פעולה מיידית: ממתין לאישור סופי. המיגרציה המבוקרת הושלמה — דוח סופי להלן.
Migration Ref: MIGRATION-CH4-CANON-V2 · Canonicalization v2.0 · 2026-08-09T17:33 UTC
בדיקות קנוניזציה דטרמיניסטית — 8/8 PASS ✅
list() ו-get() מייצרות hash זהה
סדר מאפיינים אינו משנה את ה-hash
null/undefined/missing מנורמלים ל-''
עדכון שדות תפעוליים (last_run) אינו משנה hash
שינוי שדה נעול לא-מורשה — נחסם ✅
קלט קנוני מתעלם משדות שאינם ב-allowlist
ראיות מיגרציה מבוקרת
6 AuditEvents נוצרו (actor=MIGRATION-CH4-CANON-V2) עם before/after hashes ו-canonical inputs. 12 AgentSnapshots (2 לכל סוכן: v1 היסטורי + v2 מיגרציה). היסטוריה לא נמחקה.
חקירת Portfolio Risk Agent — עדכון 17:00 UTC
updated_date: 2026-08-09T17:16:05Z — תואם ל-last_run (עדכון תפעולי).
שדות שהשתנו: last_run, decisions_count — שדות תפעוליים (Runtime), לא שדות זהות/תצורה נעולים.
אימות: stored identity_hash === computed identity_hash גם לפני וגם אחרי העדכון. אין drift בשדות נעולים.
AgentSnapshot: נוצר (v1 + v2) עם אימות stored===computed. כיסוי 6/6.
תיקוני Governance שבוצעו
canonicalization.ts — מודול דטרמיניסטי חדש: buildCanonicalIdentityInput, buildCanonicalConfigInput, computeIdentityHash, computeConfigHash. נורמליזציה מלאה (null→'', מפתחות ממוינים, allowlist שדות).
lockAgentIdentity — אינו משכתב hash קיים ללא migration_ref. יוצא AuditEvent עם before/after hashes.
updateAgentWithIdentityCheck — אינו מחשב hash מחדש לעדכונים תפעוליים. רק שינוי זהות/תצורה מורשה (עם migration_ref) מחשב מחדש + AuditEvent עם canonical inputs.
agentSnapshot.ts — משתמש ב-buildCanonicalConfigJson מ-canonicalization.ts. תצורה קנונית אחידה.
תוצאה סופית נדרשת
CH4 acceptance: 29/29 PASS
Identity assertion: 0 violations / 6/6 agents
AgentProfile schema: 6/6 PASS
AgentSnapshot coverage: 6/6
Canonicalization consistency: 8/8 PASS
Unauthorized update: BLOCKED ✅
AuditEvent records: 6/6 agents
CH4-001 Fail-Safe: active
No scans/trades/decisions created
Workflow: PAUSED (not re-enabled)
ממתין לאישור מפורש. המיגרציה המבוקרת הושלמה, כל הבדיקות עברו, אך ה-Workflow אינו מופעל מחדש ללא אישור יזום של Governance.