From 870018a121ab50c79a90e57c2add489659b80384 Mon Sep 17 00:00:00 2001 From: Paul Bakaus Date: Thu, 28 May 2026 17:16:34 -0700 Subject: [PATCH] site: back the jsdom-free detector claim with a real benchmark (~20x) Benchmarked impeccable@2.1.9 (last jsdom-based release) against the current static engine on an identical 160-file HTML corpus, same Node runtime, 3 runs: 6.8s -> 0.34s median, ~20x faster (~43ms/file -> ~2ms/file). Replaces the single-engine throughput figure with the before/after. Co-Authored-By: Claude Opus 4.8 (1M context) --- site/pages/changelog.astro | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/site/pages/changelog.astro b/site/pages/changelog.astro index 090bfd17f..e7496a2e8 100644 --- a/site/pages/changelog.astro +++ b/site/pages/changelog.astro @@ -64,7 +64,7 @@ import '../styles/changelog-faq-kinpaku.css';
  • Live Mode is Beta. Out of alpha. Pick an element in your running app, steer it in plain language (now with voice input), and accept the variant back to source. Insert mode scaffolds new elements; recovery survives HMR, hidden heroes, and dev-tool overlays. An experimental streaming poll mode cuts pickup from seconds to sub-second.
  • /impeccable teach is now /impeccable init. Renamed to match what it does: one command to set up a project. From a single codebase scan it writes PRODUCT.md, offers a DESIGN.md, configures Live Mode so it just works the first time you run it, then points you at the best command to start with. The old name still works as an alias.
  • A bare /impeccable recommends your next move. Run it with no command and, instead of a static menu, it reads the project, your dirty git tree, and your latest critique, then leads with the two or three highest-value commands and why (no DESIGN.md yet, run document; unresolved findings in the files you're editing, run polish). It always asks before running anything, and the full menu is still right below.
  • -
  • A faster detector with no jsdom. The HTML/CSS engine was rebuilt from the ground up on htmlparser2 and a real CSS cascade resolver, replacing jsdom. It analyzes an HTML file in about 4 ms and clears the full 71-file detection corpus in under 200 ms, with none of the jsdom slowdowns that made large HTML scans crawl. Dependency-free and small enough to bundle straight into the skill and run inline, not just in the CLI and the extension.
  • +
  • A faster detector with no jsdom. The HTML/CSS engine was rebuilt from the ground up on htmlparser2 and a real CSS cascade resolver, replacing jsdom. On the same 160-file HTML corpus it runs about 20x faster under Node: 0.34s where the old jsdom engine took 6.8s, roughly 2 ms per file instead of 43 ms. Dependency-free and small enough to bundle straight into the skill and run inline, not just in the CLI and the extension.
  • Detector: 14 new rules. cream-palette, em-dash-overuse, marketing-buzzword, numbered-section-markers, aphoristic-cadence, theater-slop-phrase, oversized-h1, extreme-negative-tracking, gpt-thin-border-wide-shadow, repeating-stripes-gradient, image-hover-transform, broken-image, text-overflow, and clipped-overflow-container. 41 deterministic rules total, one canonical registry feeding the CLI, the browser extension, critique, and the evals.
  • The skill keeps itself current. On the first session of the day, Impeccable quietly checks whether a newer version shipped. If one has, it offers to run npx impeccable skills update for you. It always asks first, never nags about a version you declined, and never interrupts the task you're on. Set IMPECCABLE_NO_UPDATE_CHECK=1 to turn it off.
  • Codex gets its asset-producer subagent automatically. Codex reads custom subagents from .codex/agents/, a directory separate from where it reads skills, so installers used to leave the agent behind. Now the skill bundles the agent, notices on boot when a Codex project is missing it, and offers to copy it into place. Fixes the gap reported in #161.
  • @@ -82,7 +82,7 @@ import '../styles/changelog-faq-kinpaku.css';
    CLI v2.2.0May 28, 2026
      -
    • Static engine, no jsdom. Detection was rebuilt on htmlparser2 and a real CSS cascade resolver, replacing jsdom. Dependency-free, far faster on large scans, and small enough to bundle, with no change to the rules themselves.
    • +
    • Static engine, no jsdom. Detection was rebuilt on htmlparser2 and a real CSS cascade resolver, replacing jsdom. About 20x faster on large HTML scans (a 160-file corpus drops from 6.8s to 0.34s under Node), dependency-free, and small enough to bundle, with no change to the rules themselves.
    • 14 new detection rules. cream-palette (warm off-white "claude beige" backgrounds, including Tailwind warm-light utilities), em-dash-overuse, marketing-buzzword, numbered-section-markers, aphoristic-cadence, theater-slop-phrase, oversized-h1, extreme-negative-tracking, gpt-thin-border-wide-shadow, repeating-stripes-gradient, image-hover-transform, broken-image, text-overflow, and clipped-overflow-container. 41 deterministic rules total.
    • everything-centered removed. Dropped from the registry, the regex analyzer, and the layout checks: the rule caught too many legitimately centered layouts to earn its place.
    • One canonical registry. Eval-side detection logic folded back into the shared engine, so the CLI, the browser extension, the critique skill, and the evals all run the exact same checks.