From 7e76fd725d65145717aeef24e0a1beee230e32ed Mon Sep 17 00:00:00 2001 From: bong-water-water-bong Date: Thu, 1 Oct 2026 10:09:11 -0300 Subject: [PATCH] docs/hrx: stop PR numbers rendering as h1; site.py: one h1 per page Wrapped lines in docs/hrx.md starting with '#36', '#39', '#40' became

headings (python-markdown needs no space after '#'), so hrx.html had 4 h1s and the daily SEO check flagged it. Prefix them with 'PR'. tools/site.py now fails the build when a page has other than one h1. Co-Authored-By: Claude Opus 5.5 --- docs/hrx.md | 8 ++++---- tools/site.py | 4 ++++ 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/hrx.md b/docs/hrx.md index 2f3df720..5b629822 100644 --- a/docs/hrx.md +++ b/docs/hrx.md @@ -172,13 +172,13 @@ were observed. under the profiler fails. - **ZAYA decode fusions (llama.cpp #36-#40).** ZAYA1-8B HRX0 decode 67 -> ~90 tok/s (Vulkan 93), each step measured in interleaved A/B runs: - - #36 skips CONTs of fresh contiguous results in `src/models/zaya.cpp` (views keep theirs: on HRX + - PR #36 skips CONTs of fresh contiguous results in `src/models/zaya.cpp` (views keep theirs: on HRX their consumers take slower strided paths), bitwise the same output: +2.4%. - - #39 runs the CCA convolution (Q/K concat, conv-state update, depthwise conv, grouped 2-tap conv + - PR #39 runs the CCA convolution (Q/K concat, conv-state update, depthwise conv, grouped 2-tap conv and biases, ~35 graph nodes) as one dispatch (`zaya.cca_conv.decode_f32`): 72 -> 81 tok/s. - - #40 runs the CCA query/key mixing and per-head norms (~30 nodes) as one dispatch + - PR #40 runs the CCA query/key mixing and per-head norms (~30 nodes) as one dispatch (`zaya.cca_qk_norm.decode_f32`): 81 -> 90 tok/s. - #39 and #40 accumulate in their own order, so output is not bitwise the same; teacher-forced top-1 + PRs #39 and #40 accumulate in their own order, so output is not bitwise the same; teacher-forced top-1 against the FP32 model stays 69/96 and batch-1 perplexity moves 33.31 -> 33.49 -> 33.45 (CPU backend 34.30). Both match decode only (one token, one sequence). #37 and #38 remove runtime integer division from #35's and #32's kernels, which newer Loom rejects. Each new `.loom` file carries a diff --git a/tools/site.py b/tools/site.py index 211df3b3..f0ff4ef6 100644 --- a/tools/site.py +++ b/tools/site.py @@ -358,6 +358,10 @@ def write(self, name, title, main, kind, section, description=TAGLINE, extra_hea .replace("{{repo}}", REPO)) if extra_head: page = page.replace("", "\n" + extra_head, 1) + # one h1 per page (SEO): a line starting "#36 ..." in a doc renders as a stray h1 + h1 = len(re.findall(r"]", page, re.I)) + if h1 != 1: + sys.exit(f"{name}.html has {h1}

elements; start no doc line with '#'") (self.out / f"{name}.html").write_text(page) def md(self, text, src):