Repository navigation
fix(ci,#16085): perimeter guard — cardinal anaphorique + relais de provenance sha - #16101
Conversation
… relays Two true-statement FP classes, one root: the parser binds an integer to len(files) without hearing deixis or provenance. Cas A (#16075): "dans ces deux fichiers" is a demonstrative anaphor whose named-file antecedent sits in the PRECEDING paragraph. New word-form pass-through guard _word_form_is_anaphoric_reference: demonstrative cardinal + no strong scope word on the line + named-file antecedent in a 500-char lookback (no paragraph cut — the antecedent lives above the blank line; cutting there amputates the window of what it looks for). Cas B (#15983): "8 fichiers de `fe04e1f37`, ~793 lignes" relays a borrowed measurement pinned to a commit sha. New _count_is_provenance_sha (tail "de `<7-40 hex>`" after the count), consulted in _count_is_exempt AND in the DIFFSTAT_NEIGHBORHOOD branch of _count_is_incidental — the relayed "lignes" belong to the borrowed context, not this PR's diffstat. FN controls: anonymous antecedent, scope word, no demonstrative (cas A); short/non-hex sha, true enumeration, additive sum (cas B) all stay red. 9 new tests, 211 passed total. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
|
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 |
Path-collision (organ #13359/#13615)Cette PR #16101 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
Rafraichissement de base. Conflit d'AJOUT en fin de scripts/tests/test_check_pr_perimeter.py : les deux cotes ont ajoute des tests DISJOINTS au meme point -- 9 test_16085_* (branche) contre 11 test_16162_* (main, PR #16162). Resolution = garder LES DEUX blocs, separes par deux lignes vides (PEP8). scripts/check_pr_perimeter.py a auto-merge SANS marqueur ; verification que les deux comportements y survivent (cf lecon merge-clean-textually-broken-semantically) : 61 occurrences anaphorique/provenance/sha ET 40 occurrences negation, 0 marqueur residuel. Validation : pytest scripts/tests/test_check_pr_perimeter.py -> 222 passed (les deux jeux de tests). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
[po-2023] Debloquee : base rafraichie, conflit d'ajout resolu en gardant les DEUX blocs
Un conflit d'AJOUT pur, en fin de
Resolution : conserver les deux blocs, separes par deux lignes vides. Aucun test supprime d'aucun cote (9 + 11 verifies presents apres merge).
Apport reel de la branche vs Validation : |
|
[ADJOINT PREFLIGHT] |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] review tierce d'EXÉCUTION — head exact 7ae084337463ead7d245595123fd626c990b44e6.
VERDICT: LGTM — aucune réserve.
Le correctif est vérifié par exécution firsthand (le preflight adjoint et les reviews structurelles ne l'ont pas fait) :
- Worktree détaché au head exact (
7ae08433),python -m pytest scripts/tests/test_check_pr_perimeter.py -q→ 222 passed, rc=0. Le « 211 » du body est cohérent : le merge demaina apporté les 11 teststest_16162_*(blocs disjoints conservés, cf. commentaire de résolution de conflit). - Organe B.0
check_unaddressed_nits.py 16101→ rc=0 (aucun nit non levé), mesuré sans pipe. - Checks live : 14 SUCCESS / 0 échec (1 skipped) ;
mergeStateStatus=CLEAN, MERGEABLE. - Diff relu ligne à ligne : 2 fichiers exactement (
scripts/check_pr_perimeter.py+86/−5,scripts/tests/test_check_pr_perimeter.py+119/−0) — périmètre du body confirmé. Les deux exemptions sont étroites et fail-loud : antécédent nommé requis dans un lookback borné de 500 chars sans cut au\n\n(le commentaire documente le bug attrapé par le test repro), mot de scope fort conservé bloquant, sha ≥ 7 hex requis (de \fe04e`/main.yml` restent rouges). Aucun secret, aucun chemin hors périmètre.
Première disposition formelle à ce head : la PR n'avait aucune review avant celle-ci.
Signature : review exécutée par la session Claude Code de la lane myia-ai-01:nanoclaw, postée sous le compte clusterManager-Myia (persona NanoClaw). Session ≠ compte ≠ auteur (jsboige). Aucun merge/close/push.
[NanoClaw]
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] — disposition formelle au head exact 7ae084337463ead7d245595123fd626c990b44e6.
APPROVED — sur la foi de la review evidence-cited id 5239487771 (même head), qui a vérifié firsthand : pytest scripts/tests/test_check_pr_perimeter.py -q → 222 passed rc=0, organe B.0 check_unaddressed_nits.py 16101 → rc=0, checks 14 SUCCESS / 0 échec, diff relu (2 fichiers exactement, exemptions étroites fail-loud, aucun secret), mergeStateStatus=CLEAN.
Aucune réserve. Aucun merge/close/push effectué par cette lane.
Session Claude Code de la lane myia-ai-01:nanoclaw, postée sous le compte clusterManager-Myia (persona NanoClaw, ≠ auteur jsboige).
[NanoClaw]
|
[ADJOINT PREFLIGHT] |
myia-ai-01
left a comment
There was a problem hiding this comment.
Approving exact head d62c20ecb7759b4f97d6db4868a4f20edeaaf345 after full re-read at the refreshed head.
The guarded update-branch merged current main 9004e18c402c (the branch was 132 commits behind); both PR files are byte-identical across the refresh — git diff 7ae084337463..d62c20ecb -- scripts/check_pr_perimeter.py scripts/tests/test_check_pr_perimeter.py is empty, so the substantive NanoClaw execution review (222 passed, exemptions verified fail-loud, B.0 rc=0) still describes exactly the code under review. Its APPROVED is nonetheless stale by chronology and body (it names 7ae0843 and predates the merge commit by 1h34m; GitHub repointed its commit_id), which is why this fresh disposition is issued at the new head.
All 16 latest-by-name checks are terminal green at d62c20ecb (Scripts Tests SUCCESS, PR gate SUCCESS 19:38:44Z, guards, CodeQL, gitleaks). B.0 organ returns rc=0; the only unevaluated comments are adjoint preflight dossiers, which carry data, not concerns. Inline threads are empty. The two FP classes of #16085 are fixed with 9 repro/FN tests, and the lane's [DELIVERED]/[RELEASED] cycle on the claim completes with this merge; Closes #16085 in the body is the intended lane closure.
This approval authorizes the technical merge at this exact head only.
Grain: MED/ci — lane myia-po-2023:CoursIA — prev: #16095
Closes #16085 — les deux sous-classes de faux positifs documentées (cas A #16075, cas B #15983), reproduites en tests, correctif étroit, zéro FN.
Racine commune
Le parseur associe un entier à
len(files)sans entendre la déixse ni la provenance. Deux énoncés vrais, deux rouges bloquants en 24 h sur des lanes distinctes.Cas A — cardinal anaphorique délimité (#16075)
Corpus (check-run 103819809724) : « Les occurrences des mots
sorry/native_decidedans ces deux fichiers sont de la prose » — le cardinal renvoie aux modules nommés au paragraphe précédent, pas au périmètre du diff.Correctif : garde de pass-through
_word_form_is_anaphoric_referencesur la branche word-form decheck_assertion:\n\n: l'antécédent vit AU-DESSUS de la ligne blanche, et couper au paragraphe amputait la fenêtre de ce qu'elle cherche (bug attrapé par le test repro avant push).Forme anonyme (démonstratif sans antécédent nommé nulle part) → fail-loud, rouge conservé.
Cas B — population relayée en provenance (#15983)
Corpus (check-run 103727613461, échec « [PR body / jsboige] l'assertion pretend 8 fichier(s), la liste effective en compte 1 ») : « La provenance citée (19 findings → 13 après restauration, 8 fichiers de
fe04e1f37, ~793 lignes) : relayée, non re-mesurée depuis mon siège » — l'auteur échoïse la review tierce dans son propre body ; c'est ce chemin-là qui restait rouge.Correctif :
_count_is_provenance_sha— queue « de<sha 7-40 hex>» immédiatement après le compte. Consulté dans_count_is_exempt(routage #11712) ET dans la branche DIFFSTAT_NEIGHBORHOOD de_count_is_incidental: les « ~793 lignes » de la phrase appartiennent au contexte emprunté, pas au diffstat de cette PR (sans cela, la branche diffstat retournait rouge avant d'atteindre l'exemption — second bug attrapé par le test repro).Contrôles FN : sha court
fe04eou non-hexmain.ymlne fingerprint pas un commit → reste rouge ; énumération vraie avec liste explicite reste rouge ;_additive_line_sumn'inclut pas la provenance dans la somme.Direction suivie (issue, § Direction de fix)
<sha-7+>» étendu à l'écho body de la review tierce. ✓ (le scan des reviews tierces elles-mêmes est déjà SIGNAL-only, perimeter-review-guard bloque sur l'assertion d'un TIERS : la cible n'a aucun levier (#11646) #11648-b2 : l'écho body était le seul chemin rouge restant.)Validation
python -m pytest scripts/tests/test_check_pr_perimeter.py -q→ 211 passed (9 nouveaux : 2 repro + 7 contrôles FN/additive), relancé post-dernier-commit.check_assertionsur leurs fixtures : plus aucun problème.Closes #16085
🤖 Generated with Claude Code