CtrlK
BlogDocsLog inGet started
Tessl Logo

testland/web-vitals-inp-deep

Deep INP (Interaction to Next Paint) testing: decomposes input delay, processing duration, and presentation delay via the web-vitals/attribution build, asserts per-interaction INP budgets in Playwright using PerformanceObserver plus the web-vitals visibilitychange flush, and identifies long tasks blocking the main thread. Use when a page feels unresponsive while LCP and CLS are green, or to gate key interactions (form submit, modal open, route change) under an INP budget in CI. Covers interactions only - for page-load Web Vitals gating use lighthouse-perf; for service-worker cache-strategy latency use the qa-pwa plugin's service-worker skills.

75

Quality

94%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

Overview
Quality
Evals
Security
Files

Quality

Content

86%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A strong, highly actionable body: every step is executable code, comments capture real pitfalls (flush ordering, closure scope, LoAF browser support), and the anti-patterns and limitations sections add genuine value. The main weaknesses are minor verbosity (repeated citation phrases, the definition/threshold preamble) and an internal inconsistency where the flagship CI recipe asserts a single sample despite the skill itself labeling that an anti-pattern.

Suggestions

Make Step 4's Playwright example consistent with the Anti-patterns guidance: loop the interaction N times and assert the P75 of collected INP values rather than a single sample's max.

Trim the repeated "Per the [INP web.dev article]" citations to a single citation per claim, and cut the opening INP definition quote and threshold table (or compress to one line: "Good <= 200ms, Poor > 500ms at P75") since Claude knows the definition.

Add an explicit recovery step after the Step 4 assertion, e.g. "If the assertion fails, use Step 3 decomposition to identify the dominant component: input delay -> Step 5 long tasks; processing duration -> reduce handler work; presentation delay -> check render-blocking effects."

DimensionReasoningScore

Conciseness

The body is dense executable code whose comments encode genuinely non-obvious gotchas ("Redefine the property to 'hidden' FIRST, THEN dispatch the event"; the closure-local array that "would never reach window.__longTasks"), but there is trimmable material: the opening INP definition quote, the threshold table Claude largely knows, and the citation phrase "Per the [INP web.dev article]" repeated five-plus times. This is anchor 4 (efficient with minor over-explanation that could be trimmed) rather than 5.

4 / 5

Actionability

Every step ships copy-paste-ready code: the npm install command, the web-vitals/attribution decomposition snippet, two complete Playwright tests (including the visibilitychange flush workaround and a buffered longtask observer), and a ready-to-run CrUX curl with the correct API-key header. Fully executable guidance covering the common cases - anchor 5.

5 / 5

Workflow Clarity

Steps 1-6 are clearly sequenced (install, measure, decompose, assert, find blocking tasks, correlate field data) with assertions as checkpoints and a diagnostic chain from over-budget INP to component decomposition to long-task identification. It falls short of anchor 5 because Step 4's example asserts a single sample's max while the skill's own Anti-patterns table flags "Assert single sample" as a failure mode prescribing P75 over N runs - an internal inconsistency and a missing explicit recovery step.

4 / 5

Progressive Disclosure

No bundle files exist, so the single-file organization is appropriate: scannable sections (When to use, numbered steps, Anti-patterns, Limitations, References) with every external reference clearly listed one level deep and annotated (e.g. "[MDN LoAF] - Long Animation Frames API (richer, not yet Baseline)"). Well-organized and easy to navigate - anchor 5.

5 / 5

Total

18

/

20

Passed

Description

100%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An excellent description: three concrete, tool-specific capabilities, an explicit and natural "Use when" trigger clause covering both debugging and CI-gating scenarios, and explicit boundary scoping against neighboring skills. Third-person voice throughout, with no fluff or over-claims.

DimensionReasoningScore

Specificity

Lists multiple concrete actions with named tooling: "decomposes input delay, processing duration, and presentation delay via the web-vitals/attribution build", "asserts per-interaction INP budgets in Playwright using PerformanceObserver plus the web-vitals visibilitychange flush", and "identifies long tasks blocking the main thread". This matches the score-5 anchor (multiple specific concrete actions, comprehensive coverage); it is not a 4 because coverage within the INP-testing niche is complete rather than having minor gaps.

5 / 5

Completeness

Explicitly answers both: what (decompose/assert/identify actions) and when ("Use when a page feels unresponsive while LCP and CLS are green, or to gate key interactions (form submit, modal open, route change) under an INP budget in CI"). Anchor 5 with concrete trigger phrases; not a 4 because the when-clause is fully explicit.

5 / 5

Trigger Term Quality

Includes both the abbreviation and full synonym ("INP (Interaction to Next Paint)"), natural user phrasing ("page feels unresponsive while LCP and CLS are green"), and concrete interaction names ("form submit, modal open, route change") plus "INP budget in CI". Comprehensive natural-term coverage for the domain; not a 4 because no common variations are missing.

5 / 5

Distinctiveness Conflict Risk

Has a clear niche (interaction responsiveness) and explicitly scopes away the two nearest skills: "Covers interactions only - for page-load Web Vitals gating use lighthouse-perf; for service-worker cache-strategy latency use the qa-pwa plugin's service-worker skills". Clear niche with distinct triggers; minimal conflict risk.

5 / 5

Total

20

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Reviewed

Table of Contents