diff --git a/lang/el-compiler/runtime/el_runtime.c b/lang/el-compiler/runtime/el_runtime.c index 2f4c839..fd9949a 100644 --- a/lang/el-compiler/runtime/el_runtime.c +++ b/lang/el-compiler/runtime/el_runtime.c @@ -6031,6 +6031,14 @@ void el_cgi_init(el_val_t name, el_val_t dharma_id, el_val_t principal, #define ENGRAM_LAYER_DOMAIN 2u #define ENGRAM_LAYER_IMPRINT 3u #define ENGRAM_LAYER_SUIT 4u +#define ENGRAM_LAYER_ACCUMULATION 5u +/* New user-facing nodes (memories, knowledge, conversations) are created in the + * accumulation layer — the top of the consciousness stack, the engram the user + * sees; every layer below shapes behavior but is hidden from the user (Layered + * Consciousness architecture, app 64/064,262). ENGRAM_LAYER_DEFAULT stays + * core-identity ON PURPOSE: it is the fallback home for LEGACY nodes loaded from + * snapshots without a layer_id, so existing data (the originator corpus) is + * never migrated out of its established layer. New != legacy. */ #define ENGRAM_LAYER_DEFAULT ENGRAM_LAYER_CORE_IDENTITY /* Pass 3 override floor. Layer 0 nodes that received any background @@ -6208,6 +6216,20 @@ static void engram_init_layers(EngramStore* g) { .transparent = 0, .injectable = 1 }; + /* Layer 5 — accumulation. The TOP of the consciousness stack: the default + * home for all new user-facing nodes. This is the engram the user sees; + * every layer below shapes behavior but is hidden from the user. Not + * injectable — it is the persistent user accumulation, not a swappable + * overlay. transparent=0: its content is surfaced to introspection (it is + * the user's own knowledge/memory), unlike the lower behavioral layers. */ + g->layers[g->layer_count++] = (EngramLayer){ + .layer_id = ENGRAM_LAYER_ACCUMULATION, + .name = el_strdup_persist("accumulation"), + .activation_priority = 50, + .suppressible = 1, + .transparent = 0, + .injectable = 0 + }; } static EngramStore* engram_get(void) { @@ -6399,7 +6421,7 @@ el_val_t engram_node(el_val_t content, el_val_t node_type, el_val_t salience) { n->last_activated = now; n->created_at = now; n->updated_at = now; - n->layer_id = ENGRAM_LAYER_DEFAULT; + n->layer_id = ENGRAM_LAYER_ACCUMULATION; /* new user-facing node → top layer */ g->node_count++; return el_wrap_str(el_strdup(n->id)); } @@ -6435,7 +6457,7 @@ el_val_t engram_node_full(el_val_t content, el_val_t node_type, el_val_t label, n->last_activated = now; n->created_at = now; n->updated_at = now; - n->layer_id = ENGRAM_LAYER_DEFAULT; + n->layer_id = ENGRAM_LAYER_ACCUMULATION; /* new user-facing node → top layer */ g->node_count++; return el_wrap_str(el_strdup(n->id)); }