This repository has been archived on 2026-08-20. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
el-retired/dharma/tests/internal_state/test_build_json.el
T
Will Anderson 90ddbdbfc3 feat: port arbor, dharma, forge El source into monorepo
Brings the remaining foundation repos that were not included in the
original monorepo consolidation:

- arbor/vessels/ — 6 vessels (arbor-cli, arbor-core, arbor-diagram,
  arbor-layout, arbor-parse, arbor-render) with manifests + src/main.el
- dharma/ — CGI Provenance Registry package (flat layout, 14 .el files
  across registry/, sandbox/, training/, validation/, tests/)
- forge/ — consciousness channel tool (8 src .el files + new manifest.el)
- elp/src/ — 36 test fixture files not carried over in original merge
  (dedup_*, realizer_*, semantics_*, morph_*, ext_*, one_extern_* helpers)

el-ide, engram, elql are already complete in ide/, engram/, ql/.
2026-05-05 04:27:34 -05:00

105 lines
4.2 KiB
EmacsLisp

// test_build_json.el verifies the JSON serialization of an internal-state event.
// Confirms field order, presence of required + optional fields, and JSON escaping.
fn json_escape(s: String) -> String {
let s1: String = str_replace(s, "\\", "\\\\")
let s2: String = str_replace(s1, "\"", "\\\"")
let s3: String = str_replace(s2, "\n", "\\n")
let s4: String = str_replace(s3, "\r", "\\r")
let s5: String = str_replace(s4, "\t", "\\t")
return s5
}
fn build_internal_state_json(
id: String,
cgi_id: String,
event_id: String,
trigger: String,
domain: String,
pre_reasoning: String,
pre_logged_at: Int,
post_reasoning: String,
gap_summary: String,
compression_ratio: Float,
gap_direction: String,
tags: String,
logged_at: Int
) -> String {
let p1: String = "{\"_type\":\"internal_state\",\"id\":\"" + id + "\""
let p2: String = p1 + ",\"cgi_id\":\"" + cgi_id + "\""
let p3: String = p2 + ",\"event_id\":\"" + event_id + "\""
let p4: String = p3 + ",\"trigger\":\"" + json_escape(trigger) + "\""
let p5: String = p4 + ",\"domain\":\"" + json_escape(domain) + "\""
let p6: String = p5 + ",\"pre_reasoning\":\"" + json_escape(pre_reasoning) + "\""
let p7: String = p6 + ",\"pre_logged_at\":" + int_to_str(pre_logged_at)
let p8: String = p7 + ",\"post_reasoning\":\"" + json_escape(post_reasoning) + "\""
let p9: String = p8 + ",\"gap_summary\":\"" + json_escape(gap_summary) + "\""
let p10: String = p9 + ",\"compression_ratio\":" + float_to_str(compression_ratio)
let p11: String = p10 + ",\"gap_direction\":\"" + json_escape(gap_direction) + "\""
let p12: String = p11 + ",\"tags\":\"" + json_escape(tags) + "\""
let p13: String = p12 + ",\"logged_at\":" + int_to_str(logged_at) + "}"
return p13
}
fn assert_contains(name: String, hay: String, needle: String) -> Bool {
if str_contains(hay, needle) {
println("PASS " + name)
return true
}
println("FAIL " + name + " missing=" + needle)
return false
}
fn assert_eq_str(name: String, got: String, want: String) -> Bool {
if str_eq(got, want) {
println("PASS " + name)
return true
}
println("FAIL " + name)
println(" want=" + want)
println(" got =" + got)
return false
}
fn main() -> Void {
// Pre-reasoning capture (POST initial state; post fields blank).
let pre_only: String = build_internal_state_json(
"id-001", "cgi-001", "evt-001",
"user said \"X\"", "cognition",
"resistance, vertigo", 1700000000,
"", "",
0.0, "", "structural",
1700000005
)
assert_contains("type-discriminator", pre_only, "\"_type\":\"internal_state\"")
assert_contains("pre_reasoning-present", pre_only, "\"pre_reasoning\":\"resistance, vertigo\"")
assert_contains("pre_logged_at-present", pre_only, "\"pre_logged_at\":1700000000")
assert_contains("post-empty", pre_only, "\"post_reasoning\":\"\"")
assert_contains("logged_at-after-pre", pre_only, "\"logged_at\":1700000005")
assert_contains("escaped-trigger-quotes", pre_only, "\"user said \\\"X\\\"\"")
// Full record after PATCH (all fields populated).
let full: String = build_internal_state_json(
"id-002", "cgi-001", "evt-002",
"trigger phrase", "emotion",
"raw pull toward defending", 1700001000,
"softened to honest acknowledgment", "pre/post differ: defensive impulse → owned uncertainty",
0.42, "softened", "honesty,vulnerability",
1700001020
)
assert_contains("post_reasoning", full, "\"post_reasoning\":\"softened to honest acknowledgment\"")
assert_contains("gap_summary", full, "\"gap_summary\":\"pre/post differ: defensive impulse → owned uncertainty\"")
assert_contains("gap_direction", full, "\"gap_direction\":\"softened\"")
assert_contains("compression_ratio", full, "\"compression_ratio\":")
// Newline / quote escape sanity.
let with_newline: String = build_internal_state_json(
"id-003", "cgi-001", "evt-003",
"t", "d",
"line1\nline2", 1700002000,
"", "", 0.0, "", "",
1700002001
)
assert_contains("newline-escaped", with_newline, "\"pre_reasoning\":\"line1\\nline2\"")
}