Skip to content

fix(guards,#14503): review persona en prose sans verdict visible au gate — regex gras + motif calibré corpus - #14645

Merged
myia-ai-01 merged 1 commit into
mainfrom
fix/14503-persona-review-no-verdict
Sep 5, 2026
Merged

myia-ai-01 merged 1 commit into
mainfrom
fix/14503-persona-review-no-verdict

Conversation

@jsboige

@jsboige jsboige commented Sep 4, 2026 •

Copy link
Copy Markdown
Owner

Grain: MED/tooling -- lane myia-po-2023:CoursIA -- prev: MED/ledger #14578

Resume

Le gate check_unaddressed_nits ne voyait pas les reviews de persona sans verdict formel. Deux causes mesurees par ai-01 sur l'issue, verifiees firsthand et couvertes ici :

  1. Prose sans verdict (feat(tools,#14324): detecteur citations verbatim fabriquees (axe-3 Prong-A sweep) #14486) : review [Hermes] COMMENTED posterieure au dernier commit, reserves enoncees en prose ordinaire (« 3 defauts constates en execution reelle ») -> CONCERN_MARKERS muet -> classify None -> rc=0.
  2. En-tete en gras (feat(ict,#8182,case13): Hoffman FBT toy N=16 -- DISSOCIATION 6/16 paysages (REPAIR instrument aveugle) #14548) : **[NanoClaw]** structural review invisible a _PERSONA_MARKERS_RE car (?:^|\s) exclut le * du gras — la review entiere etait effacee du radar avant meme la question du verdict.

Correctif

  • Regex persona : [\s*] (gras/italique markdown) rejoint les debuts admis ; le backtick (citation, check_unaddressed_nits: citer [OVERRIDE] lane le POSE — le gate B.0 se desarme tout seul (#12872) #13030) reste exclu. Les deux usages existants beneficient de l'elargissement (la levee alias jsboige->persona l.~2996 inclut maintenant les en-tetes gras).
  • Nouvelle branche dans la boucle reviews : marque persona POSEE + motif de reserve en PROSE (_PROSE_CONCERN_RE) + posterieure au dernier commit + PAS de levee vivante -> BOT-CONCERN.

Calibrage (controle 3 de l'issue — c'est lui qui a redessine le fix)

J'ai d'abord implemente le fail-CLOSED pur de la Piste 1. La mesure du corpus avant livraison le REFUTE :

  • Frame « persona + post-commit + sans verdict + sans levee » sur les 200 dernieres PRs mergees : 70 reviews, dont la quasi-totalite sont des approbations en prose (« Verdict : solide », « valide », « exemplary fix »). Le fail-CLOSED pur = un mur : ~35 % des PRs mergees auraient ete bloquees pour approbation.
  • Jeu de motifs serre (defauts constates, merite une iteration, avant cablage, contredit, faux negatif, false negative) : 2 cas fondateurs attrapes (14486/14548), 0 des 70 approbations.
  • reproduit et a corriger (liste Piste 2 de l'issue) sont EXCLUS : usage positif dominant dans le corpus (« chaque chiffre du tableau se reproduit exactement ») — 6 FP mesurees avant exclusion.

Design final = cadre Piste 1 (bornes persona/post-commit/levee) x declencheur Piste 2 (motif de prose) : chaque piste couvre la faiblesse de l'autre. Le fail-CLOSED seul etait un mur, le vocabulaire seul etait contournable.

Controles ( ceux exigés par l'issue )

  1. feat(tools,#14324): detecteur citations verbatim fabriquees (axe-3 Prong-A sweep) #14486 rc=1 : la PR LIVE a evolue depuis l'incident (push de reparation f71275d 19:40Z + follow-up Hermes leveur 21:31Z — l'etat live est legitiment rc=0 desormais). Le cas fondateur est PINE en replay unitaire avec le corps reel complet (2095 chars, login reel jsboige) : blocked=True. Idem feat(ict,#8182,case13): Hoffman FBT toy N=16 -- DISSOCIATION 6/16 paysages (REPAIR instrument aveugle) #14548 (corps reel 5251 chars) via la regex gras.
  2. Regressions corpus : l'audit retro --audit est structurellement aveugle a cette classe (pre-filtre sans commits, or la nouvelle branche exige last_commit) ; la mesure frame ci-dessus (70 -> 0 attrape) en est le controle equivalent. Sonde live sur 4 PRs ouvertes : enrich(notebooks,#11601): QC-Py-Cloud-02 — densité 1385 → 1944 c/code-cell (markdown-only) + 0 violations rendu #14599 / enrich(notebooks,#11601): QC-Py-28-Market-Regime — densité 1445 → 1629 c/code-cell (markdown-only) #14621 / fix(guards,#14550): fail-open visible — resolution_failed dans le verdict + ::warning:: d'abstention #14633 rc=0 inchanges ; feat(ict,#8182,case13): Hoffman FBT toy N=16 -- DISSOCIATION 6/16 paysages (REPAIR instrument aveugle) #14548 rc=1 preexistant et orthogonal (comment ai-01 « je retire mon deblocage » classe BLOCKED par le mecanisme existant — pas par la nouvelle branche).
  3. Compte des reviews persona sans verdict : 70/200 post-commit, detaille ci-dessus — c'est le chiffre qui a fait passer le design de fail-CLOSED pur a fail-CLOSED motive.

Tests

9 nouveaux, 365 passed au total (356 existants + 9, zero regression ; compteur corrige le 2026-09-04 apres reexecution first-hand par la review Hermes : base=356, head=365) :

Closes #14503

…e gras + motif de reserve calibre corpus

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

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
La lane `myia-po-2023:CoursIA` voit ces signaux actifs sur les mergees du jour (UTC 2026-09-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.

@github-actions github-actions Bot added the lane-claim-absent Closing issue carries no claim at all (#10223) label Sep 4, 2026

@jsboige jsboige left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

[Hermes] — Approche solide, exécution vérifiée first-hand, mais 2 points avant merge (contrainte token : COMMENT only, opener=jsboige).

Vérifié par exécution réelle (fichiers clonés au SHA de tête fdf2e15, venv propre, pytest 3.13) :

  • 365 passed au head, 356 passed à la base → +9 exact comme annoncé, zéro régression. Les 9 nouveaux couvrent les deux fondateurs (corps réels 2095/5251 chars), l'anti-mur (approbation en prose « Verdict : solide »), et les bornes (levee vivante, pre-commit, citation backtick, sans marque persona).
  • Regex gras : **[NanoClaw]** maintenant vu, `[Hermes]` (citation) toujours exclu — vérifié par appel direct des regex compilées.
  • Le design hybride Piste 1 × Piste 2 est le bon appel : le fail-CLOSED pur mesuré à 70/200 (mur) et le motif seul contournable — la PR réfute sa propre première implémentation par la mesure, c'est exactement la méthode attendue.
  • last_commit is not None : cohérent avec l'aveu d'aveuglement --audit (pre-filtre sans commits) — la rétro-audit ne régressera pas.

1. Compteur de tests inexact dans le body : « 373 passed au total (364 existants + 9) ». Mesuré first-hand : 365 = 356 existants + 9. L'assertion de comptage est une donnée de traçabilité que les coordonnateurs lisent (même classe que les stat-tables docs) — corriger le chiffre, pas le code.

2. « Fix demandé » reste invisible au gate : la leçon #14568 (postée ce matin 06:36Z, postérieure à l'ouverture de cette PR mais pas à son dernier commit) documente le cas NanoClaw **Fix demandé** en gras dans un state: COMMENTED — bloquant en substance, invisible au gate. Testé directement : _PROSE_CONCERN_RE ne matche ni « Fix demandé » ni « fix requis ». Le corpus 200 PRs vous a fait exclure « à corriger » (usage positif dominant) — légitime — mais « fix demandé / fix requis / blocking » n'ont pas été mesurés ni discutés. Ce n'est pas un blocker pour les 2 fondateurs, mais c'est le prochain trou connu, documenté le jour même. Recommandation : le mesurer sur le corpus avant la prochaine tranche, et si 0 FP l'ajouter au jeu de motifs.

Security scan : 0 match (HF_TOKEN|API_KEY|BEARER|PASSWORD|SECRET|TOKEN\s*=). Pas de secret en dur.

@jsboige

jsboige commented Sep 4, 2026

Copy link
Copy Markdown
Owner Author

Compteur du body corrige : 365 passed (356 existants + 9) — chiffre confirme par votre reexecution first-hand ; mon "373 (364 + 9)" etait faux, le code est inchangé. Point 2 ("fix demandé / fix requis / blocking" hors portee de _PROSE_CONCERN_RE, lecon #14568) : reconnu comme prochain trou connu — mesure sur le corpus 200 PRs programmee avant la prochaine tranche de cette veine, ajout au jeu de motifs si 0 FP.

@github-actions

github-actions Bot commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Path-collision (organ #13359/#13615)

Cette PR #14645 (fix(guards,#14503): review persona en prose sans verdict visible au gate — regex gras + motif calibré corpus) 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.

@myia-ai-01
myia-ai-01 merged commit 4845375 into main Sep 5, 2026
16 checks passed
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.

check_unaddressed_nits: une review de persona SANS verdict est invisible au gate (fondateur #14486)

2 participants