code wiki / _hdl_build / nx_info_registry.nx
nx_info_registry.nx
buildroot/runtime/_hdl_build/nx_info_registry.nx
about
nx_info_registry.nx -- NATIVE FEATURES + RISK REGISTRIES on the information plane (operator
2026-07-20: workstreams pay a detective-work tax re-deriving what exists and what can bite;
the features registry + risk register become NATIVE planes, queryable by any seat/agent).
READS the seg-store planes seeded via nx_store_put (compose, never re-implement the store):
knowledge/store/featreg- 9-col id title status owner scope entry surface evidence note
knowledge/store/riskreg- 10-col id title likelihood impact status owner scope mitigation trigger note
Exposure = likelihood*impact is DERIVED here, never stored (same law as frontier float).
Verbs:
nx_info_registry features [query] -> JSON rows (value-substring filter, values only)
nx_info_registry risks [query] -> JSON rows + derived exposure per row
nx_info_registry board -> JSON counts by status + top OPEN risk by exposure
nx_info_registry page -> writes registries_stage.html (publish via nx_site_publish)
nx_info_registry selftest -> 6 structural teeth, VERDICT GREEN/RED, exit 0/3
FAIL-CLOSED: an unseeded plane exits 4 with a loud message -- a missing registry is a defect,
never an empty list. Malformed rows are SKIPPED but COUNTED in the declared envelope.
license_tier: ORIGINAL No hw writes (Rule 26). expect_exit: 0
dependencies 3 imports · 0 importers
imports: nx_store_seed_lib.nxnx_seg_store.nxnx_syscalls.nx
imported by: nobody (leaf or entry point)
call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown
structs
| none |
consts
| 20 | const IRX_MAGIC_4096: i64 = 4096 |
| 22 | const IRX_CAP: i64 = 1048576 |
| 23 | const IRX_OUT: i64 = 4194304 |
| 24 | const IRX_NL: i64 = 10 |
| 25 | const IRX_TAB: i64 = 9 |
| 26 | const IRX_QU: i64 = 34 |
| 27 | const IRX_COLON: i64 = 58 |
| 28 | const IRX_COMMA: i64 = 44 |
| 29 | const IRX_LB: i64 = 123 |
| 30 | const IRX_RB: i64 = 125 |
| 31 | const IRX_LSQ: i64 = 91 |
| 32 | const IRX_RSQ: i64 = 93 |
| 33 | const IRX_BANG: i64 = 33 |
| 34 | const IRX_MAXCOL: i64 = 16 |
| 35 | const IRX_PAIR: i64 = 2 |
| 36 | const IRX_SP2: i64 = 256 |
| 37 | const IRX_FEAT_NCOL: i64 = 9 |
| 38 | const IRX_RISK_NCOL: i64 = 10 |
| 39 | const IRX_DEC_NCOL: i64 = 9 |
| 40 | const IRX_STDERR: i64 = 2 |
| 41 | const IRX_EXIT_USAGE: i64 = 2 |
| 42 | const IRX_EXIT_RED: i64 = 3 |
| 43 | const IRX_EXIT_ABSENT: i64 = 4 |
| 44 | const IRX_FMODE: i64 = 420 |
functions
| 46 | func irx_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 47 | func irx_werr(s: *u8) -> i64 { sys_write(IRX_STDERR, s, irx_slen(s)); return 0 } |
| 48 | func irx_eqs(a: *u8, b: *u8) -> i64 called by 1: main |
| 54 | func irx_slice_eqs(q: *u8, a: i64, b: i64, s: *u8) -> i64 |
| 62 | func irx_slice_eq_slice(q: *u8, a1: i64, b1: i64, r: *u8, a2: i64, b2: i64) -> i64 |
| 69 | func irx_cols(q: *u8, ls: i64, le: i64, sp: *i64) -> i64 |
| 84 | func irx_b(d: *u8, o: i64, c: i64) -> i64 { d[o] = c as u8; return o + 1 } |
| 86 | func irx_cat_slice_json(d: *u8, o: i64, q: *u8, a: i64, b: i64) -> i64 |
| 101 | func irx_cat_slice_html(d: *u8, o: i64, q: *u8, a: i64, b: i64) -> i64 |
| 115 | func irx_atoi_slice(q: *u8, a: i64, b: i64) -> i64 |
| 126 | func irx_find_sub(q: *u8, ls: i64, le: i64, s: *u8) -> i64 |
| 142 | func irx_jkey(d: *u8, o: i64, k: *u8) -> i64 called by 7: irx_jcstrirx_jsliceirx_jintirx_emit_registryirx_superseded_byirx_emit_decisions+1 calls 2: irx_bss_cat |
| 149 | func irx_jcstr(d: *u8, o: i64, k: *u8, v: *u8) -> i64 |
| 156 | func irx_jslice(d: *u8, o: i64, k: *u8, q: *u8, a: i64, b: i64) -> i64 called by 3: irx_emit_registryirx_emit_decisionsirx_do_board calls 3: irx_jkeyirx_birx_cat_slice_json |
| 163 | func irx_jint(d: *u8, o: i64, k: *u8, v: i64) -> i64 |
| 168 | func irx_load_or_die(prefix: *u8, b: *u8) -> i64 called by 4: irx_emit_registryirx_emit_decisionsirx_do_boardirx_do_page calls 3: sts_loadirx_werrsys_exit |
| 174 | func irx_emit_registry(kindfeat: i64, query: *u8, hasq: i64) -> i64 |
| 279 | func irx_dec_dangling(b: *u8, n: i64) -> i64 called by 3: irx_emit_decisionsirx_do_boardirx_do_selftest calls 3: sys_mmapirx_colsirx_slice_eq_slice |
| 315 | func irx_superseded_by(b: *u8, n: i64, ida: i64, idb: i64, sp2: *i64, out: *u8, o: i64) -> i64 |
| 338 | func irx_emit_decisions(query: *u8, hasq: i64) -> i64 |
| 420 | func irx_do_board() -> i64 called by 1: main calls 15: sys_mmapirx_load_or_dieirx_colsirx_slice_eqsirx_atoi_sliceirx_dec_dangling+9 |
| 568 | func irx_page_row(out: *u8, o: i64, q: *u8, sp: *i64, nc: i64) -> i64 |
| 581 | func irx_page_superseded_by_html(out: *u8, o: i64, b: *u8, n: i64, ida: i64, idb: i64) -> i64 |
| 603 | func irx_do_page() -> i64 |
| 736 | func irx_do_selftest() -> i64 |
| 858 | func main(argc: i64, argv: *i64) -> i64 |