You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Audit Argument_Analysis_Gouvernance_Multi_Agents : le carnet de référence de la série — en-tête et §7 vérifiés exacts (comptes de lignes, 4 deltas, code mort, défaut conservé) ; reste la garde d'équivalence d'une fusion 4→1 #18480
Constat (mesuré sur le carnet Argument_Analysis_Gouvernance_Multi_Agents.ipynb, 34 cellules)
Ce carnet est la re-fondation (PR #17353, sous-grain 2 de l'EPIC #4960) de la gouvernance multi-agents. Il déclare ses deux sources d'entrée en cellule 0 :
le troncargumentation_analysis/agents/core/governance/ du dépôt EPITA ;
le carnet sasdocs/coursia_contrib/governance_voting_methods.ipynb ;
et la généalogie : 2.1.6_multiagent_governance_prototype (projet étudiant, juin 2025), « le tronc en est Adapted from et l'a corrigé ».
Il charge son organe par sys.path (governance_methods.py, 512 lignes, dans le dossier de la série) et consacre sa §7 « Limites mesurées de la distillation » à énumérer ce qu'elle a retenu, corrigé, laissé de côté — et le défaut qu'elle a délibérément conservé.
C'est le premier carnet de la série dont toutes les revendications vérifiables se confirment au tronc. Elles ont été mesurées une à une.
Les revendications, vérifiées une à une
revendication
où
vérification
verdict
4 fichiers amont et leurs comptes : 137 / 344 / 270 / 118 lignes
en-tête de l'organe
git show origin/main:…/governance/{governance_methods,social_choice,governance_agent,metrics}.py | wc -l
exact (137/344/270/118)
« 15 algorithmes, pas 7 méthodes » — 5 scrutins + 2 protocoles + 8 choix social (#1981)
cellule 0, en-tête
SCRUTINS / PROTOCOLES / SOCIAL_CHOICE = 5 / 2 / 8 ; les 15 def existent au tronc (7 dans governance_methods.py, 8 dans social_choice.py)
git log : 328df1af0 2026-09-24 fix(governance): consensus metrics name what they could not compute instead of a 0.0 or a None (#2576)
exact (date incluse)
#1273 — consensus_rate traite les 3 formes de votes
§7
metrics.py:12 documente et implémente les trois formes (liste séquentielle, table par option, table par agent)
exact
#971 — Kemeny-Young > 8 options lève ValueError ou replie sur Copeland en le disant
§7
social_choice.py:167 lève ValueError ; :208 kemeny_young_safe fait le repli Copeland
exact (les deux formes)
« la boucle Simulation du prototype : son simulate_governance n'appelait jamais method_fn — code mort »
§7
2.1.6_.../governance/simulation.py : method_fn apparaît une seule fois dans tout le fichier — l'affectation l.72. Aucun appel, ni dans la branche adjacency (retour anticipé par gossip), ni dans la branche coalitions (le vainqueur vient de tally sur leader.preferences[0])
exact
« Défaut conservé : quadratic_voting n'implémente pas le coût quadratique annoncé (aucune somme de carrés) — le tronc l'a conservé tel quel »
§7
tronc governance_methods.py:79 : allocation budget // 2 au premier choix, le reste au second ; aucune somme de carrés. L'organe vendu porte le même algorithme et le documente in-code en avertissement
exact, et honnêtement divulgué
l'Agent est un « Port du Agent de agents/core/governance/governance_agent.py »
organe
même personnalités / préférences / confiance / Q-learning ; plus un rng injectable par instance (4 appels self.rng.), là où l'amont tire son aléa du RNG global numpy (np.random.rand/choice)
Il défait une erreur de catégorie au lieu de la propager. Le tronc interdit nommément « 7 méthodes de vote » (fix(catalog): resync ALL + SymbolicAI maturity markers (unblock drift CI fleet-wide) #1981) ; le carnet ouvre là-dessus, l'explique en tableau, et la catégorisation est structurelle (trois dictionnaires distincts dans l'organe), pas un commentaire. Les carnets qui répètent le mauvais compte ne peuvent pas invoquer l'ignorance.
Il divulgue le défaut qu'il aurait pu cacher.quadratic_voting ne fait pas ce que son nom annonce ; le carnet le dit dans sa §7, l'organe le dit dans sa docstring, et l'exercice 1 en fait la réparation. Un défaut divulgué et exercé vaut mieux qu'un défaut tu.
La généalogie est nommée et exacte : le prototype étudiant est cité, le tronc est dit « Adapted from » et corrigé, et le carnet précise qu'il distille les consolidations du cœur, « pas le projet étudiant figé de juin 2025 ».
Le résidu : la garde d'équivalence absente sur le plus gros organe vendu
Ce n'est pas un défaut du carnet mais une exposition qu'il rend visible. L'organe vendu est une fusion 4 → 1 : 869 lignes amont (137 + 344 + 270 + 118) refondues en 512. Une évolution du tronc dans n'importe lequel des quatre fichiers amont ne se voit nulle part côté CoursIA.
Or la convention de garde existe pour la même famille d'artefacts : tests/unit/coursia/<nom>/test_<nom>_roundtrip.py, présente pour huit d'entre eux (ai_shield, argumentation_schemes, belief_revision, communication_channels, counter_argument_strategies, dev_tools, dialogue_protocols, privacy_mining). Aucune ne concerne la gouvernance.
Le profil correspond pourtant exactement à ce que la convention teste : l'organe est stdlib pure + numpy, déterministe, sans LLM, sans JVM. Et la §7 du carnet énumère déjà les invariants à épingler — les trois familles (5/2/8), les quatre deltas corrigés, et le défaut conservé. Un test_governance_methods_roundtrip.py qui rejoue le scénario du club et affirme que quadratic_votingn'est pas quadratique (pour que la correction de l'exercice 1 rougisse le jour où le tronc le répare) écrirait noir sur blanc ce que la §7 promet.
Ce que cet audit n'a PAS mesuré
L'équivalence comportementale des 15 algorithmes entre l'organe vendu et le tronc n'est pas mesurée ici. Un harnais de comparaison directe a été tenté et a échoué à construire l'Agent amont : les deux contrats diffèrent (le vendu prend rng=, l'amont non), donc les deux côtés ne sont pas comparables run-à-run sans contrôler les deux RNG. Aucun verdict n'est donné sur l'équivalence — ni « identique », ni « divergente ». C'est le trou à combler par la garde proposée ci-dessus, pas une conclusion à anticiper.
Vérification (reproductible)
# 1. les quatre comptes de lignes de l'en-têteforfin governance_methods social_choice governance_agent metrics;do
git show origin/main:argumentation_analysis/agents/core/governance/$f.py | wc -l
done# 137 / 344 / 270 / 118# 2. les trois familles de l'organe vendu
python -c "import governance_methods as g; print(len(g.SCRUTINS), len(g.PROTOCOLES), len(g.SOCIAL_CHOICE))"# 5 2 8# 3. le dernier fix amont et sa date
git log -1 --format="%h %ad %s" --date=short origin/main -- \
argumentation_analysis/agents/core/governance/metrics.py
# 4. le code mort du prototype : method_fn n'est jamais appelé
git show origin/main:2.1.6_multiagent_governance_prototype/governance/simulation.py | grep -c "method_fn"# 1# 5. le défaut conservé
git show origin/main:argumentation_analysis/agents/core/governance/governance_methods.py | sed -n '79,95p'# 6. la garde absente
ls tests/unit/coursia/ # 8 familles, aucune gouvernance
Tronc EPITA au permalien bfff7542bcadc34b1d8ad0a9ae2650c5d3440fe9 : agents/core/governance/{governance_methods,social_choice,governance_agent,metrics}.py, 2.1.6_multiagent_governance_prototype/governance/simulation.py.
Constat (mesuré sur le carnet
Argument_Analysis_Gouvernance_Multi_Agents.ipynb, 34 cellules)Ce carnet est la re-fondation (PR #17353, sous-grain 2 de l'EPIC #4960) de la gouvernance multi-agents. Il déclare ses deux sources d'entrée en cellule 0 :
argumentation_analysis/agents/core/governance/du dépôt EPITA ;docs/coursia_contrib/governance_voting_methods.ipynb;2.1.6_multiagent_governance_prototype(projet étudiant, juin 2025), « le tronc en est Adapted from et l'a corrigé ».Il charge son organe par
sys.path(governance_methods.py, 512 lignes, dans le dossier de la série) et consacre sa §7 « Limites mesurées de la distillation » à énumérer ce qu'elle a retenu, corrigé, laissé de côté — et le défaut qu'elle a délibérément conservé.C'est le premier carnet de la série dont toutes les revendications vérifiables se confirment au tronc. Elles ont été mesurées une à une.
Les revendications, vérifiées une à une
git show origin/main:…/governance/{governance_methods,social_choice,governance_agent,metrics}.py | wc -lSCRUTINS/PROTOCOLES/SOCIAL_CHOICE= 5 / 2 / 8 ; les 15defexistent au tronc (7 dansgovernance_methods.py, 8 danssocial_choice.py)git log:328df1af0 2026-09-24 fix(governance): consensus metrics name what they could not compute instead of a 0.0 or a None (#2576)consensus_ratetraite les 3 formes devotesmetrics.py:12documente et implémente les trois formes (liste séquentielle, table par option, table par agent)ValueErrorou replie sur Copeland en le disantsocial_choice.py:167lèveValueError;:208 kemeny_young_safefait le repli CopelandSimulationdu prototype : sonsimulate_governancen'appelait jamaismethod_fn— code mort »2.1.6_.../governance/simulation.py:method_fnapparaît une seule fois dans tout le fichier — l'affectation l.72. Aucun appel, ni dans la brancheadjacency(retour anticipé par gossip), ni dans la branche coalitions (le vainqueur vient detallysurleader.preferences[0])quadratic_votingn'implémente pas le coût quadratique annoncé (aucune somme de carrés) — le tronc l'a conservé tel quel »governance_methods.py:79: allocationbudget // 2au premier choix, le reste au second ; aucune somme de carrés. L'organe vendu porte le même algorithme et le documente in-code en avertissementAgentest un « Port duAgentdeagents/core/governance/governance_agent.py»rnginjectable par instance (4 appelsself.rng.), là où l'amont tire son aléa du RNG global numpy (np.random.rand/choice)Ce qui fait de ce carnet le cas de référence
quadratic_votingne fait pas ce que son nom annonce ; le carnet le dit dans sa §7, l'organe le dit dans sa docstring, et l'exercice 1 en fait la réparation. Un défaut divulgué et exercé vaut mieux qu'un défaut tu.Le résidu : la garde d'équivalence absente sur le plus gros organe vendu
Ce n'est pas un défaut du carnet mais une exposition qu'il rend visible. L'organe vendu est une fusion 4 → 1 : 869 lignes amont (
137 + 344 + 270 + 118) refondues en 512. Une évolution du tronc dans n'importe lequel des quatre fichiers amont ne se voit nulle part côté CoursIA.Or la convention de garde existe pour la même famille d'artefacts :
tests/unit/coursia/<nom>/test_<nom>_roundtrip.py, présente pour huit d'entre eux (ai_shield,argumentation_schemes,belief_revision,communication_channels,counter_argument_strategies,dev_tools,dialogue_protocols,privacy_mining). Aucune ne concerne la gouvernance.Le profil correspond pourtant exactement à ce que la convention teste : l'organe est stdlib pure + numpy, déterministe, sans LLM, sans JVM. Et la §7 du carnet énumère déjà les invariants à épingler — les trois familles (5/2/8), les quatre deltas corrigés, et le défaut conservé. Un
test_governance_methods_roundtrip.pyqui rejoue le scénario du club et affirme quequadratic_votingn'est pas quadratique (pour que la correction de l'exercice 1 rougisse le jour où le tronc le répare) écrirait noir sur blanc ce que la §7 promet.Ce que cet audit n'a PAS mesuré
L'équivalence comportementale des 15 algorithmes entre l'organe vendu et le tronc n'est pas mesurée ici. Un harnais de comparaison directe a été tenté et a échoué à construire l'
Agentamont : les deux contrats diffèrent (le vendu prendrng=, l'amont non), donc les deux côtés ne sont pas comparables run-à-run sans contrôler les deux RNG. Aucun verdict n'est donné sur l'équivalence — ni « identique », ni « divergente ». C'est le trou à combler par la garde proposée ci-dessus, pas une conclusion à anticiper.Vérification (reproductible)
Tronc EPITA au permalien
bfff7542bcadc34b1d8ad0a9ae2650c5d3440fe9:agents/core/governance/{governance_methods,social_choice,governance_agent,metrics}.py,2.1.6_multiagent_governance_prototype/governance/simulation.py.Liens
votes), fix(docs): align stale notebook counts and fix broken link in READMEs #2576 (métriques non-calculables), fix(ml): train_tft.py multi-seed + walk-forward bug #971 (Kemeny-Young), enrich(GenAI): add exercises to 15 Texte + Image/examples + Vibe-Coding notebooks (See #2161) #2344 (parent du fix fix(docs): align stale notebook counts and fix broken link in READMEs #2576)