Eval Wiki · Frontend audit · round 2 (post-fix)
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.
| Category | Round 1 | Round 2 |
|---|---|---|
| LaTeX rendered as math | fail 0 / 5 | pass 5 / 5 |
| Internal links resolve | fail 1 broken | pass 0 broken (4,002 links) |
| Wikilinks processed | fail 5 unprocessed | pass 0 unprocessed |
| Duplicate H1 title | warn every page | pass deduplicated |
| Graph labels on hover | warn overlapping | pass pill + position |
| Search result rows | warn concatenated | pass structured eyebrow/title/excerpt |
| Search eyebrow family | warn raw key ("meta") | pass "§2 Bridging, representation, consensus" |
| Homepage family count | warn 12 (inc. Hub) | pass 11 real families |
| Odd-count grid (§11) | warn blank cell | pass spans 2 cols |
| Sources index page | warn none | pass 43-entry list w/ titles |
| Branded 404 page | warn SimpleHTTPServer | fixed dist/404.html present* |
| Dead-link spans | warn 48 | warn 48 (unchanged, see below) |
25-step tour of the post-fix site.
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.
G = 1/(2n²μ) Σᵢ Σⱼ |yᵢ − yⱼ| rendered in serif math font.
∀i,j ∃g ∈ Aⱼ : vᵢ(Aᵢ) ≥ vᵢ(Aⱼ ∖ {g}) fully typeset.
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.
[[…]] text).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.
.txt's first prose line, skipping arxiv/doi banners). Slugs appear on the right in small-caps for copy-paste. Zero server needed.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.
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.
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.
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.
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×).
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.
| URL / interaction | Round 1 | Round 2 |
|---|---|---|
/ hero + thesis + CTA | pass | pass |
/ featured metrics row | pass | pass |
/ family grid count & layout | warn | pass |
/ontology/ eyebrow | pass | pass |
/gini/, /atkinson/, /theil/, /nash-social-welfare/, /ef1/ math | fail | pass |
/bridging-score/ H1 (single) | warn | pass |
/bridging-score/ wikilinks resolve | pass | pass |
Click /bridging-score/ → /justified-representation/ | — | pass |
/aggregated-individual-reporting/ table wikilinks | fail | pass |
/aggregated-individual-reporting/ dead-link styling | pass | pass |
/graph/ renders 64+ nodes | pass | pass |
/graph/ labels don't occlude nodes | warn | pass |
/graph/ hover tooltip | — | pass |
/sections/bridging/, /sections/post-deployment/ | pass | pass |
/search/ empty state | pass | pass |
/search/ "bridging" results | warn | pass |
/sources/ index page | — | pass |
/404.html branded | fail | pass |
| Internal link integrity (static scan) | 1 broken | 0 broken / 4,002 |
| Unprocessed wikilinks (static scan) | 5 literal | 0 literal |
Raw $$ pages (static scan) | 5 pages | 0 pages |
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