Repository navigation
Zet CI op met een statische controle op de projectregels - #2
Merged
Merged
Conversation
De testsuite bewaakt gedrag; dit bewaakt de afspraken die je daar niet mee vangt. Daarmee worden de harde regels uit CLAUDE.md — en dus de beloftes in SECURITY.md — machinaal afgedwongen in plaats van op discipline te drijven: - geen npm-dependencies (de extensie moet zonder build-stap laadbaar blijven) - nergens chrome.storage.sync - geen andere uitgaande aanroepen dan de twee same-origin fetches achter "Historie ophalen", met een expliciete allowlist zodat uitbreiden een zichtbare diff-wijziging vereist - geen extra host_permissions, permissies of content-script matches - geen hardgecodeerde kleuren buiten het :root-blok van ui.css - versie gelijk in manifest.json en package.json, en aanwezig in de changelog - iconen die pixel-voor-pixel overeenkomen met hun generator Iconen worden bewust op pixels vergeleken en niet op bytes: zlib comprimeert per platform anders, waardoor dezelfde tekening op Linux een andere PNG oplevert dan op macOS. Een bytevergelijking faalde daardoor meteen in CI terwijl er niets mis was. make-icons.js exporteert nu draw() en schrijft bij require() niets naar schijf, zodat de controle de werkmap niet muteert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Wat
CI die bij elke PR draait, plus
tools/check.js: een statische controle op de projectregels uit CLAUDE.md.Waarom
De testsuite bewaakt gedrag. De harde regels in CLAUDE.md — geen dependencies, geen extra uitgaande aanroepen, geen
storage.sync— drijven nu op discipline, terwijl SECURITY.md ze wel als belofte aan gebruikers presenteert. Die belofte hoort machinaal afgedwongen te zijn, niet met de hand bewaakt.Wat
tools/check.jscontroleertHarde regels
chrome.storage.synchost_permissions, permissies of content-script matches:root-blok vanui.css, zodat een wijziging niet stilzwijgend maar één thema ondersteuntStructuur
util.jseerst,interceptor.jslaatst)manifest.jsonenpackage.json, en aanwezig in de CHANGELOGWat CI draait
check+ testsuite op Node 20, 22 en 24, daarna fixture en previews bouwen.Geen
npm ci— dit project heeft geen dependencies en geen lockfile, dus dat zou falen. Workflow-permissies staan opcontents: read.De eerste CI-run faalde, en dat was terecht
De oorspronkelijke icoon-controle vergeleek bytes: regenereren en
git diff --exit-code. Dat faalde meteen op alle drie de Node-versies — de op Linux gegenereerde PNG's waren 283/519/700/1851 bytes tegen 282/510/693/1837 op macOS. Identiek over alle Node-versies heen, dus geen Node-verschil maar zlib die per platform anders comprimeert. De pixels waren gelijk; alleen de DEFLATE-encoding week af.De controle toetste dus het verkeerde. Byte-gelijkheid is geen garantie die zlib geeft, en ook niet wat we willen bewaken — wat telt is dat de vastgelegde iconen overeenkomen met wat de generator tekent.
check.jsdecodeert nu beide PNG's (inclusief alle vijf de scanline-filters) en vergelijkt de RGBA-buffers.make-icons.jsexporteert daarvoordraw(); bijrequire()schrijft het niets meer naar schijf, dus de controle muteert de werkmap niet en de aparte CI-stap kon vervallen.Hoe getest
npm testgroen (23 controles + 108 checks)1 bytes afwijkendcheck.jsfaalt aantoonbaar op een echte overtreding: vóór de rebase ontbrak deUnreleased-kop en sloeg de controle terecht aanVersie
Checklist
## [Unreleased]in CHANGELOG.mdNa de merge
De status checks hebben nu gedraaid, dus GitHub laat ze als verplicht instellen. Zeg het als je wilt dat ik
Node 20/Node 22/Node 24toevoeg onderrequired_status_checks, zodat een PR pas te mergen is als de tests groen zijn.🤖 Generated with Claude Code