Skip to content

docs(paper): interactive glossed HTML of the plain-English rewrite - #17

Merged
ksdisch merged 4 commits into
mainfrom
docs/paper-gloss
Aug 4, 2026
Merged

docs(paper): interactive glossed HTML of the plain-English rewrite#17
ksdisch merged 4 commits into
mainfrom
docs/paper-gloss

Conversation

@ksdisch

@ksdisch ksdisch commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Adds docs/paper/mute-map-paper-eli5-glossed.html — a self-contained interactive companion to docs/paper/mute-map-paper-eli5.md, produced by /paper-gloss.

49 approved jargon terms, clickable at all 344 occurrences, each opening a plain-English definition; a glossary panel lists every term at once; an annotation layer adds select-to-highlight, per-highlight notes, and export to Markdown/JSON (persisted in localStorage).

Structure mirrors the eli5 1:1

Count
Headings, in order 28
Paragraphs 80 (68 carried from the paper + 12 in-plain-words glosses)
Tables, values unaltered 12
Figures, inlined as base64 data: URIs 6
Lists, item-for-item 4

References are carried verbatim and excluded from glossing — as are headings, tables, figure alt text, code spans and math.

Three rendering bugs found by browser-testing, not by the structural checks

These are the reason the page was driven in a real browser before publishing:

  1. loading="lazy" on a data: URI never loads in Chrome. All six figures would have shipped as blank 2px strips. Lazy loading buys nothing for bytes already inline — replaced with decoding="async".
  2. A backslash-escaped asterisk inside a bolded run broke the **…** match, so the window-sweep table shipped literal markdown (**L17\* 0**). Escaped punctuation is now stashed before the emphasis pass.
  3. Bold runs containing nested *italics* did not convert, shipping ** into body text in two places. The bold pass is now non-greedy.

Also guarded: ALL-CAPS is reserved in this paper for frozen verdict labels, so a lowercase term matching an all-caps surface is always a false positive — this was wrapping FLOOR inside the qualifier string "ON A DAMAGED FLOOR".

Verification

  • Phase 3 clean — headings; paragraph/table/figure/list counts; zero bare, nested or overlapping terms; dictionary symmetry (every id resolves, every entry used); zero external resource loads; all four theme blocks consistent.
  • check_math.py clean — 0 unrendered, 0 verbatim fallbacks. All 8 inline math spans typeset at Tier 1 (λ, k = 1, 0.51/12 ≈ 0.944). The paper has no display equations, so no named-form blocks.
  • inject_annotations.py --check clean, and byte-identical on a second run.
  • In-browser: all 6 figures decoded at full resolution, popover / glossary panel / lightbox all working, one-surface-at-a-time enforced, no horizontal body scroll, dark theme correct.

Design

Cool near-white ground with a single deep-teal accent, lightened for dark. Palatino-class serif for reading, monospace utility face carrying the counts and verdict strings. Single ~72ch column; tables and figures get their own horizontal-scroll containers so the page body never scrolls sideways. data-theme overrides win over the media query in both directions.

No measurement was run; no behavioral file is touched. This PR adds exactly one new file.

🤖 Generated with Claude Code

https://claude.ai/code/session_01MwGUzVvUmaiEShFiZfrcW7

ksdisch and others added 4 commits August 4, 2026 13:57
Self-contained, hand-designed HTML companion to docs/paper/mute-map-paper-eli5.md,
produced by /paper-gloss. 49 approved jargon terms are clickable at all 344 of
their occurrences; clicking one opens a plain-English definition. A glossary
panel lists every term at once, and an annotation layer adds
select-to-highlight, per-highlight notes, and export to Markdown/JSON.

Structure mirrors the eli5 1:1 -- 28 headings in order, 80 paragraphs (68
carried from the paper + 12 in-plain-words glosses), 12 tables with values
unaltered, 6 figures inlined as base64 data URIs, 4 lists. References carried
verbatim and excluded from glossing, along with headings, tables, figure alt
text, code spans and math.

Design: cool near-white ground with a single deep-teal accent, lightened for
dark; Palatino-class serif for reading with a monospace utility face carrying
the counts and verdict strings; single ~72ch column with tables and figures in
their own horizontal-scroll containers so the page body never scrolls sideways.
Themed for light and dark via tokens, with the data-theme override winning over
the media query in both directions.

Three rendering bugs found by browser-testing the page rather than by the
structural checks, all fixed before this commit:

1. loading="lazy" on a data: URI never loads in Chrome -- all six figures would
   have shipped as blank 2px strips. Lazy loading buys nothing for bytes already
   inline; replaced with decoding="async".
2. A backslash-escaped asterisk inside a bolded run broke the **...** match, so
   the window-sweep table shipped literal markdown ("**L17\* 0**"). Escaped
   punctuation is now stashed before the emphasis pass.
3. Bold runs containing nested *italics* did not convert, shipping "**" into the
   body text in two places. The bold pass is now non-greedy.

Also guarded: ALL-CAPS is reserved in this paper for frozen verdict labels, so a
lowercase term matching an all-caps surface is always a false positive -- this
was wrapping "FLOOR" inside the qualifier string "ON A DAMAGED FLOOR".

Verified: Phase 3 clean (headings, paragraph/table/figure/list counts, zero bare
or nested terms, dictionary symmetry, no external resource loads, all four theme
blocks consistent); check_math.py clean at 0 unrendered and 0 verbatim
fallbacks; inject_annotations.py --check clean and byte-identical on a second
run; all 6 figures confirmed decoded in-browser at full resolution; no
horizontal body scroll.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MwGUzVvUmaiEShFiZfrcW7
…d-artifact fixes from review

Adversarial review round 1 on PR #17, findings F1-F3 (should-fix) and F5-F7, F9
(nice-to-have). F8 disputed; F4 carried as an upstream follow-up.

F1 -- UPSTREAM CONTENT FIX, the one worth reading twice. Section 4.2.1 published
"17/17, 46/40 and 36/34" for the three-word-piece texture on the control arm.
Two of those are arithmetically impossible: a hit count cannot exceed its
denominator. The denominators quoted were the control arm's own primary naming
hits (17/40/34) where they should have been the gated n (38/61/44). Verified
against the committed artifacts, results/m1-battery-qwen2.5-*.json:
greedy_3_texture.gated_control_late_says_concept_in_3 = 17/46/36 over
naming_success_gated.clean.n = 38/61/44. Corrected to "17/38, 46/61 and 36/44"
in the paper and "17 of 38, 46 of 61 and 36 of 44" in the eli5, which now agrees
with the "0 of 38, 0 of 61 and 6 of 44" in the very next clause.

No verdict, contrast, interval or gate number changes, and the argument that
paragraph makes -- that the readout bias runs against the finding -- gets
stronger, not weaker. 0.5B's 17 = 17 coincidence is why the wrong denominator
survived three prior reviews. Kyle should sanity-check this one: it edits a
merged paper's published numbers, which is normally his call, and it is
reversible with a single revert.

F2 -- the glossary defined "floor" as a share of *concepts*. Every floor the
paper reads is a share of *items*; the concept-level reading is precisely the one
that fails the 0.5 bar and forces AS-SCORED ONLY. A reader clicking "floor" in
section 4.5 was handed the failing reading as the definition and then read a
passing verdict. Rewritten, and "guaranteed to stay above" dropped -- a Wilson
lower bound is not a guarantee.

F3 -- Export Markdown / Export JSON could never save a file outside claude.ai:
saveFile knew only window.claude.downloads, so every export in an ordinary
browser fell into the copy-paste box. Fixed in the shared runtime
(~/.claude/skills/paper-gloss/assets/annotations.js) with a Blob + <a download>
branch, preferring window.claude.downloads and keeping the copy box as last
resort. Verified live: the button now fires a real blob download and reports
"Saved mute-map-paper-eli5-annotations.md". That edit is UNCOMMITTED in the
claude-config repo and needs Kyle's review -- it fixes every paper-gloss artifact,
not just this one.

F5 -- the "entry test" gloss contradicted sections 2.1 and 4.1, which discuss the
earlier project's two-part test; the definition now names both.
F6 -- the "cell" gloss said one item per cell while the paper reads cells of 22
items and requires 20 trials per cell; reworded.
F7 -- the header note had quietly dropped "with rewritten captions" from the
source's disclosure; restored.
F9 -- the one relative href (figures.py) dangled once the file leaves
docs/paper/; the builder now absolutises repo-relative links.

F8 (four [data-theme] blocks called dead CSS) is disputed, not fixed: the Artifact
runtime stamps data-theme on the root element when the viewer toggles theme, and
that override is required to win over the media query in both directions.
Removing it would break theming on the published page.

Verified after the fixes: Phase 3 clean, check_math clean, injector --check clean,
all six figures byte-identical to the tracked PNGs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MwGUzVvUmaiEShFiZfrcW7
Adversarial review round 2 on PR #17: 7 of 7 prior findings verified, 0 reopened,
3 new.

F10 (should-fix) -- the denominator fix in 1205616 stopped two files short.
docs/paper/mute-map-presenter-pack.md:104 and docs/M1-BRIEF.md:360 both still
carried "17/17, 46/40, 36/34", so the presenter pack contradicted the paper it
summarises and held the arithmetically impossible version. Both corrected to
17/38, 46/61, 36/44, from the same recorded artifacts as before. A grep across
docs/ now returns no occurrence of the old figures anywhere.

Note for Kyle: this touches docs/M1-BRIEF.md, a stage brief. Briefs are records
rather than live documents, so if the convention here is that they are immutable
once the stage closes, revert that one hunk -- the paper and the pack are the two
that must agree, and they now do.

F11 (nice-to-have) -- round 2 raised this against round 1's own suggested wording.
The reworded "cell" gloss said "a fixed combination of model and condition",
which does not fit the paper's other uses: 2,340 cells per model, 840 cells per
model, per-pair cells at n <= 3. Reworded again to be granularity-neutral and to
name pooling, which is what reconciles "a cell of 22 items" with "2,340 cells".

F12 (nice-to-have) -- blobSave returned true on setup success alone, but
a.click() is fire-and-forget, so a browser that blocks the download produced
"Saved <filename>" with no file and no fallback. The status now reads "Download
started: <filename>", which is what the code can actually attest. Fixed in the
shared runtime, still uncommitted in claude-config.

F4 and F8 remain open by design: F4 is an upstream nice-to-have in the shared
annotation runtime, and F8 is disputed -- the Artifact runtime stamps data-theme
on the root element, so those blocks are required, not dead.

Verified: Phase 3 clean, check_math clean, injector --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MwGUzVvUmaiEShFiZfrcW7
…marker; cell gloss

Adversarial review round 3 on PR #17: F10-F12 all verified, 0 reopened, 3 new.

F13 (should-fix) -- MY MISTAKE, and the one that mattered. The previous commit
used `git add -A docs/`, which swept docs/onboarding/2026-08-03-onboarding.md
into the branch. That directory was untracked before this session started; both
earlier review rounds recorded it as out-of-scope and unreviewed, and I twice
told Kyle explicitly that I was leaving it alone. It is a partial working
document -- its own line 3 reads "Status: partial (in progress)" -- and this
repository is public. `git rm --cached` returns it to untracked; the file is
untouched on disk. PR #17's body claim of "exactly one new file" is true again.

F14 (nice-to-have) -- the round-2 rewording of the "cell" gloss ended "Small
cells are pooled together, because a cell under 20 trials cannot carry a
verdict", which contradicts the two sentences it fires in: M1's prevalence cells
are deliberately NOT pooled, they are published UNDERPOWERED. The gloss now names
both outcomes.

F15 (nice-to-have) -- docs/M1-BRIEF.md was corrected in place with no trace, four
lines above the brief's own rule that changes land alongside the pre-committed
numbers rather than replacing them. The corrected figure now carries an [erratum
2026-08-04] marker and a note recording what it previously said, why it was
wrong, and what it was checked against.

The reviewer dispatch cap for this run (3) is spent, so these three fixes are
author-verified only -- stated rather than implied. F13 is verifiable directly:
`git ls-files docs/onboarding/` returns nothing.

F4 (upstream nice-to-have in the shared annotation runtime) and F8 (disputed --
the Artifact runtime stamps data-theme on the root, so those blocks are load
bearing) remain open and unfixed by design.

Verified: Phase 3 clean, check_math clean, injector --check clean.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MwGUzVvUmaiEShFiZfrcW7
@ksdisch

ksdisch commented Aug 4, 2026

Copy link
Copy Markdown
Owner Author

Adversarial review — CLEAR TO MERGE (rounds: 3)

# Severity Finding Disposition
F1 should-fix §4.2.1 published impossible denominators (46/40, 36/34) — control-arm hit counts used where gated n belonged Fixed 1205616, verified R2 (re-derived from results JSONs)
F2 should-fix floor glossed in concepts when every floor the paper reads is items — the exact distinction AS-SCORED ONLY turns on Fixed 1205616, verified R2
F3 should-fix Export could never save a file outside claude.ai; every export fell to a copy-paste box Fixed in shared runtime, verified R2 live (CDP downloadWillBegincompleted)
F5 nice-to-have entry test gloss contradicted §2.1's two-part test Fixed 1205616, verified R2
F6 nice-to-have cell gloss implied one item per cell Fixed 1205616, verified R2
F7 nice-to-have Header note dropped "with rewritten captions" disclosure Fixed 1205616, verified R2
F9 nice-to-have One relative href dangled outside docs/paper/ Fixed 1205616, verified R2
F10 should-fix Denominator fix stopped two files short — presenter pack contradicted the paper Fixed 5eb2c14, verified R3 (tree-wide grep: zero hits)
F11 nice-to-have Reworded cell gloss didn't fit the paper's other granularities Fixed 5eb2c14, verified R3
F12 nice-to-have blobSave reported "Saved" on a fire-and-forget click Fixed 5eb2c14, verified R3
F13 should-fix git add -A docs/ swept an untracked, in-progress onboarding file into the branch of a public repo Fixed 9158e33, author-verified
F14 nice-to-have cell gloss said sub-20 cells are pooled; M1's are published UNDERPOWERED instead Fixed 9158e33, author-verified
F15 nice-to-have M1-BRIEF.md corrected in place with no erratum trace Fixed 9158e33, author-verified
F4 nice-to-have Highlighting inside the glossary panel creates an unanchorable annotation Follow-up — upstream in the shared annotation runtime
F8 nice-to-have Four [data-theme] blocks called dead CSS Disputed — the Artifact runtime stamps data-theme on the root element, so the override is load-bearing, not dead

Stated plainly: the reviewer dispatch cap (3 per run) is spent, so F13–F15 carry no independent verification. F13 is the one that matters and it is mechanically checkable — git ls-files docs/onboarding/ returns nothing, and the file is untouched on disk. PR body's "exactly one new file" is accurate again.

Follow-ups (nice-to-have): F4 — maybeShowToolbar should refuse a range whose block sits inside EXCLUDE, in paper-gloss/assets/annotations.js.

Coverage: complete on all three rounds.

Rounds: R1 0 critical / 3 should-fix / 6 nice-to-have · R2 7 verified, 0 reopened, 3 new · R3 3 verified, 0 reopened, 3 new.

Zero-context reviewer; no judge dispatched (F8's dispute is recorded, not adjudicated). Anchored at 9158e33.

@ksdisch
ksdisch merged commit 6fed815 into main Aug 4, 2026
1 check passed
@ksdisch
ksdisch deleted the docs/paper-gloss branch August 4, 2026 19:38
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.

1 participant