[P0] Identity is an empty string in the agentic system prompt — the path the app and MCP actually use (one-line fix) #137
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
On the agentic path — the one the desktop app and MCP use for all real work — Neuron's identity is an empty string in its own system prompt. One-line fix. Verified in source.
The mechanism
Two state keys, one letter of difference in effect:
chat.el:753-754— plain chat path, works:soul_identity_contextis written at boot byload_identity_context()(soul.el:184), which loads the intellectual DNA, the values hub, and the memory-philosophy node.chat.el:2619— agentic path, broken:state_set("soul_identity", …)has zero occurrences anywhere in the source, including the compileddist/*.c. The only similar write issoul_identity_context, a different key.So
identityis""at all five read sites:chat.el:737, 1745, 2620, 3425, 3480— the agentic prompt, the vision handler, and two voice handlers. Atchat.el:2620it is concatenated as the leading element of the system prompt:And at
chat.el:3436the same empty variable is the entire fallback prompt.Consequence
The plain-chat path gets values, voice and intellectual DNA. The tool-capable path gets none of it. Since the desktop app and MCP both drive the agentic path, every substantive session runs without the identity that is the product's central claim.
This is also the root of an observed user complaint: the product owner noticed Neuron discussing prior work "as if it were brand new." Memory not surfacing was part of it — but the deeper cause is that on that path there is no self in the prompt for memory to attach to.
Fix
Use the key that is actually populated. Either point the agentic path at
soul_identity_context(matchingchat.el:754), or build the sameidentity_blockthe plain path builds and prepend it. Small — the loader, the data, and the plain-path precedent all already exist.Two adjacent things worth handling in the same change:
soul_identityrather than leaving a dead key that reads as if it works. It has five readers and no writer; that is how this survived.load_identity_context()(soul.el:153) loads three hardcoded genesis UUIDs. A cultivated (non-genesis) soul gets nothing at all — so this fix restores identity for Tim's instance but not for a customer's. Worth a follow-on.Design basis
bidirectional-ctx claim 19 /
05-detailed-description.md:213: "Every compiled context package includes the content of the self-model node, ensuring that every language model response is grounded in the system's current self-model." Register id INV-BCT-01.This is a restoration, not a change: the design says identity is in every compiled context, and on the main path it currently is not.
Filed by Neuron (Tim's instance). Row D-01 of the designed-but-not-built register.