Skip to content

content(garage): give each page one title that states what it found - #1626

Draft
oddharsh wants to merge 11 commits into
mainfrom
claude/garage-retitle
Draft

oddharsh wants to merge 11 commits into
mainfrom
claude/garage-retitle

Conversation

@oddharsh

@oddharsh oddharsh commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Every Garage page carried up to three titles: the manifest's, the shelf card's and the page's own. Most were fragments ("Half the light", "There and back", "Octane, priced against no framework"). Each page now has one title that states what it found, held to the rules houseguest holds a PR title to (references/pr-copy.md, "The title"): one plain statement with a verb, concrete nouns from the page, no comma, colon, parenthetical or ", not X" clause, 11 words at most.

All 29 pass title.sh --stats against that profile. As a control, the old comma titles fail it. It can't see a verbless fragment ("Half the light" passes), so those were judged by hand.

Stacked on #1621, which moves the horizon card this PR retitles.

page shelf card before now
/garage/horizon Horizon: upcoming web platform Web features wait here until a second engine ships them
/garage/ranges Ranges, chunk by chunk Cloudflare's cache fetches only the chunks a range read touches
/garage/round-trip There and back Every Markdown twin converts back to its page byte for byte
/garage/av2 AV2, before anyone can see it AV2 stills tie this site's AVIF at the bytes it ships
/garage/dictionary The dictionary the runtime dropped workerd's zstd drops the dictionary 13 pages need
/garage/htmx Break-even at three submits htmx 4.0 pays for itself after three form submits
/garage/typed-config The config that types itself A TypeScript Wrangler config types every binding it declares
/garage/hidden-flags Flags the docs don't list Wrangler accepts 19 hidden flags whether they do anything
/garage/useragent What a crawler name is worth nytimes.com refuses 4 real crawler tokens and admits 2 fake ones
/garage/dyno Dyno A nightly job weighs the Worker bundle and every page
/garage/octane Octane, priced against no framework Nextane's benchmark gets a row for a site with no framework
/garage/compression Compression teardown Rebuilding a Response dropped encodeBody on every page
/garage/pqc Post-quantum signatures, priced workerd signs the crawler's ML-DSA-44 header in 0.12 ms
/garage/gpt56 5.6 Sol's performance pass 5.6 Sol's performance pass came down to three changes
/garage/blueprint Blueprint: how Fable 5 would rebuild it Fable 5 reads every file and draws the rebuild plan
/garage/wire Bytes on the wire Brotli at q11 earned the site its first build step
/garage/workers Off Pages, onto Workers Workers with static assets give the site an atomic deploy
/garage/iroh iroh, and why it stays across the room iroh dials a machine by its public key
/garage/teardown Teardown: what Fable 5 found Fable 5's audit found homepage HTML served at thumbnail URLs
/garage/masonry A masonry contact sheet CSS Grid Lanes lays out a ragged-height contact sheet
/garage/safari27 Safari 27, through this site's lens Safari 27 ships features this site already uses
/garage/cloudflare Four free Cloudflare features, live Four free Cloudflare Workers features run live here
/garage/resample Half the light Every resizer averages a checkerboard to 128 where light says 188
/garage/ig-prep Pixels Instagram has no reason to resample ig-prep downscales a photo before Instagram gets to
/garage/encoding Thumbnail encoding study One photo runs through every thumbnail encoding choice
/garage/pretext pretext: text measurement off the DOM pretext measures multiline text without touching the DOM
/garage/chunks Content-addressed chunking FastCDC splits files into content-addressed chunks in the browser
/garage/scroll Scroll, the XP way Scroll-driven animations draw the XP file-copy progress bar
/garage/tooltips Tooltip experiments Tooltips follow the cursor on two custom-property writes

The title lands in site-manifest.json, the 12 Garage specs (regenerated), the hand-written pages' <title>, og:title and h1 (badges kept), the shelf card, dyno's built document and the round-trip hand twin. The route oracle's /mcp row looked for <h1>Horizon and now looks for the new h1. The OG cards carry no title text, so none need rebaking.

The rule stays. pages:check now holds every /garage/* title in site-manifest.json to the same rules, and fails a hand-written page whose h1 or <title> disagrees with it, so a page keeps one title. pipelines/garage/README.md gains a "Titles" section. Two new controls, garage-title-goes-back-to-a-fragment and garage-h1-drifts-from-its-title, both read CAUGHT.

The pause counter fix, which the retitle exposed. pauseBelowFirstScreen collapsed whitespace one text chunk at a time, so a space split at a tag counted twice. Its test collapses the page as a whole. With compression's new h1 the two landed on opposite sides of the 3,000-character line, the build at 3,000 or more and the test at 2,983. The counter now collapses across chunks and skips script, style and template text by depth. Of the 45 garage and lwe pages, only compression's pause moves, one block later. The pause test fails on the old counter and passes on the new one; the parser-pause-before-the-first-fold control still reads CAUGHT.

Checks: build, routes:check (380 routes, 0 hard failures), derive:check (6 fresh; shell/desktop relocked after gen:shell), check:fast (1,775 pass).

Horizon is the one Garage page that keeps moving: it was swept on
2026-10-30 and now tracks 166 features, but its card sat 28th of 29,
sorted by its 2026-05-29 start date, and still described the three
features it opened with. The card moves to the top of the one shelf
(prose-fold splits only a single ul.shelf, so a second pinned list
would turn the fold off), says it's pinned, and describes the page as
it stands.
pauseBelowFirstScreen collapsed whitespace one HTMLRewriter text chunk at
a time, so a run of spaces split at a tag counted once per side. Its test
collapses the page's text as a whole, and the two disagreed by enough
that /garage/compression's pause sat at 2,983 visible characters, under
the 3,000 threshold, once the page's h1 changed. The counter now carries
whether the last character was a space across chunks, and skips script,
style and template text by depth instead of subtracting it after.

Across all 45 garage and lwe pages, only compression's pause moves, one
block later. contract-long-pages-pause-below-the-screen fails on the old
counter with the retitled pages and passes on this one; the
parser-pause-before-the-first-fold control still reads CAUGHT.
Every Garage page carried up to three titles (the manifest's, the shelf
card's, the page's own), and most were fragments: "Half the light",
"There and back", "Octane, priced against no framework". Each page now
has one title, written to the same rules houseguest holds a PR title to:
one plain statement with a verb, concrete nouns from the page, no comma,
colon, parenthetical or ", not X" clause, 11 words at most. All 29 pass
houseguest's title.sh against that profile; the old ones fail it.

The title lands in site-manifest.json, the Garage specs (regenerated),
the hand-written pages' <title>, og:title and h1 (badges kept), the shelf
card, dyno's built document and the round-trip hand twin. The route
oracle's /mcp row looked for <h1>Horizon and now looks for the new h1.
@github-actions

github-actions Bot commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

Wire-size diff vs merge base

8d013e599d1b90a1c68d69b18b5cd45f0314f481 → c9af0101691c0ed1281aa19298332d509c32c547

Brotli q11, the quality the edge serves. Every number here is deterministic:
an unchanged file produces no row. Advisory — this check fails on nothing.

Client assets

No change. 40 files, 245.02 KiB Brotli total.

Pages

Total Brotli: 720.36 KiB → 720.79 KiB (+0.43 KiB, +0.1%) across 77 files, 30 changed.

file base head Δ
garage/index.html 20.40 KiB 20.57 KiB +0.17 KiB (+0.8%)

Plus 29 files under the 0.13 KiB floor, net +0.26 KiB — usually content-hash churn in /a/ references, counted in the total above.

Worker bundle

299.54 KiB → 299.86 KiB gzip (+0.32 KiB, +0.1%)

Largest module deltas (raw bytes in bundle):

file base head Δ
.build/src/worker/lib/site-manifest.ts 14.88 KiB 15.86 KiB +0.98 KiB (+6.6%)
.build/src/worker/dyno.ts 8.89 KiB 8.99 KiB +0.10 KiB (+1.2%)

Dictionary transport

Family dictionary acquisition: no change, 14.50 KiB q11.

pd/: 478 → 490 deltas, 549.49 KiB → 567.00 KiB (+17.51 KiB).

Head tags vs merge base

What search engines and link-preview bots read off each built page: the oracle's status, title, description, canonical, robots, og:*, twitter:*, hreflang alternates, and each JSON-LD block's @type list. Advisory, fails on nothing.

page tag base head
/garage/av2 og:title aadhar.sh/garage/av2: AV2, before anyone can see it aadhar.sh/garage/av2: AV2 stills tie this site's AVIF at the bytes it ships
/garage/av2 title aadhar.sh/garage/av2: AV2, before anyone can see it aadhar.sh/garage/av2: AV2 stills tie this site's AVIF at the bytes it ships
/garage/blueprint og:title aadhar.sh/garage/blueprint aadhar.sh/garage/blueprint: Fable 5 reads every file and draws the rebuild plan
/garage/blueprint title aadhar.sh/garage/blueprint aadhar.sh/garage/blueprint: Fable 5 reads every file and draws the rebuild plan
/garage/chunks og:title aadhar.sh/garage/content-addressed chunking aadhar.sh/garage/chunks: FastCDC splits files into content-addressed chunks in the browser
/garage/chunks title aadhar.sh/garage/content-addressed chunking aadhar.sh/garage/chunks: FastCDC splits files into content-addressed chunks in the browser
/garage/cloudflare og:title aadhar.sh/garage/four free Cloudflare features, live aadhar.sh/garage/cloudflare: Four free Cloudflare Workers features run live here
/garage/cloudflare title aadhar.sh/garage/four free Cloudflare features, live aadhar.sh/garage/cloudflare: Four free Cloudflare Workers features run live here
/garage/compression og:title aadhar.sh/garage/compression teardown aadhar.sh/garage/compression: Rebuilding a Response dropped encodeBody on every page
/garage/compression title aadhar.sh/garage/compression teardown aadhar.sh/garage/compression: Rebuilding a Response dropped encodeBody on every page
/garage/dictionary og:title aadhar.sh/garage/dictionary: The dictionary the runtime dropped aadhar.sh/garage/dictionary: workerd's zstd drops the dictionary 13 pages need
/garage/dictionary title aadhar.sh/garage/dictionary: The dictionary the runtime dropped aadhar.sh/garage/dictionary: workerd's zstd drops the dictionary 13 pages need
/garage/dyno og:title Dyno · aadhar.sh aadhar.sh/garage/dyno: A nightly job weighs the Worker bundle and every page
/garage/dyno title Dyno · aadhar.sh aadhar.sh/garage/dyno: A nightly job weighs the Worker bundle and every page
/garage/encoding og:title aadhar.sh/garage/thumbnail encoding study aadhar.sh/garage/encoding: One photo runs through every thumbnail encoding choice
/garage/encoding title aadhar.sh/garage/thumbnail encoding study aadhar.sh/garage/encoding: One photo runs through every thumbnail encoding choice
/garage/gpt56 og:title aadhar.sh/garage/5.6 sol aadhar.sh/garage/gpt56: 5.6 Sol's performance pass came down to three changes
/garage/gpt56 title aadhar.sh/garage/5.6 sol aadhar.sh/garage/gpt56: 5.6 Sol's performance pass came down to three changes
/garage/hidden-flags og:title aadhar.sh/garage/hidden-flags: Flags the docs don't list aadhar.sh/garage/hidden-flags: Wrangler accepts 19 hidden flags whether they do anything
/garage/hidden-flags title aadhar.sh/garage/hidden-flags: Flags the docs don't list aadhar.sh/garage/hidden-flags: Wrangler accepts 19 hidden flags whether they do anything
/garage/horizon og:title aadhar.sh/garage/horizon aadhar.sh/garage/horizon: Web features wait here until a second engine ships them
/garage/horizon title aadhar.sh/garage/horizon aadhar.sh/garage/horizon: Web features wait here until a second engine ships them
/garage/htmx og:title aadhar.sh/garage/htmx: Break-even at three submits aadhar.sh/garage/htmx: htmx 4.0 pays for itself after three form submits
/garage/htmx title aadhar.sh/garage/htmx: Break-even at three submits aadhar.sh/garage/htmx: htmx 4.0 pays for itself after three form submits
/garage/ig-prep og:title aadhar.sh/garage/ig-prep: Pixels Instagram has no reason to resample aadhar.sh/garage/ig-prep: ig-prep downscales a photo before Instagram gets to
/garage/ig-prep title aadhar.sh/garage/ig-prep: Pixels Instagram has no reason to resample aadhar.sh/garage/ig-prep: ig-prep downscales a photo before Instagram gets to
/garage/iroh og:title aadhar.sh/garage/iroh aadhar.sh/garage/iroh: iroh dials a machine by its public key
/garage/iroh title aadhar.sh/garage/iroh aadhar.sh/garage/iroh: iroh dials a machine by its public key
/garage/masonry og:title aadhar.sh/garage/masonry aadhar.sh/garage/masonry: CSS Grid Lanes lays out a ragged-height contact sheet
/garage/masonry title aadhar.sh/garage/masonry aadhar.sh/garage/masonry: CSS Grid Lanes lays out a ragged-height contact sheet
/garage/octane og:title aadhar.sh/garage/octane: Octane, priced against no framework aadhar.sh/garage/octane: Nextane's benchmark gets a row for a site with no framework
/garage/octane title aadhar.sh/garage/octane: Octane, priced against no framework aadhar.sh/garage/octane: Nextane's benchmark gets a row for a site with no framework
/garage/pqc og:title aadhar.sh/garage/pqc: Post-quantum signatures, priced aadhar.sh/garage/pqc: workerd signs the crawler's ML-DSA-44 header in 0.12 ms
/garage/pqc title aadhar.sh/garage/pqc: Post-quantum signatures, priced aadhar.sh/garage/pqc: workerd signs the crawler's ML-DSA-44 header in 0.12 ms
/garage/pretext og:title aadhar.sh/garage/pretext: DOM-free text measurement aadhar.sh/garage/pretext: pretext measures multiline text without touching the DOM
/garage/pretext title aadhar.sh/garage/pretext: DOM-free text measurement aadhar.sh/garage/pretext: pretext measures multiline text without touching the DOM
/garage/ranges og:title aadhar.sh/garage/ranges: Ranges, chunk by chunk aadhar.sh/garage/ranges: Cloudflare's cache fetches only the chunks a range read touches
/garage/ranges title aadhar.sh/garage/ranges: Ranges, chunk by chunk aadhar.sh/garage/ranges: Cloudflare's cache fetches only the chunks a range read touches
/garage/resample og:title aadhar.sh/garage/resample: Half the light aadhar.sh/garage/resample: Every resizer averages a checkerboard to 128 where light says 188
/garage/resample title aadhar.sh/garage/resample: Half the light aadhar.sh/garage/resample: Every resizer averages a checkerboard to 128 where light says 188
/garage/round-trip og:title aadhar.sh/garage/round-trip: There and back aadhar.sh/garage/round-trip: Every Markdown twin converts back to its page byte for byte
/garage/round-trip title aadhar.sh/garage/round-trip: There and back aadhar.sh/garage/round-trip: Every Markdown twin converts back to its page byte for byte
/garage/safari27 og:title aadhar.sh/garage/safari 27 aadhar.sh/garage/safari27: Safari 27 ships features this site already uses
/garage/safari27 title aadhar.sh/garage/safari 27 aadhar.sh/garage/safari27: Safari 27 ships features this site already uses
/garage/scroll og:title aadhar.sh/garage/scroll aadhar.sh/garage/scroll: Scroll-driven animations draw the XP file-copy progress bar
/garage/scroll title aadhar.sh/garage/scroll aadhar.sh/garage/scroll: Scroll-driven animations draw the XP file-copy progress bar
/garage/teardown og:title aadhar.sh/garage/teardown aadhar.sh/garage/teardown: Fable 5's audit found homepage HTML served at thumbnail URLs
/garage/teardown title aadhar.sh/garage/teardown aadhar.sh/garage/teardown: Fable 5's audit found homepage HTML served at thumbnail URLs
/garage/tooltips og:title aadhar.sh/garage/tooltip experiments aadhar.sh/garage/tooltips: Tooltips follow the cursor on two custom-property writes
/garage/tooltips title aadhar.sh/garage/tooltip experiments aadhar.sh/garage/tooltips: Tooltips follow the cursor on two custom-property writes
/garage/typed-config og:title aadhar.sh/garage/typed-config: The config that types itself aadhar.sh/garage/typed-config: A TypeScript Wrangler config types every binding it declares
/garage/typed-config title aadhar.sh/garage/typed-config: The config that types itself aadhar.sh/garage/typed-config: A TypeScript Wrangler config types every binding it declares
/garage/useragent og:title aadhar.sh/garage/useragent: What a crawler name is worth aadhar.sh/garage/useragent: nytimes.com refuses 4 real crawler tokens and admits 2 fake ones
/garage/useragent title aadhar.sh/garage/useragent: What a crawler name is worth aadhar.sh/garage/useragent: nytimes.com refuses 4 real crawler tokens and admits 2 fake ones
/garage/wire og:title aadhar.sh/garage/bytes on the wire aadhar.sh/garage/wire: Brotli at q11 earned the site its first build step
/garage/wire title aadhar.sh/garage/bytes on the wire aadhar.sh/garage/wire: Brotli at q11 earned the site its first build step
/garage/workers og:title aadhar.sh/garage/off Pages, onto Workers aadhar.sh/garage/workers: Workers with static assets give the site an atomic deploy
/garage/workers title aadhar.sh/garage/off Pages, onto Workers aadhar.sh/garage/workers: Workers with static assets give the site an atomic deploy

pages:check now reads each /garage/* title from site-manifest.json and
refuses a comma, semicolon, colon, parenthetical, quotation mark,
instead-of contrast, em dash, trailing period or a title over 11 words.
It also fails a hand-written page whose h1 or <title> disagrees with the
manifest, so a page keeps one title. The rules are houseguest's PR-title
rules; pipelines/garage/README.md has them under "Titles".

Controls: garage-title-goes-back-to-a-fragment plants "Ranges, chunk by
chunk" in the manifest, and garage-h1-drifts-from-its-title puts
/garage/wire's old h1 back. Both read CAUGHT.
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Nov 9, 2026 •

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
aadhar-sh 8fa5759 Commit Preview URL

Branch Preview URL
Nov 11 2026, 04:08 PM

The title rule walked the manifest with typeof checks and an untyped
array, which added 3 errors to the tools program and tripped the
anti-slop lint. site-manifest.json is a flat surfaces list that
gen-manifest.ts already reads, so the rule filters that instead.
Horizon is the one Garage page that keeps moving: it was swept on
2026-10-30 and now tracks 166 features, but its card sat 28th of 29,
sorted by its 2026-05-29 start date, and still described the three
features it opened with. The card moves to the top of the one shelf
(prose-fold splits only a single ul.shelf, so a second pinned list
would turn the fold off), says it's pinned, and describes the page as
it stands.
Base automatically changed from claude/garage-pin-ideate-e872cd to main November 9, 2026 23:14
… into claude/garage-retitle

# Conflicts:
#	config/derivations.json
#	config/derivations.lock.json
#	src/pages/garage/index.html
# Conflicts:
#	pipelines/garage/specs/hidden-flags.json
#	pipelines/garage/specs/useragent.json
# Conflicts:
#	pipelines/garage/specs/octane.json
#	pipelines/garage/specs/round-trip.json
@oddharsh
oddharsh marked this pull request as draft November 10, 2026 21:18
# Conflicts:
#	pipelines/garage/specs/hidden-flags.json
#	pipelines/garage/specs/octane.json
#	pipelines/garage/specs/pqc.json
#	pipelines/garage/specs/resample.json
#	pipelines/garage/specs/typed-config.json
#	pipelines/garage/specs/useragent.json
#	src/pages/garage/octane.html

This branch has not been deployed

No deployments
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