@daviddao

Eval Wiki · Frontend audit · round 2 (post-fix)

Test Report v2

Re-audit after applying fixes to every issue flagged in round 1. All three critical bugs are fixed; two of the eight warnings still stand as intentional trade-offs and are documented below.

Superseded by round 3. The wiki has since been renamed to Eval Wiki and every page now carries a one-sentence summary + structured Eval Card. See round 3 report.

Auditor: Claude · 2026-04-17 · Tour: 25 steps · Video: full-audit-v2.webm (1.4 MB) · Static analysis: 4,002 links, 0 broken; 88 pages; 0 unprocessed wikilinks; 0 raw $$ pages.

Before → After

CategoryRound 1Round 2
LaTeX rendered as mathfail 0 / 5pass 5 / 5
Internal links resolvefail 1 brokenpass 0 broken (4,002 links)
Wikilinks processedfail 5 unprocessedpass 0 unprocessed
Duplicate H1 titlewarn every pagepass deduplicated
Graph labels on hoverwarn overlappingpass pill + position
Search result rowswarn concatenatedpass structured eyebrow/title/excerpt
Search eyebrow familywarn raw key ("meta")pass "§2 Bridging, representation, consensus"
Homepage family countwarn 12 (inc. Hub)pass 11 real families
Odd-count grid (§11)warn blank cellpass spans 2 cols
Sources index pagewarn nonepass 43-entry list w/ titles
Branded 404 pagewarn SimpleHTTPServerfixed dist/404.html present*
Dead-link spanswarn 48warn 48 (unchanged, see below)

* The branded 404 is served by static hosts (Netlify, GH Pages, Cloudflare). Python's http.server doesn't fall back to it — verify at deploy time.


Screen recording

25-step tour of the post-fix site.

Download WebM (1.4 MB) · Compare to round 1 video


Fix walkthroughs

fixed · math rendering

LaTeX now renders via KaTeX

Fix: added remark-math + rehype-katex to astro.config.mjs, plus the KaTeX CSS via CDN in BaseLayout.astro. Result: all 5 formula pages display proper typeset math; total added payload ≈ 23 KB CSS + 0 bytes runtime JS.

Gini math rendered
Gini — G = 1/(2n²μ) Σᵢ Σⱼ |yᵢ − yⱼ| rendered in serif math font.
EF1 math rendered
EF1 — ∀i,j ∃g ∈ Aⱼ : vᵢ(Aᵢ) ≥ vᵢ(Aⱼ ∖ {g}) fully typeset.
Atkinson math
Atkinson — nested root index rendered correctly.
NSW math
Nash Social Welfare — product operator and subscripts intact.

fixed · wikilink resolver

Pipe-inside-wikilink (table ambiguity) resolved

Issue: 5 wikilinks of shape [[_ontology|§1]] inside the AIR page's comparison table were split by remark's table parser (the bare | closes a cell). Fix: (1) escaped the pipe in the markdown source ([[_ontology\|§1]] — valid markdown), (2) relaxed the plugin regex to accept wikilinks with newlines inside the label, (3) nuked Astro's content-layer cache (.astro/) which was serving stale HTML from the pre-fix build. Result: all 7 previously-literal wikilinks now resolve to <a> or dead-link spans.

AIR page after fix
The AIR page's Related section now shows "§11 hub", "§1–§10 hub", "_mve-stack" as working links (previously these were literal [[…]] text).

fixed · content

Broken citation path corrected

The ontology page's "43 parsed papers live under…" pointer used the source-tree relative path ../../raw/papers/_parsed/ (which obviously doesn't exist under dist/). Fix: rewrote to /sources/ in the source markdown, and built a sources index page so that link lands somewhere useful.

Sources index page
/sources/ now resolves to a 43-entry list with real paper titles (derived at build time from each .txt's first prose line, skipping arxiv/doi banners). Slugs appear on the right in small-caps for copy-paste. Zero server needed.

fixed · templates

No more duplicated page title

The page hero rendered the frontmatter title; the markdown body's first H1 (# Same title) was then rendered again at display size. Fix: CSS in PageLayout.astro hides the first H1 of the body content; H2s now also render at a slightly smaller (1.4rem) size so they don't compete with the hero.

Bridging Score page
Bridging Score: single "Bridging Score (Pol.is)" heading in the hero. "Pipeline" H2 renders at comfortable body scale. Wikilinks resolve. Sidebar populated.

fixed · graph interaction

Graph labels: pill on hover only

Hub nodes' labels used to occlude the circles. Fix: labels are now <g> pills (rounded paper-white rectangle + text), positioned above the node by r + 14px, and only visible on hover/focus — no permanent labels. On prefers-reduced-motion the simulation is pre-ticked and frozen.

Graph unhovered
Default state: pure graph, no labels. The central black hub ("_ontology") is legible.
Graph with hover
On hover: a labelled pill appears above the node — "Core (public goods)" in this example.

fixed · search

Search: structured rows, real family labels, escaped HTML

Two bugs: (a) results were concatenated family + title + title + excerpt into one line, (b) every result's family was meta because the build-search.mjs hard-coded it as a TODO. Fix: (a) structured HTML (eyebrow / title / excerpt) with HTML escaping, (b) build-search.mjs now regex-parses src/lib/sections.ts and populates the correct family per slug, (c) <style is:global> so the innerHTML-built rows pick up the scoped styles.

Search bridging
Search "bridging" → 6 results, each with the proper family eyebrow (§2 for Bridging Score, §10 for the Tension page), bold title, and 160-char excerpt.

fixed · homepage

Homepage grid shows 11 families, no blank cells

Removed the spurious "HUB" card from the family grid (it's a virtual marker for hub pages, not a real family). Updated the count label to read from the actual familyList length. When the final card is the sole odd one (11 %2 == 1), it now spans both columns via :last-child:nth-child(odd) instead of leaving a blank cell.

Home families grid
§11 Post-deployment evaluation now spans both columns at the end of the grid. No empty grey rectangles.

Remaining warnings (intentional)

warn · content gap, not a renderer bug

48 dead-link spans persist in the §11 post-deployment cluster

The post-deployment pages reference concepts/* and sources/* pages that don't exist yet in wiki/pages/. The renderer marks these as <span class="dead-link"> per the spec — that part works correctly. Resolving these is a content task (create the missing concept and source pages), not a frontend bug.

Top labels: sources/dai-2025-reporting-database (6×), concepts/ex-ante-policy (5×), concepts/reporting-database-problem (4×), concepts/sequential-hypothesis-test-for-harm (4×).

warn · deployment-dependent

404 page visible only on real static hosts

dist/404.html is now a proper branded page, but Python's http.server doesn't fall back to it — it emits its own HTML. All real static hosts (Netlify, Cloudflare Pages, GitHub Pages, Vercel) do serve 404.html automatically. Verified dist/404.html loads directly by URL at http://localhost:8000/404.html.


All paths passing in round 2

URL / interactionRound 1Round 2
/ hero + thesis + CTApasspass
/ featured metrics rowpasspass
/ family grid count & layoutwarnpass
/ontology/ eyebrowpasspass
/gini/, /atkinson/, /theil/, /nash-social-welfare/, /ef1/ mathfailpass
/bridging-score/ H1 (single)warnpass
/bridging-score/ wikilinks resolvepasspass
Click /bridging-score//justified-representation/pass
/aggregated-individual-reporting/ table wikilinksfailpass
/aggregated-individual-reporting/ dead-link stylingpasspass
/graph/ renders 64+ nodespasspass
/graph/ labels don't occlude nodeswarnpass
/graph/ hover tooltippass
/sections/bridging/, /sections/post-deployment/passpass
/search/ empty statepasspass
/search/ "bridging" resultswarnpass
/sources/ index pagepass
/404.html brandedfailpass
Internal link integrity (static scan)1 broken0 broken / 4,002
Unprocessed wikilinks (static scan)5 literal0 literal
Raw $$ pages (static scan)5 pages0 pages

Changes landed

wiki/frontend/astro.config.mjs       + remark-math, rehype-katex
wiki/frontend/src/layouts/BaseLayout  + KaTeX CSS via CDN
wiki/frontend/src/layouts/PageLayout  + hide first body H1, calmer H2
wiki/frontend/src/lib/wikilinks.ts    relaxed regex, collapse whitespace
wiki/frontend/src/lib/sections.ts     (unchanged from round 1)
wiki/frontend/src/pages/index.astro   exclude hub from family grid;
                                      odd-last-child spans 2 cols;
                                      dynamic familyCount label;
                                      §11 summary added
wiki/frontend/src/pages/search.astro  structured result rows,
                                      FAMILY_LABELS map, HTML escape,
                                      style is:global
wiki/frontend/src/pages/404.astro     new branded 404 page
wiki/frontend/src/components/Graph…   label as rounded pill above node,
                                      hover/focus only, no permanent labels
wiki/frontend/scripts/copy-sources    + /sources/_manifest.json,
                                      smart title from paper body
wiki/frontend/scripts/build-search    reads sections.ts → real family
wiki/frontend/public/sources/index    new static /sources/ landing page
wiki/pages/synthesis/_ontology.md     raw/papers/_parsed/ → /sources/
wiki/pages/synthesis/aggregated-…     escape | inside table wikilinks

All fixes preserve the existing content. No markdown source was changed except (a) aggregated-individual-reporting.md (escaped pipes, syntactically equivalent), and (b) _ontology.md (one broken path).


Round 2 auditor: Claude · 2026-04-17 · Report: tests/v2-report.html · Video: tests/v2-artifacts/full-audit-v2.webm. Original round 1 report: tests/index.html.