Open Graph card, a footer link to the source, and the repro command above the fold - #43
Merged
Merged
Conversation
…ot say where it was built Three things a reader hits before they reach a number. The pages carried an Open Graph block with no image in it. og:title, og:description and og:url were there; og:image was not, and twitter:card said `summary`. Every consumer of those tags falls back to a blank rectangle when there is no image, so the one place these measurements travel through - somebody pasting the link - showed nothing about them. Adds og:image with its type, dimensions and alt text, and moves twitter:card to summary_large_image with a matching twitter:image. The card itself is a committed source asset in assets/, copied into the output by build_site rather than dropped into site/. site/ is diffed against a fresh build by `make site-check`, so a file served from site/ that no build writes would report as drift on every run, and a check that always says the same thing stops being read. Copying also puts the card in build/site-offline and build/run-*, where the page checks and the determinism gate look at the pages referencing it: determinism now compares 6 files. The footer named CAL FIRE's licence and this project's disclaimer but never the build. A reader who wanted to check an inference had no way from the page to the field registry it came from. Adds one footer line to the source, on every page. README linked three hosted report pages at line 5 and did not reach an install command until line 129. The offline fixture build is the thing a sceptic can run in a minute with no CAL FIRE download, so it now sits next to the hosted links, with the real-data path and `make site-check` named as the step that actually settles whether the served numbers are current. The hosted reports still lead. site/ is rebuilt from the acquired FRAP and DINS files, not hand-edited: the diff is the 9 head lines and the 3 footer lines per page and no count moved. `make verify` and `make site-check` both pass; site/ is byte-identical to a fresh build from data/raw/. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pvm6FCdDXwtzA3juGxz6ba
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three things that sit between a reader and a number, none of them about the measurement itself.
The link unfurls as a grey box
The pages already carried an Open Graph block —
og:title,og:description,og:url,og:site_name,og:locale— with no image in it, andtwitter:cardset tosummary. Every consumer of those tags falls back to a blank rectangle whenog:imageis absent, so the one channel these measurements actually travel through, somebody pasting the link, showed nothing about them.Adds
og:image(absolute; Open Graph consumers resolve it with no page context and drop a relative one) withog:image:type,:width,:heightand:alt, and movestwitter:cardtosummary_large_imagewith a matchingtwitter:imageandtwitter:image:alt.The card is 1200×630, drawn in the site's own light palette and its own serif, carrying the title, the one-line description and the three-state key the tables use. Nothing on it is a number, so it cannot go stale against a retrieval.
Where the card lives, and why not in
site/It is a committed source asset in
assets/, copied into the output bybuild_site— not a static file dropped intosite/.make site-checkdiffssite/against a fresh build from the acquired files. A file served out ofsite/that no build writes would report as drift on every single run, and a check that always says the same thing stops being read. Copying it in the build also puts the card inbuild/site-offlineandbuild/run-one/run-two, which is where the page checks and the determinism gate look at the pages that reference it — determinism now compares 6 files instead of 5.The site never said where it was built
The footer credited CAL FIRE's licence and carried the unofficial disclaimer, and named the build nowhere. These pages publish inferences —
docs/MARKERS.mdexists precisely so a reader can check one — and a reader who wanted to had no route off the page to the field registry it came from. One footer line, rendered on all three pages.The repro command was at line 129
Three hosted report pages are linked at line 5 of the README;
uv syncandnpm cidid not appear until line 129. Anyone wanting to verify the numbers rather than read them had to scroll past the whole methodology first.make site-offlinenow sits next to the hosted links: it is the real pipeline over the committed fixtures, needs no network and no CAL FIRE download, and runs in about a minute. The block names the real-data path (make acquire,make site) and points atmake site-checkas the step that actually settles whether the served numbers are what this code produces today. The hosted reports still lead — this is four lines, not a relocation of the Build section.Verification
site/was rebuilt withmake sitefrom the acquired FRAP and DINS files rather than hand-edited. The diff is exactly the 9 head lines and 3 footer lines per page; no published count moved, which is its own small confirmation that the pipeline still reproduces the committed measurement.make verify— passes end to end: lockfile, lint, format,mypy --strict, 690 tests,pip-audit,html-validate, axe-core in jsdom and in Chromium, WCAG 2.2 reflow at 320×256,npm auditon both toolchains, determinism.make site-check—site/is byte-identical to a fresh build fromdata/raw/.Not fixed here
chelseakr.github.iois a shared origin serving several project sites from subpaths, so no project on it can own/robots.txt. Not this repo's to fix.🤖 Generated with Claude Code
https://claude.ai/code/session_01Pvm6FCdDXwtzA3juGxz6ba