Skip to content

Argument_Analysis : certifier l'integrite structurelle de la taxonomie vendorisee (cibles crossLink, fermeture de l'arbre, coherence depth) #22730

Closed

Description

@jsboige

Part of #4960

Constat

La taxonomie des sophismes vendorée dans CoursIA (data/argumentum_fallacies_taxonomy.csv, copie verbatim de ArgumentumGames/Argumentum) est consommée par plusieurs carnets et scripts de la série Argument_Analysis :

  • scripts/fallacy_detection/argumentum_taxonomy_explorer.py monte l'arbre des sophismes à partir de la colonne path ;
  • Argumentation-Onto-02-CrossLinks-CSV-Python.ipynb lit les huit colonnes crossLink_* comme les arêtes d'un graphe ;
  • scripts/fallacy_detection/cartesian_dataset_builder.py échantillonne des nœuds par famille.

La garde existante (tests/test_argumentum_snapshot_integrity.py) certifie que la copie locale est octet pour octet celle du pin déclaré — c'est la garantie de provenance. Elle ne certifie pas que la copie est cohérente avec elle-même.

Or les propriétés que les carnets consomment réellement sont structurelles :

  1. l'intégrité référentielle — chaque cible d'une relation crossLink_* doit désigner un nœud de l'arbre ;
  2. la fermeture de l'arbre — chaque nœud doit avoir un parent présent ;
  3. la cohérence de la profondeur — la colonne depth doit porter le nombre de segments du path.

Une copie peut être fidèle à son pin et structurellement cassée : une cible crossLink_* qui ne désigne rien disparaît silencieusement de tous les carnets (le lien ne résout vers rien, et rien ne dit que rien ne résolvait). C'est la même famille de panne que la dérive silencieuse de sept semaines documentée dans le module voisin, prise par l'autre bout.

Mesure sur la copie locale (pin 6bc573f73, 1408 sophismes, 104 colonnes)

Mesure Valeur
arêtes crossLink 581 (40 cellules portent plusieurs cibles séparées par ;)
nœuds portant au moins un lien 487 (34,6 % du corpus)
degré sortant maximal / moyen 4 / 1,19
cibles non résolues 0 (581/581 résolues)
chemins orphelins 0 (l'arbre est fermé)
boucles directes 0
écarts depth / segments du path 1

Réciprocité par relation (une arête est réciproque si l'arête inverse existe dans la même relation) :

Relation arêtes sources réciproques taux
Mirrors 2 2 2 100 %
Opposes 25 23 12 48 %
Inverts 41 41 20 49 %
Leverages 327 295 20 6 %
PredatesOn 31 31 0 0 %
Denounces 9 9 0 0 %
Allows 60 56 0 0 %
IsRelatedTo 86 82 0 0 %

Deux lectures que rien ne documentait jusqu'ici : les relations bilatérales (Opposes, Inverts, Mirrors) le sont effectivement dans le CSV, les relations de dépendance (Leverages, Allows) et les relations de contexte (IsRelatedTo, PredatesOn, Denounces) ne le sont pas — la flèche y est orientée par construction. Un carnet qui lit Opposes comme une relation symétrique sans le dire se trompe ; un carnet qui lit Leverages comme symétrique se trompe aussi, et plus silencieusement.

Finding : un écart de profondeur en amont

PK 824, path 5.1.2.3.2.24 : la colonne depth vaut 7 alors que le path compte 6 segments. Ses frères (5.1.2.3.2.1, .2, .3) portent depth 6. C'est le seul écart du corpus (1407/1408 conformes, la racine 0 exceptée). L'organe le mesure et le tolère explicitement (tolérance 1 %) : la correction appartient à l'amont, pas au dépôt.

Ce que la PR apporte

  • scripts/fallacy_detection/argumentum_taxonomy_integrity.py — un organe de mesure : il lit la copie locale, extrait le graphe crossLink (une arête par cible, cellules multi-cibles comprises), mesure couverture, degré, réciprocité par relation, et confronte six invariants structurels. Exécutable (--json pour la sortie machine), sans dépendance hors stdlib.
  • scripts/fallacy_detection/tests/test_argumentum_taxonomy_integrity.py — la garde qui refute ces six invariants quand ils cessent de tenir.

Les invariants sont indépendants du contenu : aucun compte de lignes, de colonnes ou d'arêtes n'est figé (ces comptes changent à chaque resynchronisation amont, et un test qui les fige rougit sur un CSV sain). Ce qui est figé, ce sont les relations entre ces comptes et les propriétés de cohérence.

Critères d'acceptation

  • python scripts/fallacy_detection/argumentum_taxonomy_integrity.py rend les six invariants au vert sur la copie locale et sort en 0
  • python -m pytest scripts/fallacy_detection/tests/ vert (301 tests)
  • une copie abîmée fait rougir l'organe (cible crossLink fantôme, chemin sans parent, boucle directe) — contrôle positif sur un jeu synthétique, pas seulement sur le cas nominal
  • la deviation PK 824 est mesurée et nomée, pas cachée : elle est dans le rapport de l'organe, dans le corps de la PR et dans ce ticket

Hors périmètre

Activity

  1. jsboige commented on Oct 26, 2026

    @jsboige
    OwnerAuthor

    [CLAIMED] lane myia-po-2028:CoursIA-2 -- paths: scripts/fallacy_detection/argumentum_taxonomy_integrity.py, scripts/fallacy_detection/tests/test_argumentum_taxonomy_integrity.py -- grain DEEP/research-code : organe de mesure de l'integrite structurelle de la taxonomie Argumentum vendorisee (cibles crossLink resolues, arbre ferme, coherence depth) + sa garde, et mesure du profil du graphe crossLink (581 aretes, 34,6 % de couverture, reciprocite par relation).

    Grain: DEEP/research-code -- lane myia-po-2028:CoursIA-2 -- prev: DEEP/research-code #22719

  2. jsboige commented on Oct 26, 2026

    @jsboige
    OwnerAuthor

    [DELIVERED] lane myia-po-2028:CoursIA-2 -- PR #22731

    Grain: DEEP/research-code -- lane myia-po-2028:CoursIA-2 -- prev: DEEP/research-code #22719

    Deux fichiers nouveaux : l'organe de mesure scripts/fallacy_detection/argumentum_taxonomy_integrity.py et sa garde scripts/fallacy_detection/tests/test_argumentum_taxonomy_integrity.py (14 tests, suite complete du dossier : 301 passed). Mesure sur la copie locale (1408 sophismes) : 581 aretes crossLink, 487 noeuds porteurs d'un lien (34,6 %), 0 cible non resolue, 0 chemin orphelin, reciprocite par relation (Opposes 48 %, Inverts 49 %, Mirrors 100 %, Leverages 6 %, PredatesOn/Denounces/Allows/IsRelatedTo 0 %). Ecart nomme : PK 824 (5.1.2.3.2.24, depth 7 pour 6 segments) -- seul ecart du corpus, correction amont, ticket #22730.

  3. added a commit that references this issue on Oct 28, 2026
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

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions