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}