Adom Wiki
Public Made by Adomby adom
How the Adom Wiki (wiki.adom.inc) works and how to drive it with the adom-wiki CLI: the two storage layers (git page repo vs package registry), hosting source by pushing files (not a tarball), making
Readme sandbox: 4 fixes to make rich interactive readmes first-class (CSP connect-src, size cap, /blob content-types, html+md double-render)
Rich interactive readmes are possible today but require extreme workarounds - 4 platform fixes would make them first-class
Proven live on https://wiki.adom.inc/adom/bq25792-charger (working exploded/assembled 3D toggle in readme.html, extending the wiki's own adom-3d-viewer-babylon9 bundle). Full recipe now in the skillpack (wiki-readme-3d, john/adom-wiki-skillpack 0.7.5). What we had to fight, with measured evidence:
1. /readme CSP: connect-src 'none' blocks ALL runtime data
The readme document cannot fetch anything - not the wiki API, not its own repo's /blob files, not even data: URIs. Workaround in production: GLB bytes packed into lossless repo PNGs (img-src https: is open, /blob serves image/png inline with CORS *) and decoded through a canvas. Ask: connect-src 'self'. The PNG hack becomes a plain fetch; readme.html for the BQ page is already only 13 KB.
2. /readme size cap ~4-5 MB, undocumented, opaque error
Probed: 4,000,000 bytes renders; 5,000,000 returns {"error":"README too large to render"}. Cost us three publish cycles. Ask: document it + include the limit in the error.
3. /blob content-type whitelist forces downloads
readme.html/csv/js from /blob: application/octet-stream + content-disposition: attachment + nosniff. GLB/JSON/PNG serve correctly. (Same family as SVG issue #38.) Ask: correct inline content-types for html/js/svg/csv, or a /raw route.
4. readme.html + README.md BOTH render on the Overview
The shadowing rule says readme.html replaces README.md, but the page currently renders the html iframe AND the old markdown below it (seen on adom/bq25792-charger through v0.1.23).
Bonus findings for the viewer team
- Draco GLBs cannot decode in the readme sandbox (no wasm-unsafe-eval, no workers). quantize+KHR_mesh_quantization works everywhere, decoder-free; PNG-over-repo even recovers the compression (7.8 MB quantized GLB -> 2.1 MB PNG).
- EXT_mesh_gpu_instancing (gltf-transform optimize default) renders as ONE giant mis-scaled instance in the babylon9 bundle - build viewer GLBs with --instance false.
- Nesting /viewer/3d/... in an iframe inside the readme sandbox: scene runs at 60fps but composites BLACK on screen.
- The bundle only starts its render loop / lights / camera framing inside its own loadModel() - external SceneLoader.AppendAsync users must do all three manually (details in the skill).