Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1a0af0acaf | |||
| 72e0b829c2 | |||
| 5f0bb67cbf | |||
| 6934a0e889 | |||
| b9e609ee39 | |||
| eb69c40f2d | |||
| 2018036bce |
+10
-4
@@ -1274,6 +1274,8 @@ el_val_t axon_raw;
|
||||
el_val_t axon_base;
|
||||
el_val_t studio_dir_raw;
|
||||
el_val_t studio_dir;
|
||||
el_val_t identity_raw;
|
||||
el_val_t soul_identity;
|
||||
el_val_t using_http_engram;
|
||||
el_val_t local_node_count;
|
||||
el_val_t snapshot_usable;
|
||||
@@ -29331,7 +29333,7 @@ el_val_t handle_config(el_val_t method, el_val_t body) {
|
||||
|
||||
el_val_t dharma_registry(void) {
|
||||
el_val_t cgi_id = state_get(EL_STR("soul_cgi_id"));
|
||||
el_val_t principal = state_get(EL_STR("soul_principal"));
|
||||
el_val_t principal = cgi_principal();
|
||||
return el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(el_str_concat(EL_STR("{\"registry\":[{\"cgi\":\""), cgi_id), EL_STR("\",")), EL_STR("\"principal\":\"")), principal), EL_STR("\",")), EL_STR("\"covenant\":\"Principal Covenant v1\",")), EL_STR("\"registered\":\"2026-05-01\",\"provenance\":\"genesis\",")), EL_STR("\"entry\":1}],")), EL_STR("\"network_status\":\"initializing\",")), EL_STR("\"total_cgis\":1}"));
|
||||
return 0;
|
||||
}
|
||||
@@ -31936,6 +31938,7 @@ el_val_t layered_cycle(el_val_t raw_input, el_val_t session_id, el_val_t utility
|
||||
|
||||
int main(int _argc, char** _argv) {
|
||||
el_runtime_init_args(_argc, _argv);
|
||||
el_cgi_init(EL_STR("neuron-soul"), EL_STR("ntn-genesis@http://localhost:7770"), EL_STR("william-christopher-anderson"), EL_STR("dharma-mainnet"), EL_STR("http://localhost:8742"));
|
||||
soul_cgi_id_raw = env(EL_STR("SOUL_CGI_ID"));
|
||||
soul_cgi_id = ({ el_val_t _if_result_821 = 0; if (str_eq(soul_cgi_id_raw, EL_STR(""))) { _if_result_821 = (EL_STR("ntn-genesis")); } else { _if_result_821 = (soul_cgi_id_raw); } _if_result_821; });
|
||||
port_raw = env(EL_STR("NEURON_PORT"));
|
||||
@@ -31948,6 +31951,9 @@ int main(int _argc, char** _argv) {
|
||||
axon_base = ({ el_val_t _if_result_824 = 0; if (str_eq(axon_raw, EL_STR(""))) { _if_result_824 = (EL_STR("http://localhost:7771")); } else { _if_result_824 = (axon_raw); } _if_result_824; });
|
||||
studio_dir_raw = env(EL_STR("SOUL_STUDIO_DIR"));
|
||||
studio_dir = ({ el_val_t _if_result_825 = 0; if (str_eq(studio_dir_raw, EL_STR(""))) { _if_result_825 = (el_str_concat(env(EL_STR("HOME")), EL_STR("/Development/neuron-technologies/products/cgi-studio/el-daemon"))); } else { _if_result_825 = (studio_dir_raw); } _if_result_825; });
|
||||
identity_raw = env(EL_STR("SOUL_IDENTITY"));
|
||||
soul_identity = ({ el_val_t _if_result_826 = 0; if (str_eq(identity_raw, EL_STR(""))) { _if_result_826 = (el_str_concat(el_str_concat(EL_STR("You are "), soul_cgi_id), EL_STR(", a CGI."))); } else { _if_result_826 = (identity_raw); } _if_result_826; });
|
||||
state_set(EL_STR("soul_identity"), soul_identity);
|
||||
println(el_str_concat(el_str_concat(el_str_concat(EL_STR("[soul] boot - cgi="), soul_cgi_id), EL_STR(" port=")), int_to_str(port)));
|
||||
using_http_engram = !str_eq(engram_url_raw, EL_STR(""));
|
||||
engram_load(snapshot);
|
||||
@@ -31957,8 +31963,8 @@ int main(int _argc, char** _argv) {
|
||||
println(el_str_concat(el_str_concat(EL_STR("[soul] engram -> HTTP "), engram_url_raw), EL_STR(" (no local snapshot, first boot)")));
|
||||
el_val_t nodes_json = http_get(el_str_concat(engram_url_raw, EL_STR("/api/nodes?limit=10000")));
|
||||
el_val_t edges_json = http_get(el_str_concat(engram_url_raw, EL_STR("/api/edges")));
|
||||
el_val_t nodes_part = ({ el_val_t _if_result_826 = 0; if (str_eq(nodes_json, EL_STR(""))) { _if_result_826 = (EL_STR("[]")); } else { _if_result_826 = (nodes_json); } _if_result_826; });
|
||||
el_val_t edges_part = ({ el_val_t _if_result_827 = 0; if (str_eq(edges_json, EL_STR(""))) { _if_result_827 = (EL_STR("[]")); } else { _if_result_827 = (edges_json); } _if_result_827; });
|
||||
el_val_t nodes_part = ({ el_val_t _if_result_827 = 0; if (str_eq(nodes_json, EL_STR(""))) { _if_result_827 = (EL_STR("[]")); } else { _if_result_827 = (nodes_json); } _if_result_827; });
|
||||
el_val_t edges_part = ({ el_val_t _if_result_828 = 0; if (str_eq(edges_json, EL_STR(""))) { _if_result_828 = (EL_STR("[]")); } else { _if_result_828 = (edges_json); } _if_result_828; });
|
||||
el_val_t snapshot_data = el_str_concat(el_str_concat(el_str_concat(el_str_concat(EL_STR("{\"nodes\":"), nodes_part), EL_STR(",\"edges\":")), edges_part), EL_STR("}"));
|
||||
el_val_t tmp_path = el_str_concat(el_str_concat(EL_STR("/tmp/soul-engram-"), soul_cgi_id), EL_STR(".json"));
|
||||
fs_write(tmp_path, snapshot_data);
|
||||
@@ -31982,7 +31988,7 @@ int main(int _argc, char** _argv) {
|
||||
state_set(EL_STR("soul_engram_api_key"), engram_api_key_raw);
|
||||
state_set(EL_STR("soul.running"), EL_STR("true"));
|
||||
is_genesis = str_eq(soul_cgi_id, EL_STR("ntn-genesis"));
|
||||
guard_disk = ({ el_val_t _if_result_828 = 0; if (str_eq(engram_url_raw, EL_STR(""))) { _if_result_828 = (fs_read(snapshot)); } else { _if_result_828 = (EL_STR("")); } _if_result_828; });
|
||||
guard_disk = ({ el_val_t _if_result_829 = 0; if (str_eq(engram_url_raw, EL_STR(""))) { _if_result_829 = (fs_read(snapshot)); } else { _if_result_829 = (EL_STR("")); } _if_result_829; });
|
||||
guard_disk_len = str_len(guard_disk);
|
||||
safe_to_seed = (!using_http_engram && !((guard_disk_len > 200000) && ((engram_node_count() * 16000) < guard_disk_len)));
|
||||
if (is_genesis && !safe_to_seed) {
|
||||
|
||||
+5
-4
@@ -1,7 +1,8 @@
|
||||
# soul.c.stamp — fingerprint of the .el sources dist/soul.c was generated from.
|
||||
# Written by tools/soulc-stamp.sh --write. Do not hand-edit.
|
||||
# generated_amalgam_sha256 63e30030bee5e87fa082a84cda5c1226896f49da6076101fcd6b9530ea7caf49
|
||||
# generated_amalgam_bytes 1204442
|
||||
# generated_amalgam_sha256 cdc5e716dbfb797faa1b3e080cbd1ac82a75a258809da70cc5fbd02cc8040692
|
||||
# generated_amalgam_bytes 1205007
|
||||
7cf5e29d2618db2fca04e6df7aa8954dd6cf9ac5e70aafb8e0b52aa734882131 __compiler__
|
||||
f8597e10546654bce3fbbe40461b2da59d0e06dbf1b038d1d362d24f949e3911 awareness.el
|
||||
b6f3d14ca0c26017a2d617399a6d3754dabb0905e4d5f52eb75d25c4ad18d3c5 chat.el
|
||||
42288c212cbf72fb1e8ecbd4d9900e4e9ee1cfa475b7974295c7637f1bf2939f elp-input.el
|
||||
@@ -13,6 +14,6 @@ fba8ffdb9ba72bca5b09ca1c93a520edc52f3f4d8aec2c7585fe9b17e06420b2 manifest.el
|
||||
a6d69f3fc55233d9d3300160fd46a1551f2064bcd0fb84e2c9e432f636a72476 routes.el
|
||||
c28e36952ec56525963a0bdf29455ab097d3b0c5653d19c25fbb005e1069a1f7 safety.el
|
||||
fd3ab91d0ae0ea26639e21bef2f8f94054dc4b02eae68b19e3fe689d2769aad4 sessions.el
|
||||
0f1cf43904a98a5a646cce5a07e0e96162ced662692fbc13357d9b67d9a8ac3d soul.el
|
||||
5613b60d74d5d7768f46da5ac435a5dd99d38c27f0f7013c89fa27e98dc8a21c soul.el
|
||||
30337940905171a9645b0929f0a412ce6b3dccb1246495070c553bca0bbae6cd stewardship.el
|
||||
e105dc5990e6adbf39db9dc0462cd8bcf6e6c3dfd03709059227ecfad2bbab29 studio.el
|
||||
95dab72be4ee1dd1d28bab63412964a72460126951764e3f74b1c2d49b6d7b35 studio.el
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
# Engineering Session — 2026-08-13 — Language Faculty & the Poem Home
|
||||
|
||||
Companion to the book entry `the-minds-we-forge/sessions/2026-08-13-the-poem-comes-home.md`. Factual log of what was built overnight. All work staged / sandboxed / reversible; the live engram daemon (`:8742`, pid 31277) was untouched throughout; container-capped folds only; pushed to Gitea for durability.
|
||||
|
||||
## Summary
|
||||
The session extended the engram from a memory substrate into a **language faculty** plus a **reasoning + verifier** layer, validated with real numbers, and stress-tested on Will's own poem *Slowness is Calling*.
|
||||
|
||||
## Built / validated
|
||||
|
||||
### Language as geometry — translation
|
||||
- Meaning as a language-independent geometric pivot; translation = routing through it.
|
||||
- EN→ES→PT→EN "telephone" chain: routed cosine ES 0.973 / PT 0.967 / EN-final 0.969; retrieval **top-1 15/15 at every hop**. Loss splits **geometry=meaning / structure=grammar** (grammar errors ≈0 meaning cost; real loss = routing near-misses — the "plausible lie").
|
||||
- Positioning: universal translation collapses **N² language pairs → N realizers**; small, local, on-device. Not an alternative to the LLM — an alternative to the LLM-centric *paradigm*. Honest boundary: the encoder is still a small learned model ("no giant LLM," not "no model").
|
||||
|
||||
### Fully-functional Spanish realizer (no toy)
|
||||
- UniMorph Spanish, ~1.2M inflected forms; ~34 syntactic constructions.
|
||||
- Honest fresh held-out coverage **77.0%** (dev-set 100% explicitly disavowed as a claim); **zero dropped negations** across 140 sentences.
|
||||
- Realizer-vs-router concerns separated; mechanical ELP (`.el`) port plan (a `vocabulary-es.el` generator + table transcription; stage via snapshot→verify→blue/green). Sandbox `~/Desktop/lang-realizers/`; Neuron artifact `5d61e6cf`.
|
||||
|
||||
### Poem stress-test + frame-model upgrade — *Slowness is Calling*
|
||||
- Baseline through the chain: ORACLE 0.706, ROUTED 0.591 (~⅔ structural / ⅓ geometric). Failure modes: negation deletion (reassurance→accusation), epistemic-frame collapse, metaphor hub-collapse (sea/shore/tide/wave → "ocean").
|
||||
- Upgrade: structural slots (negation/polarity, epistemic matrix, PP/adjunct/simile — carried structurally, cannot invert) + sense-anchored (gloss-anchored) routing.
|
||||
- Result: ORACLE **0.706 → 0.777**; END-TO-END **0.591 → 0.770 (+0.179)**. NEGATION preserved **0/11 → 11/11** ("you never fought the ocean" 0.377→0.991; "I was never losing you" 0.501→1.000). sea≠shore **2/6 → 5/6** distinct. Routing slips **54 → 7**; every one of 18 verses improved. Sandbox `~/Desktop/lang-chain-experiment/`.
|
||||
|
||||
### Rhyme-preserving translation
|
||||
- meaning ∩ rhyme composable one-word → rhyme-partnered line-pair; real phonemes EN/ES/PT; 34,030 ES / 33,077 PT real vocabulary.
|
||||
- Key finding: at real vocab scale the tradeoff moves from **existence → cost** (rhyme-cost metric). Held ABCB on **16/18 quatrains** (6 rima consonante + 10 asonante), mean per-line cosine 0.830; kept meaning on the 2 it couldn't rhyme (incl. truth/roots — already slant in the English). PT mechanism built; PT verse composition pending. Sandbox `~/Desktop/lang-poetic-translation/`.
|
||||
|
||||
### Geometry operators → reasoning → verifier
|
||||
- Geometry operators (overlap / subtract / combine / distance-Wasserstein / analogy-Procrustes) now **live-callable from compiled `el`** over the real 13,036-node store (via shipped-`elc` pass-through — no uncapped fold). Commits `5336cfe`, `85eee42`.
|
||||
- Reasoning layer (analogy / induction / abduction / causal / planning) — all five **done-with-proof**, 33/33 closed-form checks, ASan/UBSan clean, 0 leaks. Commit `a3358df`.
|
||||
- Verifier layer (grounding + consistency) — proven, 29/29 checks. **Catches the plausible lie**: a claim grounded in real vocabulary yet polarity-inverted passes grounding, caught **only** by consistency (complementary checks) — directly flags the reassurance→accusation inversion. Commit `ca13471`.
|
||||
- el-exposure of the variadic/point-input reasoning + verifier modes deferred (would need ABI changes risking an uncapped fold); C layer complete + proven.
|
||||
|
||||
### Whitepaper
|
||||
- `engram-cognitive-architecture-whitepaper.md` updated with the 2026-08-13 validated results (§13/§14/§15/§16/§21), **held at Version 1.0** (no bump), ELP `64/064,275` cross-ref preserved. Commit `adc8646`, pushed to Gitea.
|
||||
|
||||
### Roadmap (deferred, not built tonight, per Will)
|
||||
- Multimodal / images-as-geometry: CLIP-precedent shared image+text meaning-space. Image→meaning near-term + local; meaning→image the hard, asymmetric side. Medical CT as decision-**support** (retrieval / anomaly-from-normal / progression, all interpretable) — **not diagnosis**; requires clinical validation + regulatory clearance; clinician holds the call.
|
||||
|
||||
## Durability / safety
|
||||
- Pushed to Gitea: `el` `engram-tiered-storage` `77a4bc9..ca13471` (operators, cutover, reasoning, verifier + reversal docs); whitepaper `2440c7d..adc8646`; a `neuron` docs reversal branch.
|
||||
- Live `:8742` never touched (pid 31277 unchanged). No deploy, no launch-agent, no `~/.neuron` writes. Reversal docs under `el docs/runbooks/`. No AI-attribution footers.
|
||||
|
||||
## Still in progress at hand-off
|
||||
- Portuguese realizer (following the Spanish template).
|
||||
- English realizer core + US/UK/AU dialects (queued behind PT).
|
||||
- Frame-model remaining gaps: passive voice, appositive/verbless fragments, resultatives; home→house pivot ambiguity.
|
||||
@@ -559,6 +559,27 @@ let axon_base: String = if str_eq(axon_raw, "") { "http://localhost:7771" } else
|
||||
let studio_dir_raw: String = env("SOUL_STUDIO_DIR")
|
||||
let studio_dir: String = if str_eq(studio_dir_raw, "") { env("HOME") + "/Development/neuron-technologies/products/cgi-studio/el-daemon" } else { studio_dir_raw }
|
||||
|
||||
// RESTORED 2026-08-09 — this producer was added 2026-05-02 in 601e0fe and deleted
|
||||
// by the awareness refactor b163fa6 a few days later. Nothing has written
|
||||
// soul_identity since, while FIVE sites in chat.el kept reading it:
|
||||
// chat.el:737, 1745, 2620, 3425, 3480 — each doing state_get("soul_identity")
|
||||
// and splicing the result into the system prompt beside the voice, security and
|
||||
// capability rules. They have been splicing an EMPTY STRING for roughly three
|
||||
// months. The identity section of every chat turn was blank and nothing said so.
|
||||
//
|
||||
// Found by the #132 state-key gate, which reports a read with no producer as a
|
||||
// build error rather than a silence — the whole reason that gate exists.
|
||||
//
|
||||
// Restored verbatim rather than improved: this key is an env-configurable persona
|
||||
// LINE, which is NOT the same thing as soul_identity_context (the graph-derived
|
||||
// [INTELLECTUAL-DNA]/[VALUES]/[MEMORY-PHILOSOPHY] block written at soul.el:184).
|
||||
// Pointing these five reads at that block instead would have substituted different
|
||||
// content and called it a fix. Whether the chat system prompt should ALSO carry the
|
||||
// graph-derived block is a real question, and a separate one.
|
||||
let identity_raw: String = env("SOUL_IDENTITY")
|
||||
let soul_identity: String = if str_eq(identity_raw, "") { "You are " + soul_cgi_id + ", a CGI." } else { identity_raw }
|
||||
state_set("soul_identity", soul_identity)
|
||||
|
||||
println("[soul] boot - cgi=" + soul_cgi_id + " port=" + int_to_str(port))
|
||||
|
||||
let using_http_engram: Bool = !str_eq(engram_url_raw, "")
|
||||
|
||||
@@ -53,8 +53,23 @@ fn handle_config(method: String, body: String) -> String {
|
||||
}
|
||||
|
||||
fn dharma_registry() -> String {
|
||||
// COMPILED IDENTITY, not state (2026-08-09). soul_principal had no producer at
|
||||
// all — the #132 gate flagged it as a dead read and the registry reported an
|
||||
// empty principal under a heading that says "Principal Covenant v1". The value
|
||||
// was never missing: it is declared in soul.el's cgi block, and as of the
|
||||
// codegen fix it is compiled into the binary and loaded at startup.
|
||||
//
|
||||
// Read it from the compiled constant rather than the state store. The design is
|
||||
// explicit that this identity is "not modifiable by any runtime mechanism
|
||||
// including environment variables, configuration files, or API calls" — so
|
||||
// publishing it into state (the cheap fix) would have recreated exactly the
|
||||
// mutable copy it forbids. cgi_principal() is read-only and has no setter.
|
||||
//
|
||||
// cgi_id keeps its state read deliberately: the RUNTIME instance id is a
|
||||
// different fact from the compiled dharma_id, and conflating them would hide
|
||||
// the case where a binary runs under an id its declaration never claimed.
|
||||
let cgi_id: String = state_get("soul_cgi_id")
|
||||
let principal: String = state_get("soul_principal")
|
||||
let principal: String = cgi_principal()
|
||||
return "{\"registry\":[{\"cgi\":\"" + cgi_id + "\","
|
||||
+ "\"principal\":\"" + principal + "\","
|
||||
+ "\"covenant\":\"Principal Covenant v1\","
|
||||
|
||||
@@ -30,9 +30,19 @@ AMALGAM="$ROOT/dist/soul.c"
|
||||
|
||||
# Every .el at the repo root is an input to the amalgam. Sorted so the hash is
|
||||
# order-independent; content-only so timestamps and checkouts do not perturb it.
|
||||
# The COMPILER is an input too. Learned 2026-08-09 by installing a fixed elc and
|
||||
# watching this gate report OK while the committed amalgam had gone stale by a line:
|
||||
# the sources had not changed, so a source-only fingerprint could not see it. That is
|
||||
# precisely the blind spot this gate exists to close, and it had it.
|
||||
fingerprint() {
|
||||
(
|
||||
cd "$ROOT" || exit 1
|
||||
ELC_BIN="${ELC:-$HOME/neuron-dev-stack/src/el/lang/dist/platform/elc}"
|
||||
if [ -f "$ELC_BIN" ]; then
|
||||
printf '%s %s\n' "$(shasum -a 256 "$ELC_BIN" | awk '{print $1}')" "__compiler__"
|
||||
else
|
||||
printf '%s %s\n' "MISSING" "__compiler__"
|
||||
fi
|
||||
for f in $(ls -1 *.el 2>/dev/null | sort); do
|
||||
printf '%s %s\n' "$(shasum -a 256 "$f" | awk '{print $1}')" "$f"
|
||||
done
|
||||
|
||||
+19
@@ -5634,6 +5634,25 @@ void el_cgi_init(el_val_t name, el_val_t dharma_id, el_val_t principal,
|
||||
}
|
||||
|
||||
|
||||
/* ── Compiled-identity accessors (2026-08-09) ─────────────────────────────────
|
||||
* el_cgi_init loads the declaration into these globals at startup and printed
|
||||
* them, and NOTHING read them back out — no accessor existed, and el_cgi_init
|
||||
* writes no state. So a binary carried its declared identity and every consumer
|
||||
* still read it from the mutable state store, which is exactly what IDPROTO
|
||||
* claims 1-2 forbid ("not modifiable by any runtime mechanism including
|
||||
* environment variables, configuration files, or API calls").
|
||||
*
|
||||
* These are READ-ONLY on purpose. There is deliberately no setter: publishing
|
||||
* the values into the state store would have been one line and would have
|
||||
* recreated the mutable copy the design prohibits. A caller can read the
|
||||
* compiled identity; nothing can change it after el_cgi_init.
|
||||
*/
|
||||
el_val_t cgi_name(void) { return EL_STR(_el_cgi_name ? _el_cgi_name : ""); }
|
||||
el_val_t cgi_dharma_id(void) { return EL_STR(_el_cgi_dharma_id ? _el_cgi_dharma_id : ""); }
|
||||
el_val_t cgi_principal(void) { return EL_STR(_el_cgi_principal ? _el_cgi_principal : ""); }
|
||||
el_val_t cgi_network(void) { return EL_STR(_el_cgi_network ? _el_cgi_network : ""); }
|
||||
el_val_t cgi_engram(void) { return EL_STR(_el_cgi_engram ? _el_cgi_engram : ""); }
|
||||
|
||||
/* ── Batch 3: Engram in-process graph store ──────────────────────────────── */
|
||||
/*
|
||||
* Single global EngramStore allocated lazily on first call. All node and
|
||||
|
||||
@@ -782,6 +782,14 @@ el_val_t trace_span_start(el_val_t name);
|
||||
el_val_t trace_span_end(el_val_t span_handle);
|
||||
el_val_t emit_event(el_val_t name, el_val_t duration_ms);
|
||||
|
||||
/* Compiled-identity accessors — read-only by design (2026-08-09). */
|
||||
el_val_t cgi_name(void);
|
||||
el_val_t cgi_dharma_id(void);
|
||||
el_val_t cgi_principal(void);
|
||||
el_val_t cgi_network(void);
|
||||
el_val_t cgi_engram(void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user