nx_gfxpapers_ingest.nx
buildroot/runtime/nx_gfxpapers_ingest.nx
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
imports: nx_syscalls.nxnx_itoa_lib.nxnx_tool_run.nx
imported by: nobody (leaf or entry point)
structs
| none |
consts
| 38 | const GP_CAP: i64 = 4194304 |
| 39 | const GP_NAMES_MAX: i64 = 4096 |
| 40 | const GP_NAMELEN: i64 = 128 |
| 41 | const GP_URLLEN: i64 = 512 |
| 42 | const GP_TIMEOUT_MS: i64 = 120000 |
| 43 | const GP_ARGV_SLOTS: i64 = 4 |
| 44 | const GP_MODE_DIR: i64 = 493 |
| 45 | const GP_QUOTE: i64 = 34 |
| 46 | const GP_SQUOTE: i64 = 39 |
| 47 | const GP_GT: i64 = 62 |
| 48 | const GP_SP: i64 = 32 |
| 49 | const GP_NL: i64 = 10 |
| 50 | const GP_ANCHOR_LEN: i64 = 6 |
functions
| 52 | func 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 } |
| 53 | func gp_n(v: i64) -> i64 { nxi_out(v); return 0 } |
| 54 | func 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 |
| 56 | func gp_find(buf: *u8, n: i64, from: i64, needle: *u8) -> i64 |
| 76 | func gp_http_start(buf: *u8, n: i64) -> i64 { return gp_find(buf, n, 0, "HTTP/" as *u8) } |
| 80 | func gp_status(buf: *u8, n: i64, at: i64) -> i64 called by 1: gp_collect2 |
| 105 | func gp_collect(buf: *u8, n: i64, names: *u8, nn0: i64) -> i64 |
| 160 | func gp_root_of(idxurl: *u8, out: *u8) -> i64 |
| 180 | func gp_has_sub(nm: *u8, ln: i64, needle: *u8) -> i64 called by 1: gp_collect2 |
| 202 | func gp_collect2(buf: *u8, n: i64, names: *u8, nn0: i64, anchor: *u8) -> i64 |
| 291 | func main(argc: i64, argv: *i64) -> i64 |