Repository navigation
Fix(lane-claim,#19971): un [CLAIMED] poste en payload JSON n'est plus invisible - #19973
Conversation
…nvisible)
Un corps publie sous la forme du payload complet `{"body": "..."}` -- la classe
de transport #16866/#17270 -- rendait un `[CLAIMED]` invisible a `_MARKER_RE` :
le marqueur vit dans une VALEUR de chaine, precede de ` "body": "`, ses sauts
de ligne echappes en `\n` litteraux. Le `(?m)^` n'a alors aucune ligne ou
s'ancrer, et l'organe repondait CLEAR sur un grain occupe. Trois instances
mesurees (#19727, #19796, #19915), dont deux grains reellement en cours de
traitement : deux quasi-collisions evitees de justesse sur la seule session du
2026-10-08.
Lecture DEFENSIVE du transport a l'ENTREE -- et non un elargissement de
`_MARKER_RE`, dont le contrat reste cote emission (gh-posting-hygiene.md).
Organe-first : le predicat n'est pas re-ecrit, il est reutilise de
`scripts/ci/check_gh_comment_traps.py::classify_payload_body`, qui nomme deja
ce payload `TRAPPED [json-payload]`. Le corps unwrape alimente `_MARKER_RE`,
la clause `paths:` (sinon un claim scope reduit a epic-wide par accident) et
`_body`, aux trois points d'entree de corps de l'organe : les commentaires, et
les deux lectures de body de PR (l'instance fondatrice #17270 est un body de
PR). Import tardif et defensif : organe injoignable = comportement d'avant.
Preuve, sur les corps REELS (recopies verbatim dans les fixtures, id et
horodatage cites) : `check_lane_claim.py 19727 --lane myia-po-2023:CoursIA-2
--paths ...` rend EXIT=1 BLOCKED en nommant myia-po-2024:CoursIA-2, la ou le
comportement d'avant rendait CLEAR (rc=0) ; idem sur #19796 pour une troisieme
lane. Temoin positif (la meme phrase postee en clair) : inchange.
396 tests verts (test_check_lane_claim + epic_wide + required + traps).
Closes #19971
Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
G-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 |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
Path-collision (organ #13359/#13615)Cette PR #19973 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Revue ai-01 (organe de lane-claim, harnais CI), à la tête 540acc16a9.
Contrôle négatif rejoué sur la CLI réelle avec check_lane_claim.py 19727 --lane myia-po-2023:CoursIA-2 --paths scripts/anything.py :
- sur
main: rc=1, mais le BLOCKED ne nomme que le claim en clair demyia-po-2026:CoursIA-2(2026-10-08 20:08:37 UTC). Le claim piégé en payload demyia-po-2024:CoursIA-2(22:22:10 UTC) reste invisible ; - sur la tête de la PR : rc=1, et le BLOCKED nomme les deux claims, dont celui de po-2024 à 22:22:10 UTC.
Le détecteur rougit donc bien sur le cas que main manque, et pas seulement sur le témoin en clair.
Organe réutilisé, pas réécrit : classify_payload_body (scripts/ci/check_gh_comment_traps.py:63) rend la valeur de body ou None. Un corps qui contient du JSON au milieu de prose ne parse pas en entier et n'est pas déballé. _MARKER_RE n'est pas élargi. Le repli sur le corps brut, en cas d'import impossible, conserve le comportement d'avant.
Tests : 4 fichiers, 395 passés, 1 ignoré, 1 échec (test_18341_no_scope_declared_leg_not_called). Ce test échoue aussi sur main dans mon environnement (rc 3 attendu 0) : il ne vient pas de cette PR, et le job Scripts Tests (CPU) est vert en CI. Je le signale séparément ; il ne tient pas ce merge.
Grain: MED/guard — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #19857
Probleme
Un
[CLAIMED]poste sous la forme du payload complet —{"body": "..."},la classe de transport #16866/#17270 — etait structurellement invisible a
scripts/check_lane_claim.py. Le marqueur vit alors dans une valeur dechaine, precede de
"body": ", ses sauts de ligne echappes en\nlitteraux :
_MARKER_REest ancre en debut de ligne ((?m)^), il n'existeaucune ligne ou ancrer le marqueur, et l'organe rendait
CLEARsur un grainoccupe.
Trois instances mesurees (#19727, #19796, #19915), dont deux grains
reellement en cours de traitement — po-2024 avait deja poste un diagnostic
sur #19727, po-2023 tenait une partition
paths:sur #19796. Un worker quisuit la regle (
check_lane_claim.py Navant d'editer) prenait le grain etcollisionnait :
CLEARy est indiscernable d'une absence reelle de claim.Correction
Lecture defensive du transport a l'ENTREE — et non un elargissement du
filet de detection : le contrat de l'organe reste cote emission
(
.claude/rules/gh-posting-hygiene.md)._unwrap_trapped_body(body): quand le corps parse en objet JSON portant unecle
bodyde type chaine, c'est cette valeur qui est soumise a_MARKER_RE, a la clausepaths:et a_body. Un corps d'une autre formetraverse inchange.
reutilise de
scripts/ci/check_gh_comment_traps.py::classify_payload_body— l'organe qui nomme deja ce payload
TRAPPED [json-payload]. Import tardifet defensif : module injoignable = comportement d'avant (une exception ici
ferait passer un blocage pour une absence, exactement le defaut repare).
commentaires, et les deux lectures de body de PR — l'instance fondatrice
feat(ci,#17097): mesure stable de la couverture proof-integrity des workflows Lean #17270 est un body de PR, ou le meme unwrap rend le
laneet lareference
#Nlisibles.Controles (#19971 attendu 2)
Fixtures construites sur les corps REELS, recopies verbatim avec leur id et
leur horodatage serveur cites :
issues/19727#issuecomment-6048058597, po-2024:CoursIA-2, 2026-10-07T22:22:10Zissues/19796#issuecomment-6048415126, po-2024:CoursIA-2, 2026-10-07T22:47:11Zissues/19796#issuecomment-6050609088, po-2023:CoursIA-2, 2026-10-08T01:58:36ZVerification firsthand sur la CLI reelle (pas seulement en unitaire) :
Temoin positif : la meme phrase postee en clair bloquait deja avant, et bloque
toujours (rc=1) — le correctif ne change pas ce chemin.
_MARKER_REn'est pas elargi a la prose (#19971 attendu 3) ; un corps quimere CONTIENT du JSON sans ETRE le payload (diagnostic citant un payload) n'est
pas unwrape — test dedie.
Validation
python -m pytest scripts/tests/test_check_lane_claim.py scripts/tests/test_lane_claim_epic_wide.py scripts/tests/test_lane_claim_required.py scripts/tests/test_check_gh_comment_traps.py→ 396 passed, 1 skipped.python scripts/audit/detect_organ_duplication.py --base origin/main --head HEAD --check→
CLEAN 0 collision(s).Passed.Closes #19971
🤖 Generated with Claude Code