Leer-niveau = toets-niveau, en het nul-geval van de vormcontrole gedicht (CORE.NORM.03) - #1
Merged
Merged
Conversation
…e elke blokkerende regel
Gemeten: een requirement-zin in puur beschrijvend proza ("Het dashboard
ondersteunt meerdere valuta") kreeg op niveau 2 nul errors. Drie schakels
lieten hem samen door: CORE.NORM.02 telt alleen het geval MÉÉR dan een
sleutelwoord en mist het nulgeval; CORE.SHAPE.01 kijkt via onlyUnitsMatching
alleen naar zinnen die al een verplichtings- of vermogenswoord dragen; en de
'missing-normative'-modus die het regelschema daarvoor definieert, werd door
geen enkele regel gebruikt. Een eisendocument in beschrijvend proza kreeg dus
groen — precies de zin die een poort niet kán zien, want er valt niets goed
te keuren en niets af te wijzen. CORE.SHAPE.01 noemde dit gat zelf al in zijn
rationale, met de belofte het in v0.2 te dichten. Dit is die dichting.
De nieuwe regel: niveau 2, error, deterministisch, scope requirement +
acceptance-criterion, machine.kind keyword-case met report=missing-normative.
Drie ontwerpkeuzes, expliciet:
1. Sleutelwoorden tellen in ELKE schrijfwijze, en vermogenswoorden (kan,
kunnen, can) tellen mee. Het kleine-lettergeval is en blijft van
CORE.NORM.01 (en op eis-scope van CORE.SHAPE.01); twee meldingen voor
hetzelfde defect leren een schrijver niets extra's. De KAN-vorm — het
acceptatiecriterium zonder hoofdlettersleutelwoord — blijft zo geldig.
De twee report-modi verdelen daarmee de faalruimte zonder overlap.
2. De toets oordeelt per BLOK, niet per zin (keyword-case kent daarvoor nu
unit: "block", net als pattern). Een toelichting of bewijszin direct
achter de eis hoort bij die eis en is geen eigen overtreding — per zin
toetsen zou elke correct geannoteerde eis rood kleuren.
3. VRIJE-VORM ontslaat een eis van de zes vormen, NIET van deze regel. De
klep blijft dus precies zo smal als hij was (CORE.SHAPE.01 en
CORE.SAFE.01); ook een vrije-vormeis draagt een sleutelwoord, anders kan
geen poort hem als eis lezen. Een test bewaakt die grens.
Regelpakket naar 0.2.0 (nieuwe active error-regel op een bestaand niveau =
major, zie spec deel 5). Conformance: 238 → 248 controles, 0 fouten. Het
schone voorbeelddocument bleek zelf een keyword-loos acceptatiecriterium te
bevatten — de regel ving hem meteen; herschreven, en "Het portaal werkt."
in de README stond fout toegeschreven aan CORE.SHAPE.01, dat AC-scope niet
eens dekt. Voor-document: 16 → 20 errors, alle vier echte treffers.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…eau 2 toetst
De ingecheckte prompt-artefacten waren de niveau-1-render. Daardoor kende een
agent die ermee schrijft de zes KLAAR-vormen niet en de VRIJE-VORM-klep niet —
terwijl de enige harde consument (de plan-callback van het platform) op
niveau 2 lint, waar CORE.SHAPE.01 als error blokkeert. Leer-niveau en
toets-niveau waren dus verschillende standaarden: een agent werd afgerekend
op vormen die zijn instructie nooit heeft genoemd.
De artefacten renderen nu op niveau 2. Dat brengt drie dingen mee die het
verschil maken tussen kennen en gokken:
- De zes vormen, als sjabloon-tabel — vorm-categorieën, geen woordenlijsten.
- De VRIJE-VORM-klep MET zijn grens: "werkt alleen voor CORE.SHAPE.01 — de
andere regels blijven gelden." Zonder die grens strooien agents de
markering als algemene demper. (CORE.SAFE.01 heeft de klep ook, maar valt
buiten de scopes van dit artefact en wordt hier dus eerlijk niet genoemd —
render alleen wat wordt afgedwongen.)
- De niveau-2-blokkers (BOUND, SHAPE) in de Altijd-lijst.
Het woordbudget is de prijs, en die is hardop betaald. De kale niveau-2-render
stond op 462 (nl) / 539 (en) woorden. Categorisch gesnoeid in wat nooit
blokkeert: vier lexicon-voorbeelden per woordklasse in plaats van zeven, drie
adviesregels uitgeschreven in plaats van zes (de rest blijft geteld en
genoemd), en CORE.NORM.03 wordt niet apart onderwezen omdat CORE.NORM.02's
statement ("precies een normatief sleutelwoord") het nulgeval al draagt.
Resultaat: 357 (nl) / 421 (en), budget in de test van 300 naar 450 — het
plafond dat het plan toestaat — met de afweging in de test zelf. De CI-stap
rendert nu óók met --level 2 --max-words 450, zodat een overschrijding daar
faalt in plaats van stil uit te leveren.
Meting (wc -w): nl 219 → 370, en 269 → 431.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Het regelpakket ging naar 0.2.0 (nieuwe active error-regel CORE.NORM.03) en het npm-pakket levert dat pakket mee in files. Bovendien veranderde het gereedschap zelf: de missing-normative-modus van keyword-case is nu echt geïmplementeerd met blok-granulariteit. Een publish onder 0.1.0 zou een andere regelset onder hetzelfde nummer zijn. Co-Authored-By: Claude Fable 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.
What changes
Twee bevestigde review-bevindingen, samen één thema: het verschil tussen wat een agent leert en waar hij op wordt afgerekend.
A — de schrijfwijzer leerde niveau 1, de poort toetst niveau 2. De ingecheckte
prompt/klaar-prompt.{nl,en}.mdwaren de niveau-1-render en bevatten dus noch de zes KLAAR-vormen, noch de VRIJE-VORM-klep met zijn grens — terwijl de enige harde consument (de plan-callback van het platform) op niveau 2 lint, waarCORE.SHAPE.01als error blokkeert. De artefacten renderen nu op niveau 2: sjabloon-tabel van de zes vormen (vorm-categorieën, geen woordenlijsten), de klep mét grens ("werkt alleen voor CORE.SHAPE.01 — de andere regels blijven gelden"), en de niveau-2-blokkers in de Altijd-lijst.CORE.SAFE.01heeft de klep ook, maar valt buiten de scopes van dit artefact en wordt er dus eerlijk niet in genoemd — render alleen wat wordt afgedwongen.B — een eis zonder enig normatief sleutelwoord passeerde alle blokkerende regels. Nieuwe regel
CORE.NORM.03(niveau 2, error, deterministisch, scoperequirement+acceptance-criterion):machine.kind: keyword-casemet de al in het schema gedefinieerde maar tot nu toe door geen enkele regel gebruikte modusreport: missing-normative, plus een nieuwunit: "block"(analoog aanpattern). Regelpakket 0.1.0 → 0.2.0 (nieuwe active error-regel = major, spec deel 5) — precies de v0.2-belofte die de rationale vanCORE.SHAPE.01zelf al deed.Why
A. Een agent die de instructie leest, leert een andere standaard dan die waarop zijn werk wordt getoetst. Elke vorm-fout is dan geen schrijffout maar een onderwijsfout.
B. Gemeten op main: een requirement-scope-zin in puur beschrijvend proza ("Het dashboard ondersteunt meerdere valuta.") krijgt op niveau 2 nul errors. Drie schakels lieten hem samen door:
CORE.NORM.02telt alleen het geval >max en mist het nul-geval;CORE.SHAPE.01slaat sleutelwoordloze zinnen over viaonlyUnitsMatching; enmissing-normativewas dode schema-ruimte. Een eisendocument in beschrijvend proza kreeg dus groen — precies de zin die een poort niet kán zien, want er valt niets goed te keuren en niets af te wijzen.Drie ontwerpkeuzes tegen valse positieven, elk met een test:
CORE.NORM.01/CORE.SHAPE.01— geen dubbele melding voor hetzelfde defect, en de KAN-vorm (acceptatiecriterium zonder hoofdlettersleutelwoord) blijft geldig. De twee report-modi verdelen de faalruimte nu zonder overlap.CORE.SHAPE.01enCORE.SAFE.01); een test bewaakt die grens.Evidence
Metingen woordbudget (plan-eis ≤450; interne testgrens 300 → 450 met motivatie in de test zelf):
wc -w)wc -w)countPromptWords)prompt/klaar-prompt.nl.mdprompt/klaar-prompt.en.mdKale niveau-2-render vóór snoeien: 462 (nl) / 539 (en). Categorisch gesnoeid in wat nooit blokkeert: 4 i.p.v. 7 lexicon-voorbeelden per woordklasse, 3 i.p.v. 6 uitgeschreven adviesregels (rest geteld en genoemd), en
CORE.NORM.03wordt niet apart onderwezen omdatCORE.NORM.02's statement ("precies een normatief sleutelwoord") het nul-geval al draagt. De CI-stap rendert nu met--level 2 --max-words 450, zodat een overschrijding daar faalt.Testgevallen die het nul-geval dekken (
tools/klaar/test/missing-normative.test.js, 7 tests):CORE.NORM.03(bewijst het gat én dat alleen de nieuwe regel het dekt);CORE.SHAPE.01);CORE.SHAPE.01maar niet het nul-geval; mét (klein geschreven) sleutelwoord is het vrije-vormblok schoon;Echte tekst: het eigen schone voorbeelddocument
examples/offerte-fase-1b.na.mdbleek een keyword-loos ALS/DAN-acceptatiecriterium te bevatten — de regel ving hem bij de eerste run (herschreven met MOET). Enexamples/README.mdschreef "Het portaal werkt." toe aanCORE.SHAPE.01, dat AC-scope niet eens dekt; nu correctCORE.NORM.03. Voor-document: 16 → 20 errors, alle vier echte treffers (o.a. "De offerte-PDF wordt gegenereerd…", "Het portaal werkt.").Totaalstanden: conformance 238 → 248 controles, 0 fouten; unit-tests 30 → 37, alle groen;
klaar check31 regels in orde;lint:self0 errors. Spec-tellingen (deel 0/1/4/5) bijgewerkt,CORE.SHAPE.01-rationale verwijst nu naar de dichting i.p.v. de belofte.Checks
node tools/klaar/bin/klaar.js checkpassesnode tools/klaar/bin/klaar.js conformancepassescd tools/klaar && node --test test/passesClean-room declaration
Required for every pull request. See CLEANROOM.md.
sourcefrom the allowlist in CLEANROOM.md. (geen lexicon-termen toegevoegd)🤖 Generated with Claude Code