code wiki / (root) / nx_uxf_tsv_migrate.nx

nx_uxf_tsv_migrate.nx source

↩ module page · 156 lines · 7291 B

1// nx_uxf_tsv_migrate.nx -- UXF arc R2: the ORIGINAL crash goal made real -- REPLACE A TSV. 2// Reads a real registry TSV, turns EACH data row into a canonical content-addressed record 3// (keys = positional column ids c0..cN, vals = the row's tab-separated fields), and stamps a 4// profiled CID (UXF_DATA). General over ANY TSV (no per-file schema): skip '#' comment lines, 5// split rows on TAB, positional keys. Proves on real data (Rule 7): 6// T1 parsed real rows ; T2 row0 round-trips through nx_uxf_decode to the SAME CID ; 7// T3 DEDUP -- the CID is field-ORDER-INDEPENDENT (canonicalization => same logical row => 8// one CID, regardless of how the fields were ordered) ; T4 distinct rows => distinct CIDs. 9// Composes the proven envelope: canon_encode + uxf_cid_profiled + canon_decode. No hardware 10// writes (Rule 26). First corpus = sci_units.tsv (small/structured per the substrate spec). 11// expect_exit: 0 license_tier: ORIGINAL 12import "nx_syscalls.nx" 13import "nx_canon_cid.nx" 14import "nx_uxf_cid.nx" 15import "nx_uxf_decode.nx" 16const K_MAGIC_65536: i64 = 65536 17 18func mg_puts(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(1, s, n); return 0 } 19func mg_putn(v: i64) -> i64 { let bb: *u8 = sys_mmap(28); var m: i64 = v; if m < 0 { m = 0 - m; sys_write(1, "-" as *u8, 1) } let t: *u8 = sys_mmap(28); var k: i64 = 0; if m == 0 { t[0] = 48 as u8; k = 1 } while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } var i: i64 = 0; while i < k { bb[i] = t[k - 1 - i]; i = i + 1 } sys_write(1, bb, k); return 0 } 20 21func mg_streq(a: *u8, b: *u8) -> i64 { 22 var i: i64 = 0 23 while 1 == 1 { 24 if a[i] != b[i] { return 0 } 25 if a[i] == (0 as u8) { return 1 } 26 i = i + 1 27 } 28 return 1 29} 30 31// "c" + decimal(idx) + NUL into dst. 32func mg_keyname(idx: i64, dst: *u8) -> i64 { 33 dst[0] = 99 as u8 // 'c' 34 if idx == 0 { dst[1] = 48 as u8; dst[2] = 0 as u8; return 2 } 35 let tmp: *u8 = sys_mmap(24) 36 var m: i64 = idx 37 var k: i64 = 0 38 while m > 0 { tmp[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 39 var i: i64 = 0 40 while i < k { dst[1 + i] = tmp[k - 1 - i]; i = i + 1 } 41 dst[1 + k] = 0 as u8 42 return k + 1 43} 44 45func mg_cpcid(src: *u8, dst: *u8) -> i64 { var i: i64 = 0; while i < 73 { dst[i] = src[i]; i = i + 1 } return 0 } 46 47func main() -> i64 { 48 let lenp: *i64 = sys_mmap(8) as *i64 49 let buf: *u8 = sys_read_file("knowledge/registry/sci_units.tsv\x00", lenp) 50 if (buf as i64) == 0 { mg_puts("R2: sci_units.tsv not found\n" as *u8); sys_exit(1); return 1 } 51 let n: i64 = lenp[0] 52 mg_puts("R2 TSV MIGRATION: knowledge/registry/sci_units.tsv -> content-addressed records\n" as *u8) 53 54 let keys: *i64 = sys_mmap(8 * 64) as *i64 55 let vals: *i64 = sys_mmap(8 * 64) as *i64 56 let canon0: *u8 = sys_mmap(K_MAGIC_65536) 57 var clen0: i64 = 0 58 let first_cid: *u8 = sys_mmap(128) 59 let row1_cid: *u8 = sys_mmap(128) 60 var nrows: i64 = 0 61 62 var i: i64 = 0 63 while i < n { 64 let ls: i64 = i 65 var le: i64 = i 66 var f: i64 = 1 67 while f == 1 { 68 if le >= n { f = 0 } else { if buf[le] == (0x0A as u8) { f = 0 } else { le = le + 1 } } 69 } 70 if le > ls { 71 if buf[ls] != (0x23 as u8) { // not a '#' comment 72 var ncol: i64 = 0 73 var fstart: i64 = ls 74 var p: i64 = ls 75 while p <= le { 76 var isend: i64 = 0 77 if p == le { isend = 1 } else { if buf[p] == (0x09 as u8) { isend = 1 } } 78 if isend == 1 { 79 let flen: i64 = p - fstart 80 let vbuf: *u8 = sys_mmap(flen + 2) 81 var t: i64 = 0 82 while t < flen { vbuf[t] = buf[fstart + t]; t = t + 1 } 83 vbuf[flen] = 0 as u8 84 let kbuf: *u8 = sys_mmap(24) 85 mg_keyname(ncol, kbuf) 86 keys[ncol] = kbuf as i64 87 vals[ncol] = vbuf as i64 88 ncol = ncol + 1 89 fstart = p + 1 90 } 91 p = p + 1 92 } 93 let canonbuf: *u8 = sys_mmap(K_MAGIC_65536) 94 let clen: i64 = canon_encode(keys, vals, ncol, canonbuf) 95 let cidbuf: *u8 = sys_mmap(128) 96 uxf_cid_profiled(UXF_DATA, canonbuf, clen, cidbuf) 97 if nrows == 0 { 98 var z: i64 = 0 99 while z < clen { canon0[z] = canonbuf[z]; z = z + 1 } 100 clen0 = clen 101 mg_cpcid(cidbuf, first_cid) 102 mg_puts(" row0 ncol=" as *u8); mg_putn(ncol); mg_puts(" CID=" as *u8); mg_puts(cidbuf); mg_puts("\n" as *u8) 103 } 104 if nrows == 1 { 105 mg_cpcid(cidbuf, row1_cid) 106 mg_puts(" row1 ncol=" as *u8); mg_putn(ncol); mg_puts(" CID=" as *u8); mg_puts(cidbuf); mg_puts("\n" as *u8) 107 } 108 nrows = nrows + 1 109 } 110 } 111 i = le + 1 112 } 113 114 mg_puts("migrated_rows=" as *u8); mg_putn(nrows); mg_puts("\n" as *u8) 115 116 var pass: i64 = 0 117 var total: i64 = 0 118 119 total = total + 1 120 mg_puts("T1 parsed real rows (>0): " as *u8) 121 if nrows > 0 { pass = pass + 1; mg_puts("PASS\n" as *u8) } else { mg_puts("FAIL\n" as *u8) } 122 123 // T2 round-trip row0 through the tolerant decoder -> same CID 124 let dkeys: *i64 = sys_mmap(8 * 64) as *i64 125 let dvals: *i64 = sys_mmap(8 * 64) as *i64 126 let nf: i64 = canon_decode(canon0, clen0, dkeys, dvals, 64) 127 let rt: *u8 = sys_mmap(K_MAGIC_65536) 128 let rtlen: i64 = canon_encode(dkeys, dvals, nf, rt) 129 let rtcid: *u8 = sys_mmap(128) 130 uxf_cid_profiled(UXF_DATA, rt, rtlen, rtcid) 131 total = total + 1 132 mg_puts("T2 row0 round-trip CID stable (nf=" as *u8); mg_putn(nf); mg_puts("): " as *u8) 133 if mg_streq(rtcid, first_cid) == 1 { pass = pass + 1; mg_puts("PASS\n" as *u8) } else { mg_puts("FAIL\n" as *u8) } 134 135 // T3 dedup: re-encode the decoded fields in REVERSE order -> canonicalization -> same CID 136 let rkeys: *i64 = sys_mmap(8 * 64) as *i64 137 let rvals: *i64 = sys_mmap(8 * 64) as *i64 138 var q: i64 = 0 139 while q < nf { rkeys[q] = dkeys[nf - 1 - q]; rvals[q] = dvals[nf - 1 - q]; q = q + 1 } 140 let rev: *u8 = sys_mmap(K_MAGIC_65536) 141 let revlen: i64 = canon_encode(rkeys, rvals, nf, rev) 142 let revcid: *u8 = sys_mmap(128) 143 uxf_cid_profiled(UXF_DATA, rev, revlen, revcid) 144 total = total + 1 145 mg_puts("T3 dedup (field-order-independent CID): " as *u8) 146 if mg_streq(revcid, first_cid) == 1 { pass = pass + 1; mg_puts("PASS\n" as *u8) } else { mg_puts("FAIL\n" as *u8) } 147 148 // T4 distinct rows -> distinct CIDs 149 total = total + 1 150 mg_puts("T4 distinct rows -> distinct CIDs (row0 != row1): " as *u8) 151 if mg_streq(first_cid, row1_cid) == 0 { pass = pass + 1; mg_puts("PASS\n" as *u8) } else { mg_puts("FAIL\n" as *u8) } 152 153 mg_puts("UXF-TSV-MIGRATE-GATE passed " as *u8); mg_putn(pass); mg_puts("/" as *u8); mg_putn(total) 154 if pass == total { mg_puts(" verdict=GREEN\n" as *u8); sys_exit(0); return 0 } 155 mg_puts(" verdict=RED\n" as *u8); sys_exit(1); return 1 156}