nx_docgen.nx source
↩ module page · 50 lines · 2644 B
1// nx_docgen.nx -- Nishi Office DOCUMENT ASSEMBLY (F505) CLI/MCP organ: self-verifying demo
2// over nx_docgen_lib. Seeds a clause library + engagement template, assembles a real merged
3// engagement letter, content-addresses it, and proves determinism. license_tier: ORIGINAL
4
5import "nx_docgen_lib.nx"
6const K_MAGIC_2048: i64 = 2048
7const K_MAGIC_4096: i64 = 4096
8const K_MAGIC_1024: i64 = 1024
9
10func main() -> i64 {
11 let p: *u8 = "/tmp/nx_docgen_demo-" as *u8
12 dg_clause_put(p, "scope" as *u8, "1. SCOPE. Attorney represents {client} in the matter {matter}." as *u8)
13 dg_clause_put(p, "fee" as *u8, "2. FEES. Client shall pay {fee} for services rendered." as *u8)
14 dg_clause_put(p, "term" as *u8, "3. TERMINATION. Either party may terminate upon written notice." as *u8)
15 dg_clause_put(p, "conf" as *u8, "4. CONFIDENTIALITY. Communications are privileged. Dated {date}." as *u8)
16 dg_tmpl_put(p, "engagement" as *u8, "scope,fee,term,conf" as *u8)
17 let k: *i64 = sys_mmap(8 * 4) as *i64
18 let v: *i64 = sys_mmap(8 * 4) as *i64
19 k[0] = ("client" as *u8) as i64; v[0] = ("Acme Corp" as *u8) as i64
20 k[1] = ("matter" as *u8) as i64; v[1] = ("Acme v. Baker" as *u8) as i64
21 k[2] = ("fee" as *u8) as i64; v[2] = ("$300/hr" as *u8) as i64
22 k[3] = ("date" as *u8) as i64; v[3] = ("2026-07-19" as *u8) as i64
23 let mrec: *u8 = sys_mmap(K_MAGIC_2048)
24 let mlen: i64 = canon_encode(k, v, 4, mrec)
25 let doc: *u8 = sys_mmap(K_MAGIC_4096)
26 let n: i64 = dg_assemble(p, "engagement" as *u8, mrec, mlen, doc)
27 if n < 0 { return __syscall(93, 61, 0, 0, 0, 0, 0) }
28 if dg_unmerged(doc, n) != 0 { return __syscall(93, 62, 0, 0, 0, 0, 0) }
29 let cid: *u8 = sys_mmap(128)
30 cid_of(doc, n, cid)
31 let doc2: *u8 = sys_mmap(K_MAGIC_4096)
32 let n2: i64 = dg_assemble(p, "engagement" as *u8, mrec, mlen, doc2)
33 let cid2: *u8 = sys_mmap(128)
34 cid_of(doc2, n2, cid2)
35 if mt_streq(cid, cid2) != 1 { return __syscall(93, 63, 0, 0, 0, 0, 0) }
36 sys_write(1, "--- assembled engagement letter (merged, content-addressed) ---\n" as *u8, 63)
37 sys_write(1, doc, n)
38 let out: *u8 = sys_mmap(K_MAGIC_1024)
39 var o: i64 = 0
40 o = mt_catcopy(out, o, "NISHI-DOCGEN OK clauses=4(data-driven) template=engagement assembled=" as *u8)
41 o = mt_catn(out, o, n)
42 o = mt_catcopy(out, o, "B cid=" as *u8)
43 var z: i64 = 0
44 while z < 24 { out[o] = cid[z]; o = o + 1; z = z + 1 }
45 o = mt_catcopy(out, o, "... merge(client,matter,fee,date)=applied no-unmerged-braces determinism=OK" as *u8)
46 out[o] = 10 as u8
47 o = o + 1
48 sys_write(1, out, o)
49 return __syscall(93, 0, 0, 0, 0, 0, 0)
50}