Repository navigation
Pixel Peeper: a blind compression eye exam at /pixel-peeper - #59
Conversation
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
aadhar-sh | 99ff1b1 | Jul 22 2026, 04:02 AM |
Understanding-first reviewThis is a prompt, not a score or merge gate. Before approving, reconstruct the change:
For docs and dependency changes, a compact answer is enough. For behavior or production changes, include the causal path and one concrete counterexample. The author’s claim card belongs in the PR description; this prompt is for the reviewer’s independent reconstruction. |
|
Added an author claim card to the PR description (model / mechanism / falsifier / evidence / residual uncertainty) per the understanding-first review. Also verified this build did not touch production: live 🤖 Addressed by Claude Code |
d1e958a to
e53041d
Compare
…el-peeper A vision test for image compression, ismy.blue-style: each call shows the same photo squeezed two or three ways and you pick the best on instinct, so the test never primes you on what to look for. Every tile is a real offline encode (zenc / jpegli / mozjpeg / sips; honest 4:2:2 vs 4:2:0 on the 4:2:2-native Fuji files), scored by ssimulacra2 and butteraugli. The payoff is a metric-alignment read: the two metrics are rival models of human vision that disagree, and the end shows which one your eye sides with. Closes with an understanding check. Wiring: - holding/pixel-peeper/: a self-contained XP-window shell + metadata manifest + 44 content-hashed tile files. Pure static, so it rides the default env.ASSETS fallthrough with no worker or run_worker_first change; the clean /pixel-peeper URL comes from html_handling drop-trailing-slash. The shell uses absolute /pixel-peeper/ paths (relative would break at the slashless URL) and lazy-loads tiles per call, so first paint is a ~28KB shell + 9KB manifest, not the ~1.2MB of encodes. - _headers: shell + manifest revalidate like the garage pages; the content-hashed tiles are immutable-1y like /i/. - garage/index.html + sitemap.xml: a shelf entry and a sitemap line. Verified: node build.mjs passes its invariants and stages the folder byte-identical, and the game boots + lazy-loads from the served .build tree with no console errors. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
e53041d to
99ff1b1
Compare
What this adds
Pixel Peeper, a blind vision test for image compression, at
/pixel-peeper. Each call shows the same photo squeezed two or three ways and you pick the best on instinct. The prompt never says what changed, so you can't pattern-match on "the color one." Every tile is a real offline encode (zenc / jpegli / mozjpeg / sips; honest 4:2:2 vs 4:2:0 on the 4:2:2-native Fuji files), scored by ssimulacra2 and butteraugli.The payoff: those two metrics are rival models of human vision that disagree, so the results screen places your eye on the axis between them and shows which one you side with. It closes with an understanding check (predict-then-check quiz, misconception distractors), matching the
/garageconvention.Wiring
holding/pixel-peeper/: a self-contained XP-window shell + a metadatamanifest.json+ 44 content-hashed tile files. Pure static, so it rides the defaultenv.ASSETSfallthrough with no worker orrun_worker_firstchange; the clean slashless/pixel-peeperURL comes fromhtml_handling: drop-trailing-slash. The shell uses absolute/pixel-peeper/paths (relative would break at the slashless URL) and lazy-loads tiles per call, so first paint is a ~28KB shell + ~9KB manifest, not the ~1.2MB of encodes._headers: shell + manifest revalidate like the garage pages (a deploy purges the edge); the content-hashed tiles are immutable-1y like/i/.garage/index.html+sitemap.xml: a shelf entry (status: prototype) and a sitemap line for discoverability.Verified
node build.mjspasses its invariant tripwires and stages the folder byte-identical (the minifier only touchesholding/index.html+ the six named scripts). Served the real.build/tree and confirmed the game boots, fetches its manifest over the absolute path, lazy-loads tiles per call, and the results + quiz render with no console errors.Claim card
/pixel-peeper(self-contained game shell + metadata manifest + content-hashed tiles) plus discoverability wiring (garage shelf, sitemap) and cache headers. No change to any existing route's behavior.run_worker_firstand from theindex.jsROUTES/PREFIX tables falls through toenv.ASSETS.fetch./pixel-peeperis in neither table, so it serves statically;html_handling: drop-trailing-slashmaps the slashless URL to the folder'sindex.html. Absolute/pixel-peeper/asset paths make the shell's manifest + tile fetches resolve at that slashless URL._headersgives content-hashed tiles immutable-1y and the shell/manifest a revalidate contract.build.mjsminifying or renaming the shell; the new folder perturbing an existing route; or the build invariant (everyindex.jsdispatch key covered byrun_worker_first) tripping.node build.mjsexits 0 with "invariants ok: 56 routes mirrored";diff -qshows the stagedindex.htmlbyte-identical to source; serving the real.build/holdingtree, the game boots, fetches/pixel-peeper/manifest.jsonover the absolute path, lazy-loads exactly the current + next call's tiles (network-verified), and the results + quiz render with zero console errors;git merge-treeagainst main is conflict-free; production is untouched (live/pixel-peeper404s, homepage still serves the perf(cache): content-hash nav.js + luna.css into immutable /a/ URLs #56/a/hashed nav.js,/updates.jsonon v160)./pixel-peeperresolution and_headerscache semantics are Workers-platform behaviors I confirmed by config + the existing/garage,/lwe,/i/conventions, not by a livewrangler devhit against this exact config. Now a single commit rebased onto currentmain(on top of Guard CLS (keep luna defer) + fix dead Permissions-Policy token #60). The OG live-demo card is deferred because its tooling lives on main, not this branch.Rebase note
Rebased onto current
main, so this is now a single commit. Two homepage commits that once rode this branch were dropped as redundant once they landed onmainindependently: the luna-defer (#58) and the shell/masonry CLS guard (#60). I verifiedmainalready carries all six#axp-*inline rules from the CLS work before dropping it, so nothing is lost. That also cleared the merge conflict, since this branch no longer touchesholding/index.htmlat all.Net change vs
mainis 408 insertions, 0 deletions, entirely the Pixel Peeper feature plus its cache rules, garage entry, and sitemap line.node build.mjspasses its invariants on the rebased tree. The OG live-demo card is deferred; it can be baked from production after merge.🤖 Generated with Claude Code