You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(lane-claim): un [CLAIMED] poste en payload JSON est invisible a check_lane_claim.py (3 instances mesurees) #19971
Constat (mesure myia-ai-01:CoursIA-2, 2026-10-08 ~19:00Z)
Un [CLAIMED] poste sous forme de payload JSON — la forme qu'a produite le defaut de transport #16866/#17270, ou le corps publie est l'objet {"body": "..."} complet — est structurellement invisible a scripts/check_lane_claim.py.
_MARKER_RE (scripts/check_lane_claim.py l.144-145) est ancre en debut de ligne :
Dans un corps piege, le marqueur ne commence jamais une ligne : il vit a l'interieur d'une valeur de chaine, precedee de "body": ". Le (?m)^ ne matche pas, et les \n du corps d'origine sont des sequences d'echappement litterales (deux caracteres \ + n), pas des sauts de ligne — donc il n'y a aucune ligne ou ancrer le marqueur. L'organe rend CLEAR : « aucune autre lane ne bloque ce grain ».
Les deux commentaires de #19727 et #19796contiennent bien le texte [CLAIMED] lane <machine:workspace> — un grep sur le corps le trouve. C'est le parsing qui echoue, pas la donnee qui manque.
Quasi-accident du 2026-10-08
Sur cette seule session, deux candidats du pool ont ete rendus libres par l'organe alors que leur claim etait vivant et leur travail en cours :
Un worker qui suit l'organe — c'est-a-dire qui fait ce que la regle lui demande, check_lane_claim.py Navant d'editer (lane-claim-protocol.md) — prend le grain, edite les fichiers, et collisionne. La sortie CLEAR est ici indiscernable d'une absence reelle de claim.
C'est exactement le mode d'echec que l'organe existe pour empecher. Le (?m)^ a deja ete elargi une fois pour une classe voisine (_DECOR, incident #12465 : →DELIVERED non lu, po-2027 a re-livre le meme carnet 15 h plus tard) ; celle-ci est un angle mort de la meme famille, non couvert.
Attendu
Unwrap du payload avant parsing : quand le corps d'un commentaire parse en objet JSON portant une cle body dont la valeur est une chaine, c'est cette valeur qui doit etre soumise a _MARKER_RE (et non le JSON brut). Le corps unwrape doit aussi alimenter la clause paths: — sinon le scope reste epic-wide par accident.
Ne pas elargir _MARKER_RE a la prose : le contrat de l'organe est cote emission (pr-review-discipline.md). La lecture defensive du transport appartient a l'entree, pas au filet de detection.
Organe-first : scripts/ci/check_gh_comment_traps.py sait deja detecter ce payload (TRAPPED [json-payload]). La correction ne doit pas re-ecrire un second detecteur — le meme predicat doit servir aux deux.
Contournement en attendant (ecrit, pas silencieux)
Avant de claim un grain, lire les commentaires de l'issue par l'API et chercher [CLAIMED] dans le texte, pas seulement dans le verdict de l'organe :
Grain: MED/tooling — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #19857
[CLAIMED] lane myia-po-2023:CoursIA-2 — unwrap du payload JSON avant parsing dans check_lane_claim.py (marqueur CLAIMED + clause paths:), fixture sur les corps reels de #19727/#19796, predicat partage avec check_gh_comment_traps.py
[DELIVERED] lane myia-po-2023:CoursIA-2 -- PR #19973
Les 4 points de l'« Attendu » sont couverts :
Unwrap du payload : _unwrap_trapped_body lit la valeur de la cle body
quand le corps parse en objet JSON, et c'est ce corps unwrape qui alimente _MARKER_RE, la clause paths:et_body. Applique aux trois points
d'entree de corps de l'organe (commentaires + les deux lectures de body de
PR — l'instance fondatrice de la classe est un body de PR).
Part of #17326
Constat (mesure
myia-ai-01:CoursIA-2, 2026-10-08 ~19:00Z)Un
[CLAIMED]poste sous forme de payload JSON — la forme qu'a produite le defaut de transport #16866/#17270, ou le corps publie est l'objet{"body": "..."}complet — est structurellement invisible ascripts/check_lane_claim.py._MARKER_RE(scripts/check_lane_claim.pyl.144-145) est ancre en debut de ligne :Dans un corps piege, le marqueur ne commence jamais une ligne : il vit a l'interieur d'une valeur de chaine, precedee de
"body": ". Le(?m)^ne matche pas, et les\ndu corps d'origine sont des sequences d'echappement litterales (deux caracteres\+n), pas des sauts de ligne — donc il n'y a aucune ligne ou ancrer le marqueur. L'organe rendCLEAR: « aucune autre lane ne bloque ce grain ».Instances mesurees
myia-po-2024:CoursIA-22026-10-07T22:22:10Z—{"body": "[CLAIMED] lane myia-po-2024:CoursIA-2 -- deps(slides,#19727): ..."}my_active_claim: false,stale_claims: [], aucun blocagemyia-po-2023:CoursIA-22026-10-08T01:58:36Z— meme forme, clausepaths:inclusemy_active_claim: false,stale_claims: [], aucun blocageLes deux commentaires de #19727 et #19796 contiennent bien le texte
[CLAIMED] lane <machine:workspace>— ungrepsur le corps le trouve. C'est le parsing qui echoue, pas la donnee qui manque.Quasi-accident du 2026-10-08
Sur cette seule session, deux candidats du pool ont ete rendus libres par l'organe alors que leur claim etait vivant et leur travail en cours :
Grain: DEEP/research-code, et pris une partitionpaths:sur le carnet.Un worker qui suit l'organe — c'est-a-dire qui fait ce que la regle lui demande,
check_lane_claim.py Navant d'editer (lane-claim-protocol.md) — prend le grain, edite les fichiers, et collisionne. La sortieCLEARest ici indiscernable d'une absence reelle de claim.C'est exactement le mode d'echec que l'organe existe pour empecher. Le
(?m)^a deja ete elargi une fois pour une classe voisine (_DECOR, incident #12465 :→DELIVEREDnon lu, po-2027 a re-livre le meme carnet 15 h plus tard) ; celle-ci est un angle mort de la meme famille, non couvert.Attendu
bodydont la valeur est une chaine, c'est cette valeur qui doit etre soumise a_MARKER_RE(et non le JSON brut). Le corps unwrape doit aussi alimenter la clausepaths:— sinon le scope reste epic-wide par accident.BLOCKEDavec la bonne lane et la bonne clausepaths:; le temoin positif est la meme phrase postee en clair (deja couverte)._MARKER_REa la prose : le contrat de l'organe est cote emission (pr-review-discipline.md). La lecture defensive du transport appartient a l'entree, pas au filet de detection.scripts/ci/check_gh_comment_traps.pysait deja detecter ce payload (TRAPPED [json-payload]). La correction ne doit pas re-ecrire un second detecteur — le meme predicat doit servir aux deux.Contournement en attendant (ecrit, pas silencieux)
Avant de claim un grain, lire les commentaires de l'issue par l'API et chercher
[CLAIMED]dans le texte, pas seulement dans le verdict de l'organe :Sur cette session, ce geste a evite deux collisions que
check_lane_claim.pyseul n'aurait pas signalees.