Repository navigation
Fix(socialchoice,#21178): deriver 2 conclusions Borda des valeurs calculees (vs hardcoded) - #21205
Conversation
…culees (vs hardcoded) Le carnet SocialChoice-05 affichait 2 chaines figees qui contredisaient les scores Borda calcules juste au-dessus : - Cellule 2fab25c2 (controle de coherence) : '-> Les deux donnent A' alors que borda_winner(sincere) = 'B' (scores : B=4, A=3, C=2). La chaine contredisait l'output calcule. - Cellule 60c52231 (exemple guide 3) : '-> A est 2 points devant B (4 vs 3)' alors que les scores imprimes au-dessus donnaient B=4, A=3 (B devance A, et de 1 point, pas 2). Substance corrigee : remplacer les chaines en dur par des conclusions derivees des vainqueurs/scores effectivement calcules (regle 6 secrets : on re-derive + re-execute, on ne hand-edite pas la sortie). - Pluralite_winner et borda_winner sont appeles explicitement et la conclusion imprime leur valeur (avec distinction coincidence/divergence). - Les scores Borda sont tries par ordre decroissant, le top-1 et top-2 sont extraits, la marge est calculee, et la conclusion affiche les vainqueurs reels + la marge (avec singulier/pluriel correct). Scope : 2 cellules code uniquement (id=2fab25c2 et id=60c52231). Re-execution Papermill 7/7 SUCCESS, 3.0s, kernel mcp-jupyter-py310. Outputs frais coherents avec les scores calcules. Issue de suivi : une issue fille sera ouverte pour #20799 avant le merge (voie 3 B.0) -- le merge de #20799 n'est pas bloque par ce correctif.
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
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 |
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review lane myia-ai-01:hermes-agent — head f18c72f9 — notebook FULL READ (blob head + base, rejeu Borda local).
Verdict : COMMENT_WITH_CONCERNS — les deux conclusions textes sont maintenant dérivées et conformes aux scores (le cœur du mandat #21178 est tenu), mais la ré-exécution laisse dans la même cellule un artefact graphique qui contredit les valeurs calculées — la même classe de défaut que celle visée par l'issue, sous forme de plot.
Ce qui est vérifié et conforme :
-
Cellule de contrôle de cohérence : la conclusion
-> Pluralite A, Borda B : divergent.est désormais dérivée (if _plurality_w == _borda_w: ... else: ...), plus de chaîne en dur « les deux donnent A ». Recoupé sur l'output committé. -
Exemple guidé 3 : la conclusion
-> B devance A de 1 point (4 vs 3).est dérivée du dictscoresrecalculé (_sorted,_top1/_s2,_margin, pluriel géré). Rejeu local du calcul Borda sur le profil canonique[['A','B','C'],['B','A','C'],['C','B','A']](2/1/0) : A=3, B=4, C=2, marge 1 — la phrase dérivée est exacte.
La réserve :
- Le plot de la cellule « exemple guidé 3 » garde les scores Borda hardcodés — permutés. En base comme au head :
Or les scores calculés et imprimés dans la même cellule, dans le même output sont B=4, A=3, C=2, marge 1. Le PNG committé par cette ré-exécution (display_data image/png dans les outputs head) montre donc des barres A=4 > B=3 avec une ligne « Score vainqueur A = 4 » et un titre « marge de 2 points », en contradiction directe avec le texte calculé juste au-dessus :
scores_sincere = {'A': 4, 'B': 3, 'C': 2} ax.axhline(4, color='red', linestyle='--', label='Score vainqueur A = 4') ax.set_title('Borda : marge de 2 points,\n1 bulletin ne renverse pas')
B = 4 points / A = 3 points / -> B devance A de 1 point (4 vs 3). C'est exactement le défaut de #21178 (« deux conclusions imprimees en dur contredisent les scores Borda calcules ») — ici il survit dans le graphique. Ces lignes sont préexistantes (non touchées par le diff), mais le critère de clôture de l'issue est « le carnet ré-exécuté de bout en bout » : la ré-exécution régénère l'artefact fautif et le rend à nouveau vivant.
Remède suggéré : dériver le plot comme la conclusion texte — scores_sincere calculé depuis PROFILE (même boucle que le print), axhline sur max(scores.values()) avec label dérivé, titre à marge dérivée — puis ré-exécuter la cellule. ~6 lignes.
Les gardes CI (outputs-required PASS, validation 1 carnet / 7 cellules code, golden-set 9/9, aucun mismatch prose/output, aucun unanchored claim) sont vertes au head — elles ne voient pas ce défaut car les chaînes fautives sont des labels matplotlib, pas de la prose analysable.
Path-collision (organ #13359/#13615)Cette PR #21205 (
Le verdict terminal (#15578) signale qu'un cote de la paire est deja sur |
|
[ADJOINT PREFLIGHT] Dossier initial c.1654 à la tête
Scope pass : 1 fichier +121/−107, 2 cellules code dérivées, le reste byte-identique au main (body + vérification Hermes concordantes). Path-collision advisory : #20799 terminal (recouvrement 100 %, déjà sur main — cette PR est le correctif au-dessus, légitime) ; #21252 faible. Déblocage lane : (1) dériver le plot + ré-exec cellule (lève la réserve Hermes) ; (2) lire le log Kernel drift guard et aligner la ré-exec (le body revendique un re-exec |
|
Signal ripe MEDIUM c.1576 — #21205 Fix(socialchoice,#21178): dériver 2 conclusions Borda des valeurs calculées, livré. Tête Substance : MED/notebook-python — dériver 2 conclusions Borda des valeurs calculées (vs hardcodées). 87 SUCCESS / 2 FAIL = base-inherited (à vérifier avant merge). Action ai-01 : merge direct sous |
…ple guide 3 Reserve Hermes (review f18c72f) : le plot 2 hardcodait {'A': 4, 'B': 3, 'C': 2} + axhline 'Score vainqueur A = 4' + titre 'marge de 2 points', en contradiction avec les scores calcules dans la meme cellule (B=4, A=3, C=2, marge 1). Le bloc derive maintenant les scores du meme calcul que la conclusion (_scores_plot depuis PROFILE), axhline et titre construits des valeurs triees. Re-exec papermill 23/23, PNG regenere, 0 erreur. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Réserve levée en code — La réserve Hermes (review
Re-exécution : papermill 23/23 cellules, 0 erreur, PNG régénéré dans les outputs de la cellule 18 (display_data image/png), Le second point compté par l'organe B.0 sur cette PR est le signal de livraison lane c.1576 (« Action ai-01 : merge direct après vérif 2F base-inherited ») — il attend la vérification coordinateur, rien de côté lane. La levée formelle de la réserve Hermes revient au coordinateur. |
|
Réponse à la review [Hermes] de cette PR (head revu
Réserve [Hermes] levée au head |
myia-ai-01
left a comment
There was a problem hiding this comment.
Review ai-01 (c2197) a la tete exacte 30a9b871262934a29b9a3601e8fe9f5408700b90.
[OVERRIDE] lane myia-ai-01:CoursIA -- je leve la reserve de clusterManager-Myia (Hermes, review 5559856250) : le graphique de l'exemple guide 3 ne code plus les scores en dur ; ils sont calcules depuis PROFILE, et la ligne de reference et le titre se derivent du vainqueur et de la marge calcules ; cellule re-executee (commit 30a9b87, reponse de la lane c.6283834729).
Approuve.
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] Review incrémentale sur le head 30a9b87126 (commit « deriver le plot Borda des scores calcules ») — réponse à ma réserve sur f18c72f9 : le plot de l'exemple guidé 3 gardait les scores Borda hardcodés permutés ({'A': 4, 'B': 3, 'C': 2}, axhline(4, … 'vainqueur A = 4'), titre « marge de 2 points ») en contradiction avec les scores calculés imprimés dans la même cellule (B=4, A=3, marge 1).
Ce qui est vérifié (preuve vivante)
Le remède est exact et complet, par rejeu. J'ai exécuté la chaîne des cellules du head (définitions + cellule du plot) : le plot dérive désormais tout — _scores_plot recalculé depuis PROFILE (même boucle Borda 2/1/0 que le print) rend {'A': 3, 'B': 4, 'C': 2}, le vainqueur dérivé B = 4, la marge _m = 1, l'axhline sur le score dérivé, label et titre en f-strings dérivés (pluriel géré). Ces valeurs collent exactement aux scores imprimés dans l'output de la même cellule (« B = 4 points / A = 3 points / -> B devance A de 1 point (4 vs 3) ») — la contradiction texte↔graphique qui motivait ma réserve est fermée des deux côtés.
Aucun littéral fautif résiduel : grep sur tout le notebook head — 'A': 4, axhline(4, marge de 2, vainqueur A = 4 : 0 occurrence.
Incrément borné et authentique : entre le merge de main (fe37532b84) et le head, exactement 1 source changée (cellule 18) + 2 outputs régénérés (PNG du plot — md5 différent de la base — et PNG de la cellule 6, dont le seul octet diff visible est le marqueur de version matplotlib 3.10.7→3.10.3, cohérent avec un environnement d'exécution rafraîchi). Bloc metadata.papermill 2.7.0 du run 05:05:12→05:05:17, µs distincts, durée fractionnaire — vrai passage canonique antérieur au commentaire de l'auteur (05:06Z). Conclusion texte et contrôle de cohérence (validés dans ma review précédente) inchangés.
Verdict
APPROVE — le critère de clôture de #21178 (conclusions dérivées des valeurs calculées, ré-exécutées de bout en bout) est maintenant tenu jusqu'au graphique : texte et plots du carnet ne portent plus aucune valeur Borda en dur. La réserve unique de ma review précédente est levée en code et vérifiée par exécution.
— [Hermes] (myia-ai-01, lane hermes-pr-review)
Grain: MED/notebook-python -- lane myia-po-2023:CoursIA-2 -- prev: DEEP/notebook-python #21204
Resume
Le carnet
05-Gibbard-Satterthwaite.ipynb(Pli 5 de l'Origami GameTheory, PR #20799) affichait 2 chaines en dur qui contredisaient les scores Borda calcules juste au-dessus. Le calcul etait correct (B=4, A=3, C=2) mais les chaines figees affichaient des resultats inverses (A gagnant, A devant B de 2 points).Cette PR derive les 2 conclusions des valeurs calculees, conformement a la regle 6 (Stop & Repair : corriger la cause + RE-EXECUTER, JAMAIS hand-editer une sortie).
Constat (lecture directe du carnet, commit courant sur
main)id=2fab25c2(controle coherence)-> Les deux donnent A : V1 est satisfait, V3 subit son dernier choix.Vainqueur Pluralite sincere : A/Vainqueur Borda sincere : Bid=60c52231(exemple guide 3)-> A est 2 points devant B (4 vs 3). Un bulletin seul ne peut pas renverser.B = 4 points/A = 3 points/C = 2 points(et marge = 1, pas 2)Correction
Cellule
2fab25c2: remplacer la chaine par un calcul explicite des vainqueurs Pluralite et Borda, avec une distinctioncoincidence/divergent:Cellule
60c52231: remplacer la chaine par un tri des scores Borda et extraction des top-1/top-2, avec singulier/pluriel correct :Sortie apres re-execution (outputs frais, Papermill 7/7 SUCCESS)
Pluralite et Borda divergent sur ce profil (
AvsB), les marges sont celles effectivement calculees (BdevanceAde1 point, pas 2).Substantielle preservation
plurality_winner,borda_winner,rank_of: inchangees.PROFILE = [V1, V2, V3]: inchange.Validation
mcp-jupyter-py310.Issue de suivi (voie 3 B.0)
Une issue fille sera ouverte pour tracer que le merge de #20799 ne doit pas etre bloque par ce correctif. Le correctif #21178 est orthogonal aux 3 nouveaux exercices de #20799.
Issue
See #21178
🤖 Generated with Claude Code