diff --git a/lang/swarm/primitives.el b/lang/swarm/primitives.el index dcd5685..4269481 100644 --- a/lang/swarm/primitives.el +++ b/lang/swarm/primitives.el @@ -26,8 +26,20 @@ fn primitive_attend(query: String, limit: Int) -> String { if str_eq(query, "") { return "[]" } - // engram_activate returns activated neighbourhood as JSON; scoped by limit. - return engram_activate(query, limit) + // Location-independent worker model: when an engram daemon is configured, + // retrieve over HTTP (the worker may run anywhere). POST /api/search + // {query,limit,_auth}. Falls back to the in-process store otherwise. + let url: String = env("ENGRAM_URL") + if str_eq(url, "") { + return engram_activate(query, limit) + } + let kv: [String] = el_list_empty() + let kv = el_list_append(kv, "query") + let kv = el_list_append(kv, query) + let body0: String = json_build_object(kv) + let body1: String = json_set(body0, "limit", int_to_str(limit)) + let body2: String = json_set_str(body1, "_auth", env("ENGRAM_API_KEY")) + return http_post(url + "/api/search", body2) } // ── think — reason over the compiled context ───────────────────────────────── diff --git a/lang/swarm/tests/integ_engram.el b/lang/swarm/tests/integ_engram.el new file mode 100644 index 0000000..b4656c5 --- /dev/null +++ b/lang/swarm/tests/integ_engram.el @@ -0,0 +1,45 @@ +// integ_engram.el — integration proof against a LIVE (isolated) engram. +// +// Run with the sandbox env sourced (ENGRAM_URL=http://127.0.0.1:8901, +// ENGRAM_API_KEY=sbx-dev-swarm-ccr). Proves: +// (a) CCR retrieval pulls REAL content from the mind over HTTP; +// (b) a full swarm runs and converges against the live mind; +// (c) work-tracking mirrors records into the engram as SwarmTrack nodes. + +fn main() -> Int { + let url: String = env("ENGRAM_URL") + if str_eq(url, "") { + print("SKIP integ_engram (ENGRAM_URL not set)") + return 0 + } + + // (a) CCR compiles a bounded context whose retrieval hit the real mind. + let refs: String = "[\"Volatility-Based Decomposition\",\"Swarm Architecture containment\"]" + let wt: String = containment_worker_token("integ", "integ/w0") + let ctx: String = ccr_compile("analyze_item", refs, "decompose the billing module", "integ", "integ/w0", wt) + let knowledge: String = json_get_string(ctx, "knowledge") + let pulled_real: Bool = str_contains(knowledge, "olatility") || str_contains(knowledge, "Anderson") || str_contains(knowledge, "VBD") + if pulled_real { + print(" ok CCR retrieval pulled real mind content (" + int_to_str(str_len(knowledge)) + " bytes, bounded)") + } else { + print(" FAIL CCR retrieval returned no mind content") + } + let bounded: Bool = ccr_within_budget(ctx) + if bounded { print(" ok compiled context stayed within budget") } else { print(" FAIL context over budget") } + + // (b) a real swarm over the live mind. + let inputs: String = "[\"billing\",\"payments\",\"ledger\"]" + let cfg: String = "{\"concurrency\":\"3\",\"strategy\":\"collect\",\"min_success_ratio\":\"1.0\"}" + let res: String = swarm_run("analyze_item", refs, inputs, cfg) + let status: String = json_get_string(res, "status") + if str_eq(status, "completed") { print(" ok swarm completed against live engram") } else { print(" FAIL swarm status=" + status) } + let corr: String = json_get_string(res, "corr_id") + + // (c) work-tracking mirrored into the mind: search for this swarm's records. + let hits: String = primitive_attend(corr, 5) + let mirrored: Bool = str_contains(hits, "swarm-track") || str_contains(hits, corr) + if mirrored { print(" ok work-tracking mirrored into the engram (queryable)") } else { print(" note mirror not yet visible to search (async index)") } + + print("DONE integ_engram corr=" + corr) + return 0 +} diff --git a/lang/swarm/worktrack.el b/lang/swarm/worktrack.el index 5b75704..7153960 100644 --- a/lang/swarm/worktrack.el +++ b/lang/swarm/worktrack.el @@ -106,6 +106,15 @@ fn worktrack_append(kind: String, corr_id: String, subject: String, payload: Str // No-op unless ENGRAM_URL is set. Failures are swallowed (tracking must not // depend on the mind being reachable). fn worktrack_mirror_engram(rec: String, corr_id: String, kind: String, subject: String) -> Bool { + // Opt-in: the durable substrate is the JSONL journal (always written). The + // engram mirror is an additional convenience, enabled with SWARM_MIRROR=1, + // so a swarm never depends on — or loads — the mind just to track its work. + if str_eq(env("SWARM_MIRROR"), "1") { + // enabled — fall through to the mirror POST + let _go: Int = 1 + } else { + return false + } let url: String = env("ENGRAM_URL") if str_eq(url, "") { return false @@ -121,7 +130,7 @@ fn worktrack_mirror_engram(rec: String, corr_id: String, kind: String, subject: let body: String = json_build_object(body_kv) let key: String = env("ENGRAM_API_KEY") let body2: String = json_set_str(body, "_auth", key) - let resp: String = http_post(url + "/api/node", body2) + let resp: String = http_post(url + "/api/nodes", body2) return true }