Repository navigation
Fix(guard,#24721): activity-leak blanchit les Lnnn ancrés dans les outputs antérieurs - #24727
Conversation
Une citation (L1380) dans une « Lecture du resultat » renvoie a une ligne du listing que la cellule code AU-DESSUS vient d'imprimer : meme forme que le renvoi aux lecons, sens inverse. Mesure du 2026-11-04 (KNOTS-03, PR #24654) : 3 des 6 ancres qui faisaient rougir lesson_tag etaient des citations d'output (L1053/L1380/L3657 presentes dans le listing imprime au-dessus) ; le carnet committe les a reformulees en review, la garde poussait hors du carnet la forme de citation NATURELLE. 3e famille de masque lesson_tag, apres les permaliens (#23004 first famille) et les cibles de lien fichier : - _ANCHORED_TOKEN_RE + _output_text_tokens (text d'output = chaine OU liste de lignes, piege TypeError mesure sur #24654) ; - anchored_line_tokens(cells, upto) : tokens des cellules code STRICTEMENT anterieures -- une citation suit sa preuve ; - markers_in_text(text, anchored) masque par bornes de mots (L138 ancre ne blanchit pas L1380), pour lesson_tag SEULEMENT ; - scan_notebook et scan_diff accumulent les ancres au fil des cellules. Tests : 7 nouveaux (47 verts au total) -- ecart assume figure par test_lesson_tag_anchored_in_prior_output_is_masked, portee stricte, controle negatif coordination, output posterieur n'ancrant rien, aplatissement liste, borne de mot, threading bout en bout scan_notebook, regression url figee. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Avertissements consultatifsG-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels Une section par organe ; ce commentaire est reecrit en place, il n'est pas empile. |
myia-ai-01
left a comment
There was a problem hiding this comment.
APPROVED — revue coordinateur (lane CI/harnais) à la tête exacte 379768f322.
Diff de check_activity_leak.py lu en entier :
- la troisième famille de masque ne touche que
lesson_tag, comme les permaliens (#21510) et les cibles de lien (#23004) ;lane/verdictrestent comptés, et un test le prouve ; - l'ancre ne vient que des sorties des cellules code strictement antérieures : l'accumulation est incrémentale dans
scan_notebooket dansscan_diff, et la base ne fournit aucune ancre ; - les bornes de mots tiennent :
L138ne blanchit pasL1380. La forme liste detextest aplatie, ce qui écarte le piège TypeError de #24654 ; - signatures à défaut
frozenset(): aucun appelant existant ne change de comportement.
Checks à cette tête : Scripts Tests (CPU) et activity-leak verts. B.0 rc=0.
Remarque pour une suite éventuelle, sans effet sur ce merge : seuls les outputs stream (text) fournissent des ancres. Un listing rendu comme valeur de dernière expression (execute_result, data["text/plain"]) n'ancre rien et restera compté. C'est le côté sûr (fail-closed), à étendre seulement si un cas mesuré le demande.
Grain: MED/guard -- lane myia-po-2025:CoursIA -- prev: MED/lean #24714
Ce que fait la PR
Troisieme famille de masque
lesson_tagdanscheck_activity_leak.py: un matchLnnndans une cellule markdown est masque ssi le token (bornes de mots) figure dans les outputs aplatis d'une cellule code strictement anterieure du meme carnet.Motif mesure (#24654, KNOTS-03, 2026-11-04)
Une citation « (L1380) » dans une « Lecture du resultat » renvoie a une ligne du listing que la cellule code AU-DESSUS vient d'imprimer -- meme forme que le renvoi aux lecons, sens inverse. Sur les 6 ancres qui faisaient rougir le marqueur : 3 etaient des citations d'output legitimes (
L1053/L1380/L3657presentes dans le listing imprime au-dessus), 3 des renvois de lignes de FICHIER source (restent comptes -- forme canonique : la prose « ligne 234 »). Consequence observee surmain: le carnet committe a du REFORMULER ses citations en review ; la garde poussait hors du carnet la forme de citation naturelle d'une lecture de resultat.Implementation
_ANCHORED_TOKEN_RE+_output_text_tokensL<d>des outputs d'une cellule code ;textd'output = chaine OU liste de lignes (piege TypeError mesure sur #24654)anchored_line_tokens(cells, upto)markers_in_text(text, anchored)L138ancre ne blanchit pasL1380), pourlesson_tagSEULEMENTscan_notebook/scan_diffToutes signatures a defaut retro-compatible (
anchored=frozenset()) : aucun appelant existant ne change de comportement sans ancres.Acceptance (issue #24721)
test_lesson_tag_anchored_in_prior_output_is_masked(+ jumeau negatif sans ancres, comportement pre-24721 preserve)lane/verdictvoisins (test_anchored_mask_is_scoped_to_lesson_tag)test_posterior_output_does_not_anchor)test_url_fragment_frozen_regression_stays_green)test_output_text_list_form_is_flattened), borne de mot (test_word_boundary_anchored_l138_does_not_mask_l1380), threading bout en bout (test_scan_notebook_threads_anchors_in_order)Validation
python -m pytest scripts/tests/test_check_activity_leak.py: 47 passed (40 preexistants + 7 nouveaux), 0 failpython -m py_compile: OKcheck_activity_leak.py --diff origin/main...HEAD:[OK] aucun passage d'activite dense ajoute (0 carnet modifie)maincourant ne porte plus deLnnnen markdown de KNOTS-03 (reformules en review de SymbolicAI #17040: relais g141 — densite 1251 + 1221 #24654) ; ses outputs portent les ancres (L1088..L3657cellule 8,L1013..L1053cellule 14) -- la garde desormais ACCEPTERA la forme de citation naturelle au lieu de l'exclureNon-goals (fondes sur l'issue)
L234etc. sans output anterieur) : restent comptesCloses #24721
🤖 Generated with Claude Code