Skip to content

Fix(tooling,#23500): le verdict FREE du picker nomme ce qu'il mesure - #24723

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/23500-picker-free-label
Nov 5, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/23500-picker-free-label

Conversation

@jsboige

@jsboige jsboige commented Nov 4, 2026

Copy link
Copy Markdown
Owner

Grain: MED/tooling — lane myia-po-2023:CoursIA-2 — prev: DEEP/notebook-python #24709

Le défaut

scripts/pick_idle_grain.py rendait un candidat sans claim avec le libellé
humain « libre ». Ce mot n'est pas ce que le tirage mesure.

_summarize_claim() lit le protocole de claim : une autre lane qui a posé un
[CLAIMED] bloque, et rien d'autre n'est regardé. Un candidat qui survit
à ce test a aucun claim — pas plus. Le contrat est explicite sur l'écart
(lane-claim-protocol.md, « Prémisse d'identité ») :

CLEAR signifie uniquement « aucune autre lane ne bloque ce grain ou ces
chemins ». Il ne prouve ni « aucun autre processus travaille », ni « aucun
travail de ma propre lane n'est en cours ».

Une lane qui lit « libre » comprend « personne ne travaille dessus » ; les deux
propositions ne sont pas synonymes. C'est l'écart que cette section existe pour
prévenir — et il se rejouait à chaque tirage. Le chemin ERROR/UNREAD avait déjà
reçu le vocabulaire honnête (« pas des candidats 'libres' », « Le statut est
INCONNU, pas libre ») ; le chemin FREE, lui, non.

Le correctif — remède 1 de #23500 (le moins cher)

  • Nouveau libellé constant CLAIM_HUMAN_FREE = "aucun claim (activite non mesuree)", défini en un seul endroit.
  • _summarize_claim (jambée mono) et _summarize_claim_from_batch (jambée
    batch) y renvoient pour le code FREE.
  • Le cas FREE_STALE partageait l'abus : « libre (claim perime : #N) » devient
    « aucun claim actif (claim perime : #N) » — le claim périmé (un fait mesuré)
    reste nommé, l'absence d'activité ne l'est plus.

Surface machine inchangée : les codes CLAIM_CODE_* et l'objet JSON
{code, human} ne bougent pas ; seule la phrase humaine change. Le test
existant test_summarize_claim_machine_codes (qui n'assert que le code) passe
sans modification.

Preuves

  • Nouveau test test_summarize_claim_free_names_what_was_measured : fige le
    libellé (mono + batch + FREE_STALE) et vérifie que le mot « libre » en est
    parti.
  • Suites vertes : test_pick_idle_grain_belt.py + test_claim_probe_blocker_named.py
    • test_pick_claim_filter.py = 168 passed ; test_pick_idle_grain.py =
      275 passed (443 au total, 0 régression).

Périmètre / hors scope

See #23500

🤖 Generated with Claude Code

Le libellé humain du verdict FREE rendait « libre », qui se lit «
personne ne travaille dessus » — alors que le tirage ne mesure que
l'absence de claim. Le contrat (lane-claim-protocol, « Prémisse
d'identité ») ne garantit que « personne ne l'a réservé ». Le libellé
devient « aucun claim (activite non mesuree) » ; le cas FREE_STALE
perd le même abus tout en gardant le claim périmé qu'il mesure.

Surface machine inchangée : les codes CLAIM_CODE_* et l'objet JSON
{code, human} ne bougent pas, seule la phrase humaine change.

Copie jumeale roo-extensions déjà livrée en PR #4472 ; cette PR porte
le même remède 1 sur la copie CoursIA.

Test : test_summarize_claim_free_names_what_was_measured fige le
libellé (jambée mono + batch + FREE_STALE) et vérifie la disparition
de « libre ». 443 tests pickers verts.

See #23500

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Nov 4, 2026

Copy link
Copy Markdown
Contributor

Avertissements consultatifs

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2023:CoursIA-2` voit ces signaux actifs sur les mergees du jour (UTC 2026-11-04) :

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 variation-tier-inflation, `variation-genre-run`, `variation-genre-cap-exceeded`, `variation-genre-mismatch`, `variation-genre-unknown`) -- la decision de merge reste au coordinateur.

Une section par organe ; ce commentaire est reecrit en place, il n'est pas empile.

@github-actions

github-actions Bot commented Nov 4, 2026

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).

@github-actions

github-actions Bot commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #24723 (Fix(tooling,#23500): le verdict FREE du picker nomme ce qu'il mesure) 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.

APPROVED — revue coordinateur (lane CI/harnais), à la tête exacte.

Le libellé humain du verdict FREE rend désormais ce que _summarize_claim mesure : l'absence de claim, et non l'absence d'activité. C'est le contrat de la « Prémisse d'identité » de lane-claim-protocol.md. Les deux jambes (mono et batch) passent par la constante unique CLAIM_HUMAN_FREE, et FREE_STALE continue de nommer le claim périmé. Les codes machine et la surface JSON ne bougent pas, ce que vérifie le test existant test_summarize_claim_machine_codes ; le nouveau test fige les trois chemins.

@myia-ai-01
myia-ai-01 merged commit a01d396 into main Nov 5, 2026
23 of 24 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants