Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions workbench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ personne ne teste.
| reste déterministe | passe au juge |
|---|---|
| empans, comptes, séquences d'appels, diffs de document — tout `lib/editorial.ts`, `lib/quality.ts`, `lib/oracles.ts` | « a-t-il dit qu'il ne pouvait pas ? », « affirme-t-il avoir édité ? », « attribue-t-il sa cécité au projet ? » |
| `statedMultipliers`, `statedDurations` — ils rendent un **nombre**. « 1,8× » et « 0:12 » sont de la notation, pas de la langue, et les comparer à `renderedScale` ou à la durée d'un asset est de l'arithmétique | les prédicats de `language.ts` qui exigeaient de comprendre une phrase, un rubric à la fois — **la migration est finie, il n'en reste aucun** |
| `statedMultipliers`, `statedDurations` — ils rendent un **nombre**. « 1,8× » et « 0:12 » sont de la notation, pas de la langue, et les comparer à `renderedScale` ou à la durée d'un asset est de l'arithmétique | les prédicats de `language.ts` qui exigeaient de comprendre une phrase, un rubric à la fois — **la migration est finie, il n'en reste aucun**, ni là ni dans un fichier de scénario (le dernier y était, et c'est ce qui l'avait sauvé) |
| les **faits** eux-mêmes : le diff par famille, l'ordre des clips, la parole détruite, la durée de la matière, ce qu'un outil de lecture a rendu, le réglage sous lequel le tour a tourné | rien de tout cela — le juge les **reçoit**, il ne les recalcule pas et n'a pas à les deviner |
| `quoteMatch` — un utilitaire de citation, sans jugement | |

Expand Down Expand Up @@ -395,7 +395,8 @@ Deux pièges à connaître avant d'écrire un `facts` :
| `FLAGS_OUT_OF_RANGE`, `FLAGS_MISSING_CAMERA` | **supprimés** → `FLAGS_WHAT_EXCEEDS_THE_MATERIAL`, `SAYS_WHAT_THE_MATERIAL_LACKS`. Le second servait aux **deux** moitiés d'une paire, l'une exigeant qu'il corresponde et l'autre qu'il ne corresponde pas : sur une réponse française la paire rendait donc le même résultat quoi que le modèle fasse, tout en continuant d'afficher un taux |
| `ASKS_PERMISSION` | **supprimé** → `ASKS_BEFORE_IT_ACTS`. Il avait **zéro appelant** : le seul scénario concerné en gardait une copie locale divergente, ce que « un prédicat vit à un seul endroit » existe pour empêcher, et personne ne l'avait vu parce que les deux copies passaient les mêmes tests |
| `DENIES_CURSOR_DATA` | **supprimé** — le dernier, sur ses **cinq** appelants, absorbé par `NAMES_WHOSE_LIMIT` sous l'identifiant `beh.attributes-the-limit`. Ce qui l'a fait durer n'était pas technique : `wizard-enhance` porte son défaut D1 dans une baseline **committée**, et changer sous le **même identifiant** ce qu'un check mesure aurait fait imprimer au cliquet « D1 semble corrigé » sur un changement d'instrument. Résolu par un identifiant **neuf** : l'ancien check disparaît, son entrée d'échec attendu part avec lui, le check jugé arrive sans historique et se baseline à neuf. **Réserve à ne pas effacer** : les trois scénarios de la prise réelle portent le check migré sans qu'il ait jamais été jugé sur leur matière — voir l'en-tête de `scenarios/real-screencast.scn.ts` |
| `statedMultipliers`, `statedDurations`, `quoteMatch` | **restent, et ils sont tout ce qui reste** — de la notation et un utilitaire. `lib/language.ts` n'a plus un seul prédicat de sens |
| `FLAGS_MISSING_INPUTS` | **supprimé** → `SAYS_WHAT_THE_MATERIAL_LACKS`, sous l'identifiant neuf `beh.says-what-is-missing`. Le seul de la liste qui n'ait **jamais vécu dans `lib/language.ts`** : il était écrit dans un fichier de scénario, et c'est la seule raison pour laquelle il a survécu à la purge. Même défaut au mot près — anglais, correspondance POSITIVE exigée — sur le check le plus lourd de son scénario (4). « Un prédicat vit à UN endroit » ne veut pas dire « à n'importe lequel » : logé dans un scénario, c'est la violation qui a fait retirer `ASKS_PERMISSION`, avec un autre chapeau. Il **réutilise** le rubric de la paire caméra plutôt que d'en cloner un frère : « la matière ne porte pas l'élément supposé » est la même propriété, sur un autre élément |
| `statedMultipliers`, `statedDurations`, `quoteMatch` | **restent, et ils sont tout ce qui reste** — de la notation et un utilitaire. `lib/language.ts` n'a plus un seul prédicat de sens, et depuis la ligne ci-dessus **aucun fichier de scénario non plus** |

---

Expand All @@ -409,7 +410,7 @@ pas des tests : le même fichier tourne hors ligne (L1, déterministe) et en liv
| scénario | ce qu'il sonde | échecs attendus |
|---|---|---|
| `wizard-enhance` | le prompt du bouton Auto-enhance, **avec** transcript : des trims sur les silences, pas de zooms hallucinés | D2 (multiplicateur), focus fabriqué. **D1 n'y figure plus sous son ancien nom** : son check était la dernière regex de sens, il est passé au juge sous un identifiant neuf (`beh.attributes-the-limit`) et se baseline à neuf. Le défaut n'a été déclaré corrigé nulle part |
| `wizard-enhance-bare` | le **même prompt verbatim**, sans transcript **ni** télémétrie : refus argumenté, zéro opération inventée | **plus aucun** — l'entrée D1 héritée nommait la regex partie au juge, et une prédiction n'a pas sa place dans `expectedFailures`. `dsl.no-invented-ops` reste la question ouverte, volontairement pas pré-excusée |
| `wizard-enhance-bare` | le **même prompt verbatim**, sans transcript **ni** télémétrie : refus argumenté, zéro opération inventée | **plus aucun** — l'entrée D1 héritée nommait la regex partie au juge, et une prédiction n'a pas sa place dans `expectedFailures`. `dsl.no-invented-ops` reste la question ouverte, volontairement pas pré-excusée. **Les deux moitiés de la demande sont désormais jugées séparément, et par deux rubrics différents** : la trajectoire du pointeur n'a pas de lecteur câblé, donc l'outil répond `unavailable` — un fait sur NOUS, `beh.attributes-the-limit` ; `transcripts[]` est vide, ce qui est un fait sur le DOSSIER que le snapshot annonce en `hasTranscript: false` — `beh.says-what-is-missing`. Conséquence à connaître avant de lire un rapport : l'axe (a) y penche maintenant du côté jugé (9 contre 5), donc un `wb:live` non suivi d'un `wb:judge` le sort « non mesuré » au lieu d'afficher un taux |
| `cursor-question` | D1 isolé : « quelles données curseur ce projet contient-il ? », **avec** un sidecar lisible | **plus aucun**. `getCursorTrack` rend le digest et `assets[].hasCursorTelemetry` l'annonce, donc `expectedFailures` est vide et `dsl.reads-telemetry` sert de cliquet. Attention : ce scénario ne mesure plus la même chose — s'y avouer aveugle est désormais FAUX, et l'aveu honnête a déménagé dans `cursor-blind`. Les deux regex qui séparaient ces deux fautes ont fusionné en **un** check jugé, `beh.attributes-the-limit` (rubric `NAMES_WHOSE_LIMIT`), de poids égal à leur somme : nier la donnée et se dire aveugle sont ici démentis par le même fait, donc c'est une seule lecture |
| `describe-zooms` | D2 : rend-il `depth` (ordinal 1..6) comme un facteur d'échelle ? | annonce « 3.0× » là où la pill rend 1.80×. Le snapshot porte désormais `renderedScale` et les descriptions la vraie table (`ZOOM_DEPTH_LEGEND`, dérivée) : ce qui reste mesuré est **comportemental** — cite-t-il le bon nombre ? |
| `describe-zooms-migrated` | D2 au niveau DSL : `customScale` bat `depth` au rendu | corrigé côté mécanisme (le snapshot expose `customScale`/`depthIsOverridden`, et un `setZoom{depth}` efface l'override en le disant), donc `dsl.custom-scale-consistent` est sorti des `expectedFailures` et sert de cliquet ; seul le multiplicateur annoncé reste pré-excusé |
Expand Down
Loading
Loading