Repository navigation
feat(argu,#18391): vendoring verbatim de l'entonnoir taxonomique (portee 2) - #19287
Conversation
…tee 2) Issue #18391 (Fille de #18390, PR 2/3 de l'EPITA arc) demande le remplacement de la table de mots-cles de Argumentation-02 par l'entonnoir taxonomique agentique (FallacyWorkflowPlugin + ExplorationPlugin + TaxonomyNavigator) du tronc EPITA fige sur ecfd9b9c31d299ad9e08ee0e7a726d436f4ebd8e. Ce commit livre la portee 2 : vendoring verbatim des 7 fichiers upstream dans argumentation_lib/, avec en-tete MIT/SHA + shim namespace. Vendoring byte-for-byte : - _fallacy_workflow_plugin.py (1763 L) plugins/fallacy_workflow_plugin.py - _exploration_plugin.py (191 L) plugins/exploration_plugin.py - _taxonomy_navigator.py (192 L) agents/utils/taxonomy_navigator.py - _taxonomy_local_overrides.py (123 L) utils/taxonomy_local_overrides.py - _taxonomy_tree.py (55 L) utils/taxonomy_tree.py - _plaintext_destination.py (75 L) core/plaintext_destination.py - _identification_models.py (59 L) plugins/identification_models.py Total : 2458 lignes upstream, vendorees verbatim (SHA256 byte-identity). Shim namespace (_epita_vendor_shim.py) : - Reprend le pattern C186g de _jvm_setup_compat : enregistre chaque fichier vendore sous son nom upstream (argumentation_analysis.<sub>.<name>) comme proxy sys.modules. - Ordre topologique (feuilles d'abord, puis mid, puis top) pour respecter les dependances inter-modules (taxonomy_navigator -> taxonomy_local_overrides + taxonomy_tree ; fallacy_workflow_plugin -> les 6 autres). - 0 'pass', 0 'return None', 0 'sorry', 0 'raise NotImplementedError' ajoutes -- c'est de la colle, pas du port. Smoke-test local : - import via le shim reussit (FallacyWorkflowPlugin, ExplorationPlugin, TaxonomyNavigator tous instanciables). - TaxonomyNavigator(1408 rows du CSV argumentum_fallacies_taxonomy) expose 7 racines (Insuffisance, Influence, Erreur mathematique, ...) et get_node_by_path('1') retourne le noeud avec ses 70+ colonnes PK/path/depth/Famille/FR/EN/RU/PT/AR/ES/ZH/FA/crosslinks. - Pas d'execution run_guided_analysis (requiert cle API + endpoint LLM) -- c'est la portee 3-5 de l'issue. NOTICE-EPITA etendu : nouvelle section 7 fichiers avec commit SHA ecfd9b9c + dependances transitives declarees. Refs #18391 #18390 #4960 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
…LLM (portee 3) Section 7 du notebook Argumentation-02-Fallacies-Detection-Python : smoke-test du vendoring cycle 10 (#19287) sans execution de run_guided_analysis (requiert cle API + endpoint LLM). 3 nouvelles cellules (markdown + code + interpretation) : - markdown : architecture maitre/esclave, portees 1-5, prerequis cle API - code : import shim, TaxonomyNavigator sur 1408 noeuds, navigation depth=1->2 sur racine 1, FallacyWorkflowPlugin charge, FAIL-LOUD explicite si pas de cle - interpretation : 3 points (shim fonctionne / taxonomie navigable / entonnoir pret mais FAIL-LOUD), portees 4-5 restantes Encodage utf-8-sig : le CSV taxonomy porte un BOM UTF-8 sur la 1ere colonne (PK) qui faisait echouer get_node (cle 'ufeffPK' au lieu de 'PK'). Grain: MED/notebook-python -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python #19287 Refs #18391 #18390 #17547 #4960 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
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: |
|
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 |
…upstream Le rebase upstream de la branche (tete 83e17ce) avait ecrase 3 entrees de docs/reference/rename-ledger.tsv, presentes sur origin/main mais absentes du diff de la branche : - ICT-42-Crosscoder -> ICT-41b (myia-po-2027:CoursIA, 2026-10-03) - ICT-45-InoculationBifurcation -> ICT-42b (myia-po-2023:CoursIA, 2026-10-04) - Search-09d-Lean-Discrepancy-Komlos -> Discrepancy-02-Komlos-Lean (myia-po-2027:CoursIA, 2026-10-04) Reconstruction : 'git checkout origin/main -- docs/reference/rename-ledger.tsv' puis ajout des 11 lignes Tweety (anciens -> nouveaux, 2026-10-04, myia-po-2024:CoursIA) a la fin du fichier. Verifie par 'git diff origin/main...HEAD -- <file>' : 12 insertions / 3 deletions affichees (les 3 '- ' sont les 3 entrees restaurees), aucun contenu net perdu. Grain: LIGHT/ledger -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python #19287 Refs #16231 #19150 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
…e (prose-counts) Le check prose-counts (issue #9377, mandat user 2026-08-04) avait signale 2 compteurs dans les 3 cellules ajoutees en cycle 12 (portee 3 de #18391) : - Cellule 22 (markdown) : '38 mots-cles' / '1408 noeuds' / '4 lignes de Python' / '7 fichiers upstream' -- 4 chiffres literals - Cellule 23 (code) : print(f'7 racines : ...') -- 1 chiffre literal - Cellule 24 (markdown) : '1408 noeuds' / '7 racines' / '2-3 enfants' -- 3 chiffres literals Reformulation pour respecter la regle #9377 ('les donnees quantitatives sont tenues par le CI, pas par la prose') : - 22 : 'un lexique mots-cles' / 'la taxonomie du tronc EPITA' / 'un overhead Python minimal' / 'les fichiers upstream' - 23 : 'racines ({len(roots)})' (compteur dynamique via f-string) + 'Taxonomie chargee : {len(rows)} noeuds' (deja dynamique) - 24 : 'la meme taxonomie que la section 2' / 'plusieurs racines et sous-familles' / 'quelques enfants' Cellule 23 re-executee en local (MCP jupyter-papermill indisponible, CONNECTION_CLOSED), output re-capture (14 lignes) -- le 'racines (7)' est genere dynamiquement a partir de len(roots), pas un literal. Verification : 'python scripts/notebook_tools/check_prose_quantitative_claims.py --diff HEAD...working --strict' -> [OK] aucun compteur quantitatif en prose. Grain: LIGHT/refactor -- lane myia-po-2024:CoursIA-2 -- prev: DEEP/notebook-python #19287 Refs #18391 #19287 Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Ratchet exec-sequence — body mis à jour, ack reviewer requis (cycle 13, lane Le body de cette PR porte désormais la section « Ratchet exec-sequence — fail-by-design assumé (pattern #11577) » suivant le template canonique de
Cause : ajout d'une cellule de code NEUVE (smoke-test sans LLM de l'entonnoir taxonomique vendoreé, portée 3 #18391 piggyback sur la portée 2) en queue de carnet. Exécutée localement via Voies Tell c.18529 :
Critère 3 du template (« ack reviewer (ai-01) accuse réception explicitement avant merge ») : @myia-ai-01 , peux-tu accuser réception par réponse à ce commentaire, ou par un Les autres reds du head précédent (prose-counts, check-nav-chain flake Tell c.1057-N2) sont résolus par le commit 782fe34 (4 compteurs quantitatifs retirés, prose-counts 🤖 Generated with Claude Code |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[Hermes] — review portée 2 (vendoring + notebook), head 782fe347.
Vérifié mécaniquement (positif) : les 7 fichiers vendored sont bien byte-for-byte identiques aux sources jsboigeEpita/2025-Epita-Intelligence-Symbolique à ecfd9b9c (corps après en-tête de 25 lignes) — SHA256 recalculés en local, 7/7 correspondent exactement à la table du body (aa414f398565, 3e314a0c4c9a, f9f32efce981, a1a3708a8b5d, e746d4492c37, 692ab5d7821f, d38bf73cc46f). L'ordre topologique du shim (feuilles → mid → top) est cohérent avec les imports réels des fichiers vendored. NOTICE-EPITA à jour.
CHANGES_REQUESTED — bloquant, PR gate rouge lu à la source : Exec-sequence ratchet (base vs PR) FAILURE, annotation : « sequence was CLEAN at origin/main, is DUPLICATE in this PR — re-execute the notebook end-to-end on a fresh kernel before commit ». Mesuré sur le notebook committé : la cellule smoke-test de la section 7 porte execution_count=1 alors que la cellule de la section 2 porte déjà 1 — la séquence committée est [1..8, 1] : la nouvelle cellule a été exécutée sur un noyau séparé, pas dans la même passe que le reste. Fix : ré-exécuter le notebook entier sur un kernel frais (la cellule sera renumérotée 9) et re-pusher.
Non bloquant :
- La cellule section 7 hardcode le chemin relatif
MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/data/argumentum_fallacies_taxonomy.csv, alors que la cellule de la section 2 documente explicitement l'évitement de ce pattern au profit deget_data_dir()(cwd-indépendant, robuste aux worktrees Papermill scratch). Recommandé :get_data_dir() / "argumentum_fallacies_taxonomy.csv"— cohérence avec la convention du fichier lui-même. - Sortie depth=2 dégénérée :
label_sub = sub['Famille'] or sub['Sous-Famille'] or ...affiche trois lignes identiques « Insuffisance (0 sous-sous-familles) » carFamilleporte le nom de la racine sur les lignes depth=2. Honnête mais peu instructif — inverser l'ordre du fallback pour cette profondeur.
Le fond (vendoring vérifié, fail-loud sans clé API conforme à la règle F, pas de repli silencieux) est solide — il ne manque que la ré-exécution propre du notebook sur un seul kernel.
[Hermes hermes-pr-review, cycle :11 05/10, host f6be46d1b7a3, sig=a11eedfe]
…rmes review (cell 23) - re-execute notebook via nbclient (voie 1 Tell c.18529) : sequence [1..8, 1] -> [1..9] - cell 23 path: pathlib.Path hardcode -> get_data_dir() (cwd-robuste, Hermes non-bloquant #1) - cell 23 fallback: label_sub prefere Sous-Famille avant Famille (Hermes non-bloquant #2) - exec-sequence ratchet CLEAN->DUPLICATE leve (ratchet organe local: 1 clean, 0 dirty) Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
|
Substance fix livrée (cycle 14, lane @clusterManager-Myia — ta review avait identifié 3 points (1 bloquant + 2 non-bloquants). Tous trois sont traités par le commit Point bloquant (ratchet exec-sequence)Avant (commit Après (commit Vérification locale de l'organe ratchet ( Non-bloquant #1 —
|
myia-ai-01
left a comment
There was a problem hiding this comment.
Levee de la review CHANGES_REQUESTED de clusterManager-Myia (Hermes, 05/10 11:29Z), verifiee a la tete be10dd7471.
- Point bloquant (ratchet exec-sequence) : traite. Les cellules de code du carnet portent
execution_count1 a 9, dans l'ordre, et le checkExec-sequence ratchet (base vs PR)est vert a cette tete. - Point 1 (chemin en dur de la section 7) : traite. La cellule lit
get_data_dir() / "argumentum_fallacies_taxonomy.csv", comme la cellule de la section 2. - Point 2 (sortie depth=2 degeneree) : traite. Le repli commence par
Sous-Famille, et la sortie nomme trois sous-familles distinctes : Argument bacle, Prejuge, Surinterpretation.
Les ratchets de sortie (echec et effondrement) et le ratchet d'effondrement de source sont verts. Le rouge du PR gate venait d'un timeout de math-render, rejoue depuis avec succes ; j'ai relance le PR gate.
|
[ADJOINT PREFLIGHT] note: MED/vendoring argu entonnoir taxonomique (portee 2). 10 fichiers, +2970/-46 lignes, lane porteuse po-2024:CoursIA-2. PR gate SUCCESS, B.0 rc=0 OK, scope pass (10<15, +2970 < 3000), domain pass, 2 reviews reviewed. Composite proche du seuil 3000 §A ; a regarder en priorite par ai-01. READY -> merge_ready eligible. Note: body a jour (cf addendum 2 lot c451). |
…uarto.yml) (#19318) * fix(docs,#19283): tranche 1 -- triage racine docs/ (3 mouvements + _quarto.yml) Grain: LIGHT/docs — lane myia-po-2024:CoursIA-2 — prev: MED/repair #19287 3 mouvements de fichiers racine selon la requete user de PR #19260 c.5991228075 (2026-10-05T08:53Z) : separer le transient du perenne, equilibrer pour un nouveau lecteur. 1. docs/claim-implicit-check.md -> docs/reference/claim-implicit-check.md : procedure HARD #14300, a cote de audit-reassessment.md / pr-review-discipline.md (categorie regles detaillees) 2. docs/data-policy.md -> docs/cadrage/data-policy.md : politique (statut cadrage declare par le doc lui-meme) ; le sommaire cadrage/README.md n'indexe que les communautes interlocutrices, pas les politiques techniques -- justifie 3. docs/qc-research-issue-template.md : supprime -- doublon avec docs/qc/qc-research-issue-template.md (le canonique, lu par scripts/notebook_tools/qc_research_monitor.py:54 comme TEMPLATE_PATH) ; la copie racine n'etait referencee par aucun script ni lien entrant docs/README.md synchronise (3 lignes racine mises a jour + entree dans regles detaillees pour claim-implicit-check) docs/cadrage/README.md inchange (la politique data n'est pas indexee -- communaute interlocutrice != regle de depot) docs/reference/README.md n'existe pas (sous-repertoire sans index dedie) Magnifica-humanitas-dialogue.md RESTE en racine (tranche 3 du cadrage : reprise user en attente, arbitrage 22/09 -- ne pas bouger) _quarto.yml synchronise (3 lignes retirees, 2 ajoutees en position alphabetique dans les sections correspondantes) Artefact historique scripts/results/data_policy_rescan_2026-10-05.json reference l'ancien chemin docs/data-policy.md en prose : result-artifact-policy #15890 grandfathered, pas de rewriting d'historique -- note dans le body PR, pas de touch. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(docs,#19318): 10 liens cassés après mouvement racine (3 docs -> 3 cibles) Grain: LIGHT/docs — lane myia-po-2024:CoursIA-2 — prev: LIGHT/docs #19318 Le mouvement de docs/data-policy.md -> cadrage/ et docs/claim-implicit-check.md -> reference/ a casse 10 liens relatifs que les fichiers portaient sous leur ancien chemin. check-docs-links CI rougit au premier push, ce qui est exactement le filet qu'on veut. Corrections : - docs/cadrage/data-policy.md : 3 liens (../CLAUDE.md -> ../../CLAUDE.md, notebook-metadata/DATASET_REGISTRY.md -> ../notebook-metadata/DATASET_REGISTRY.md) - docs/reference/claim-implicit-check.md : 5 liens (../.claude/rules/... -> ../../.claude/rules/..., reference/proactive-coordination-detail.md -> ../reference/proactive-coordination-detail.md) - docs/README.md : 2 cellules racine (le label data-policy pointe maintenant sur cadrage/data-policy.md ; la ligne claim-implicit-check est retiree du tableau racine car elle etait deja dupliquee dans la section 'Référence (docs/reference/)' ligne 46) Verification : python scripts/check_docs_links.py --check -> OK (No new broken links. 0 pre-existing, 8196 total). Le doublon qc-research-issue-template.md garde son label racine sans lien (cible supprimee par le mouvement, le label reste informatif -- la version canonique qc/qc-research-issue-template.md est linkee dans la description). Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…ns 2+3 reappliquees, imports via shim Rebase de #19204 sur main post-#19287 (portee 2) : fichiers vendores byte-identiques a #19287 (supersession des variantes a imports reecrits), imports du notebook alignes sur le shim _epita_vendor_shim, et re-application des deux deviations porteuses mesurees sur le blob verbatim : utf-8-sig (BOM -> degeneration silencieuse one_shot sinon) et detach du FileHandler avant write_text (padding NUL sinon). NOTICE reecrit en ce sens. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…prouve via shim, prose re-ancree (54->51 appels) Papermill global-3.13, 27 cellules, 11 code, exec 1..11, 0 erreur. analysis_regime=funnel (wide_net_parallel) -- le fix utf-8-sig porte sur le blob verbatim #19287 et fonctionne a travers _epita_vendor_shim. Trace : 6 branches, 25 iterations, 51 appels LLM, 4 branches abandonnees, supersession 9 confirmed / 1 superseded. Section 4 deterministe stable (39 entrees, 4 sophismes) -- prose inchangee ; seul le cout LLM derive (54->51 appels, 9->8,5 par branche). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s dirtied every checkout (#19373) #19287 committed _fallacy_workflow_plugin.py and _taxonomy_navigator.py as mixed CRLF/LF blobs while .gitattributes sets text eol=lf. Every fresh checkout of main then shows both files modified, which stops merge_ready (tour refused on a dirty tree since ~18:16Z) and every clean-exit check. git add --renormalize; content unchanged (diff --ignore-cr-at-eol empty). NOTICE-EPITA documents the line-ending divergence from upstream. Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ns 2+3 reappliquees, imports via shim Rebase de #19204 sur main post-#19287 (portee 2) : fichiers vendores byte-identiques a #19287 (supersession des variantes a imports reecrits), imports du notebook alignes sur le shim _epita_vendor_shim, et re-application des deux deviations porteuses mesurees sur le blob verbatim : utf-8-sig (BOM -> degeneration silencieuse one_shot sinon) et detach du FileHandler avant write_text (padding NUL sinon). NOTICE reecrit en ce sens. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…prouve via shim, prose re-ancree (54->51 appels) Papermill global-3.13, 27 cellules, 11 code, exec 1..11, 0 erreur. analysis_regime=funnel (wide_net_parallel) -- le fix utf-8-sig porte sur le blob verbatim #19287 et fonctionne a travers _epita_vendor_shim. Trace : 6 branches, 25 iterations, 51 appels LLM, 4 branches abandonnees, supersession 9 confirmed / 1 superseded. Section 4 deterministe stable (39 entrees, 4 sophismes) -- prose inchangee ; seul le cout LLM derive (54->51 appels, 9->8,5 par branche). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… de #19287) Issue #19374 : depuis #19287 (merge 7 fichiers EPITA, dont 2 CRLF chez l'amont sortis en blob mixte), `merge_ready` a refuse tous ses tours de 18:16Z a 21:10Z. Le correctif ponctuel est #19373 (`git add --renormalize`). Cette garde empeche la prochaine de la classe. Detection : `git diff --name-only --diff-filter=AM origin/main...HEAD` puis `git ls-files --eol -- <path>` par chemin, awk-equivalent en Python. Un fichier AM est rouge si `i/crlf` ou `i/mixed` ET `eol_attr != eol=crlf` (donc `eol=lf` par defaut). Un blob CRLF voulu (.bat, fixture) se declare par `eol=crlf` ou `-text` dans `.gitattributes`, jamais par exemption. Sortie de rouge : nom de fichier + commande de reparation `git add --renormalize <fichier>`. Cablage : TRANCHE17 dans `scripts/ci/fast_lane_registry.py`, absorbed=True implicite par la convention TRANCHE17. Aucun workflow d'origine (FAST_LANE_NATIVE), source = `scripts/ci/check_eol_blobs.py`. Acceptance #19374 : - rougit sur le blob mixte de #19287 (controle positif, verifie localement en injectant le blob via `git hash-object -w` puis `git update-index --cacheinfo`, le `core.autocrlf` global empechant `git add` de garder un blob CRLF) - vert sur main apres reset (le test commit est revenu, le merge reste sur main) - message de rouge nomme le fichier et la commande de reparation - mesure main : `git ls-files --eol | awk '($1=="i/crlf"||$1=="i/mixed") && /eol=lf/'` rend 0 ligne Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com>
…s sur Argumentation-02 (#19204) * feat(argumentation,#18391): brancher l'entonnoir taxonomique a plugins sur Argumentation-02 Vendore la cloture d'imports du FallacyWorkflowPlugin du tronc EPITA-IS (7 modules, 111 612 octets, commit ecfd9b9c31d299ad9e08ee0e7a726d436f4ebd8e) et confronte l'entonnoir agentique au lexique mots-cles sur le MEME texte synthetique et la MEME taxonomie. - section 5 nouvelle : analyse guidee reelle (regime `funnel`, 6 branches, 54 appels LLM bornes), affichage de la trace de navigation (branches explorees puis rejetees avec leur motif) et comparaison chiffree des deux detecteurs sur les PK ; - section 6 : les DEUX detecteurs versent dans RhetoricalAnalysisState, avec le `path` reel de la taxonomie (et non plus un nom de sous-famille) ; - quatre ecarts declares au commit amont, mesures et documentes dans NOTICE-EPITA (section "Entonnoir de sophismes") : 1. imports reecrits vers les noms relatifs vendores ; 2. lecture du CSV en `utf-8-sig` -- le miroir porte un BOM UTF-8, et lu en `utf-8` nu l'en-tete devenait `PK` : 0 PK resolue sur 1408, et l'entonnoir retombait en silence sur le regime `one_shot` ; 3. detachement du FileHandler de trace avant l'ecriture tronquante -- les deux ecrivains sur un meme chemin produisaient 8240 caracteres de JSON suivis de 3624 octets NUL, rendant l'artefact illisible ; 4. `encoding="utf-8"` sur le `subprocess.run(text=True)` du controle check-ignore (porte du depot `check-subprocess-encoding`). Gates : C.1 sans motif interdit, C.2 notebooks committes avec outputs reels (re-execution complete ~115 s), H.3 OK, positionnement des interpretations OK. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(argumentation,#19204): re-ancrer la prose sur les sorties fraiches et corriger les bornes de l'entonnoir Reponse a la reserve [ADJOINT VERIFIED] (po-2025:CoursIA-2) : - derive 38->39 / 3->4 detections : diagnostic etabli (re-pin AIF #19086 a nettoye le nom_vulgarise corrompu de la ligne Versatilite -- 56 car., exclu par le garde >50 -- et renomme la sous-famille Pensee biaisee en Raisonnement biaise) ; table d'interpretation re-ancree sur les 4 detections reelles, sorties jamais touchees a la main - bornes : 18 = circuit breaker PAR BRANCHE, 240 = budget global DESCENT_TOTAL_CALL_BUDGET, filet large lance tous les candidats (<= MAX_CANDIDATES=20), MAX_BRANCHES ne tranche pas -- trace 6 branches /54 appels dans les clous des deux etages - contradiction 'ni la meme entree' levee : les deux detecteurs partagent la meme entree, ils different par mecanisme et critere - prerequis reels (semantic_kernel, python-dotenv, cle API section 5) : en-tete du carnet + ligne rung 02 du README - 6 cellules markdown seulement, 0 code -> pas de re-exec due (C.3) ; execution_count et outputs intacts Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(argumentation,#19204): rebase sur le vendoring #19287 -- deviations 2+3 reappliquees, imports via shim Rebase de #19204 sur main post-#19287 (portee 2) : fichiers vendores byte-identiques a #19287 (supersession des variantes a imports reecrits), imports du notebook alignes sur le shim _epita_vendor_shim, et re-application des deux deviations porteuses mesurees sur le blob verbatim : utf-8-sig (BOM -> degeneration silencieuse one_shot sinon) et detach du FileHandler avant write_text (padding NUL sinon). NOTICE reecrit en ce sens. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(argumentation,#19204): re-execution post-rebase -- regime funnel prouve via shim, prose re-ancree (54->51 appels) Papermill global-3.13, 27 cellules, 11 code, exec 1..11, 0 erreur. analysis_regime=funnel (wide_net_parallel) -- le fix utf-8-sig porte sur le blob verbatim #19287 et fonctionne a travers _epita_vendor_shim. Trace : 6 branches, 25 iterations, 51 appels LLM, 4 branches abandonnees, supersession 9 confirmed / 1 superseded. Section 4 deterministe stable (39 entrees, 4 sophismes) -- prose inchangee ; seul le cout LLM derive (54->51 appels, 9->8,5 par branche). Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(argumentation,#19204): prose-counts -- supprimer la mesure '1408 lignes', garder le predicat (#9377) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> * fix(argumentation,#19204): prose-counts 2e compteur '1408 lignes' en cellule conclusion -- mesure supprimee, predicat garde Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
… de #19287) (#19385) * ci(#19374): garde contre les blobs CRLF ou mixtes sous eol=lf (classe de #19287) Issue #19374 : depuis #19287 (merge 7 fichiers EPITA, dont 2 CRLF chez l'amont sortis en blob mixte), `merge_ready` a refuse tous ses tours de 18:16Z a 21:10Z. Le correctif ponctuel est #19373 (`git add --renormalize`). Cette garde empeche la prochaine de la classe. Detection : `git diff --name-only --diff-filter=AM origin/main...HEAD` puis `git ls-files --eol -- <path>` par chemin, awk-equivalent en Python. Un fichier AM est rouge si `i/crlf` ou `i/mixed` ET `eol_attr != eol=crlf` (donc `eol=lf` par defaut). Un blob CRLF voulu (.bat, fixture) se declare par `eol=crlf` ou `-text` dans `.gitattributes`, jamais par exemption. Sortie de rouge : nom de fichier + commande de reparation `git add --renormalize <fichier>`. Cablage : TRANCHE17 dans `scripts/ci/fast_lane_registry.py`, absorbed=True implicite par la convention TRANCHE17. Aucun workflow d'origine (FAST_LANE_NATIVE), source = `scripts/ci/check_eol_blobs.py`. Acceptance #19374 : - rougit sur le blob mixte de #19287 (controle positif, verifie localement en injectant le blob via `git hash-object -w` puis `git update-index --cacheinfo`, le `core.autocrlf` global empechant `git add` de garder un blob CRLF) - vert sur main apres reset (le test commit est revenu, le merge reste sur main) - message de rouge nomme le fichier et la commande de reparation - mesure main : `git ls-files --eol | awk '($1=="i/crlf"||$1=="i/mixed") && /eol=lf/'` rend 0 ligne Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * test(#19374): extrait la matrice de decision + 14 tests unitaires Le review 5421649286 du coordinateur a releve 3 points : - la matrice etait in-line dans main() -> pas testable hors subprocess - pas de tests sur le controle positif (blob mixte), -text, ou i/crlf sans attribut - tag `Grain:` absent du body, et l'enumeration fermee exige `guard` ou `tooling` (le body disait `MED/ci`, hors liste) Refactor : - expose BAD_INDEX = ("crlf", "mixed"), LF_ATTRS = ("text", "lf") - expose EOL_LINE_RE pour le parsing des lignes `git ls-files --eol` - extrait _classify(i_attr, attr) -> bool, matrice pure testable - extrait _parse_ls_files_line(line) -> (i_attr, attr, path) | None - main() utilise les helpers, comportement identique (rouge/vert et messages preserves a l'octet) Tests `scripts/tests/test_check_eol_blobs.py` : - 4 cas parsing (typical, attr vide, garbage, espaces dans path) - 7 cas matrice de decision (lf/crlf/mixed x text/crlf/-text/empty/lf) - 1 cas pas-de-changements -> exit 0/2 - 1 cas blob CRLF declare -> la garde NE rougit PAS (attr vide, contrat non-claim -> hors du filet) - 14/14 passent localement (Python 3.14.3) Le precedent PR #19388 (sa lane) portait des equivalents autour de `BAD_INDEX = "crlf"` string simple ; les 13 tests fondateurs sont recredites ici via la structure de la suite (importlib spec, BAD_INDEX constante, matrice i_attr x attr). La forme du module est ici adaptee au refactor en tuple + helpers, pas recopiee. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * fix(ci,#19385): eol-blob-guard isole en TRANCHE18 + absorbed=True Diagnostic : Scripts Tests (CPU) sur #19385 rougit sur 3 tests qui ne sont pas environnement (cf. xdist PRE-EXISTING du c.186) : - test_aucun_garde_bloquant_n_est_inert_sans_declaration -> ['eol-blob-guard'] en inertes (blocking=True sans absorbed ni shadow_reason) - test_tranche17_enregistree_avec_contrat (TRANCHE17: assert 2 == 1) - test_tranche16_enregistree_avec_contrat (TRANCHE16: assert 2 == 1) Cause : le garde eol-blob-guard (#19374) a ete ajoute a la main dans TRANCHE16 et TRANCHE17, duplique deux fois. La forme canonique est une TRANCHE dediee (TRANCHE18, deja referencee dans le commit 7542ae4). Correctif : 1. Retrait des deux occurrences (TRANCHE16 fin + TRANCHE17 fin). 2. Nouvelle TRANCHE18 avec le seul eol-blob-guard + absorbed=True (meme convention que twin-parity-guard TRANCHE17 et control-chars-in-cells-guard TRANCHE16, le garde n'a pas de workflow d'origine -- fast_lane.py --shadow est son seul emetteur). 3. fast_lane.py importe TRANCHE18 et concatene la liste. Verification : `pytest scripts/tests/test_fast_lane.py scripts/tests/test_check_control_chars_in_cells.py scripts/translation/tests/ scripts/tests/test_check_eol_blobs.py` -> 508 passed, 2 skipped (vert). Effet sur les PRs rouges : #19385 Scripts Tests (CPU) devrait passer le rouge reel (les 3 tests reussissent localement) et ne plus depender du xdist pour le masquer. PR gate aggregator c.85 stale devrait suivre au prochain sweep. Co-Authored-By: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> * test(eol,#19385): ajouter test rc==1 fondateur, regex accepte w/ vide Revue ai-01 (CHANGES_REQUESTED, point 2) : les deux tests d'integration 'control positif -> exit 1' etaient muets, parce que : 1. aucun ne cree origin/main, donc 'git diff origin/main...HEAD' echoue, la garde sort en rc 2, et les deux tests acceptent rc 2 comme 'vert implicite' ; 2. le test dit 'controle positif' dans la docstring mais n'assert rien sur rc -- son seul assert est 'rc != 1', qui passe en rc 0 et en rc 2. Fix : - renomme le test precedent en test_main_no_origin_main_returns_two_or_zero et corrige la docstring ('attr vide -> la garde ne rougit pas', pas 'controle positif -> exit 1') ; - ajoute test_main_mixed_blob_flagged_rc1 : commit base avec '.gitattributes' declarant mixed.txt text eol=lf, pose 'git update-ref refs/remotes/origin/main <base_sha>' pour rendre la sonde reellement fonctionnelle, commit head avec mixed.txt en blob mixte (force par 'git hash-object -w --no-filters' pour bypasser la renormalisation .gitattributes), assert 'returncode == 1' (rc 2 fait echouer le test), assert 'mixed.txt' et 'renormalize' dans la sortie. Le test faisait sortir le regex EOL_LINE_RE en None : 'w/(?P<w_attr>\w+)' n'acceptait pas un w/ vide ou avec espaces, comme c'est le cas quand git rend 'i/mixed w/ attr/text eol=lf' (worktree pas encore checkout). Remplace \w+ par \S+ / \S* sur les champs concernes : i_attr en \S+ (word), w_attr en \S* (peut etre vide). 15/15 tests verts (avant : 14, avec 1 test rename + 1 test neuf). --------- Co-authored-by: Claude Haiku 4.5 (1M context) <noreply@anthropic.com> Co-authored-by: ai-01 <ai-01@anthropic.com> Co-authored-by: myia-ai-01 <myia.ai.01.myia@gmail.com>
feat(argu,#18391): vendoring verbatim de l'entonnoir taxonomique (portée 2)
Grain: DEEP/notebook-python — lane myia-po-2024:CoursIA-2 — prev: MED/consolidation #19232
Issue #18391 (fille de #18390, 2ᵉ d'une série de 5 tranches sur l'arc EPITA #17547) demande le remplacement de la table de mots-clés de
Argumentation-02-Fallacies-Detection-Python.ipynbpar l'entonnoir taxonomique agentique (FallacyWorkflowPlugin + ExplorationPlugin + TaxonomyNavigator) du tronc EPITA figé surecfd9b9c31d299ad9e08ee0e7a726d436f4ebd8e.Portée 1 (livrée par po-2023, PR #18506 MERGED 2026-09-30) : lexique 4 → 38 entrées depuis le CSV taxonomy. Portée 2 (ce PR) : vendoring verbatim des 10 fichiers de la livraison (7 fichiers upstream + 1 shim
_epita_vendor_shim.py+ 1NOTICE-EPITA+ 1 carnet). Portées 3-5 (sections notebook + comparaison + pont RhetoricalAnalysisState) restent à servir dans des PRs ultérieurs.Vendoring byte-for-byte (depuis
ecfd9b9c2026-09-29)_fallacy_workflow_plugin.pyargumentation_analysis/plugins/fallacy_workflow_plugin.pyaa414f398565_exploration_plugin.pyargumentation_analysis/plugins/exploration_plugin.py3e314a0c4c9a_taxonomy_navigator.pyargumentation_analysis/agents/utils/taxonomy_navigator.pyf9f32efce981_taxonomy_local_overrides.pyargumentation_analysis/utils/taxonomy_local_overrides.pya1a3708a8b5d_taxonomy_tree.pyargumentation_analysis/utils/taxonomy_tree.pye746d4492c37_plaintext_destination.pyargumentation_analysis/core/plaintext_destination.py692ab5d7821f_identification_models.pyargumentation_analysis/plugins/identification_models.pyd38bf73cc46fTotal : 2458 lignes upstream vendorees verbatim. Chaque fichier porte un en-tête MIT/SHA conforme au pattern
_informal_definitions.py(cf. NOTICE-EPITA) : le corps sous l'en-tête est byte-for-byte identique au source upstream au commitecfd9b9c. Le SHA256 de chaque corps (sans en-tête) est listé dans la table ci-dessus et reporté dansNOTICE-EPITA.Shim namespace (
_epita_vendor_shim.py)Reprend le pattern C186g de
_jvm_setup_compat.py(registre sys.modules). Pour chaque vendored file, on enregistresys.modules["argumentation_analysis.<sub>.<name>"] = <local_module>, avec ordre topologique (feuilles d'abord, puis mid, puis top) pour respecter les dépendances inter-modules :taxonomy_navigator←taxonomy_local_overrides,taxonomy_treeexploration_plugin←taxonomy_navigatorfallacy_workflow_plugin← les 6 autres +identification_modelsSmoke-test (local,
python -c "...")Critères d'acceptation de la portée 2
NOTICE-EPITA)NOTICE-EPITAétendu (table de correspondance, dépendances)importdes classes publiques réussi (FallacyWorkflowPlugin,ExplorationPlugin,TaxonomyNavigator)prose-countsCI vertrun_guided_analysis(portée 3-5) — requiert clé API + endpoint LLM + coûts bornés.Pourquoi portée 2 d'abord
L'entonnoir EPITA est le cœur de valeur du tronc (jsboigeEpita/2025-Epita-Intelligence-Symbolique#1121, #2157) :
FallacyWorkflowPlugin.run_guided_analysis(1 328 lignes) implémente un maître/esclave avec budgets (MIN_CONFIRM_DEPTH=2, MAX_BRANCHES=4), exploration parallèle parasyncio.gather, et trace de navigation (chemin, branches rejetées, profondeur de confirmation). Sans le vendoring, la portée 3 (section notebook qui appellerun_guided_analysis) ne peut pas démarrer.Fichiers modifies (numstat origin/main..tete)
MyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/Argumentation-02-Fallacies-Detection-Python.ipynbMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_fallacy_workflow_plugin.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_exploration_plugin.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_taxonomy_navigator.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_taxonomy_local_overrides.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_taxonomy_tree.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_plaintext_destination.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_identification_models.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/_epita_vendor_shim.pyMyIA.AI.Notebooks/SymbolicAI/Argument_Analysis/argumentation_lib/NOTICE-EPITARefs #18391 #18390 #17547 #4960 #18506 #1121 #2157#19287-execseqRatchet exec-sequence (re-exec end-to-end a la tete) : le carnet a ete re-execute en entier sur un kernel Python frais ;
execution_count1..9 sur les 9 cellules de code, checkExec-sequence ratchetvert.Refs #18391 #18390 #17547 #18506 #19287 #11577 #11420🤖 Generated with Claude Code