Documentation index — who owns which topic#
This page exists so consumer repos can link ONE hop. A consuming project’s
AGENTS.md should point here (or at a heading in one of these files) instead of
restating a procedure. Then reorganising the docs means fixing this page, not
hunting links across every consumer repository.
Why it matters, concretely: on 2026-08-11 the Dev Drive filter command was
written out in three separate places — windows-builds.md here, plus
OmniAccelerANT’s AGENTS.md and docs/source/platforms.md. All
three copies were wrong in the same way (unquoted filter list, missing
/volume), and windows-container-build-performance.md had the correct version
the whole time plus a warning that people get it wrong exactly that way.
Copying is what caused it.
Where does a piece of knowledge belong?#
One question decides it:
Would this still be true in a different project?
Yes → it belongs here. The consumer links to it.
No → it belongs in the consumer.
The two halves of one topic often split:
Knowledge |
Owner |
Why |
|---|---|---|
How to allow the |
here |
True for any repo on a Dev Drive |
Dart’s |
OmniAccelerANT |
Only matters because that app is Flutter |
|
here |
A property of the engine and image |
Which CMake presets a project ships |
the project |
Nobody else has those presets |
The |
here |
A property of the modules |
Which of those modules a project imports |
the project |
Its own build |
Topic → owning document#
Start here#
Looking for |
Read |
|---|---|
An error message — symptom → cause → fix, both lanes |
|
Wiring a new project to this repo |
|
What is published, what is in it, the feature matrix |
|
Prerequisites, tests, roadmap, contribution, contact |
|
Why the pack is 154 MB, what is large, and why history is not rewritten |
|
Licences of bundled software, what each one obliges this project to do, and the corresponding source for copyleft components |
|
Known vulnerabilities — running |
|
SBOM — how to generate it, and what you can do with it (CVE scanning, procurement, release diffs, policy gates) |
|
SBOM — the curated half (source-built components, which no image scanner can see) |
|
SBOM — the scanner half (apt/pip/npm, thousands of packages) |
|
Rules an automated agent must follow |
|
ONNX Runtime has one source: the chain — every ORT consumer on both lanes and how it reaches the chain build, the six guards (census, build gate + stamp, crate env, static denylist, invariant, bundle census) and what each cannot see, and how to add a consumer |
Windows#
Looking for |
Read |
|---|---|
The image itself: what is installed, entrypoint, known traps |
|
ROCm on Windows ( |
|
Rules you must not regress when editing the Windows chain (49, grouped) |
|
Which lane to build on: BuildKit, nerdctl, the removed classic docker lane; isolation policy, preflight gates, RDNA4 A/B history |
|
CPU/memory envelope, the sccache wiring, GPU in containers, the 125-layer budget |
|
sccache across build hosts: the host’s WebDAV as level 0, a shared S3 bucket as level 1, the key as BuildKit secrets, the upload drain, the client scripts |
|
Bazel’s action cache on the host’s dufs (the LiteRT builds), and ORT’s nvcc keeping sccache but for its PTX-only targets |
|
The shared bucket’s server: Garage on a VPS behind the FritzBox’s WireGuard, firewall, size cap, rebuild runbook |
|
The home fleet’s weekly update: Ansible on pi-1, the inventory’s obfuscated names, the schedule, a host that is off, Garage, and each run’s log and status |
|
Home Assistant on pi-1: tracked vs live config, secrets, one file per feature in |
|
The home network’s addresses: placeholders in docs and examples, the real values in the gitignored |
|
clang-cl sanitizers: why |
|
Stevedore post-install fixes, ghcr login, service recovery |
|
Open refactor work on the Windows chain |
|
Local fixes to upstream projects — every third-party source change the Windows chain carries, graded, and the 12 prepared-but-unsent submissions |
|
Building for Windows-on-ARM: why there is no arm64 image, the clang-cl cross lane, arch gates, what reached runtime parity with amd64 and what stays amd64-only |
|
A consumer’s Windows products: the reusable |
|
Signing a consumer’s MSIX — |
|
Bind mount vs tar-pipe, Dev Drive filter setup, container reuse, measured timings |
|
The image does not fit on C: — moving Docker’s data-root to the big drive |
|
The CI prologue on hosted runners — the Windows cleanup after the pull, the Linux pull first, measured per mode |
|
Setting up a brand-new Windows host |
|
|
|
The agentic loop’s PowerShell module and its API |
|
ghcr.io login failing on Windows ( |
|
Defender performance mode, |
|
General Windows / PowerShell commands — disk, exe debugging, SSH server, WoL, media capture. Not repo-specific |
|
Build matrix and sanitizer env for the loop |
Linux#
Looking for |
Read |
|---|---|
Building in the Linux image, presets, the basics |
|
Running Linux containers on a Windows host |
|
A bind mount that resolves but is empty — containerd’s own mount namespace, Windows vs WSL path form, and why the obvious |
|
Setting up WSL2 itself: store-less install, |
|
A named volume that is silently a directory — |
|
Running an arm64 container locally — Rancher’s VM ships no emulators, so |
|
flatpak/AppImage fail on emulated arm64 — bubblewrap’s user namespace and static-PIE loading, neither of which |
|
Cross-compilation chain and its stages |
|
Vulkan SDK on foreign arches — LunarG ships x86_64 only, so arm64/riscv64 are cross-built; what the target prefix contains, why it used to hold two binaries, and how the cross set grew to the vendor’s own 24 components (VK2, VK4) |
|
Artifact-copy completeness — why a built component can vanish between the build stage and |
|
Failure classes seen in cross builds |
|
GCC sanitizers in the Linux image — which GCC ships libsanitizer on each arch, the three gates, and why a sanitized binary runs only natively |
|
What |
|
onnxruntime-genai on riscv64 (GEN1) — the self-built lane, its upstream patch, the |
|
QNN / QAIRT on Linux — the arm64-only opt-in lane: staging the login-gated SDK, the |
|
riscv64 venv parity — the |
|
Prepared upstream submissions — the artefacts too big to inline in the register, and the verification behind them |
|
Which local patches to send upstream — every third-party source change the Linux chain carries, graded by how much work stands between it and a merge request. The Windows half is |
|
riscv64 builds at RVA23 (with vector) — why enabling RVV costs no compatibility, why |
|
riscv64 consumer lanes (CON48) — cross-build on the amd64 runner, run the tests under QEMU: the sysroot from the image’s riscv64 child, the distro clang, the QEMU CPU model, and the arch-specific variables the lane overrides |
|
IREE’s two-stage cross build — why the host stage runs COMPILER=ON in the default (runtime-only target) configuration, the three tools it must install, and the WERROR / OUTPUT_FORMAT_C flags stage 2 requires |
|
CUDA / ROCm / accelerator image variants |
|
NVIDIA on arm64 (SBSA): building natively on an arm64 host, and running the image on a Jetson |
|
DeepStream in the nvidia variant: what ships, TensorRT 10 beside 11, the gates, the licence decision |
|
Setting up a Linux build host: GPU drivers, CUDA, runtime config, performance mode, GRUB recovery |
|
General Linux commands — disk, text/log filtering, users, networking, SSH, media/OCR, remote desktop, git. Not repo-specific |
|
Hailo |
|
Hailo in the image chain — plan, upstream matrix (device families and branches, licences, TAPPAS’s GStreamer gap) and the stage/gate design |
|
Raw |
|
Removing a stale GStreamer source install; Android GStreamer (built with cerbero; the prebuilt tarball is the fallback) |
|
Detached containers, tmux, and bind-mount file ownership |
|
Slow |
|
What filled the disk, and |
|
UFW dropping container traffic, host suspend during a build, APT pinning |
|
Installing the container stack rootless — the nerdctl-full bundle into |
|
Installing a Python CLI tool on a riscv64 host (no wheels → source builds: Rust target, OpenSSL/libffi headers, dropping optional accelerators). Worked example: Mistral Vibe |
Build, CI and tooling#
Looking for |
Read |
|---|---|
What is cached where, and which tier a miss came from |
|
Wiring a new project to this repo — start here |
|
A Linux package that runs outside the image — |
|
A Python app as a relocatable folder — the input to its zip/MSI/MSIX/tar.gz/deb/AppImage packages: |
|
Python CI: the shared lanes, and the three |
|
Code quality: C++ formatter guidance + this repo’s own gates (design notes per slug) |
|
Which preflight gate has a test, a mutation, or neither — the derived table |
|
Which repos consume this hub, and which entry points they actually reach |
|
Upgrading dependencies — Renovate as a local CLI, why |
|
Compiling a Slang shader tree to SPIR-V and WGSL |
|
The sourceable cores in |
|
Job counts, per-job memory, why a build got OOM-killed |
|
Watching resource use during a build |
|
Giving a build a credential without baking it into a layer |
|
Finding the real error in a large build log |
|
Capping CPU so a build leaves the host usable |
|
Building on an SBC or small VM: swap, zram, forcing |
|
Every checkout on its branch tip — the superproject and every submodule, recursively, fast-forward only ( |
|
Submodule conflicts on merge, bumping the pin, shallow fetches |
|
Broken submodule checkout, |
|
Branches, CI rounds and releases — |
|
Which CI lanes run when, per repository, while the repositories move to that rule; what is still path-filtered or gated |
|
Publishing docs or a site over FTP — the one composite action, its pin, and why a failed publish always fails the job |
|
Reading pipeline status from the terminal |
|
Mistral Vibe + GLM-5.2 — setting up the Z.ai GLM-5.2 coding agent (CLI + VS Code) on Mistral La Plateforme |
|
GenieX on Snapdragon — on-device OpenAI-compatible server (Adreno GPU / Hexagon NPU), serving a coding agent inside WSL2 |
|
The LLM gateway — APISIX in front of the GenieX lanes: aliases, per-client keys, the GenieX rules (tools prompt, overflow fallback, T=0, timeouts), |
|
Benchmarking an LLM endpoint — speed and correctness, TTFT vs decode, concurrent lanes, named backends ( |
|
Connecting a model to the NAS (Word/Excel/PDF/images) — why the Hexagon NPU cannot read a page, the OCR-model shortlist and file-type routing, the |
|
A model answers fast but wrong (whitespace, random multilingual tokens) — GGUF tensor types, the sub-4-bit i-quant bug |
|
Also owned here, not under docs/#
Looking for |
Where |
|---|---|
The five shell-safety bug classes (all found live) |
|
Reusable PowerShell modules |
|
Which hub function to call before writing your own helper: container, MSIX/MSI, config, build-step, logging, cargo, packaging, CI |
|
Reusable bash libraries |
|
Generic Python CI drivers |
|
CI composite actions |
|
Where a repo’s Sphinx sources live |
|
Canonical |
|
Copy-and-edit templates ( |
|
Reusable CI workflows ( |
|
Who still calls each hub entry point (weekly, every consumer cloned) |
|
The composite actions exercised against themselves — what a green tick does and does not prove |
|
The submodule-pin invariant as a lane a consumer can |
|
Workflow file and display names across the family ( |
|
One Linux arch per caller of the Python lane ( |
Backlogs, history and archives#
Everything here is record, not instruction. If you find a live rule that exists only in one of these, promote it to its owning page above.
Looking for |
Read |
What’s in it |
|---|---|---|
Open refactor work, Linux side |
||
Every open gap in the published images |
What a consumer lane hits or works around in |
|
What the images deliberately leave out, and gaps checked closed |
The decided non-gaps (no GTK4 dev headers, CPython 3.14 only, the CUDA arch set, riscv64 omissions …) and the 2026-09-25 checks that closed stale consumer notes; not a task list |
|
What to read in a running chain’s log |
The 2026-09-05 wave’s closure changes, grouped by stage: the exact log line that proves each one worked and the exact line that means it failed, plus the read-only probes to run on the shipped bytes afterwards. Written because eleven backlog entries closed on static proof and a first rebuild attempt still found two build-killing bugs. |
|
Open refactor work, Windows chain |
||
What changed and why, current wave |
||
Changelog entries 2026-10-08 … 2026-10-12 |
CON90’s Python 3.15 and the Windows chain following it (CON91), pinned pip installs and clang-cl sdists there (CON88, CON89, CON93), LiteRT-LM’s checked bazel tools, GStreamer through sccache. |
|
Changelog entries 2026-10-01 … 2026-10-07 |
The free-threaded CPython and its cp314t wheel twins (CON66, CON74, CON79), ROCm 10.1 (CON73), the Renovate bumps (CON72), |
|
Changelog entries 2026-09-22 … 2026-09-30 |
The Windows arm64 cross lanes and their DLL closures, the ORT census, the ROCm and MIGraphX Windows builds, compiler caches kept across Linux runs, one-line comments in every language. |
|
Changelog entries 2026-09-08 … 2026-09-21 |
||
Changelog entries 2026-08-29 … 2026-09-07 |
The 2026-09-07 backlog-audit day, the 2026-09-03 reconstruction, the GenieX/QNN rounds and everything back to 2026-08-29. |
|
Changelog entries 2026-08-14 … 2026-08-28 |
||
Changelog entries through 2026-08-13 |
||
Settled Windows backlog items |
|
|
Settled Linux refactor items |
||
Closed Linux refactor items (2026-08-27) |
Everything the backlog closed up to 2026-08-27, including the entries that were REFUTED or RETRACTED rather than fixed. |
|
Closed Linux refactor items (2026-08-30) |
The OpenCV-sccache REFUTATION (pre-UDS wrong-server bug, not OpenCV-specific) and the F2 one-resolver cache consolidation. |
|
Closed Linux refactor items (2026-08-31) |
The A1 closure window: the logging.sh ERR-trap bug, the complexity queue, the modules.sh dir-walker REFUTATION, the IREE toothless-gate finding, and GEN1 (riscv64 GenAI built + wired ON). |
|
Closed Linux refactor items (2026-09-02) |
The RVA23 rebuild window: libyuv’s RVV rows, the cache-key blast radius, the duplication baseline review, and the riscv64 venv gate’s dangling ORT edges. |
|
Closed Linux refactor items (2026-09-03) |
A1 (riscv64 GenAI token sanity) and A2 (QNN fan-out) closed by real builds; the WA–WJ and XK–XR rounds |
|
Closed Linux refactor items (2026-09-07) |
The thirteen the 2026-09-05 chain and the wave after it closed: CC1/CL1/VK1/AB1/APP1 with what the chain measured on the shipped bytes, then CS1 (owner decision), VK3, CS2, CS3, DISK3, R1, YB and F3 – all landed on an idle tree and none proven by a build. |
|
Closed Linux refactor items (2026-09-09) |
VK2 closed by two sdk runs: 20/20 Vulkan cross-components on both foreign arches, verified on the shipped bytes, plus the host/target apt pocket asymmetry that kept riscv64 at 19/20. |
|
Closed Linux refactor items (2026-09-17) |
AS1’s three apt-source neighbours, CON1/CON2/CON3/CON5/CON6, the two F1 seams and the full F4 27-extraction window — all landed on an idle tree, none proven by a build — plus the Windows-Python extent-gate quirk recorded not fixed. |
|
Upstream submissions and issue drafts |
|
|
The libstdc++ |
Where does a piece of knowledge belong? (from AGENTS.md)#
Moved out of AGENTS.md on 2026-09-15 (owner decision D10), unedited except for this heading, the relative links and the repository count. The RULES stayed there; this is the reference behind them.
The reuse rules below are about code. The same discipline applies to what you write down, and one question decides it:
Would this still be true in a different project?
Yes → it belongs here, and the consumer LINKS to it.
No → it belongs in the consumer.
Most topics split down the middle. “Allow the bindFlt/wcifs filters on a Dev
Drive” is ours; “Dart’s copySync fails on a bind mount” is
OmniAccelerANT’s, because it only matters for a Flutter app.
Link rather than restate — restating has produced three broken copies of
one command before (the 2026-08-11 Dev Drive filter incident; the story lives
in docs/INDEX.md).
docs/INDEX.md maps topic → owning document. Consumers link
one hop through it, so reorganising docs here means editing that page instead of
hunting links across every consumer repository.
shared/templates/AGENTS.md.template is the
consumer-side skeleton that keeps the split visible.
One caution against automating this: a keyword check (“this consumer doc mentions wcifs”) cannot tell restating from applying. OmniAccelerANT’s AddressSanitizer section legitimately discusses image-level runtimes, because which ASan runtime a Flutter/COM app can survive is a property of that app. A human has to read it.
Documentation maintenance, as AGENTS.md carried it#
Moved out of AGENTS.md on 2026-09-15 (owner decision D10), unedited except for this heading and the relative links. The RULES stayed there; this is the reference behind them.
Pre-commit hooks: Run
make hooksonce after clone; it pointscore.hooksPathatlinux/host-config/git-hooks. See § Validation for what it runs.Four gates guard the docs; none of them is optional. They exist because this tree lost a licence page, a doc index and ~50 cross-references to silent drift on a single day. Run them with
PREFLIGHT_ONLY=doc-links,doc-dupes,sbom,version-snapshot bash linux/scripts/preflight.sh.doc-links— every relative link, deep-link anchor,file.md § Headingprose reference, and index coverage against BOTHdocs/INDEX.mdand the Sphinx toctree. Rename a heading and this fails, which is the point.doc-dupes— a passage copied into a second page. Deliberate rule-page / mechanism-page overlap is budgeted indocs/scripts/doc-dupes.allow, which also fails when an entry goes stale, so it cannot decay into a blanket exemption. Do not add an entry to silence a finding; give the passage one owner and link to it.docs/INDEX.mddecides which page owns what.sbom/version-snapshot— the generated licence pages and the curated SBOM must matchdeps.json+versions.env.
Adding a dependency is a docs change. A new component needs an entry in
docs/deps/deps.jsonwith anspdxid, and — if that licence is copyleft — asourceblock, or the build fails. If this repo patches it, amodifiedmarker too. The procedure, schema and worked examples aredocs/third-party-licenses.md§ Maintaining this list. Regenerate withsync_versions.py --writeandgenerate_sbom.py --write.Never hand-edit a generated block. The licence tables, the version snapshot and
docs/deps/sbom-curated.spdx.jsonare all rewritten fromdeps.json+versions.env; edits between thegenerated:markers are lost on the next run and the gate will say so.If Dockerfiles or Linux helpers change, update
docs/linux-cross-builds.md,docs/linux-build-basics.md,docs/project-info.md.If Windows Dockerfiles/scripts change, update
docs/windows-builds.md.If version defaults change, run
python3 docs/scripts/sync_versions.py --writethenpython3 docs/scripts/generate-website-licenses.py --write.The canonical
custom.csslives in the DocumANTation submodule — change it there and commit in that repo, thencd docs && make htmlto verify.
If you are about to write a procedure in a consumer repo#
Check this page first. If the topic is listed, link instead — one sentence of
orientation plus the link, then whatever is genuinely specific to your project.
BeschleunigerBallett’s AGENTS.md, in its submodule-pins invariant section,
does this well: it states the one project-specific coupling (FUZZTEST and the
Abseil pin move together), links the shared suite for the mechanism, and keeps
only its own measured numbers locally.