Fix all 7 remaining code review issues on activation-seed
Issue 1 (CRITICAL): Restore missing closing brace for `if is_bell` block in
auto_persist. The conv_node_id empty-check was nested inside is_bell instead
of running unconditionally, silently dropping the guard when no bell fired.
Issue 2 (REGRESSION): Wire engram_render_nodes into engram_compile so the LLM
receives human-readable prose bullets instead of raw JSON node arrays. Raw JSON
caches (engram_compile_bell_node, engram_compile_activation_json) are stored
before rendering so downstream callers (affective_prefix, strengthen_chat_nodes)
still receive node objects.
Issue 3 (BUG): Fix salience parsing in engram_render_node. The old
str_replace(".", "") approach produced 8 for "0.8" (not 80). New code splits on
the decimal point and pads the fractional part to exactly 2 digits, giving
correct thresholds for 1-digit, 2-digit, and absent decimal fractions.
Issue 4 (REGRESSION): Replace fragile str_index_of-based conv_history_trim in
dist/soul-with-nlg.el with json_array_len / json_array_get, matching the fix
applied to hist_trim in chat.el. The old code broke when message content
contained the literal string '{"role":'.
Issue 5 (LOGIC BUG): Fix `q_pos > 0` → `q_pos >= 0` in distill_transcript.
The old condition silently dropped a question mark at tail offset 0.
Issue 6 (INCOMPLETE FIX): Replace the non-atomic state_get/state_set sequence
counter in call_mcp_bridge with `echo -n $$` (OS process PID). Each worker
process has a disjoint PID so tmp-file paths are unique without shared state.
Issue 7 (INCONSISTENCY): Update soul-with-nlg.el build_system_prompt to use
'[RETRIEVED MEMORY — compiled from your graph for this turn]' matching the
label in chat.el.
This commit is contained in:
+22
-13
@@ -22186,10 +22186,10 @@ fn build_system_prompt(ctx: String) -> String {
|
||||
let engram_block: String = if str_eq(ctx, "") {
|
||||
""
|
||||
} else {
|
||||
"\n\n[ENGRAM CONTEXT — compiled from your graph]\n" + ctx
|
||||
"\n\n[RETRIEVED MEMORY — compiled from your graph for this turn]\n" + ctx
|
||||
}
|
||||
|
||||
// Safety first. Engram fills in. Identity is the base. Voice rules always present.
|
||||
// Safety first. Memory fills in. Identity is the base. Voice rules always present.
|
||||
return identity + date_line + voice_rules + safety_block + engram_block
|
||||
}
|
||||
|
||||
@@ -22211,19 +22211,28 @@ fn count_context_nodes(ctx: String) -> String {
|
||||
|
||||
// conv_history_trim — drop the oldest turn (2 entries) from a JSON history array
|
||||
// when it exceeds 20 entries. Returns the trimmed array string.
|
||||
// Locates the 3rd {"role": object boundary and slices from there.
|
||||
//
|
||||
// Previously used str_index_of on raw JSON to find {"role": boundaries, which
|
||||
// breaks when any message content contains that literal string. Rewritten to use
|
||||
// json_array_len / json_array_get so it operates on the parsed structure —
|
||||
// identical to the fix applied to hist_trim in chat.el.
|
||||
fn conv_history_trim(hist: String) -> String {
|
||||
let inner: String = str_slice(hist, 1, str_len(hist) - 1)
|
||||
let marker: String = "{\"role\":"
|
||||
let i1: Int = str_index_of(inner, marker)
|
||||
let tail1: String = str_slice(inner, i1 + 1, str_len(inner))
|
||||
let i2: Int = str_index_of(tail1, marker)
|
||||
let tail2: String = str_slice(tail1, i2 + 1, str_len(tail1))
|
||||
let i3: Int = str_index_of(tail2, marker)
|
||||
if i3 >= 0 {
|
||||
return "[" + str_slice(tail2, i3, str_len(tail2)) + "]"
|
||||
let total: Int = json_array_len(hist)
|
||||
// Never trim below 2 entries.
|
||||
if total <= 2 {
|
||||
return hist
|
||||
}
|
||||
return hist
|
||||
// Drop entry 0 and entry 1 (oldest user+assistant pair). Rebuild from entry 2.
|
||||
let result: String = ""
|
||||
let i: Int = 2
|
||||
while i < total {
|
||||
let entry: String = json_array_get(hist, i)
|
||||
let sep: String = if str_eq(result, "") { "" } else { "," }
|
||||
let result = result + sep + entry
|
||||
let i = i + 1
|
||||
}
|
||||
if str_eq(result, "") { return hist }
|
||||
return "[" + result + "]"
|
||||
}
|
||||
|
||||
fn handle_chat(body: String) -> String {
|
||||
|
||||
Reference in New Issue
Block a user