Page builder (chaipat.cc)
The page builder, scripts/build-pages.mjs, runs on Node.js at every deploy and prerenders a plain HTML page for every entity in the graph, so search engines and link previews can read the wiki without running any JavaScript.
Each page gets its title and description, a canonical address, an Open Graph card (its own picture when one has been rendered), and structured data in JSON-LD describing what it is: a person, a piece of software, a scholarly article, an organisation or a defined term. The script also writes sitemap.xml, the XML sitemap listing every page with the date it last changed, and the wiki's index page. When JavaScript does run, the page becomes the full interactive site.
The wiki address is an entity's about resource, whether its page has a written article or is generated from graph facts. It is not the same as opening a product or its source code. The shared catalog in src/resources.js, also emitted under entities in data/wiki/search.json, supplies that local /wiki/<Id> resource for every typed entity except the profile. It supplies separate live and source actions only when the graph explicitly declares cj:liveUrl or cj:repository. The runtime catalog reads the loaded graph; the page builder remains responsible for HTML, metadata and discoverable wiki addresses, not for interpreting a visitor's task.
The interactive question view uses src/answer.js to compose one supported focused answer with actual-evidence sources. A related entity or an about/live/source action is not automatically a citation. Optional model augmentation preserves the local answer and its authoritative sources rather than adding a second description. Prerendering wiki HTML does not choose those answer citations.
The recommended release uses one bundled knowledge snapshot: leave the browser's kg-source empty and the API's KG_SOURCE unset so the graph, ontology and wiki passages come from the same build. Verify a preview before production; a deployment-specific empty KG_SOURCE override can keep the preview bundled without changing production settings. A separately updated remote graph is not covered by the bundled wiki's freshness checks.
Before page generation, deployment validates the committed data/knowledge-state.json and compares regenerated wiki graph, evidence, article index and complete search passages with current inputs. Stale knowledge fails the build; page generation does not overwrite the manifest to make it pass. After relevant source, schema, graph or article edits, rebuild knowledge first and review affected prose for accuracy. Digests establish freshness, not semantic correctness.