Technical decisions
Findings that changed our design assumptions, newest last.
Tests run against fixtures captured from live MyST sites (
tests/fixtures/, saved byscripts/recon.ts) rather than synthetic data or live-network calls: offline and deterministic, while still proving the code works on what real deployments actually serve.scripts/recon.tsis temporary and goes away once the CLI can inspect sites itself.The slash→dot URL→
dataderivation rule fails for folder-index pages (e.g./community/jobs→/community.jobs.index.json, not/community.jobs.json); the xrefdatafield must always be used as the source of truth, never derived.xref heading records include an
implicitboolean field beyond the assumedkind/url/datashape.myst.search.jsonrecords are Algolia DocSearch-style (hierarchy,type,url,position, andcontenton content-type rows), richer than the bare page/heading pointer shape assumed in the design spec.next.jupyterbook.orgwas unreachable (connection timeout) during Phase 0 recon;https://jupyterbook.orgwas surveyed instead as the second required site.The bare
mystmd.orgdomain (no subpath) 404s onmyst.xref.json: each documentation section (/guide,/spec,/jtex) is its own independent MyST site deployment.scripts/recon.tshas been retired now that the CLI can inspect sites directly.myst.search.jsonis deliberately unused bysearch: it only exists on static-export hosting, and deriving records from page JSONs gives identical behavior on every site.searchandgetdefine sections differently on purpose:searchtreats every anchored heading as a flat boundary, whilegetfollows heading depth so a section includes its subsections. A search hit points at the nearest anchor, andgeton that anchor retrieves it with its subtree.All
myst.xref.jsoninterpretation lives insrc/site.ts(openSite): nothing outside it reads xref records or joinsdataURLs, so a change in the index format touches one file. The same duplication kept reappearing in commands before this rule.