Skip to content

#343: Guided Tour numbering + wording, and fix stale Explorer prose figures - #344

Merged
rdhyee merged 7 commits into
isamplesorg:mainfrom
rdhyee:fix/343-tour-numbering-and-prose
Aug 6, 2026
Merged

#343: Guided Tour numbering + wording, and fix stale Explorer prose figures#344
rdhyee merged 7 commits into
isamplesorg:mainfrom
rdhyee:fix/343-tour-numbering-and-prose

Conversation

@rdhyee

@rdhyee rdhyee commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

#343 — Guided Tour numbering and wording

Eric reported that the tour's headings render as "1 Stop 1 —", "2 Stop 2 —" and so on. Confirmed: the site sets number-sections globally, and the headings already carried a hand-written "Stop N", so the number appeared twice.

Both changes as requested:

  • number-sections: false for this page only. The step numbers are written by hand because the numbering is part of the tour's voice, so the automatic numbering is what gets removed — not the manual one.
  • "Stop" → "Step" in all seven headings, plus the three prose references, so the page doesn't say "steps" in the titles and "stops" in the body.

Verified on staging: headings now read Step 1 — … through Step 7 — …, no duplicate numbering.

Coherence-audit follow-up — the "How This Demo Works" figures were a generation stale

The size table asserted figures that no longer matched anything published. Corrected against the release manifest, with cluster counts verified independently against the parquet row counts (38,462 / 112,019 / 176,669 — the manifest doesn't carry row counts).

The interesting part is why they were wrong, because the obvious fix was the wrong one. The old figures (580 KB / 1.6 MB / 2.5 MB) are correct — for the 202601 snapshot, which SERIALIZATIONS.md, how-to-use.qmd, data.qmd and tutorials/why_h3.qmd still legitimately document. This page describes the live app, which serves 202608, so it had silently drifted one release behind.

I checked those four other files against the live 202601 objects (594,541 / 1,627,502 / 2,543,412 bytes) and they're accurate, so they are deliberately untouched. Worth internalising: a "wrong number" in this repo may be a right number for a different release — check which snapshot a doc describes before correcting it.

Also:

  • Dropped the "4 parquet files" claim, which was simply false. The published release is 21 objects (18 parquet + 3 JSON search-index files), and the boot manifest check enumerates them. Replaced with the real figure plus a pointer to isamples_202608_release_manifest.json and CANONICAL.md as the authoritative inventory.
  • Added a collapsed "check these numbers against the source" callout with the curl/jq and SQL one-liners to re-derive every figure — so the next reader doesn't have to trust the page.
  • Units are now consistently decimal MB. The old row silently mixed conventions (580 KB was KiB while 1.6/2.5 MB were decimal), which is part of why it read as internally consistent while being stale.

Verification

Check Result
quarto render both pages clean
tests/test_smoke.py (local and staging) PASS
tests/test_frontend_derived.py 40 passed
#341/#342 count behavior unaffected search → 60/60 dashes, 0 stuck; facet-only → real counts
pageerrors none
Staging headings Step 1Step 7, no duplicate numbering

Scope note

I drafted a live OJS cell that fetched the manifest and rendered the true sizes on the page, then removed it. explorer.qmd is the most fragile file in the repo, I broke it once already this week with a bad OJS declaration, and adding a boot-time network fetch there is not a documentation fix. The static callout with re-derivation commands gets the same honesty at none of the risk.

Refs #343

🤖 Generated with Claude Code

https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa

rdhyee and others added 7 commits August 5, 2026 18:00
…e Explorer prose figures

isamplesorg#343 (Eric Kansa) — the Guided Tour rendered section headings as "1 Stop 1 —",
"2 Stop 2 —" and so on: the site sets number-sections globally, and the headings
already carried a hand-written "Stop N". Two fixes, both as requested:

- number-sections: false for this page only. The step numbers are written by
  hand because the numbering is part of the tour's voice, so the automatic
  numbering is what gets removed, not the manual one.
- "Stop" -> "Step" in all seven headings, plus the three prose references, so
  the page doesn't say "steps" in the titles and "stops" in the body.

Coherence audit follow-up — the "How This Demo Works" table asserted file sizes
that no longer matched anything published. Corrected against the release
manifest, with the cluster counts verified independently against the parquet row
counts (38,462 / 112,019 / 176,669 — the manifest doesn't carry row counts).

Worth recording WHY they were wrong, because the obvious fix was the wrong one:
the old figures (580 KB / 1.6 MB / 2.5 MB) are CORRECT for the 202601 snapshot,
which SERIALIZATIONS.md, how-to-use.qmd, data.qmd and tutorials/why_h3.qmd still
legitimately document. This page describes the live app, which serves 202608, so
it had silently drifted one generation behind. Those four other files were
checked against the live 202601 objects (594,541 / 1,627,502 / 2,543,412 B) and
are accurate — they are deliberately NOT touched. A "wrong number" in this repo
may be a right number for a different release.

Also dropped the "4 parquet files" claim, which was false — the published
release is 21 objects (18 parquet + 3 JSON search-index files) and the boot
manifest check enumerates them. Replaced with the real figure plus a pointer to
isamples_202608_release_manifest.json and CANONICAL.md as the authoritative
inventory, and a collapsed callout giving the curl/jq and SQL one-liners to
re-derive every number on the page without trusting the page.

Units are now consistently decimal MB. The old row silently mixed conventions
(580 KB was KiB while 1.6/2.5 MB were decimal), which is part of why it read as
internally consistent while being a generation stale.

Verified: quarto render of both pages clean; tests/test_smoke.py passes;
tests/test_frontend_derived.py 40 passed; the isamplesorg#341/isamplesorg#342 count behavior is
unaffected (search -> 60/60 dashes, 0 stuck; facet-only -> real counts); no
pageerrors. Rendered headings confirmed as "Step 1 ... Step 7" with no duplicate
numbering.

Refs isamplesorg#343

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
…Works callout too

The collapsed callout still read '494 KB' (KiB-derived) while the table below
had been converted to decimal MB — reintroducing in miniature the mixed-units
problem that made the original figures look self-consistent while being wrong.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
…rent-app doc drift it surfaced

Codex blocked the first cut on three inaccuracies in the new prose, all valid:

1. "21 objects" undercounted the release. The manifest directly inventories 21
   files but separately summarizes the sharded search index (256 base shards plus
   hot-token sub-files, ~852 objects incl. sidecars per CANONICAL.md). Reworded to
   say exactly that rather than implying 21 is the whole published release.

2. A binary/decimal straggler survived at the How-It-Works callout: "60 MB lite
   parquet". 62,924,115 B is 60.0 MiB but 62.9 decimal MB, so under the stated
   convention it must read 63 MB — matching the table below it.

3. "Every figure above comes from the manifest" was false. The cluster counts come
   from parquet row counts, and <1s / <120 km / "Up to 5K" are properties of the
   app, not the data. Narrowed to "every FILE-SIZE figure", with the other sources
   named.

Codex also caught that my HTML comment certified four other docs wholesale as
fine, which overstated what I had checked. Corrected in two ways:

- EXPLORER_QUERIES.md and index.qmd describe the CURRENT app and were genuinely
  drifted, so they are fixed here: map_lite_v2 -> _v3 and sample_facets_v3 -> _v4
  (both obsolete filenames that would defeat anyone trying to reproduce a query),
  wide ~280 -> ~300 MB, lite ~50-60 -> ~63 MB, facets ~60 -> ~69 MB.
- The comment now states the scope honestly: SERIALIZATIONS.md, how-to-use.qmd,
  data.qmd and tutorials/why_h3.qmd have CORRECT 202601 bytes and were left alone,
  but are explicitly NOT certified clean — their present-tense prose still calls
  those 202601 files the ones serving the Explorer. Rewording them as historical
  is recorded as open follow-up, not silently implied to be done.

Also fixed a bug introduced while editing that comment: the block was closed early
with a stray "-->", which would have rendered the units paragraph as visible body
text plus a loose arrow. Verified the comment markers balance (5/5) and that none
of the comment text appears outside a comment in the rendered HTML, while the
intended "Sizes are decimal MB" caption does.

Verified: quarto render clean; tests/test_smoke.py passes; test_frontend_derived
40 passed; no stale-unit strings remain outside the explanatory comment.

Refs isamplesorg#343

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
…anner

Codex round 2 caught four stale strings my grep missed, all in comments/prose
(no executable code touched):

- EXPLORER_QUERIES.md:154 'the 280 MB wide file' -> 300 MB
- explorer.qmd:2682 comment naming sample_facets_v2.parquet -> _v4
- explorer.qmd:6045 and :6624 calling the facets parquet 63 MB -> 69 MB
  (63 MB is samples_map_lite_v3; the facets file is 69,384,530 B)

Also adopted Codex's unambiguous object-count wording: the manifest directly
inventories 21 objects INCLUDING five search-index sidecars, and summarizes the
index's 847 shard files (256 base + 591 hot); the index directory holds 852
objects. The previous phrasing double-counted the sidecars implicitly.

query-spec.qmd: Codex found deeper drift there — stale filenames AND a
text-search narrative that still presents the ILIKE full-scan as current with
the substrate index as future work (isamplesorg#169), when the sharded BM25 substrate
shipped as the DEFAULT on 2026-07-17 and ILIKE survives only as ?fts=off.
Correcting that properly means re-stating semantics, not renaming strings, so
it now carries an explicit 'known drift' banner naming both problems rather than
a silent partial fix. Recorded in explorer.qmd's follow-up inventory too.

Verified: quarto render of explorer.qmd and query-spec.qmd clean; comment
markers balance 5/5; test_smoke.py passes; test_frontend_derived 40 passed;
repo-wide sweep shows remaining hits are only the deliberate CANONICAL.md
supersession table, dated plans, and session logs.

Refs isamplesorg#343

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
…ANCE and EXPLORER_STATE drift

Codex round 3 found my query-spec banner understated the problem — it said the
drift was 'in two ways' and that 'the shape of the bindings is current', both
contradicted elsewhere in the same spec (objectType is described as not exposed
when the Explorer ships it as the Specimen Type facet; lite is described as
res8-only when lite_v3 carries res4/res6 too).

Banner now says the drift is NOT limited to the listed examples, scopes 'current'
to the substrate-neutral query model only, and marks anything describing what the
Explorer actually does today as a record of the time. Added the two availability
examples Codex found.

Two more documents labeled rather than silently patched:
- DATA_PROVENANCE.md — its version-skew bullets still asserted deployed derived
  files are 202601 and the live wide is 202604. Added a snapshot note: the live
  family is now 202608, but the REPRODUCIBILITY gap those bullets describe is
  still real and unresolved — only the version numbers are historical.
- EXPLORER_STATE.md — the isamplesorg#178 two-button addendum describes current search SQL
  with sample_facets_v2 / samples_map_lite (two generations stale) and the ILIKE
  scan as the search path. Labeled historical; the scope DECISION still holds.

Verified: query-spec renders clean; test_frontend_derived 40 passed.

Refs isamplesorg#343

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
…cing 202601 docs

Codex round 4: several main-navbar pages present 202601 archival artifacts as
current Explorer inputs — user-facing misinformation, and this content is about
to be archived for the NSF report.

Chose LABELING uniformly rather than rewriting the tables. Rationale: the 202601
URLs and byte counts on those pages are CORRECT and still resolve; the defect is
purely the present-tense 'this is what the Explorer uses' framing. Rewriting them
to 202608 would mean re-verifying a dozen sizes and counts against a different
snapshot late in closeout — more error surface than the problem warrants, and it
would destroy their value as a stable citable snapshot.

Consistent 'Snapshot note (2026-08-05)' banner added to: how-to-use.qmd, data.qmd,
tutorials/index.qmd, tutorials/why_h3.qmd, SERIALIZATIONS.md, README.md. Each says
the examples pin 202601, that the live app serves the 202608 family, when to
prefer each, and points at the release manifest / CANONICAL.md as authoritative.

DATA_PROVENANCE.md also gets a document-level coverage caveat: its DAG documents
the seven-file derived substrate as of the 2026-06-02 review and does NOT cover
the facet index/masks/node-bits set (isamplesorg#304/isamplesorg#305) or the sharded search index
(isamplesorg#171), both added later. Incomplete rather than wrong — the build chain and
automation gaps it documents remain accurate for the files it covers.

Verified: full 55-page quarto render clean; test_smoke.py passes;
test_frontend_derived 40 passed; banners confirmed present in rendered HTML for
all four qmd pages.

Refs isamplesorg#343

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
1. Banner first sentence narrowed. It claimed 'the file examples on this page pin
   202601', which was systematically overstated — these pages mix generations
   (data.qmd uses the current/ alias and the 202512 narrow file, etc.). Now reads
   'The 202601 file examples on this page pin a stable, versioned snapshot', with
   an explicit note that other generations may appear. Also dropped 'archival' in
   favour of 'stable, versioned' since the Zenodo deposit is not published yet,
   and added 'including' before the abbreviated 202608 list.

2. DATA_PROVENANCE coverage caveat was itself incomplete about its incompleteness.
   Now names every known omission: sample_facet_masks, facet_node_bits,
   sample_facet_index, sample_facet_index_meta, sample_facet_membership,
   facet_tree_summaries, facet_tree_cross_filter, and the sharded search index.

3. Three 'every file' completeness claims qualified, since they contradicted the
   new caveat: DATA_PROVENANCE's own opening line, CANONICAL.md's pointer to it,
   and the Guided Tour's 'how every derived file is built'.

Verified: full 55-page quarto render clean; test_smoke.py passes;
test_frontend_derived 40 passed.

Refs isamplesorg#343

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QCCDurpcLzMe7L72y2HDAa
@rdhyee

rdhyee commented Aug 6, 2026

Copy link
Copy Markdown
Contributor Author

🤖 rbotyee (Claude, operated by @rdhyee) — Raymond's intent: "if it's CC+Codex LGTM and it looks good on rdhyee, merge it." What I did: ran the Codex review loop to convergence (six rounds), verified on the fork's staging deploy, and am recording the verdict here before merging.

Codex verdict — round 6

LGTM — no blocking findings.

The three must-fix items are correctly resolved in the real files, commit d44a642 is clean and limited to the nine expected files, and git diff --check passes. I independently reran tests/test_frontend_derived.py: 40 passed.

The smoke test could not launch Chromium in this sandbox due macOS Mach-port permissions; that is an environment failure, not a branch regression. Your successful smoke test and full render cover that gap.

Safe to merge.

What the review loop actually caught

Worth recording, because this started as a two-line heading fix and Codex blocked it five times:

Round Blocked on
1 "21 objects" undercounted the release (excluded 847 search shards); a 60 MB/63 MB binary-vs-decimal straggler; "every figure comes from the manifest" was false (cluster counts come from parquet rows)
2 Four more stale strings my grep missed, incl. a comment naming sample_facets_v2 and two calling the facets parquet 63 MB when that's map_lite's size
3 My query-spec.qmd drift banner understated the problem and was itself partly wrong; DATA_PROVENANCE.md and EXPLORER_STATE.md needed labeling
4 Six main-navbar pages presenting 202601 artifacts as current Explorer inputs
5 The banners claimed pages "pin 202601" when they actually mix generations; the provenance caveat was incomplete about its own incompleteness
6 — LGTM

The most useful catch was conceptual rather than textual: the old figures weren't invented — they were correct for the 202601 snapshot. Only explorer.qmd was genuinely wrong, because it describes the live app, which serves 202608. Four other docs quoting 202601 bytes were verified accurate and deliberately left alone. That's now written into the code comment so the next person doesn't "fix" correct numbers.

Verified on staging (rdhyee.github.io)

  • Guided Tour headings render Step 1Step 7, no duplicate numbering
  • Explorer prose: 0.5 MB, 63 MB lite parquet, "Static files, zero backend", "every file-size figure"
  • Snapshot banners present on the labeled pages
  • tests/test_smoke.py passes against staging; full 55-page render clean

Deliberately deferred (Codex's own follow-up list, not blocking)

Full refresh of DATA_PROVENANCE.md / SERIALIZATIONS.md / query-spec.qmd; rewriting the instructional tables around 202608; splitting the docs into "current release" vs "archival snapshot" sections. All are labeled in-place rather than silently left wrong.

@rdhyee rdhyee added the CC+Codex+LGTM Claude and Codex both reached LGTM; ready for human review label Aug 6, 2026
@rdhyee
rdhyee merged commit 18a7615 into isamplesorg:main Aug 6, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CC+Codex+LGTM Claude and Codex both reached LGTM; ready for human review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant