Viewport harness: derive .pin-btn presence floor from rowCount, and correct two overclaiming statements #46

Open
opened 2026-08-09 17:46:16 +02:00 by clawbot · 0 comments
Collaborator

Follow-ups from PR #44's second review. None blocking; filed rather than spending another review cycle.

1. .pin-btn floor of 10 false-passes on a partial regression

test/viewport/checks.jstap-targets-44px requires each selector to match a minimum count of visible elements. .pin-btn declares 10, but 26 render (one per pinnable host row).

Demonstrated: patching src/main.js to render pins only for index < 12 and running at a 1px threshold gives 53/55 with tap-targets passing at every touch viewport — 54% of pin buttons gone, no signal.

The anti-vacuity property that blocked PR #44 still holds: 12 measured means the oracle is genuinely measuring the page. This is the weaker adjacent claim — the rework comment said the floor "also catches pin buttons stopped rendering per row", which is only true below 10.

  • Derive .pin-btn's minCount from facts.rowCount rather than a constant, so the floor tracks what should actually render.
  • Verify with a 12-of-26 pin-render mutation at a 1px threshold: tap-targets must FAIL. Revert after.

2. Two overclaiming statements

  • PR #44's body: "a hard kill cannot strand one". SIGKILL bypasses the trap; naming containers makes them identifiable, not self-cleaning. The in-file comment at script/frontend-viewport-test:31-35 is accurate — it only claims the timeout/SIGTERM case, which does work. Correct the body if it is edited for another reason; not worth a commit alone.

  • TODO.md: "Every check carries a presence guard". nothing-past-viewport-edge and no-clipped-text rely on the run-level app-rendered gate rather than their own. Nothing is vacuous — the whole run reds if the app did not render — but the wording overclaims.

  • TODO.md wording narrowed to what is true.

Not in scope

The mixed-breakpoint case throwing an uncaught Error with a stack trace rather than a clean message. Noisy, not wrong; leave it.

Notes

  • Coordinate with #43. Once that lands, the size threshold stops masking anything and this check becomes the sole guard against a stale selector — worth doing before or alongside it.
  • Not on the 1.0.0 milestone.
  • No attribution trailers in the commit message.
Follow-ups from PR #44's second review. None blocking; filed rather than spending another review cycle. ## 1. `.pin-btn` floor of 10 false-passes on a partial regression `test/viewport/checks.js` — `tap-targets-44px` requires each selector to match a minimum count of visible elements. `.pin-btn` declares 10, but 26 render (one per pinnable host row). Demonstrated: patching `src/main.js` to render pins only for `index < 12` and running at a 1px threshold gives **53/55 with `tap-targets` passing at every touch viewport** — 54% of pin buttons gone, no signal. The anti-vacuity property that blocked PR #44 still holds: 12 measured means the oracle is genuinely measuring the page. This is the weaker adjacent claim — the rework comment said the floor "also catches pin buttons stopped rendering per row", which is only true below 10. - [ ] Derive `.pin-btn`'s `minCount` from `facts.rowCount` rather than a constant, so the floor tracks what should actually render. - [ ] Verify with a 12-of-26 pin-render mutation at a 1px threshold: `tap-targets` must FAIL. Revert after. ## 2. Two overclaiming statements - **PR #44's body**: "a hard kill cannot strand one". `SIGKILL` bypasses the trap; naming containers makes them identifiable, not self-cleaning. The in-file comment at `script/frontend-viewport-test:31-35` is accurate — it only claims the `timeout`/`SIGTERM` case, which does work. Correct the body if it is edited for another reason; not worth a commit alone. - **`TODO.md`**: "Every check carries a presence guard". `nothing-past-viewport-edge` and `no-clipped-text` rely on the run-level `app-rendered` gate rather than their own. Nothing is vacuous — the whole run reds if the app did not render — but the wording overclaims. - [ ] `TODO.md` wording narrowed to what is true. ## Not in scope The mixed-breakpoint case throwing an uncaught `Error` with a stack trace rather than a clean message. Noisy, not wrong; leave it. ## Notes - Coordinate with #43. Once that lands, the size threshold stops masking anything and this check becomes the sole guard against a stale selector — worth doing before or alongside it. - Not on the `1.0.0` milestone. - No attribution trailers in the commit message.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: sneak/netwatch#46