Skip to content

feat: mobile typography, hover-zoom detector, register + critique provenance - #23

Merged
gabelul merged 4 commits into
mainfrom
feat/viewport-typography-and-init-critique
Jul 14, 2026
Merged

feat: mobile typography, hover-zoom detector, register + critique provenance#23
gabelul merged 4 commits into
mainfrom
feat/viewport-typography-and-init-critique

Conversation

@gabelul

@gabelul gabelul commented Jul 14, 2026

Copy link
Copy Markdown
Owner

Four changes. Multi-commit branch — merge (don't squash) so each lands as its own changelog entry.

What's here

fix: measure typography at mobile too, not just desktop
The scanner captured all three viewports but only ran snippetTypographyMetrics on the desktop pass — so line-length, tiny body text, and oversized heroes were graded on the page's widest, most forgiving viewport. These fail at 375px first. Now the metrics run at mobile as well, and the typography evaluator grades the worse of the two viewports and names which one fired.

feat: uniform image hover-zoom (slop pattern 26)
New image-hover pass hovers a sample of images and reads the transform delta. A lone product-zoom is legitimate, so it only fires on the template fingerprint: the identical transform on 3+ images covering ≥60% of the ones that move. Targets are stamped with a data-attribute for unique selection (image grids collapse hand-built nth-of-type selectors — caught by an end-to-end smoke test that was hovering the first image N times). Wired to the slop evaluator (counts only the uniform case), the catalog, and the schema.

feat: design register (brand vs product)
Setup forms a register hypothesis from route/component signals and confirms it with a leading question; config write stores it; the design-director reads it to calibrate judgment (brand → distinctiveness, product → clarity). The 6 measured pillars stay register-blind. The scan summary now closes with one highest-leverage next move.

feat: critique provenance + DEGRADED banner
The report header declares whether the 7 evaluators ran isolated or inline, with a visible ⚠️ DEGRADED banner on the inline path — so a run with weakened anti-anchoring isolation never looks identical to a clean one.

Testing

Full suite green, 0 failures. New coverage: image-hover.test.js (16), register-provenance.test.js (9), mobile-typography drift guards, register round-trip in tools.test.js. Both new detectors verified end-to-end against real fixtures (uniform grid → flagged; single zoom → not flagged).

Not done (deliberately)

cramped-padding as a discrete detector stays parked — partially covered by spacing + cognitive-density.

Gabi added 4 commits July 14, 2026 11:00
Typography breaks worst at 375px — line-length blows past 85 chars, body
text drops under the 14px floor, heroes go oversized — but the metrics
snippet only ran on the desktop pass, so the evaluator graded every page
on its widest, most forgiving viewport. Now snippetTypographyMetrics runs
at mobile as well, the evaluator reads both viewports and grades the worse
one (naming which viewport it fired on), and scoring/schema/visual-eval
docs say so. Drift-guarded so it can't silently regress to desktop-only.
Adds an image-hover pass that hovers a sample of images and reads the
transform delta. A lone product-zoom is a legit pattern, so this only
fires on the template fingerprint: the identical transform on 3+ images
covering most of the ones that move at all. Targets are stamped with a
data attribute for unique selection — image grids collapse hand-built
nth-of-type selectors, which would hover the first image N times and
report false uniformity. Wired into the slop evaluator (counts only the
uniform case), the pattern catalog, and the evidence schema.
Two review-framing features.

Register (brand vs product): the setup agent forms a register hypothesis
from route/component signals and confirms it with a leading question;
config write stores it in a ## Register section; the design-director reads
it to calibrate judgment (brand -> distinctiveness and emotional pull,
product -> clarity and low friction). The 6 measured pillars stay
register-blind -- a 90-char line or a 3:1 contrast ratio is a defect on any
surface. The scan summary now closes with one highest-leverage next move
instead of a menu.

Provenance: the report header carries a Method line declaring whether the
7 evaluators ran isolated (spawned) or inline. The inline fallback emits a
visible DEGRADED banner, because inline weakens the anti-anchoring
isolation and a silent degraded run shouldn't look identical to a clean one.
Pixelslop's docs describe what Pixelslop does; where an idea came from
isn't part of that. Drops the one remaining 'inspired by' credit.
@gabelul
gabelul force-pushed the feat/viewport-typography-and-init-critique branch from 1846a3e to 47e1a05 Compare July 14, 2026 10:03
@gabelul
gabelul merged commit 3726423 into main Jul 14, 2026
4 checks passed
@gabelul
gabelul deleted the feat/viewport-typography-and-init-critique branch July 14, 2026 10:21
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