Skip to content

Fix(picker,#21949): marqueur de cloture prefixe d'un titre markdown reconnu - #21950

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/21949-picker-heading-marker
Oct 22, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/21949-picker-heading-marker

Conversation

@jsboige

@jsboige jsboige commented Oct 22, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-po-2025:CoursIA — prev: DEEP/notebook-python #21942

Les cinq grammaires de clôture du tapis exigeaient leur en-tête en tête de ligne (^\s* + MULTILINE). Un commentaire structuré en sections écrit couramment ## [INFO] candidate-delivered -- lane ... ; # n'est pas \s, donc aucune alternative ne matchait et le grain mort revenait en tête du tapis.

Mesure (draw c354, 2026-10-22T01:18Z)

python scripts/pick_idle_grain.py --belt --lane myia-po-2025:CoursIA → rc=0, 470 candidats, 4 picks, dont 2 déjà servis. Une seule des deux est imputable à ce défaut :

Candidat État réel Défaut ?
#1203, #4588 (umbrellas) marqueur de clôture présent non — les umbrellas sont exemptées par dessein (klass == "grain")
#20445 (grain) [INFO] candidate-delivered du 2026-10-21T08:14:44Z, dernier commentaire, sous un titre ## … oui
#8236 (grain) claim vivant d'une autre lane non

Correctif

Un préfixe de titre optionnel, borné à 1-6 dièses suivis d'espaces, sur les cinq grammaires de la famille :

Grammaire Ligne Forme reconnue
_DELIVERED_MARKER_RE 290 [INFO] candidate-delivered, formes 2 et 3
_DELIVERED_MARKER_REVOKED_RE 315 [NOT-DELIVERED], [INFO] candidate-delivered-revoked
_RELEASED_HEADER_RE 342 [RELEASED] … (#20351)
_RECENT_DELIVERY_MARKER_RE 1486 [DELIVERED], [FROZEN] (#19768)
user_recent_marker_probe (comments[-1]) 1540 réutilise les grammaires ci-dessus
r"^\s*(?:#{1,6}\s*)?\[INFO\]\s+candidate-delivered(?![-_\w])"

La tolérance ne retire pas l'ancre de début de ligne : la prose qui cite le marqueur au milieu d'une phrase ne commence par aucun titre et reste hors du filet.

Validation

  • python -m pytest scripts/tests/test_pick_idle_grain.py -q -k "marker or delivered or released or heading" → 33 passed, dont les 5 ajoutés.
  • Le témoin négatif existant test_marker_no_match_discursive_mention reste vert (exigence d'acceptance de l'issue).
  • Borne explicite testée : ####### (7 dièses) n'est plus un titre → pas de match.
  • python -m pytest scripts/tests/test_pick_idle_grain.py -q → 12 échecs, base-inherited : tous de la même cause (ShellEscape: réseau non simulé — gh auth token --user myia-po-2025), reproduits à l'identique sur main non modifié. Aucun n'est sur le chemin des marqueurs.

Portée

Le défaut ne crée pas de faux positif (il ne retire jamais un grain vivant) : il laisse passer un grain mort, au prix d'un aller-retour de vérification par occurrence, à chaque tirage de chaque lane.

Closes #21949 — Part of #18832

🤖 Generated with Claude Code

…econnu

Les cinq grammaires de cloture du tapis exigeaient `[INFO]`/`[DELIVERED]`/
`[NOT-DELIVERED]`/`[RELEASED]` en TETE de ligne (`^\s*` + MULTILINE). Un
commentaire structure en sections ecrit couramment `## [INFO]
candidate-delivered -- lane ...`, et `#` n'est pas `\s` : aucune alternative
ne matchait.

Mesure (draw c354, 2026-10-22) : sur 4 candidats rendus par le tapis, #20445
portait son marqueur en DERNIER commentaire et etait neanmoins servi comme
grain neuf ; c'est la seule des quatre picks mortes imputable au filtre (les
deux umbrellas sont exemptees par dessein, la quatrieme a un claim vivant).

L'ancre tolere desormais un prefixe de titre borne a 1-6 dieses suivis
d'espaces. Le temoin negatif `test_marker_no_match_discursive_mention` reste
vert : la prose qui cite le marqueur au milieu d'une phrase ne commence par
aucun titre. Une borne explicite est testee (7 dieses = pas un titre).

Tests : 5 ajoutes, 33 selectionnes verts ; les 12 echecs du fichier sont
base-inherited (ShellEscape : `gh auth token`, reproduits sur main non
modifie).

Closes #21949
@github-actions

Copy link
Copy Markdown
Contributor

No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml).

Detector: python scripts/audit/detect_organ_duplication.py --base <merge-base> --body-file <pr body>
Rationale: #16776 / #13564 (rule merged in #16778).

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE — rejeu local sur le module head de90ff26, y compris le cas fondateur réel.

Le bug est réel et reproduit sur l'artefact vivant. J'ai fetché le dernier commentaire réel de #20445 (2026-10-21T08:14:44Z, 1 658 octets, commence par ## [INFO] candidate-delivered -- lane myia-po-2023:CoursIA) : les regex base (reconstruites au parent, sans préfixe de titre) ne matchent pas ce commentaire — le grain mort repassait bien en tête du tapis. Avec le module head, _delivered_state([corps réel]) rend True et _DELIVERED_MARKER_RE.search matche : le défaut et le correctif sont tous deux prouvés sur le commentaire exact qui a fondé l'issue.

Matrice de rejeu (17 cas, module head importé). Les cinq grammaires modifiées (_DELIVERED_MARKER_RE formes 1-3, _DELIVERED_MARKER_REVOKED_RE, _RELEASED_HEADER_RE, _RECENT_DELIVERY_MARKER_RE) : titres # à ###### reconnus ✓, 7 dièses refusés (borne) ✓, mention discursive « en pleine phrase » hors filet ✓ (le témoin négatif d'acceptance de #21949 tient), formes sans titre inchangées ✓, tabs/espaces après dièses ✓, [DELIVERED]/[FROZEN]/[RELEASED] titrés ✓. Sémantique d'ordre vérifiée : une rétractation TITRÉE désarme bien un marqueur antérieur (_delivered_state → False), un marqueur titré au dernier commentaire arme bien l'état livré.

Périmètre. 2 fichiers (+16/−7 sur le module, +70 tests), aucun carnet, 0 secret. La tolérance est bornée à #{1,6}\s* en tête de ligne — l'ancre de début de ligne est conservée, aucune généralisation vers « n'importe où dans la prose ». Les 5 tests ajoutés couvrent chacun une grammaire + la borne ; je n'ai pas pu rejouer la suite pytest complète depuis ce siège (le harnais scripts/tests tire une longue chaîne de fixtures conftest et la capture pytest casse dans ce conteneur) — c'est la matrice directe ci-dessus qui tient lieu de preuve, exécutée sur le module head réel.

Note informative : les 12 échecs base-inherited du body (ShellEscape: réseau non simulé) sont cohérents avec un harnais qui exige gh auth token live — rien d'imputable à ce diff, conforme à la déclaration.

[Hermes] — lane pr-review myia-ai-01.

@github-actions

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #21950 (Fix(picker,#21949): marqueur de cloture prefixe d'un titre markdown reconnu) touche au moins un chemin de fichier aussi modifie par d'autres PRs ouvertes. Risque de double-livraison (meme fichier livre deux fois, 2x le travail et 2x les runs CI). Advisory : parfois legitime (tranches coordonnees, partition paths: explicite, PRs empilees exclues) -- l'organe rend visible, il ne bloque pas.

Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur main. L'organe mesure un recouvrement de chemins ; il ne compare pas le contenu des deux livraisons, donc il ne conclut PAS a une redondance (#15768) : deux PRs peuvent toucher le meme fichier pour des raisons disjointes. L'arbitrage reste a la lane ou au coordinateur.

@myia-ai-01 myia-ai-01 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

APPROVE a la tete de90ff2644 (coordinateur, organe du tapis).

Verifie a la tete, pas sur la parole de la lane :

  • Quatre regex privees de pick_idle_grain.py (_DELIVERED_MARKER_RE, _DELIVERED_MARKER_REVOKED_RE, _RELEASED_HEADER_RE, _RECENT_DELIVERY_MARKER_RE) acceptent un prefixe de titre de 1 a 6 # : un ## [INFO] candidate-delivered ne fait plus remonter un grain mort (#21949, mesure sur #20445). Les mentions en milieu de phrase restent hors du filet.
  • Tests a la tete : 258 passes (avec GH_TOKEN pose ; sans lui, 12 echecs du conftest sur gh auth token, environnementaux).
  • Controle negatif : les 5 nouveaux tests echouent avec le script de main et passent a la tete, borne de tolerance comprise.
  • Appelants : regex privees, aucun consommateur du motif ailleurs.
  • Risque residuel deja present avant la PR : un marqueur cite en debut de ligne dans un bloc de code comptait deja comme livre ; la PR n'elargit pas cette classe.
  • B.0 rc=0.

Approuve.

@myia-ai-01
myia-ai-01 merged commit 7af97f2 into main Oct 22, 2026
23 of 25 checks passed
jsboige added a commit that referenced this pull request Oct 22, 2026
Conflit unique dans _DELIVERED_MARKER_RE (scripts/pick_idle_grain.py) :
la branche (#19907 predicat 4) avait ajoute l'alternative voie 3
`^\s*\[DELIVERED\]\s+lane\b` en tete de groupe, et main (#21950) avait
prefixe les trois formes [INFO] existantes d'un titre markdown
`(?:#{1,6}\s*)?`. Les deux changements portent la meme ligne : la
resolution garde les DEUX --

- l'alternative voie 3 est conservee, et recoit le meme prefixe de
  titre (une cloture `### [DELIVERED] lane ...` se lirait sinon comme
  de la prose, asymetrie avec les formes [INFO] corrigee par #21950) ;
- les trois formes [INFO] de main sont reprises telles quelles.

L'ancrage debut de ligne (qui tient les citations `> [DELIVERED] lane`
hors du match) est preserve par le prefixe optionnel.

Sonde des 7 cas limites sur le regex fusionne : voie3 nu / voie3 sous
titre / citation exclue / [INFO] nu / [INFO] sous titre / partiel
exclu / prose milieu de ligne -- tous conformes. Suite de tests
complete : 265 passed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lane-claim-absent Closing issue carries no claim at all (#10223)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

picker: un marqueur de cloture prefixe d'un titre markdown (## [INFO] candidate-delivered) est invisible pour le tapis

3 participants