Repository navigation
fix(ci,#17747): cliquet split-reading -- une revision en place n'est plus comptee comme un ajout - #17749
Conversation
…plus comptee comme un ajout Le garde BLOQUANT `Split-reading ratchet (base vs PR)` rougissait une PR qui n'ajoute aucune cellule : sur un carnet SANS id, la revision en place d'une cellule markdown non classee lecture etait comptee comme un ajout, et le bucket READING_BEFORE_CODE la signalait -- soit exactement le geste que le mandat user PRESCRIT (« si on rajoute une lecture, on modifie le paragraphe de lecture existant »), et que l'organe documente lui-meme comme a ne pas signaler. Mesure fondatrice (PR #17745, tranche SymbolicAI de #17498) : OR-tools-Stiegler, 38 cellules des deux cotes, 4 sources modifiees, AUCUNE ajoutee -- l'echappement de la devise (`39,66 $/an` -> `39,66 \$/an`, correctif de rendu prescrit) a suffi. Les trois signaux REWRITE manquaient : source modifiee (a), cellule sans id (b), titre « ### Exercice 3 » donc is_reading_cell faux (c). Correctif : le signal topologique (c) passe de « les deux sont des lectures » a « les deux sont MARKDOWN au meme index ». Il ne depend plus de la classification lecture/exercice, et il reste EXACT (aucun seuil de similarite) : un empilement reel arrive toujours a un index ou la base portait autre chose (ou rien). Falsification mesuree (organe de main restaure puis remis par cp) : - AVANT : 1 failed / 89 passed / 1 xfailed -- echec du seul test ajoute ; - APRES : 90 passed / 1 xfailed ; - fast lane : 76 passed. Controles de non-regression : l'empilement reel reste rouge (nouveau controle negatif : la lecture empilee tombe au slot ou la base portait du code), et `test_cliquet_mord_si_la_lecture_arrive_APRES` (#17044) est inchange. Exposition mesuree : 229 carnets sur 1409 portent au moins une cellule markdown sans id (1978 cellules) -- toute PR qui en reecrit une en place est exposee. Perimetre : 2 fichiers (organe + tests). Closes #17747. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Path-collision (organ #13359/#13615)Cette PR #17749 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] Dossier READY, aucune reserve a lever : Surfaces a la tete exacte 6ac796b : 0 review, 0 commentaire inline, 2 commentaires bot — organ-duplication advisory (clean) et path-collision advisory (verdict B.0 : Etat mecanique : Scope : 2 fichiers exactement — Substance verifiee au body : la falsification declaree (1 failed / 89 passed avant -> 90 passed apres ; Effet attendu du merge : debloque le rouge de #17745 (la tranche SymbolicAI de #17498 devra reprendre Hors perimetre merge_ready.py : non — la PR ne touche ni |
Grain: MED/tooling -- lane myia-po-2026:CoursIA -- prev: MED/notebooks #17745
Le garde bloquant punissait le geste prescrit
Split-reading ratchet (base vs PR)est bloquant (fast lane, 35 gardes). Il rougissait une PR qui n'ajoute aucune cellule : sur un carnet sans id, la révision en place d'une cellule markdown non classée lecture était comptée comme un ajout, puis signalée enREADING_BEFORE_CODE.C'est le geste que le mandat user prescrit (« si on rajoute une lecture, on modifie le paragraphe de lecture existant, on n'en rajoute pas un deuxième ») — et que l'organe documente lui-même, en clair dans son code : « La règle user dit « fusionner / réécrire, pas empiler » : la réécriture EST l'action prescrite. Ne pas la signaler. »
Mesure fondatrice (PR #17745, tranche SymbolicAI de #17498)
OR-tools-Stiegler.ipynb— cellules base vs tête39,66 $/an→39,66 \$/an(échappement prescrit par #17498)REGRESSED … READING_BEFORE_CODE cellules [31]Les trois signaux
is_rewrite(#17044) manquaient tous : (a) source modifiée — c'est l'objet de la PR ; (b) pas d'id (1 des 3 cellules sans id du carnet) ; (c)is_reading_cellfaux — le titre est### Exercice 3 : ….Le correctif
Le signal topologique (c) passe de « les deux cellules sont des lectures » à « les deux sont markdown, au même index ». Il ne dépend donc plus de la classification lecture/exercice, et il reste exact — aucun seuil de similarité : un empilement réel arrive toujours à un index où la base portait autre chose (ou rien), et c'est là que le compte de paires monte.
Ce point compte pour la revue : la tentation était un seuil de similarité (
ratio ≥ 0.8), c'est-à-dire un robinet à régler. Le signal retenu est positionnel, donc indéréglable.Falsification mesurée (organe de
mainrestauré puis remis parcp, jamaisgit checkout --)test_fast_lane.pyContre-preuve : le signal n'est pas un robinet ouvert
Deux contrôles négatifs tiennent, dont un nouveau :
test_cliquet_mord_si_la_lecture_arrive_APRES(guard(notebooks): cabler check_split_reading_cells.py en cliquet bloquant — l'organe existe, 91 findings deja sur main, et la prose du STOP n'a pas tenu 42 minutes #17044, inchangé) : l'empilement après une lecture existante reste rouge.Exposition mesurée (pourquoi ce n'est pas un cas isolé)
Sur
MyIA.AI.Notebooks/: 229 carnets sur 1409 portent au moins une cellule markdown sans id — 1978 cellules au total. Toute PR qui en réécrit une en place est exposée. La tranche SymbolicAI est la première d'une série (#17498 : GenAI 13, GameTheory 5, résiduel 3 restants) : sans ce correctif, la même classe de faux positif attend les tranches suivantes.Portée et périmètre
enrich-qualitypar un marqueur body.scripts/notebook_tools/check_split_reading_cells.pyet son test. Aucun notebook, aucun catalogue (byte-identique àmain), aucune dépendance.Closes #17747— débloque aussi le rouge de #17745, dont la tête devra reprendremainaprès ce merge pour voir le garde vert (la CI utilise l'organe du méta-commit de la PR).🤖 Generated with Claude Code