nx_research_ocean.nx
buildroot/runtime/nx_research_ocean.nx
about
nx_research_ocean.nx -- THE OCEAN. Renders /wiki/research.html from the `resbrief-` information
plane, so every research river (/code/research, /product/research, and any area added later) flows
into ONE surface. Operator 2026-08-01: "both should like rivers to the ocean go into
nishifamily.com/wiki/research under sections for product and code and other research areas".
The AREA LIST IS NOT HARDCODED: sections are the DISTINCT values of the area column, in first-seen
order, and a brief's URL is derived as /<area>/<slug>. A new research area therefore appears on this
page by adding ONE plane row -- no page surgery, no organ edit. That is the difference between this
and nx_wiki_products_page, whose families are string literals while its header claims a file source
it never reads (debt 1785625149).
Reads with sts_load_honest, NOT sts_load: a stale/low q:n silently truncates the plain loader, and an
index that under-reports its own library is indistinguishable from a complete one. Declared vs loaded
vs reachable-beyond are printed on stdout AND rendered on the page, so partial coverage is visible to
a reader of the page, not just to whoever ran the organ.
Plane row (8 col): id area slug title date status forks_off scope
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
| 23 | const RO_PLANE: *u8 = "knowledge/store/resbrief-" |
| 24 | const RO_OUT: *u8 = "sites/nishifamily/wiki/research.html" |
| 25 | const RO_RCAP: i64 = 262144 |
| 26 | const RO_HCAP: i64 = 524288 |
| 27 | const RO_NL: i64 = 10 |
| 28 | const RO_TAB: i64 = 9 |
| 29 | const RO_MAXCOL: i64 = 16 |
| 30 | const RO_PAIR: i64 = 2 |
| 31 | const RO_SPB: i64 = 256 |
| 32 | const RO_MAXAREA: i64 = 16 |
| 33 | const RO_AREAB: i64 = 256 |
| 34 | const RO_FLAGB: i64 = 64 |
| 35 | const RO_C_AREA: i64 = 1 |
| 36 | const RO_C_SLUG: i64 = 2 |
| 37 | const RO_C_TITLE: i64 = 3 |
| 38 | const RO_C_DATE: i64 = 4 |
| 39 | const RO_C_STATUS: i64 = 5 |
| 40 | const RO_C_FORKS: i64 = 6 |
| 41 | const RO_C_SCOPE: i64 = 7 |
| 42 | const RO_NCOL: i64 = 8 |
| 43 | const RO_MODE: i64 = 0x1a4 |
| 44 | const RO_ERRFD: i64 = 2 |
| 45 | const RO_EXIT_IO: i64 = 1 |
| 46 | const RO_EXIT_EMPTY: i64 = 3 |
| 47 | const RO_LT: i64 = 60 |
| 48 | const RO_GT: i64 = 62 |
| 49 | const RO_AMP: i64 = 38 |
functions
| 51 | func ro_slen(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } return n } |
| 52 | func ro_werr(s: *u8) -> i64 { sys_write(RO_ERRFD, s, ro_slen(s)); return 0 } |
| 55 | func ro_slice_eqs(q: *u8, a: i64, b: i64, s: *u8) -> i64 |
| 63 | func ro_slice_eq(q: *u8, a: i64, b: i64, r: *u8, c: i64, d: i64) -> i64 called by 1: main |
| 70 | func ro_cols(q: *u8, ls: i64, le: i64, sp: *i64) -> i64 called by 1: main |
| 86 | func ro_cat_slice(d: *u8, o: i64, q: *u8, a: i64, b: i64) -> i64 called by 1: main |
| 93 | func ro_cat_esc(d: *u8, o: i64, q: *u8, a: i64, b: i64) -> i64 |
| 107 | func main() -> i64 |