Skip to content

docs: publish wiki with Quartz 5 (replaces #1210) - #1272

Merged
justinchuby merged 1 commit into
mainfrom
publish-1210
Aug 18, 2026
Merged

justinchuby merged 1 commit into
mainfrom
publish-1210

Conversation

@justinchuby

Copy link
Copy Markdown
Owner

Replacement for #1210, rebased onto current main after the wiki base (#1190) landed as #1267. The original is stacked on #1190's head branch and cannot be squash-merged directly (GitHub stacked-PR 403). Content is identical to #1210's own diff: 154 files under site/, one Pages workflow, .gitignore rules, and two small edits to wiki/.

What this adds

The Quartz 5 static-site machinery that publishes the wiki/ content (added in #1190/#1267) to GitHub Pages:

  • site/quartz/ — the Quartz engine, package.json + committed package-lock.json, quartz.config.yaml, plugin lock (quartz.lock.json).
  • site/scripts/ — Python validators (validate_wikilinks.py, validate_site.py) and a test suite.
  • .github/workflows/wiki-pages.yml — build + deploy workflow.

Practical review (the questions that matter for publishing machinery)

  • Build dependency / CI job — acceptable and documented? Yes. The new wiki-pages.yml pins every action to a full SHA, runs with top-level permissions: contents: read (the deploy job separately requests pages: write / id-token: write), sets persist-credentials: false, installs via npm ci from the committed lockfile (reproducible), and deploys only on push to main (build-only on PRs/branches). It is self-contained and does not touch the Rust build or any existing workflow.
  • Commits generated output that will rot? No. .gitignore excludes site/quartz/node_modules/, public/ (the built site), .quartz/, .quartz-cache/, vendored static assets, and tsconfig.tsbuildinfo. No node_modules, built HTML, or public/ is committed. The committed package-lock.json pins exact dependency versions.
  • Conflicts with the existing docs layout? No. There is no pre-existing site/ or Pages/Quartz/mkdocs workflow on main; the existing workflows (ci, publish, wheels, benchmark, squad-*, …) are untouched. The site lives under site/ and reads wiki/ (quartz build -d ../../wiki); it does not move or rewrite docs/.
  • Config coherence. quartz.config.yaml baseUrl: justinchuby.github.io/onnx-genai matches the /onnx-genai/ base path the post-build validators (validate_site.py public /onnx-genai/, rewrite_repository_links.py) expect.

Verification I could run

  • Wikilink validation passed (validate_wikilinks.py ../../wiki): Validated 96 wikilink(s) across 20 note(s).
  • Nothing in cargo or the Rust test suite references site/, so this cannot affect the crate build or tests.

Gap I must be honest about — the end-to-end site build

I could not run the actual Quartz build (npm run wiki:build) in this environment. npm ci fails because the pinned transitive dependency @xmldom/xmldom@0.8.14 (pulled via pixi.js) is not available on the corporate npm proxy (which only serves 0.9.x for that package), and the public registry is TLS-blocked here. There is no lockfile-preserving workaround from this sandbox.

Consequently the Python test suite shows 37/78 failures — but every failure is a missing-node-dependency error (Cannot find package 'acorn' …) from tests that shell out to the un-installed Node scripts, not a logic defect; the network-free checks pass.

The definitive build proof therefore rests on the wiki-pages.yml job this PR adds, which runs on ubuntu-latest against public npm where 0.8.14 exists. Blast radius is contained: a build failure would surface only in this isolated workflow / Pages deploy and cannot break the Rust build or test suite. Merging on the machinery review + link validation, with the JS build unverified-locally and delegated to CI, clearly flagged.

Closes #1210.

Co-authored-by: Copilot 223556219+Copilot@users.noreply.github.com

Rebased onto current main after the wiki base (#1190) landed as #1267.
Adds the Quartz 5 publishing machinery under site/, a pinned least-privilege
Pages workflow, and .gitignore rules that keep all generated output and
dependencies out of the tree.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@justinchuby
justinchuby merged commit 05c8a2c into main Aug 18, 2026
5 of 16 checks passed
@justinchuby
justinchuby deleted the publish-1210 branch August 18, 2026 16:30
justinchuby added a commit that referenced this pull request Aug 18, 2026
## Summary

- Corrective follow-up to already-merged #1272; applies the finalized
maintainability-first Quartz tree without replaying the obsolete branch
history.
- Replaces the custom Acorn AST/dataflow/resource-graph audit and local
graph vendoring with a 54-line deterministic runtime pin and an exact
four-URL immutable allowlist.
- Retains source wikilink, repository-target, generated link/asset,
base-path, referenced-resource, and rendered-root checks.
- Publishes `wiki/index.md` as the real site landing page while keeping
`wiki/README.md` as the conventions/index note.
- Removes direct Acorn, D3, and Pixi dependencies while preserving the
official Pages workflow and pinned Quartz/plugin/action revisions.

This simplifies #1272; it does not reopen #1210.

## Validation

- `npm ci`
- Clean `CI=true npm run wiki:build`, followed by a consecutive
production build
- 18 focused tests passed
- 116 wikilinks validated across 21 notes
- 90 repository source links rewritten from verified repository targets
- 3,198 generated internal links/assets validated across 118 HTML pages;
2 referenced local scripts verified
- 42 pinned Quartz plugin commits/build outputs verified
- Exact immutable runtime allowlist: 4 URLs
- 127 generated files matched byte-for-byte across consecutive builds
- `npm run check` (TypeScript + Prettier), Python compile checks,
YAML/JSON parsing, and `git diff --check`
- Custom audit/validation code: 2,875 -> 579 lines (2,296 fewer; 79%
reduction)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@github-actions

Copy link
Copy Markdown

🔴 Benchmark Regression Detected

Comparison of criterion micro-benchmarks: PR head vs merge-base, measured on the same runner in the same job (base first → PR second).

ℹ️ Absolute times are informational only — they vary with runner load. The % change column is the reliable signal because both sides ran under identical conditions.

Status Scenario Base PR Change
🔴 gather/large_f32_threads=1-internal/131072 24.46 µs 36.25 µs +48.2%
🔴 gather/small_bf16_threads=1-internal/4096 489.5 ns 718.7 ns +46.8%
🔴 matmul/large_generic_bf16_threads=8/32x1024x1024 2.13 ms 3.00 ms +41.0%
🔴 matmul/medium_generic_bf16_threads=8/32x512x512 470.44 µs 627.56 µs +33.4%
🔴 gather/medium_f32_threads=1-internal/32768 3.95 µs 5.23 µs +32.5%
⚠️ block_quantized_matmul_cached_dense/mxfp4_preexpanded_dense_oncelock_like_proxy/1x1024x1024 55.36 µs 70.53 µs +27.4%
⚠️ gather/large_f16_threads=1-internal/131072 13.61 µs 17.20 µs +26.4%
⚠️ matmul/small_generic_bf16_threads=8/1x256x256 39.45 µs 49.52 µs +25.5%
⚠️ matmul/large_generic_bf16_threads=1/32x1024x1024 2.28 ms 2.85 ms +25.0%
⚠️ grammar_masking/llguidance_compute_mask/32 75.51 µs 93.27 µs +23.5%
⚠️ gather/large_bf16_threads=1-internal/131072 12.68 µs 15.33 µs +20.9%
⚠️ sampling_latency/min_p_per_token 237.73 µs 285.42 µs +20.1%
⚠️ gather/medium_f16_threads=1-internal/32768 2.55 µs 2.98 µs +16.8%
⚠️ matmul/large_generic_f32_threads=8/32x1024x1024 4.51 ms 5.26 ms +16.8%
⚠️ kv_cache/alloc_dealloc_pages 39.62 µs 46.00 µs +16.1%
⚠️ qwen3_sampling_processors/top_p_full_sort_after_top_k_baseline 3.71 ms 4.30 ms +15.8%
✅ block_quantized_matmul_cached_dense/mxfp4_uncached_dequant_each_call/1x1024x1024 858.26 µs 962.79 µs +12.2%
✅ matmul/large_generic_f16_threads=8/32x1024x1024 106.33 µs 118.39 µs +11.3%
✅ sampling_latency/top_p_per_token 457.60 µs 508.61 µs +11.1%
✅ matmul/medium_generic_f32_threads=1/32x512x512 2.56 ms 2.85 ms +11.1%
✅ gather/small_f16_threads=1-internal/4096 575.2 ns 628.4 ns +9.2%
✅ sampling_latency/top_k_per_token 62.56 µs 67.92 µs +8.6%
✅ tokenization/decode_tokens_per_second 7.24 ms 7.84 ms +8.2%
✅ tokenization/encode_tokens_per_second 467.30 µs 494.45 µs +5.8%
✅ logit_processing/seven_processor_chain_per_step 340.00 µs 358.60 µs +5.5%
✅ qwen3_sampling_processors/top_p_fast_after_top_k 554.20 µs 583.95 µs +5.4%
✅ matmul/large_generic_f32_threads=1/32x1024x1024 10.11 ms 10.52 ms +4.1%
✅ matmul/medium_generic_f16_threads=8/32x512x512 38.88 µs 40.37 µs +3.8%
✅ sampling_latency/greedy_per_token 3.39 µs 3.49 µs +3.2%
✅ qwen3_sampling_processors/top_k_top_p_full_sort_baseline 5.78 ms 5.95 ms +2.8%
✅ qwen3_sampling_processors/top_k_partial_selection 163.79 µs 165.17 µs +0.8%
✅ matmul/medium_generic_bf16_threads=1/32x512x512 579.29 µs 577.14 µs -0.4%
✅ reduce_mean/medium_f32_threads=1-internal/65536 334.38 µs 326.58 µs -2.3%
✅ matmul/small_generic_f32_threads=1/1x256x256 49.75 µs 47.85 µs -3.8%
✅ matmul/small_generic_f16_threads=1/1x256x256 45.79 µs 43.96 µs -4.0%
✅ matmul/medium_generic_f32_threads=8/32x512x512 1.39 ms 1.33 ms -4.3%
✅ matmul/large_generic_f16_threads=1/32x1024x1024 92.76 µs 88.55 µs -4.5%
✅ gather/small_f32_threads=1-internal/4096 888.5 ns 839.4 ns -5.5%
✅ qwen3_sampling_processors/top_k_full_sort_baseline 2.50 ms 2.34 ms -6.2%
✅ matmul/medium_generic_f16_threads=1/32x512x512 41.50 µs 38.79 µs -6.5%
✅ qwen3_sampling_processors/top_k_top_p_fast 742.12 µs 690.56 µs -6.9%
✅ gather/medium_bf16_threads=1-internal/32768 3.35 µs 3.06 µs -8.7%
✅ reduce_mean/small_f32_threads=1-internal/4096 18.24 µs 15.90 µs -12.8%
✅ matmul/small_generic_bf16_threads=1/1x256x256 57.03 µs 49.33 µs -13.5%
🟢 block_quantized_moe_cached_dense/mxfp4_uncached_expert_dequant_each_call/rows=1,H=256,I=256,E=4,top_k=1 628.41 µs 521.40 µs -17.0%
🟢 reduce_mean/large_f32_threads=1-internal/262144 1.33 ms 1.10 ms -17.8%
🟢 add/small_bf16_threads=1-internal/1024 552.1 ns 453.2 ns -17.9%
🟢 add/small_f16_threads=1-internal/1024 592.7 ns 485.1 ns -18.1%
🟢 add/medium_f16_threads=1-internal/262144 142.38 µs 111.12 µs -22.0%
🟢 add/medium_bf16_threads=1-internal/262144 133.34 µs 103.39 µs -22.5%
🟢 add/large_f32_threads=1-internal/4194304 957.11 µs 683.03 µs -28.6%
🟢 add/small_f32_threads=1-internal/1024 281.9 ns 198.8 ns -29.5%
🟢 block_quantized_moe_cached_dense/mxfp4_cached_dense_expert_repeated_call/rows=1,H=256,I=256,E=4,top_k=1 142.35 µs 99.55 µs -30.1%
🟢 matmul/small_generic_f16_threads=8/1x256x256 65.57 µs 45.44 µs -30.7%
🟢 add/large_f16_threads=1-internal/4194304 2.42 ms 1.66 ms -31.3%
🟢 add/medium_f32_threads=1-internal/262144 37.78 µs 25.15 µs -33.4%
🟢 add/large_bf16_threads=1-internal/4194304 2.52 ms 1.66 ms -34.0%
🟢 block_quantized_matmul_cached_dense/mxfp4_cached_dense_repeated_call/1x1024x1024 137.38 µs 76.59 µs -44.2%
🟢 matmul/small_generic_f32_threads=8/1x256x256 88.26 µs 46.89 µs -46.9%

Visual flags: ⚠️ ≥ 15% slower, 🔴 ≥ 30% slower — calibrated against measured runner noise (~27% worst-case on multi-threaded matmul)

Host info
CPU: Apple M1 (Virtual)
Cores: 3
OS: Darwin 25.5.0 arm64
Rust: rustc 1.97.1 (8bab26f4f 2026-07-14)
Load avg: { 4.21 3.79 7.48 }
What this cannot catch
  • Regressions in code paths not covered by these benchmarks (e.g., end-to-end decode with a real model)
  • Sub-threshold regressions that compound over multiple PRs
  • Performance changes that only manifest under GPU execution
  • Latency changes in the ORT integration path (these benchmarks exercise the native Rust kernels)

@codecov

codecov Bot commented Aug 18, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.96%. Comparing base (1ad71c4) to head (b1dc1e2).
⚠️ Report is 36 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff            @@
##           main    #1272       +/-   ##
=========================================
+ Coverage      0   79.96%   +79.96%     
=========================================
  Files         0      361      +361     
  Lines         0   157076   +157076     
  Branches      0   157076   +157076     
=========================================
+ Hits          0   125613   +125613     
- Misses        0    26829    +26829     
- Partials      0     4634     +4634     
Flag Coverage Δ
offline 79.96% <ø> (?)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 361 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants