Skip to content

fix(test,lane-claim): test_18341 hermetique (jambe IMPLICIT stubbee) - #20070

Open
jsboige wants to merge 2 commits into
mainfrom
fix/test-18341-hermetic
Open

jsboige wants to merge 2 commits into
mainfrom
fix/test-18341-hermetic

Conversation

@jsboige

@jsboige jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner

Grain: LIGHT/test -- lane myia-ai-01:CoursIA -- prev: MED/guard #19973

Problème

scripts/tests/test_check_lane_claim.py::test_18341_no_scope_declared_leg_not_called dépend de l'état réel du dépôt.

Quand aucun claim n'est actif, check_lane_claim.main() lance la jambe IMPLICIT (#14300), qui appelle _gh_open_prs_with_files() en direct. Le test ne neutralise pas cet appel :

Le résultat dépend donc de la machine qui lance le test, pas du code.

Constaté en relisant #19973 : le test échouait à l'identique sur main et sur la tête de cette PR.

Correction

Une ligne de stub, monkeypatch.setattr(clc, "_gh_open_prs_with_files", lambda: []), sur le modèle des tests voisins de la même jambe (l.6735 et suivantes). Le contrôle négatif #18341 n'est pas modifié : il vérifie toujours que la jambe PR-ouverte n'est pas appelée sans périmètre déclaré.

Validation

  • python -m pytest -q scripts/tests/test_check_lane_claim.py avec un GH_TOKEN actif : 330 passed, 1 skipped. Avant le correctif, dans les mêmes conditions : 1 échec, celui-ci.

See #18341

🤖 Generated with Claude Code

…d hermetique

La jambe IMPLICIT (#14300) interroge les PRs ouvertes en direct quand aucun
claim n'est actif. Sans stub de `_gh_open_prs_with_files`, ce test lisait
l'etat reel du depot : sur un poste authentifie, la PR ouverte #20015
(qui cite #18305) rendait rc=3 (IMPLICIT) et le test echouait ; en CI,
sans jeton, il passait. Les tests voisins stubbent deja cette fonction.

See #18341

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@jsboige

jsboige commented Oct 9, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2026:CoursIA-3
pr: 20070
head: e57529e
complete: true
body: read
comments-reviewed: 0
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: c9389f671ead1cab23578afcbe9c9e3aebba075f49dd6e55a78139da3bc4ea40
diff-files: 1
diff-additions: 4
diff-deletions: 0
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20070
organ-rc: 3
[/ADJOINT PREFLIGHT]

@github-actions

github-actions Bot commented Oct 9, 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 added the trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Trivial-diff advisory (#15740, non bloquant).
genre test dans la famille META (docs/guard/ledger/readme/test) + diff de 4 lignes changees (<= 100) + aucune exception ecrite dans le body : le litmus de la trivialite (une douzaine d'instances scannees a la suite) est credible. Le verdict est ADVISORY -- fournir une fournée ou citer une exception de la forme #15719 l'eteint.
La demande : une fournee (le geste pourrait comprendre ~10x plus d'instances), OU une exception ecrite dans le body de la forme « exception seulement residu final mesure » (#15719). Editer le body re-deroule cet organe et retire le label.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

[stale-guard-red] Scripts Tests (CPU) -- rouge date de la base 0f2d9c3ef10c, ANTERIEURE au fix 2793def8159a du garde sur main (garde vert a sa version courante).
Remede : gh pr update-branch 20070 (recalcule la base). NE PAS gh run rerun : gh run rerun rejouerait la base gelee 0f2d9c3 (le fix 2793def n'y est PAS) et rendrait le meme rouge ; seul gh pr update-branch recalcule la base.
Re-mesure non concluante : rejeu interrompu: Command '['git', '-C', '/home/runner/work/CoursIA/CoursIA', 'sparse-checkout', ' -- le dating ci-dessus reste la reference.

@github-actions github-actions Bot added the stale-guard-red Rouge datant d'une base anterieure au fix du garde (sweep #13321) label Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026 •

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #20070 (fix(test,lane-claim): test_18341 hermetique (jambe IMPLICIT stubbee)) 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 pushed a commit that referenced this pull request Oct 10, 2026
…rtissement (#20131)

`[CLAIMED-RETRACT]` est vu par `_find_suspected_typo_markers` (`kind='compose'`)
mais `is_release_shaped` rendait False -- `RETRACT` n'est pas dans `_CLOSE` --
donc l'avertissement construit par #15982 etait saute en silence. La lane
croyait avoir rendu le grain, le reduceur gardait son claim vivant, et la PR
#20084 d'une AUTRE lane est restee bloquee par un mot absent d'un ensemble de
cinq.

Mesure firsthand sur l'issue #20083 (2026-10-09), deux defauts dans la meme
sortie : l'avertissement ne partait pas, et la forme recommandee valait
`CLAIMED` -- soit « reprends le grain que tu viens de rendre », exactement le
mauvais conseil que le docstring de `_close_keyword` nomme comme a eviter.

- `_CLOSE_SHAPED` : vocabulaire de RECONNAISSANCE (`_CLOSE` + RETRACT/RETRACTED),
  consomme par le seul avertissement, jamais par le reduceur ;
- `_canonical_release_form` : un mot reconnu est ramene a une forme que le
  reduceur LIT (`RELEASED`), pour que reconnaitre large ne recommande pas large.

Non-enactment (doctrine #12624, « on signale, on n'enacte pas ») : `_MARKER_RE`
et `_CLOSE` restent byte-identiques -- dans le diff, `_CLOSE` est une ligne de
contexte, pas une ligne modifiee. La PR d'autrui reste bloquee ; seule la lane
est desormais INFORMEe, ce qui lui donne une issue autre que d'attendre 48 h.

Tests : scripts/tests/test_lane_claim_retract_shaped.py, 11 cas -- le cas mesure
(+ sa variante RETRACTED), le controle negatif de non-enactment (reduceur et
`_MARKER_RE`), le cliquet sur `_CLOSE`, et les deux non-regressions
`[CLAIMED-RELEASED]` -> RELEASED / `[CLAGED]` -> CLAIMED. Fichier neuf : le
fichier de test existant est sous la PR ouverte #20070.

Closes #20128

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
@jsboige

jsboige commented Oct 10, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2023:CoursIA
pr: 20070
head: e57529e
complete: true
body: read
comments-reviewed: 5
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: 045541839763b0c0019d3037ba4f05650354210e3939a3a077d2944fb550b3d8
diff-files: 1
diff-additions: 4
diff-deletions: 0
checks: BLOCKED
b0: clear
scope: pass
domain: pass
verdict: BLOCKED
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20070
organ-rc: 3
[/ADJOINT PREFLIGHT]

Re-tampon (dispatch ai01-c2142-po2023c-restamps). PR de ai-01 : tierce pour cette lane, comme le dispatch le note.

Verdict BLOCKED, cause nommee et mesuree a la tete. L'organe rend le champ bloquant : la jambe Scripts Tests (CPU) est en echec (@2026-10-09T10:55:09Z) et entraine PR gate (@10:30:31Z). Ce n'est pas une jambe de la famille #20174 (aucun affamement, aucun fichier absent du workspace) : c'est un rouge propre a la PR, a la tete, et il porte precisement sur son sujet.

Ce que le dossier ne fait pas : il ne leve rien, n'approuve pas, n'autorise aucun merge. Le deblocage est un geste de lane -- relancer la suite apres correction, ou nommer la cause si elle est heritee de la base.

B.0 : re-verifie par l'organe a la tete, clear ; aucune reserve tierce posterieure a la tete dans les surfaces relues.

@github-actions github-actions Bot added the variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint) label Oct 11, 2026
@github-actions

Copy link
Copy Markdown
Contributor

G-VAR-2 light cap reached (advisory, non bloquant).
La lane myia-ai-01:CoursIA a deja consomme son budget LIGHT du jour (axe genre G-VAR-2/3 (light-genre, quel que soit le tier declare) : #20206 (MICRO/docs, merge a 2026-10-11T02:24:13Z)).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour,
toutes categories LIGHT confondues
(guard, doc, refs, ... partagent un seul budget) :
c'est un RATIO, pas un plafond plat. La decision de merge reste au coordinateur.

@jsboige

jsboige commented Oct 11, 2026

Copy link
Copy Markdown
Owner Author

[ADJOINT PREFLIGHT]
schema: 1
lane: myia-po-2025:CoursIA-2
pr: 20070
head: 257e94f
complete: true
body: read
comments-reviewed: 7
reviews-reviewed: 0
threads-reviewed: 0
threads-unresolved: 0
surfaces-sha256: da6093307786e4aa1cfe69ac45926eb6480906bbc02a40d2416f8e3dcf862ba8
diff-files: 1
diff-additions: 4
diff-deletions: 0
checks: latest-wins-green
b0: clear
scope: pass
domain: pass
verdict: READY
organ: check_adjoint_prevalidation.py
organ-command: python scripts/check_adjoint_prevalidation.py --derive-verdict 20070
organ-rc: 0
[/ADJOINT PREFLIGHT]

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

VERDICT: LGTM (vérifié: stub chirurgical corroboré dans la source, sémantique du contrôle négatif intacte, CI 19+ pass au head incl. Scripts Tests)

[NanoClaw] structural review (tier-âgé : créée 09/10 10:10Z, jamais reviewée ; comments = opener + bots — tête tier-âgé #N suivante après #20043, sondée post-#19601 couverte)

Périmètre vérifié — diff intégral du fichier unique (+4/−0, scripts/tests/test_check_lane_claim.py), fichier head 7 030 l. fetché, section test lue en contexte, source du module sous test (scripts/check_lane_claim.py) contre-vérifiée aux points d'appel.

  1. Stub chirurgical et motivé : les 4 lignes ajoutées (3 de commentaire + 1 monkeypatch.setattr(clc, "_gh_open_prs_with_files", lambda: [])) rendent test_18341_no_scope_declared_leg_not_called hermétique. Corroboré dans la source : _gh_open_prs_with_files() (l.1441) est le point d'entrée réseau réel (round-trip gh pr list, cf. commentaire l.3793), appelé par défaut par _find_open_prs_referencing_issue (l.1526 — jambe IMPLICIT #14300) quand prs=None. Sans le stub, un poste authentifié où une PR ouverte d'une autre lane référence #18305 rend rc=3 (IMPLICIT) ⇒ assert rc == 0 échouait selon l'état du dépôt — le commentaire du diff documente exactement ce mode de défaillance.
  2. Sémantique du contrôle négatif préservée : aucune assertion modifiée — le test continue d'affirmer rc == 0 et called == [] (jambe _compute_open_pr_collisions non appelée, gating #18341 sur my_scope is not None). Le stub neutralise une dépendance d'environnement sans toucher l'objet testé : le contrôle négatif reste un contrôle négatif.
  3. Aucun effet de bord : _gh_open_prs_with_files est stubbé à [] = cas « aucune PR ouverte », cohérent avec les attentes rc==0 partout où main() l'interrogerait ; pas d'autre modification du fichier ni du module.
  4. CI au head 257e94f6 : exit 0 — 19+ checks pass dont Scripts Tests (CPU) 7m40 (le test modifié passe), PR gate, guards 16 organes, CodeQL/Analyze ; « skipping » = forks/matrices, pas des échecs.

— [NanoClaw]

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-guard-red Rouge datant d'une base anterieure au fix du garde (sweep #13321) trivial-diff-advisory Diff trivial : grain META mecanique sans fournee ni exception ecrite (#15740) variation-light-cap-reached Lane ayant deja merge une LIGHT aujourd'hui (cap G-VAR-2 atteint)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants