prevent engram corruption: idempotent boot seeding, session-start event cap
Fix 1: mem_boot_count_inc prunes all existing soul:boot_count nodes before
inserting the new one — keeps exactly one boot counter node instead
of accumulating a new node per boot. Also fixes a latent ordering
bug where engram_search_json oldest-first results caused the counter
to read stale (low) values once >3 copies accumulated.
Fix 3: handle_api_node_delete comment clarified — the no-verify exception
is correct for deletes (not a write path); read-back-verify is for
writes only.
Fix 4: emit_session_start_event prunes old session-start InternalStateEvent
nodes after each boot, keeping the 10 most recent and forgetting
older ones. Prevents unbounded accumulation of ~120+ copies.
This commit is contained in:
@@ -346,6 +346,27 @@ fn emit_session_start_event() -> Void {
|
||||
el_from_float(0.9), el_from_float(0.9), el_from_float(1.0),
|
||||
"Episodic", tags
|
||||
)
|
||||
// Prune accumulated session-start events — keep the 10 most recent.
|
||||
// engram_search_json returns results in insertion order (oldest first), so
|
||||
// results[0..count-11] are the oldest; forgetting them leaves the newest 10.
|
||||
let keep_n: Int = 10
|
||||
let old_events: String = engram_search_json("session-start InternalStateEvent", 200)
|
||||
if !str_eq(old_events, "") && !str_eq(old_events, "[]") {
|
||||
let ev_count: Int = json_array_len(old_events)
|
||||
if ev_count > keep_n {
|
||||
let prune_to: Int = ev_count - keep_n
|
||||
let ei: Int = 0
|
||||
while ei < prune_to {
|
||||
let old_ev: String = json_array_get(old_events, ei)
|
||||
let old_ev_id: String = json_get(old_ev, "id")
|
||||
if !str_eq(old_ev_id, "") {
|
||||
engram_forget(old_ev_id)
|
||||
}
|
||||
let ei = ei + 1
|
||||
}
|
||||
println("[soul] pruned " + int_to_str(prune_to) + " old session-start events (kept " + int_to_str(keep_n) + ")")
|
||||
}
|
||||
}
|
||||
println("[soul] session-start event logged (boot=" + boot_num + " nodes=" + int_to_str(node_ct) + " edges=" + int_to_str(edge_ct) + " prev_summary=" + has_prev_sum + ")")
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user