code wiki / _hdl_build / nx_chart_migrate.nx
nx_chart_migrate.nx source
↩ module page · 89 lines · 4627 B
1// nx_chart_migrate.nx -- migrate a tab-separated COORDINATION CHART (genesis_lineage / lineage_raci) into a
2// sovereign seg_store, key = the row's FIRST tab field (node-id / chart-key), value = the whole row line
3// (byte-faithful). '#' comment lines + blank lines skipped. ADDITIVE (the .tsv stays = retire-ready); the gated
4// next step is repointing the verifiers (nx_genesis_trace / nx_lineage_raci) to read store-first-else-TSV (the
5// nx_raci_sov pattern), after which the .tsv retires. This closes the ironic last-TSV (we coordinate via these
6// charts). Self-verifies each store re-opens with a known key byte-faithful + __count. license_tier: ORIGINAL
7import "nx_seg_store.nx"
8import "nx_syscalls.nx"
9const K_MAGIC_4194304: i64 = 4194304
10
11func cm_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 }
12func cm_putn(v: i64) -> i64 {
13 if v == 0 { sys_write(1, "0" as *u8, 1); return 0 }
14 var m: i64 = v
15 if m < 0 { sys_write(1, "-" as *u8, 1); m = 0 - m }
16 let d: *u8 = sys_mmap(24); var k: i64 = 0
17 while m > 0 { d[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
18 var j: i64 = k - 1
19 while j >= 0 { sys_write(1, ((d as i64)+j) as *u8, 1); j = j - 1 }
20 return 0
21}
22func cm_itoa(v: i64, out: *u8) -> i64 {
23 let t: *u8 = sys_mmap(28); var m: i64 = v; var k: i64 = 0
24 if m == 0 { t[0] = 48 as u8; k = 1 }
25 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 }
26 var i: i64 = 0; while i < k { out[i] = t[k - 1 - i]; i = i + 1 } out[k] = 0 as u8; return k
27}
28// migrate one chart file -> store; returns rows migrated
29func cm_migrate(path: *u8, prefix: *u8) -> i64 {
30 let szp: *i64 = sys_mmap(16) as *i64
31 let buf: *u8 = ss_readall(path, szp)
32 let n: i64 = szp[0]
33 if n <= 0 { return 0 }
34 let w: *i64 = sys_mmap(32) as *i64
35 let cap: i64 = K_MAGIC_4194304
36 w[0] = sys_mmap(cap) as i64; w[1] = 0; w[2] = cap
37 var count: i64 = 0
38 var i: i64 = 0
39 while i < n {
40 let ls: i64 = i
41 var le: i64 = i
42 var f: i64 = 1
43 while f == 1 { if le >= n { f = 0 } else { if buf[le] == (10 as u8) { f = 0 } else { le = le + 1 } } }
44 let llen: i64 = le - ls
45 if llen > 0 {
46 if (buf[ls] as i64) != 35 {
47 var ke: i64 = ls
48 var kf: i64 = 1
49 while kf == 1 { if ke >= le { kf = 0 } else { if buf[ke] == (9 as u8) { kf = 0 } else { ke = ke + 1 } } }
50 let klen: i64 = ke - ls
51 if klen > 0 {
52 let key: *u8 = sys_mmap(klen + 8)
53 var t: i64 = 0; while t < klen { key[t] = buf[ls + t]; t = t + 1 } key[klen] = 0 as u8
54 if ss_add(w, 1, key, (buf as i64 + ls) as *u8, llen) == 0 { count = count + 1 }
55 }
56 }
57 }
58 i = le + 1
59 }
60 let cb: *u8 = sys_mmap(28); let cl: i64 = cm_itoa(count, cb)
61 ss_add(w, 1, "__count" as *u8, cb, cl)
62 ss_commit(prefix, w, sys_now_ms())
63 return count
64}
65// verify a store re-opens with a known key present + __count present
66func cm_verify(prefix: *u8, known: *u8) -> i64 {
67 let h: *i64 = ss_open(prefix)
68 if (h as i64) == 0 { return 0 }
69 let pp: *i64 = sys_mmap(16) as *i64
70 let ll: *i64 = sys_mmap(16) as *i64
71 var pass: i64 = 0
72 if ss_hget(h, known, pp, ll) == 1 { if ll[0] > 0 { pass = pass + 1 } }
73 if ss_hget(h, "__count" as *u8, pp, ll) == 1 { pass = pass + 1 }
74 return pass
75}
76func main() -> i64 {
77 cm_puts("CHART MIGRATE: coordination charts (TSV) -> sovereign seg_store (id-keyed, byte-faithful, additive)\n" as *u8)
78 let g: i64 = cm_migrate("knowledge/registry/genesis_lineage.tsv" as *u8, "knowledge/store/lineage-genesis-" as *u8)
79 cm_puts(" genesis_lineage -> lineage-genesis- rows="); cm_putn(g); cm_puts("\n" as *u8)
80 let r: i64 = cm_migrate("knowledge/registry/lineage_raci.tsv" as *u8, "knowledge/store/lineage-raci-" as *u8)
81 cm_puts(" lineage_raci -> lineage-raci- rows="); cm_putn(r); cm_puts("\n" as *u8)
82 let vg: i64 = cm_verify("knowledge/store/lineage-genesis-" as *u8, "CAP-INFOMGMT-SCLASS" as *u8)
83 let vr: i64 = cm_verify("knowledge/store/lineage-raci-" as *u8, "format" as *u8)
84 cm_puts(" self-verify genesis(CAP-INFOMGMT-SCLASS)+__count="); cm_putn(vg)
85 cm_puts("/2 raci(format)+__count="); cm_putn(vr); cm_puts("/2\n" as *u8)
86 if g > 100 { if r > 5 { if vg == 2 { if vr == 2 { cm_puts("CHART-MIGRATE: GREEN (coordination charts now sovereign + verifier-ready; .tsv retire-ready)\n" as *u8); return 0 } } } }
87 cm_puts("CHART-MIGRATE: RED\n" as *u8)
88 return 1
89}