Releases: agiwhitelist/auteur
Release list
1.3.1 — a state is not a variant
PROOF, the system-register showcase, failed its own gate: 5 button variants against a budget of 4, 5 links against 4. The two "extra" variants turned out to be a disabled secondary button and a run link inverted inside a late row — both required by the state matrix system.md makes compulsory.
So the gate was charging a product for implementing states correctly. A system with no disabled state at all scored better than one that had them; the gate was pushing against its own doctrine.
systemscan now reads [disabled] / aria-disabled, aria-current / aria-selected, and any control inside an element carrying a non-default data-state — counts them as states, prints them per kind in the report, and keeps them out of the variant budget. A fifth button painted by hand with no such hook is still drift, and still fails.
On the published PROOF build: link 5 → 3, button 5 → 4, toggle 3 → 2, exit 0, with current ×5 · in-running ×8 · in-late ×3 · in-queued ×6 · in-done ×13 and two disabled instances now listed as states rather than as drift.
Give your states real hooks (data-state, aria-*) and the gate reads them as states. That is also just better markup than a bespoke class.
1.3.0 — measure honestly, break your own habits
Three gaps closed, all the same kind: the skill could not see its own defaults.
Perf numbers were flattering by construction
motionqa measured at DPR 1, where a fullscreen pass costs a quarter of what it costs on the retina laptop this kind of page is judged on. It now renders 1440×900 @2x (5.2MP) and prints the pixel count in the line you quote into a QA sheet. It also flags a dev server, whose frames cost roughly double a production build's.
Measured honestly, and reported as measured: on scenes with no fullscreen pass the two DPRs are identical (53→54, 53→53, 54→54). That is the point — the number stays true the day a bloom lands. The bigger lie is headless: the same three sites read 6 / 20 / 20 fps headless against 53 / 53 / 54 headed.
A gate for the colour nobody was watching
New scripts/chromadiff.mjs measures mean OKLCH chroma against the reference that set the direction, and lightness against the number the commit-sheet committed to. It fails upward only — quieter than your reference is a choice, louder is the reflex.
node scripts/chromadiff.mjs shots/bp1440-full.png design/refs/reference.png
node scripts/chromadiff.mjs shots/bp1440-full.png --target-l 0.55The skill had a signature it could not see
Across nine showcase sites sharing no brief, no client and no palette: eight were dark, three within 0.002 of the same mean lightness, the same mono face chosen twice independently, amber three times, the same logo/status/action header in seven of nine. None of those is a mistake; together they are a signature, and a signature is what the client did not order.
taste.md §2.5 now names those seven house tells with what to do instead, and commit-sheet field 7 requires breaking two of them — in writing, before the build.
From a real post-mortem
Fullscreen-pass costs in milliseconds and the ablation method for finding them, one function owning each shared quantity, the gitignored-assets 404, the anisotropy and tiling checks behind "4K texture still looks soft", the figure/ground rule, the reference diff with its ranked-fix phrasing, the absurd-value probe, and a Rejected table in DESIGN.md so the next session cannot quietly restore the obvious answer that was already ruled out.
A tenth site, built by another model
HORO is the portability test. Kimi K3 was handed SKILL.md and a watchmaker's brief, saw none of the other nine, and shipped lit, serif and green in a category whose every reflex is black and gold — naming the four house tells it would break before it built.
Gates on the shipped page: slopscan 0/0/0 · 53fps at DPR 2 with a 0ms scroll long-task · worst text contrast 6.50 · measured lightness 0.740 against its own committed 0.72. Layout repairs are ours; the taste is its own.
Install: npx skills add agiwhitelist/auteur — or clone the repo, the skill is one SKILL.md.
auteur 1.2.0 — the system register
auteur 1.2.0 — the system register
Three registers now: build (one surface), direct (a film), system (a product).
system introduces the gate a page-shaped pipeline cannot have. systemscan
crawls every route, reads what the browser actually painted, fails a control
kind over its declared per-kind budget or any control with no visible focus
state, and renders one tile per variant so drift is visible as well as counted.
Two new showcases: PROOF (five screens of a bakery production floor, the
register proving itself) and TRUE NOON (a year of real sun positions computed
live for the viewer's latitude, 145KB, zero raster assets).
All ten shipped pages: 0 fails, 0 warns.
auteur 1.1.0
auteur 1.1.0 — recon and licence-clean asset sourcing
refscout fingerprints live award-level sites by what they actually loaded.
moodboard turns three image sources into one numbered contact sheet.
source.mjs fetches what generation cannot make — CC0 meshes, HDRIs, PBR
materials, icons, fonts, CC images, stock video — with a licence ledger.
HALE, the seventh showcase, is the first page that needed them: a real CC0
microscope mesh under a real CC0 HDRI, coming apart on scroll into eight
named parts. 2.19MB, slopscan 0/0/0, no generation, no third-party origins.
Both features and both Opus test runs' findings are folded in. No API keys
and no logins anywhere.