code wiki / (root) / nx_gfxpapers_ingest.nx

nx_gfxpapers_ingest.nx

buildroot/runtime/nx_gfxpapers_ingest.nx

19427 B439 linesdepth 5pulls 6 transitivereach 0 importersview sourcekind orphan library
docsdependenciesstructsconstsfunctions

about

nx_gfxpapers_ingest.nx -- MIRROR THE GRAPHICS PAPER INDEX INTO THE ESTATE LIBRARY SO IT CANNOT ROT. Operator 2026-08-15: ingest kesen.realtimerendering.com "in a non rottable way", and then -- correctly -- "shouldnt these be in papers and our library?". The first cut wrote to knowledge/gfxmirror/, an ad-hoc directory beside the three homes the estate already has, which is the orphan the no-orphans doctrine forbids and which nx_spendgate had already warned about by naming nx_papers_index as the top incumbent. The homes, and why THIS content belongs in the middle one: knowledge/fetched/ -- raw bodies from nx_research_fetch, transient working material knowledge/library/ -- CURATED external reference documents, topic-prefixed, .fail markers for misses knowledge/papers/ -- .nxpap native papers (nx_paper_native) plus authored .conf/.md Ke-Sen Huang's index is the canonical catalogue of real-time-rendering conference papers (SIGGRAPH, SIGGRAPH Asia, EG, I3D, EGSR, SCA, SGP, HPG, PG, NPAR, SMI, GI; 2000-2026). Its venue pages are reference documents, so they land in the library under a caller-supplied prefix that keeps them attributable in a flat namespace shared with 7,000 other references. WHAT "NON-ROTTABLE" MEANS, precisely: a bookmark is not an ingest. A URL list rots the moment a site moves or a domain lapses, and the failure is SILENT because a dead link and an unvisited link look identical in a registry. This stores the BYTES with their provenance. MEASURED on the first run: one indexed page (conference2012.html) was ALREADY 404 on capture day, and the entire www.realtimerendering.com host returns 403 to this client for all 236 pages while kesen.realtimerendering.com serves them -- so a registry of the hrefs exactly as the index writes them would have been 236 dead entries that look healthy. CLOSURE, NOT ONE HOP. "All of its content" is a fixed point, not a depth guess: every mirrored page is itself scanned for further pages in the SAME namespace and the queue grows until a pass adds nothing. The anchor is the site's own `kesen/` path segment, so the crawl can never wander onto third-party hosts -- mirroring every paper PDF this index points at would be a different, and far ruder, program. WHAT IT DELIBERATELY DOES NOT DO: parse paper titles. A brittle HTML scrape would be an unvalidated measurement dressed as data. Bytes and provenance are exact and checkable today; extraction is a later rung that can run against the mirror OFFLINE, repeatedly, without re-fetching a single page. argv: <index-url> <out-dir> [fetcher-elf] [name-prefix] license_tier: ORIGINAL No hw writes (Rule 26).

dependencies 3 imports · 0 importers

nx_syscalls.nx nx_itoa_lib.nx nx_tool_run.nx nx_gfxpapers_ingest.nx

imports: nx_syscalls.nxnx_itoa_lib.nxnx_tool_run.nx

imported by: nobody (leaf or entry point)

structs

none

consts

38const GP_CAP: i64 = 4194304
39const GP_NAMES_MAX: i64 = 4096
40const GP_NAMELEN: i64 = 128
41const GP_URLLEN: i64 = 512
42const GP_TIMEOUT_MS: i64 = 120000
43const GP_ARGV_SLOTS: i64 = 4
44const GP_MODE_DIR: i64 = 493
45const GP_QUOTE: i64 = 34
46const GP_SQUOTE: i64 = 39
47const GP_GT: i64 = 62
48const GP_SP: i64 = 32
49const GP_NL: i64 = 10
50const GP_ANCHOR_LEN: i64 = 6

functions

52func gp_p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
called by 1: gp_collect2 calls 1: sys_write
53func gp_n(v: i64) -> i64 { nxi_out(v); return 0 }
called by 1: gp_collect2 calls 1: nxi_out
54func gp_len(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} return n }
called by 1: gp_find
56func gp_find(buf: *u8, n: i64, from: i64, needle: *u8) -> i64
76func gp_http_start(buf: *u8, n: i64) -> i64 { return gp_find(buf, n, 0, "HTTP/" as *u8) }
called by 1: gp_collect2 calls 1: gp_find
80func gp_status(buf: *u8, n: i64, at: i64) -> i64
called by 1: gp_collect2
105func gp_collect(buf: *u8, n: i64, names: *u8, nn0: i64) -> i64
called by 1: gp_collect2 calls 1: gp_find
160func gp_root_of(idxurl: *u8, out: *u8) -> i64
180func gp_has_sub(nm: *u8, ln: i64, needle: *u8) -> i64
called by 1: gp_collect2
202func gp_collect2(buf: *u8, n: i64, names: *u8, nn0: i64, anchor: *u8) -> i64
291func main(argc: i64, argv: *i64) -> i64