Repository navigation
fix(lane-claim,#15982): un marqueur de levee compose est enfin lu et dit - #15986
Merged
Merged
Conversation
`[CLAIMED-RELEASED]` etait invisible aux trois lecteurs de
`scripts/check_lane_claim.py` : `_MARKER_RE` exige le mot-cle seul entre
crochets, `_MALFORMED_MARKER_RE` exige l'absence de crochets, et
`_QUASI_MARKER_RE` capture son premier groupe avec la classe
`[A-Za-z][A-Za-z_-]{2,}` -- qui contient le tiret. Le groupe valait donc le
token entier, la partie « suffixe » etait vide, et aucun mot-cle n'est a
distance <= 2 d'un token de 16 caracteres : les deux branches de
classification etaient esquivees par le meme token.
Mesure : po-2023 a leve son claim sur #15835 avec cette forme ; l'organe a
continue de le dire vivant et la PR #15846 est restee bloquee 48 h, avec un
verdict qui conseillait de demander a la titulaire de lever -- ce qu'elle
venait de faire. Sur le payload reel de #15835 : 0 quasi-marqueur avant, 1
apres (kind compose, token verbatim, forme canonique RELEASED).
- `check_lane_claim.py` : branche de classification `compose` + WARN dedie.
`_ENACTED_MARKERS` ferme le faux positif `[CLAIMED-AMEND]` (marqueur REEL
lu par `_MARKER_RE`, absent de `_KEYWORDS`).
- `is_release_shaped` / `_close_keyword` distinguent une quasi-LEVEE d'une
quasi-PRISE ; le vocabulaire lu est `_CLOSE`, la constante du reduceur,
pas une seconde liste qui deriverait.
- Le WARN recommande desormais le mot-cle OPERATIF (`canonical`), pas la
tete du token : pour `[CLAIMED-RELEASED]`, conseiller `[CLAIMED]` dirait
a l'auteur de reprendre le grain qu'il vient de rendre.
- `ci/lane_claim_required.py` : la surface qui BLOQUE porte l'avertissement.
Doctrine #12624 respectee : le quasi-marqueur est SIGNALE, jamais enacte.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Contributor
Path-collision (organ #13359/#13615)Cette PR #15986 (
|
This was referenced Sep 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Grain: MED/guard — lane myia-po-2026:CoursIA — prev: MED/notebook-lean #15668
Le defaut
Un marqueur de levee COMPOSE —
[CLAIMED-RELEASED]— etait invisible aux trois lecteurs descripts/check_lane_claim.py:_MARKER_RE_MALFORMED_MARKER_RE(#11239)_QUASI_MARKER_RE(#12624)Le troisieme est le point :
_QUASI_MARKER_REcapture son premier groupe avec la classe[A-Za-z][A-Za-z_-]{2,}, qui contient le tiret. Le groupe valait donc le token entier, la partie « suffixe » etait vide, et la classification tombait dans la branche « distance <= 2 » — ou aucun mot-cle n'est proche d'un token de 16 caracteres. Les deux branches de classification etaient esquivees par le meme token.La mesure, sur le payload REEL de #15835
A/B sur
gh issue view 15835 --json comments(la levee de po-2023 y est verbatim), meme payload, deux versions du code :Et de bout en bout sur l'organe qui BLOQUE (
lane_claim_required.check, payload reel de #15835, PR synthetiqueCloses #15835d'une autre lane) :Le blocage lui-meme reste correct (la levee n'a jamais ete enregistree) : ce qui manquait est la raison. Le verdict se lisait « une lane tierce tient ton grain », ce qui envoie l'auteur demander un
[OVERRIDE]ou attendre 48 h, alors que la titulaire avait deja rendu le grain — dans une forme que rien ne lit.Ce qui change
scripts/check_lane_claim.py— le token compose dont la TETE est un mot-cle connu est classekind="compose"(branche dediee) et dit dans le WARN :"CLAIMED-RELEASED" (deux mots-cles joints ; tete CLAIMED -- l'organe ne lit QUE le mot-cle seul entre crochets). Doctrine Un claim perdu en silence : quasi-marqueur non signale, et marqueur compose reduit a sa tete #12624 respectee : signale, jamais enacte, jamais auto-corrige — c'est a l'auteur de reposter la forme canonique.scripts/ci/lane_claim_required.py— la surface qui bloque porte desormais l'avertissement quand une quasi-levee est presente sur l'issue bloquante. Le lint quasi ne vivait que dans le stderr de la CLI ; le blocage restait muet, ce qui etait precisement le defaut.Deux corrections trouvees en chemin
Reposter la forme canonique "[<nearest>]", ounearestest la tete du token. Pour[CLAIMED-RELEASED], tete =CLAIMED: conseiller[CLAIMED]a l'auteur d'une levee lui dit de reprendre le grain qu'il vient de rendre — pire que le silence. Un champcanonicalporte desormais le mot-cle operatif (le mot de fermeture present dans le token), et c'est lui que le WARN recommande.nearestreste la tete (il nomme la famille, et le WARN l'imprime comme telle)._CLOSE_KEYWORDSlocal qui omettaitDELIVEREDet derivait en silence de_CLOSE(le set du reduceur,check_lane_claim.py:289). Le predicatis_release_shapedlit maintenant_CLOSE— une seule source de verite.Un predicat public
is_release_shaped(quasi)separe la question de vocabulaire (« ce quasi-marqueur est-il une LEVEE ou une PRISE ? ») de la mecanique de classification : le gate bloquant ne doit avertir que sur une levee quasi — conseiller de « lever » sur une quasi-prise serait un conseil que son auteur n'a pas a suivre.Validation
[CLAIMED-AMEND]est un marqueur reel (_MARKER_REle liste comme alternative de premier rang) mais n'est pas dans_KEYWORDS— ma premiere version le classaitcomposeet l'aurait inventé en faux positif. Garde_ENACTED_MARKERS+return Noneen tete de_composed_keyword, avec test de controle negatif dedie.[CLAIMED-RELEASED]et la variante[CLAIMED_RELEASED]produisent un quasi-marqueurkind="compose", token verbatim (CLAIMED-RELEASED, casse d'origine preservee).[RELEASED],[CLAIMED],[CLAIMED-AMEND]restent muets — plus prose sans motif de claim, plus citation en bloc clos.warnings, avec le token, la forme canonique et le numero d'issue) ; controle negatif : une quasi-prise ([CLAIMED-NOTES]) ne le declenche PAS.python -m pytest scripts/tests -qsur la tete de cette branche — 5428 passed, 30 skipped, 5 xfailed in 541.27s, exit 0.main(git diff --name-only origin/main -- COURSE_CATALOG* | wc -l= 0).Perimetre
4 fichiers, +301/-10 :
scripts/check_lane_claim.py,scripts/ci/lane_claim_required.py,scripts/tests/test_check_lane_claim.py,scripts/tests/test_lane_claim_required.py.Closes #15982
See #15846 (la victime) · See #12624 (l'organe etendu) · See #11239 · See #10223
🤖 Generated with Claude Code