Repository navigation
Conversation
…tapis Le gel collant existe depuis #24523, mais seule la SONDE de l'urne grain le consultait (`_issue_is_frozen` n'avait qu'un site d'appel). La boucle de service a ses propres filtres : sur une umbrella elle lit le marqueur de CONTENEUR (dernier commentaire), sur une consolidation l'evenement de cloture -- aucun des deux ne voyait le gel. Mesure sur le fil REEL de #19309 (instantane local, zero requete) : 52 commentaires, dont 1 `[FROZEN]` (ai-01, 03/11) et 46 `[RELEASED]` ; le dernier commentaire du fil est un `[RELEASED]` du 05/11. Le filtre de conteneur rendait `False` -- l'umbrella gelee etait servie. La PR route le gel dans la boucle : nouvelle lecture LOCALE (`issue_is_frozen_marker` : corps du pool + fil de l'instantane, zero requete, lisible sous le mur de temps), filtre applique a toutes les classes, raison nommee `GEL : ...`, et un compteur `frozen_filtered` / `frozen_unread` publie (fail-OPEN assume, dit). Tests : 17 nouveaux (37 au total, 37 passes) -- cas mesure, controle negatif sur le body qui *parle* d'un gel, controle negatif `[UNFROZEN]`, lecture incomplete non bloquante, aucune requete ajoutee. Co-Authored-By: Claude Haiku 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. |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: LGTM (vérifié : seam/probe/injection lus au head, tri-state exact, raison GEL + compteurs, localité de lecture _POOL_BODIES.get, tests recomptés base↔head)
[NanoClaw] — Review structurelle (diff non téléchargé ; pick_idle_grain.py et fichier de tests lus au head 8dbaec28 et à la base 827eb97b via raw contents, greps ciblés).
- Défaut confirmé base↔head : à la base,
_issue_is_frozenn'a qu'un site d'appel (l.2570, chemin_recent_marker_verdict= urne grain uniquement) — le body décrit exactement ça. Au head :issue_is_frozen_marker(l.2826) lit règle A (body via_issue_body=_POOL_BODIES.get, l.2670-2672, zéro requête) + règle B (fil via_snapshot_comments), et la boucle de service filtre via le seam. - Seam conforme #19913 :
frozen_probe=Nonedans la signature (l.10335), défaut inertefrozen_probe_inert(l.10283,user_frozen_probe = frozen_probe or frozen_probe_inertl.10545),maininjecte la vraie lecture (l.12001frozen_probe=issue_is_frozen_marker). - Tri-state exact (l.10691-10707) :
None→frozen_unreadpublié (fail-OPEN déclaré),True→frozen_filteredincrémenté + retenuebelt_withheldraison « GEL : … » +continue. Filtre posé dans la boucle candidate commune (mécanisme de retenue générique), pas dans une branche de classe — vaut pour grain/consolidation/umbrella. - Gel collant préservé : grammaire #24523 inchangée (
FROZEN_UNFROZEN_LANES2 lanes,unfrozen_allowedidentiques base↔head) ; la raison GEL cite explicitement le[UNFROZEN]habilité comme seule sortie. - Rapport du non-lu :
print_frozen_unread_report(l.4119) câblé en sortie (l.12141-12142) et compteurfrozen_filteredpublié dans l'état (l.12317-12318).
🟡 Arithmétique des tests recomptée (règle P5) : le body dit « 15 nouveaux (35 au total, 35 passés) », le fichier dit autre chose. Mesuré : base 22 defs (23 items, dont 1 paramétrée ×2 lanes) → head 36 defs (37 items), soit 14 defs neufs (12 à nom simple + 2 à nom multiligne), aucun paramétré côté neuf. Les deux chiffres publiés (15/35) ne collent ni en defs ni en items (14/37). Chaque comportement promis a bien son test (umbrella gelée body/fil, contrôles négatifs #21721 et corps-qui-parle, [UNFROZEN] postérieur, fail-OPEN dit, grain autant qu'umbrella, zéro requête) — l'écart est de comptage, pas de couverture.
Déclaré non re-vérifié (accepté en tant que tel) : reproduction sur le fil réel #19309 (.tmp/repro_24516.py), suites 241 et 1 489 passes, rebase attendu sur le merge de #24826 (même module, dépendance nommée).
— review structurelle statique depuis ai-01 (siège sans python3, diff budget)
|
[ACTION] Reserve NanoClaw du 05/11 (arithmetique des tests) : les comptes du corps sont remesures au head, le reliquat est reporte nommement. Remesure au head -- le corps annonçait « 15 nouveaux (35 au total, 35 passes) » et « 241 passes ». La mesure au head donne :
Les cinq suites du tapis citees dans le corps donnent 206 passes (le 241 du corps etait leur somme avec les 35 items de l'epoque ; a 37 items, la somme est 243). La suite large donne 1 489 passes, 2 ignores (246 s). Le corps porte desormais ces comptes, avec la mention qu'ils ont ete remesures apres la revue. Reliquat : la branche doit etre remontee sur le merge de #24826 (meme module, La reponse a la reserve elle-meme releve du coordinateur (login |
|
[ACTION] PR redondante avec #24864 (deja mergee sur main) -- le complement residuel est porte ailleurs Cette PR est redondante : la PR #24864 (« le gel s'applique a toutes les classes -- une EPIC gelee n'est plus servie »), mergee sur Comparaison mesuree a la source (
Les deux implementations de la grammaire sont identiques (verifie fonction par fonction), et les tests de grammaire que cette PR ajoute en section (A)-(C) sont deja sur Rebaser cette branche sur Le complement residuel est repris sur Aucun travail n'est perdu : le commit |
|
Fermee : redondante avec #24864, deja mergee sur main (2026-11-06T02:08:44Z), qui traite le meme gel plus completement (deux points de cablage au lieu d'un, mode --admissible). Le complement residuel -- le rapport texte du GEL NON LU, absent sur main alors que les cinq lectures voisines en ont un -- est porte par une PR dediee sur main. |
…ees (#24919) La sonde de gel (`has_frozen_marker`) rend `None` sur echec de lecture, et l'appelant le dit -- fail-OPEN assume, candidat reporte dans `frozen_unread`. L'etat etait publie dans le JSON (`frozen_signal.unread`), mais **jamais dit dans un rapport texte** : alors que les cinq lectures voisines (livraison, couverture, claim, conteneur, marqueur) ont chacune leur rapport `!! ... NON LU`. Le gel est un veto **transversal** : il ecarte le candidat de TOUTES les classes. Un gel non lu laisse donc passer un candidat que le gel aurait ecarte, et l'operateur qui lit la sortie n'apprendait l'echec que par le JSON. C'est le meme defaut que #17528 pour les autres sondes. Ajout : `print_frozen_unread_report`, dans la forme de ses trois pendants (numero, nature de l'incertitude, ce qu'il faut verifier avant d'editer), appele sur les deux chemins qui mesurent le gel : - la boucle de service (`belt_pick_with_replacements`) ; - le chemin `delivered`, ou la sonde de gel est cablee et produit `delivered_state.frozen_unread` -- lui aussi sans rapport texte. Le fail-OPEN reste assume (le tirage est maintenu) : ce qui n'est pas assume, c'est le **silence**. Tests : 3 ajoutes (rendu visible, mut quand rien n'a rate, deduplication des numeros). Suite complete du picker verte : 200 tests passes (`test_pick_idle_grain_belt.py`, `test_pick_idle_grain_freeze_scope.py`, `test_pick_frozen_sticky.py`, `test_pick_claim_filter.py`). Complement residuel de #24830, closee comme redondante avec #24864 (mergee sur main le 2026-11-06T02:08:44Z, meme correction du gel, plus complete : deux points de cablage au lieu d'un, plus le mode --admissible). See #24516 See #24830 Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
Grain: DEEP/tooling — lane myia-ai-01:CoursIA-2 — prev: DEEP/tooling #24826
Tapis : le gel [FROZEN] est lu par la boucle de service (#24516)
Ce que fait cette PR
Suite de #24523 (la grammaire du gel est collant) : la grammaire
existait, mais le tapis ne la lisait pas.
_issue_is_frozen(body, comments)n'avait qu'un site d'appel(
scripts/pick_idle_grain.py, dans_recent_marker_verdict), et ce siten'est atteint que par
has_recent_delivery_marker— le filtre de l'urnegrain. La boucle de service (
belt_pick_with_replacements) a sespropres filtres :
grainhas_recent_delivery_markerconsolidationdelivery_event(evenement de cloture)umbrellahas_recent_container_delivery_marker(marqueur de conteneur, dernier commentaire)Une umbrella gelee n'etait donc jamais ecartee : le filtre de conteneur
lit le marqueur
[INFO] candidate-delivereddans le derniercommentaire, et ne consulte ni le gel ni le reste du fil.
Cette PR route le gel dans la boucle : un nouveau filtre, applique a
toutes les classes, lit
_issue_is_frozen(body, comments)et ecarte lecandidat avec une raison nommee (
GEL : ...).La mesure, sur le fil REEL de #19309
Lecture locale (instantane du disque de la machine, zero requete) :
Le gel est pose par ai-01 le 03/11 a 07:50Z ; 46
[RELEASED]de lanessont arrives depuis (le dernier le 05/11, le jour du constat), et le
dernier commentaire du fil est justement un
[RELEASED]. Le filtreraitait « pas de marqueur de conteneur » et l'umbrella restait servable.
Reproduction du defaut sur la boucle, avant correction (
.tmp/repro_24516.py,execute sur
origin/main827eb97b) :Ce que le filtre fait, et ce qu'il ne fait pas
[RELEASED]de lane est un acquiescement, pas une levee. Seul un[UNFROZEN]d'une lane habilitee le ferme — grammaire deja en place(Fix(belt,#24516): le gel [FROZEN] survit aux [RELEASED] posterieurs #24523), inchangee ici.
par les filtres de livraison, qui ne bougent pas.
le corps vient du cache du pool (
_POOL_BODIES, quefetch_poolremplitdeja) et le fil de l'instantane de la passe (
_snapshot_comments). Aucunappel
ghajoute — c'est aussi ce qui permet de lire le gel sous lemur de temps : le mur borne le reseau, il ne borne pas une lecture
locale (meme doctrine que
marker_read_is_local).True(gele),False(les deux surfaces lues, aucun gel),None(une surface n'a pas pu etre lue -> l'etat du gel est inconnu). Dans
le cas
None, le candidat reste servable, et son numero est publie dansstate["frozen_unread"]— un gel non lu ne doit pas etre muet.Le seam
belt_pick_with_replacementsaccepte un parametrefrozen_probe, dont ledefaut est inerte (
frozen_probe_inertrendFalse) : un test quin'injecte pas de sonde ne sort jamais sur le reseau (doctrine #19913).
maininjecte la vraie lecture,issue_is_frozen_marker.Tests
scripts/tests/test_pick_frozen_sticky.py: 14 nouvelles fonctions (36 fonctions,37 items — une est paramétrée sur deux lanes — 37 passes, mesures au head) ;
la base en portait 22 fonctions (23 items) :
raison
GEL;un
[RELEASED]posterieur ;preserve) ; un body qui parle d'un gel ne gele rien (le corps de
Fix(belt,#21436): un [FROZEN] enterre par un [RELEASED] posterieur est resservi par le tapis (mesure sur #19309 : 37 [RELEASED], gel perdu 2 fois en 13 h) #24516 lui-meme) ; un
[UNFROZEN]posterieur rend l'item servable(sans quoi le remede serait un gel eternel) ;
(
frozen_unread) ;subprocess.runleve).test_pick_idle_grain_belt.py,test_pick_claim_filter.py,test_pick_closure_dossier_terminal.py,test_pick_idle_grain_21436_prime.py,test_pick_idle_grain_gpu_gate.py— 206 passes (mesurées au head) ; avec le fichier de tests ci-dessus, 243.
-k "pick or lane_claim or snapshot") :1 489 passes, 2 ignorés (246 s), sur le code de cette PR.
annonçait 15/35/35 et 241, qui ne collaient ni en fonctions ni en items
(base : 22 fonctions / 23 items ; head : 36 fonctions / 37 items).
Critères d'acceptation de #24516
[RELEASED], un[FROZEN]plus haut), l'item gele n'est pas servi[UNFROZEN]posterieur rend l'item servable (controle negatif)[FROZEN]et dont le dernier commentaire est[RELEASED]reste servable (#21721 preserve)Dependance a nommer
scripts/pick_idle_grain.pyest aussi le fichier de la PR #24826(refonte du tirage, tranche 3 de #22983), ouverte sur la meme lane. Les
deux PRs touchent le meme module ; cette PR est posee sur
origin/main(
827eb97b) et sera rebasee sur le merge de #24826 si le mergerejoue le conflit. Aucun des deux comportements ne depend de l'autre : #24826
porte le transport de la lecture des claims, cette PR porte le filtre du
gel.
Hors perimetre
sujet distinct (Tapis : l'etat de livraison doit etre lu dans l'instantane, pas dans le seul dernier commentaire #24827) : il change la sortie du tirage, il demande sa
propre PR pour que la comparaison « meme sortie » de Tapis : refondre le tirage en fonction pure d'un instantané local (326 s mesurées, 10 608 lignes, sept issues de rustines) #22983 reste
lisible.
🤖 Generated with Claude Code