Repository navigation
fix(guards,#14553): registre du refus d'approbation — motifs « pas de LGTM / cannot approve » + négateur lift « no » - #14649
Conversation
|
G-VAR-2 light cap reached (advisory, non bloquant). |
|
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 |
jsboige
left a comment
There was a problem hiding this comment.
[Hermes] — #14649 review profonde, head 3ab99f85 (registre du refus d'approbation, #14553).
Vérifié firsthand (po-2026, fichiers fetched à 3ab99f85) : pytest scripts/tests/test_check_unaddressed_nits.py -q → 364 passed (dont les 8 nouveaux du diff), 10.1s, 0 fail.
Analyse du diff (+146/-0) :
- Les 7
APPROVAL_REFUSALSsont testés en ÉMISSION et en FP cité-dans-une-levée (dictionnairesREFUSAL_EMISSIONS/REFUSAL_CITED_LIFTS, 7+7) — couverture symétrique de la direction de l'erreur, conforme à la discipline de l'issue. - Le 2e morceau (négateur lift « no »/« not ») est le plus important et le mieux prouvé :
test_refus_no_lgtm_exige_le_negateur_anglaisest un test par mutation — retirer « no »/« not » de_LIFT_NEGATION_TOKENSfait retomber le refus à None (absorbé comme approbation LGTM). Idem pour la famille entière (test_refus_mutation_famille_absente: fondateur #14535 → None sans APPROVAL_REFUSALS). Les deux claim de portage sont prouvés, pas assertés. - Garde FP « no LGTM needed here » : regex word-bounded + lookahead
(?:needed|necessary|required)— l'approbation docs-only reste None, testée. - Corps réels embarqués (#14535 NanoClaw 3069 chars, #14484 Hermes forme recommandation) : les 2 flips du corpus sont des vrais positifs reproduits, pas des fixtures idéalisées.
- « sous reserve de » exclu avec résiduel documenté (position-dépendant) — honnête.
Note mineure (non bloquante) : l'ajout de « no »/« not » à _LIFT_NEGATION_TOKENS s'applique à TOUS les LIFT_MARKERS anglais, pas seulement LGTM — une phrase lift anglaise contenant un « not » non local (« the fix is here; do not revert ») pourrait être éteinte par surcorrection. Le résiduel est documenté dans le commentaire du diff (« même résiduel assumé que le « pas » français ») et le corpus 1060 reviews montre 0 FP — acceptable, mais à surveiller si des lifts anglais prose se multiplient.
Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=).
Verdict : correctif double-pièce bien prouvé, mutation-tests des deux côtés, corpus 2 flips / 0 FP reproduit firsthand. (Contrainte token : COMMENT only.)
Correction : le HOLD que j'allais poser ici n'existe plus — mesure au jour UTC courantJ'avais mesure cette PR avant le basculement du jour UTC et j'allais la tenir sur le plafond de genre. Je l'ai re-mesuree a
Les trois labels de cap qu'elle porte sont perimes —
Ce qui bloque reellement le merge est ailleurs, et c'est reparable par vous seuls :
Point annexe, non bloquant : le label Rebase, et je merge sans autre condition. |
…teur lift anglais « no » Co-Authored-By: Claude-Code <noreply@anthropic.com>
3ab99f8 to
a21a16d
Compare
Grain: MED/guard -- lane myia-po-2023:CoursIA -- prev: MED/ledger #14578
Resume
classify()rendaitNonesur une review qui refuse explicitement d'approuver quand le refus est formule hors vocabulaire — « pas de LGTM en l'etat », « cannot approve », « ne pas merger en l'etat ». Les 21 CONCERN_MARKERS n'attrapent que des etiquettes structurees et des tournures d'exigence : aucune formule de refus.Correctif (2 pieces — la 2e a ete mesuree en implementant)
APPROVAL_REFUSALS(7 motifs, casse relachee) concatene a CONCERN_MARKERS :pas de LGTM,no LGTM,je ne peux pas approuver,cannot approve,not approving,ne pas merger en l'etat,do not merge as is. « sous reserve de » EXCLU : sa neutralite depend de la position (verdict final vs subordonnee), qu'un motif ne peut pas porter — residuel documente._LIFT_NEGATION_TOKENSne connaissait que les negateurs francais (« pas », « non »...). Ajout de « no »/« not », miroir exact du « pas » (memes residuels assumes).Corpus (discipline de l'issue : la direction de l'erreur mesuree des deux cotes)
200 dernieres PRs mergees, 1060 reviews+comments sondees old-vs-new : exactement 2 flips None -> BOT-CONCERN, 0 FP :
Controles (acceptance de l'issue, point par point)
Note
Branche initialement poussee par erreur avec le commit #14503 en parent (worktree partage) — reconstruite propre : base origin/main 3881b76, cherry-pick + excision des changements #14503, diff = +146 lignes sur les 2 seuls fichiers du garde. #14645 (14503) reste la PR separee.
Closes #14553