Skip to content

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

Description

@jsboige

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 tronc argumentation_analysis/agents/core/governance/ du dépôt EPITA ;
  • le carnet sas docs/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) exact
dernier fix amont 2026-09-24 = #2576 en-tête 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) exact — et c'est une amélioration, pas une dérive

Ce qui fait de ce carnet le cas de référence

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_voting n'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ête
for f in 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.

Liens

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions