nx_tmplstale.nx source
↩ module page · 90 lines · 4717 B
1// nx_tmplstale.nx -- THE CLERK DESK CLI/MCP organ: self-verifying demo over nx_tmplstale_lib.
2// Seeds a clause library and two templates (each put snapshots its clause CIDs), assembles two client
3// documents with LINEAGE, proves the desk reads CURRENT (0 stale), then revises ONE clause and prints
4// the worklist: the template that carries it and the document built from it are named; the template
5// and document that do not carry it stay silent (the fresh control). license_tier: ORIGINAL
6
7import "nx_tmplstale_lib.nx"
8const TSD_DOCBUF: i64 = 4096
9const TSD_WORKBUF: i64 = 8192
10const TSD_OUTBUF: i64 = 2048
11const TSD_EPOCH: i64 = 1787100000
12const TSD_TINYCAP: i64 = 8
13
14func tsd_has(hay: *u8, needle: *u8) -> i64 {
15 var i: i64 = 0
16 while hay[i] != (0 as u8) {
17 var j: i64 = 0
18 var m: i64 = 1
19 while m == 1 {
20 if needle[j] == (0 as u8) { return 1 }
21 if hay[i + j] != needle[j] { m = 0 }
22 if m == 1 { j = j + 1 }
23 }
24 i = i + 1
25 }
26 return 0
27}
28
29func main() -> i64 {
30 let p: *u8 = "/tmp/nx_tmplstale_demo-" as *u8
31 dg_clause_put(p, "scope" as *u8, "1. SCOPE. Attorney represents {client} in the matter {matter}." as *u8)
32 dg_clause_put(p, "fee" as *u8, "2. FEES. Client shall pay {fee} for services rendered." as *u8)
33 dg_clause_put(p, "term" as *u8, "3. TERMINATION. Either party may terminate upon written notice." as *u8)
34 dg_clause_put(p, "conf" as *u8, "4. CONFIDENTIALITY. Communications are privileged. Dated {date}." as *u8)
35 if ts_tmpl_put(p, "engagement" as *u8, "scope,fee,term,conf" as *u8, TSD_EPOCH) < 0 { return __syscall(93, 61, 0, 0, 0, 0, 0) }
36 if ts_tmpl_put(p, "nda" as *u8, "scope,conf" as *u8, TSD_EPOCH) < 0 { return __syscall(93, 62, 0, 0, 0, 0, 0) }
37 let k: *i64 = sys_mmap(8 * 4) as *i64
38 let v: *i64 = sys_mmap(8 * 4) as *i64
39 k[0] = ("client" as *u8) as i64; v[0] = ("Acme Corp" as *u8) as i64
40 k[1] = ("matter" as *u8) as i64; v[1] = ("Acme v. Baker" as *u8) as i64
41 k[2] = ("fee" as *u8) as i64; v[2] = ("$300/hr" as *u8) as i64
42 k[3] = ("date" as *u8) as i64; v[3] = ("2026-08-18" as *u8) as i64
43 let mrec: *u8 = sys_mmap(TSD_OUTBUF)
44 let mlen: i64 = canon_encode(k, v, 4, mrec)
45 let doc: *u8 = sys_mmap(TSD_DOCBUF)
46 let n1: i64 = dg_assemble_lineage(p, "engagement" as *u8, "M-001" as *u8, mrec, mlen, doc)
47 if n1 < 0 { return __syscall(93, 63, 0, 0, 0, 0, 0) }
48 let doc2: *u8 = sys_mmap(TSD_DOCBUF)
49 let n2: i64 = dg_assemble_lineage(p, "nda" as *u8, "M-002" as *u8, mrec, mlen, doc2)
50 if n2 < 0 { return __syscall(93, 64, 0, 0, 0, 0, 0) }
51 let work: *u8 = sys_mmap(TSD_WORKBUF)
52 let before: i64 = dg_tmpl_stale(p, work, TSD_WORKBUF)
53 // the clerk revises ONE clause -- the fee schedule
54 dg_clause_put(p, "fee" as *u8, "2. FEES. Client shall pay {fee} for services rendered, billed monthly in six-minute increments." as *u8)
55 let after: i64 = dg_tmpl_stale(p, work, TSD_WORKBUF)
56 let listing: *u8 = sys_mmap(TSD_WORKBUF)
57 let ntmpl: i64 = dg_tmpl_list(p, listing, TSD_WORKBUF)
58 let h1: *u8 = "--- template registry (id, version cid, effective epoch) ---\n" as *u8
59 sys_write(1, h1, dg_strlen(h1))
60 sys_write(1, listing, dg_strlen(listing))
61 let h2: *u8 = "--- clerk worklist after revising clause fee ---\n" as *u8
62 sys_write(1, h2, dg_strlen(h2))
63 sys_write(1, work, dg_strlen(work))
64 let out: *u8 = sys_mmap(TSD_OUTBUF)
65 var o: i64 = 0
66 o = mt_catcopy(out, o, "NISHI-TMPLSTALE " as *u8)
67 var ok: i64 = 1
68 if before != 0 { ok = 0 }
69 if after != 2 { ok = 0 }
70 if ntmpl != 2 { ok = 0 }
71 if tsd_has(work, "TEMPLATE-STALE engagement clause=fee" as *u8) != 1 { ok = 0 }
72 if tsd_has(work, "DOC-STALE M-001 clause=fee" as *u8) != 1 { ok = 0 }
73 if tsd_has(work, "nda" as *u8) == 1 { ok = 0 }
74 if tsd_has(work, "M-002" as *u8) == 1 { ok = 0 }
75 if ok == 1 { o = mt_catcopy(out, o, "OK" as *u8) } else { o = mt_catcopy(out, o, "FAIL" as *u8) }
76 o = mt_catcopy(out, o, " templates=" as *u8)
77 o = mt_catn(out, o, ntmpl)
78 o = mt_catcopy(out, o, " docs=2 stale-before=" as *u8)
79 o = mt_catn(out, o, before)
80 o = mt_catcopy(out, o, " stale-after=" as *u8)
81 o = mt_catn(out, o, after)
82 o = mt_catcopy(out, o, " named=engagement,M-001 fresh-control=nda,M-002 worklist-not-count refuse-on-overflow=" as *u8)
83 let tiny: *u8 = sys_mmap(TSD_OUTBUF)
84 if dg_tmpl_stale(p, tiny, TSD_TINYCAP) < 0 { o = mt_catcopy(out, o, "PROVEN" as *u8) } else { o = mt_catcopy(out, o, "NO" as *u8); ok = 0 }
85 out[o] = 10 as u8
86 o = o + 1
87 sys_write(1, out, o)
88 if ok != 1 { return __syscall(93, 65, 0, 0, 0, 0, 0) }
89 return __syscall(93, 0, 0, 0, 0, 0, 0)
90}