nx_wiki_index_builder.nx
buildroot/runtime/wiki/nx_wiki_index_builder.nx
about
nx_wiki_index_builder.nx -- wiki-specific index builder + doc store.
COMPOSES (zero new index/tokenizer code introduced):
nx_search_inverted (two-pass NxInvIndex build via index_row + emit_row)
nx_syscalls (sys_open, sys_read_file, sys_close for doc bytes)
COMPOSED BY:
wiki/nx_wiki_search_wiring (resolver swap; closes placeholder gap)
wiki/nx_wiki_main (startup-time index build)
SEPARATION OF CONCERNS:
- nx_wiki_doc_store: pure storage; rowid -> (title, url, body) lookup
- nx_wiki_index_builder: orchestrates two-pass NxInvIndex build +
doc-store population; reads bytes via sys_read_file
- V1: caller supplies a list of doc paths (no dir-walk yet); V2
adds sys_getdents-based auto-discover
V1 SCOPE per NISHI_SEARCH_CHARTER ยง6:
- Caller-driven doc list (operator picks which docs to index)
- Title extraction: first markdown # heading or fallback to filename
- URL derivation: caller supplies (typically "/wiki/<doc-name>")
- Body: full file bytes (no body extraction yet; V2 strips front matter)
- Tokenization: nx_inv_index_row + nx_inv_emit_row (standard
nx_search_inverted convention; lowercase + 2..64 char tokens)
V2 SCOPE (TODO):
- sys_getdents directory auto-discover
- Front-matter parser (skip <head> from indexable body)
- nx_nishi_page_validator integration (skip non-conformant docs;
log via nx_telemetry)
- Incremental rebuild (content-hash diff vs prior build)
Status: V1. 2026-05-27.
dependencies 2 imports · 22 importers
diagram shows first 10 each side; +0 more imports, +12 more importers in the complete lists below.
imports: nx_syscalls.nxnx_search_inverted.nx
imported by: _wiki_backlinks_gate.nx_wiki_cite_gate.nx_wiki_cite_live_gate.nx_wiki_frontend_gate.nx_wiki_integrate_gate.nx_wiki_search_gate.nx_wiki_wikilink_gate.nxnx_ims_monitor.nxnx_wiki_backlinks.nxnx_wiki_bm25_search.nxnx_wiki_content_loader.nxnx_wiki_dashboard.nxnx_wiki_doc_handler.nxnx_wiki_graph.nxnx_wiki_https_daemon.nxnx_wiki_https_daemon_mv.nxnx_wiki_main.nxnx_wiki_page_save.nxnx_wiki_routes.nxnx_wiki_search_wiring.nxnx_wiki_structure_regen.nxnx_wiki_vhost_table.nx
structs
| 63 | struct NxWikiDocStore |
| 330 | struct NxWikiIndexBuilder |
consts
| 39 | const NX_WIB_OK: i64 = 0 |
| 40 | const NX_WIB_BAD_INPUT: i64 = 2600 |
| 41 | const NX_WIB_DOC_OVERFLOW: i64 = 2601 |
| 42 | const NX_WIB_BUF_OVERFLOW: i64 = 2602 |
| 43 | const NX_WIB_READ_FAILED: i64 = 2603 |
| 44 | const NX_WIB_INDEX_INIT_FAILED: i64 = 2604 |
| 45 | const NX_WIB_PASS1_FAILED: i64 = 2605 |
| 46 | const NX_WIB_FINALIZE_FAILED: i64 = 2606 |
| 47 | const NX_WIB_PASS2_FAILED: i64 = 2607 |
| 48 | const NX_WIB_DOUBLE_FINALIZE: i64 = 2608 |
| 49 | const NX_WIB_LOOP_BUDGET: i64 = 2609 |
| 52 | const NX_WIB_DEFAULT_DOCS_CAP: i64 = 1000 |
| 53 | const NX_WIB_DEFAULT_TITLE_POOL: i64 = 65536 // 64 KB |
| 54 | const NX_WIB_DEFAULT_URL_POOL: i64 = 65536 // 64 KB |
| 55 | const NX_WIB_DEFAULT_BODY_POOL: i64 = 4194304 // 4 MB; 4 KB avg per doc |
| 56 | const NX_WIB_MAX_TITLE_LEN: i64 = 200 |
| 57 | const NX_WIB_MAX_URL_LEN: i64 = 512 |
| 58 | const NX_WIB_MAX_BODY_LEN: i64 = 524288 // 512 KB per doc |
| 59 | const NX_WIB_LOOP_BUDGET_CAP: i64 = 10000000 |
functions
| 91 | func nx_wiki_doc_store_init(s: *NxWikiDocStore, docs_cap: i64, |
| 126 | func nx_wib_pool_alloc(pool: *u8, cap: i64, used_p: *i64, n: i64) -> i64 called by 1: nx_wiki_doc_store_add |
| 140 | func nx_wiki_doc_store_add(s: *NxWikiDocStore, |
| 198 | func nx_wiki_doc_store_lookup(s: *NxWikiDocStore, rowid: i64, |
| 221 | func nx_wiki_doc_store_count(s: *NxWikiDocStore) -> i64 |
| 230 | func nx_wiki_doc_store_find_by_url(s: *NxWikiDocStore, |
| 269 | func nx_wib_extract_md_title(body: *u8, body_n: i64, |
| 337 | func nx_wiki_index_builder_init(b: *NxWikiIndexBuilder, |
| 359 | func nx_wiki_index_builder_add(b: *NxWikiIndexBuilder, |
| 376 | func nx_wiki_index_builder_finalize(b: *NxWikiIndexBuilder) -> i64 |
| 399 | func nx_wiki_index_builder_get_index(b: *NxWikiIndexBuilder) -> *NxInvIndex |
| 405 | func nx_wiki_index_builder_get_store(b: *NxWikiIndexBuilder) -> *NxWikiDocStore |
| 415 | func nx_wiki_index_builder_add_path(b: *NxWikiIndexBuilder, |