feat(taxonomy): #498 Fallacies AIF — serialize §7 I/RA/CA into 2 new columns (AIF_attackType + AIF_attackedNode) [reassigned from po-2023] - #753
Merged
Conversation
…columns AIF_attackType + AIF_attackedNode Reassigned by ai-01 (po-2023 dead-channel ~2j, dispatch 1pgunw). First prod CSV write of chantier #498. Adds 2 trailing-AIF-block columns to Cards/Fallacies/Argumentum Fallacies - Taxonomy.csv, inserted AFTER AIF_skosMappingType (col idx 94), before `shape` (idx 95) — new cols join the existing AIF block (cols 91-96). Derivation: §7 of the 12 docs/taxonomy/498-aif-*-cluster.md cluster docs. attackType = bolded token in each `### pk NNN -> **type**` header. attackedNode DETERMINISTIC per ratified contract #707§4 Option (a): undercut->RA-node, undermine->I-node, rebut->CA-node. Distribution (46 filled of 1408): 44 undercut/RA-node + 2 undermine/I-node (838, 843). 0 rebut (consistent with rebut-rarity). 17 FAIL-LOUD/gap leaves left EMPTY (0 fabrication #677): CA-token-missing {829,840,847,848,853} + RA-node/gap {832,834,835,837,861,868-874}. Remaining 1345 leaves (not decomposed in §7) empty. SURGICAL byte-exact: rewrites NO existing field. Byte-preservation VERIFIED independently — 0 mismatches: every existing field (idx 0-94 and 95-101) is byte-identical between backup and result; only 2 new fields inserted per row. CRLF (1409) + 144 embedded-LF + BOM preserved. CsvHelper maps by header name, so insertion breaks no existing mapping. Tests: dotnet test = 594 pass / 1 fail (#133 OWL pre-existing, unrelated) / 5 skip — 0 new failures; Fallacies-loading tests all pass. Audit: tools/498-fallacies-aif-columns-apply.py (re-runnable derivation + surgical apply + verify). Gated: review ai-01 + veto jsboige (structural reassignment). Does NOT self-merge. Does NOT touch #674/#666/#596 (HOLD). Co-Authored-By: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 8, 2026
…ll prep, gated execution (#754) Consolidated tools/499-virtues-aif-columns-apply.py — the MIRROR of the Fallacies contract (PR #753, #498/#707§4a). Applies the ratified deterministic back-fill (plan #750 v2) to Cards/Fallacies/Argumentum Virtues - Taxonomy.csv, adding the same 2 columns (AIF_attackType + AIF_attackedNode) so both taxonomies share an identical AIF column contract (anti-drift). Derivation (plan #750 v2, re-confirmed programmatically on master): default undercut/RA-node override undermine/I-node if opposes {889, 804} (fabricated premise) override rebut/CA-node if opposes {340} (counter-conclusion) Distribution EXACT: 206 undercut + 13 undermine + 3 rebut = 222 nodes with scheme; 1 root node (pk 0, no scheme) = empty. Technique: byte-exact surgical (same as Fallacies script, memory [[csv-byte-exact-column-insertion]]). Re-writes NO existing field. Verified dry-run: 0 byte-preservation mismatch; placement after AIF_skosMappingType (idx 77), print_and_play shifts to 80. ⚠ GATED EXECUTION: dry-run by default. Apply ONLY after the Fallacies contract (PR #753) is merged + reviewed (ai-01 + jsboige veto). 0 write to Virtues prod CSV in this PR — script only. Placement constant (INSERT_AFTER_IDX=77) stays anti-drift with whatever the Fallacies PR #753 open-question-#2 decision lands. This is [secondaire] prep work — reduces post-unblock cycle time: once the contract merges, the mirror is 1 PR (run --write). No blocker removed, no gate crossed. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 8, 2026
…v2) into 2 new columns (#755) Executes the [primaire] mirror per ai-01 dispatch tw8www (post #753 merge). Applies the ratified deterministic back-fill (plan #750 v2) to Cards/Fallacies/Argumentum Virtues - Taxonomy.csv as the same 2 columns (AIF_attackType + AIF_attackedNode) — anti-drift with the Fallacies contract (#753). Both taxonomies now share an identical AIF column contract. Derivation (plan #750 v2, re-confirmed programmatically on master): default undercut/RA-node override undermine/I-node if opposes {889 Mensonge, 804 Acception arbitraire} override rebut/CA-node if opposes {340 Appel aux conséquences} Distribution EXACT: 206 undercut + 13 undermine {34,36,49,55,56,73,137,139,140, 153,154,155,158} + 3 rebut {53,54,165} = 222 nodes with scheme; 1 root node (pk 0, no scheme) = empty. SURGICAL byte-exact (same technique as #753, tools/499-...-apply.py on master via #754): rewrites NO existing field. Independently VERIFIED post-write backup-vs-result: 0 byte-preservation mismatch across all 223 data rows (fields idx 0-77 and 78 original -> 80 after byte-identical); CRLF (224) + BOM preserved; re-parse clean 81 cols (was 79). CsvHelper maps by header name -> 0 ClassMap break. Placement: after AIF_skosMappingType (idx 77), before print_and_play (->80). Same convention as #753 (per ai-01 verdict: keep after-AIF-block). Tests: dotnet test = 594 pass / 1 fail (#133 OWL pre-existing, unrelated) / 5 skip -- 0 new failures; Virtues-loading tests (VirtueClassMapRegressionTests, EntityClassMapRegressionTests) all pass. 0 entity/test references new cols. Gated: review ai-01 (independent byte-check, same as #753). Does NOT self-merge. Does NOT touch #674/#666/#596 (HOLD). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 8, 2026
…stic — backs ASK ai-01) (#756) * chore(taxonomy): #498 phase 1-3 serialization audit (read-only diagnostic, backs ASK ai-01) Read-only diagnostic that reports what serializing the scaleup phase 1-3 gated proposals (50 depth-3 leaves, 5 families) into the AIF_attackType/AIF_attackedNode columns WOULD do — without writing anything. Finding (backs the ASK to ai-01): - 45 NEW fills (27 undermine / 15 undercut / 3 rebut — the FIRST rebut cases in the Fallacies CSV: 1282 Relativisme abusif, 1313 Évasion, 1361 Procès en incohérence) - 2 CONFLICT: pk 834/847 — #753 left them FAIL-LOUD (strict-conservateur verdict "garde tel quel"); phase 1 classifies them undercut. Override decision = ai-01. - 3 CONFIRM: pk 826/844/855 already serialized undercut by #753 (no-op). - Dry-run byte-exact apply proof: 0 preservation mismatch, delta 696 bytes, CRLF+BOM preserved, 104 cols/row. CSV would go 46 -> 93 filled. Gating: the phase docs self-gate on jsboige content nod ("No production CSV change until jsboige approves") + closure §6.1 lists it as the prod-write gate for the 50 generative leaves. #753 scoped them out deliberately. This audit crosses NO gate (read-only). Two decisions surfaced for ai-01: (D1) lift phase 1-3 content gate? (D2) 834/847 override #753 FAIL-LOUD? 0 prod write. 0 fabrication (the 50-leaf map is verbatim from the phase doc tables). Co-Authored-By: Claude-Code <noreply@anthropic.com> * chore(taxonomy): #498 audit — cross-check 50-leaf map vs annotation CSVs (byte-faithful proof) Extends the read-only audit with an independent verification: the 50-leaf PHASE_MAP (verbatim-from-table extraction) is cross-checked against the 3 machine-readable annotation CSVs (498-scaleup-phase{1,2,3}-annotations.csv) that the phase docs reference as source-of-truth. Result: 50/50 match on both PK set and attack_type. The extraction is byte-faithful — ai-01 can trust the map without manual re-reading of the phase doc tables. This strengthens the D1/D2 ASK: when ai-01 lifts the gate, the 45 NEW + 2 CONFLICT (834/847) are provably exact, so execution is 1-tick. Also fixes a BOM gotcha: the annotation CSVs have a UTF-8 BOM, so the header reads with a prefix — use utf-8-sig to strip it (file-writing.md discipline, BOM-aware read). 0 prod write. Read-only diagnostic only. Co-Authored-By: Claude-Code <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
pushed a commit
that referenced
this pull request
Jul 9, 2026
#757) Add the INDEPENDENT byte-preservation verifier for the phase 1-3 apply script (PR #757). Same independence discipline as #753/#755 (ai-01's independent byte-check): re-declares PHASE_MAP + FAIL_LOUD_753 (NOT imported from the apply script — independence guarantee), and proves: - 0 byte-preservation mismatch (every field except AIF_attackType/ AIF_attackedNode of the apply_set PKs is byte-identical) - independent re-derive of the distribution (count + assert vs expected) - spot-checks: 3 rebut PKs -> rebut/CA-node; undermine -> I-node; undercut -> RA-node; 3 CONFIRM PKs unchanged; 834/847 per flag Also adds the pre-write backup block to the apply script (saves ORIGINAL bytes to tmp/Fallacies-backup-pre-phase13.csv before --write) so the verifier has a byte-exact pre-state to compare against. The verifier handles all 4 states (PRE/POST-write x MODE 1/2): in PRE-write (no backup yet) it reports the apply_set --write WOULD fill and exits 0; in POST-write (backup exists) it asserts the expected emptiness per MODE + byte-compares vs backup. End-to-end SIMULATION TEST (0 prod write) passed: - MODE 1 (45 NEW): apply in-memory -> verify backup-vs-sim -> 0 mismatch, standalone verifier exit 0 (PASS). CSV 46->91, delta 666 B. - MODE 2 (47 +834/847 override): dry-run -> 0 mismatch. CSV 46->93, delta 696 B. - All spot-checks OK; 834/847 empty in MODE 1 (FAIL-LOUD kept). At the verdict (ai-01 relays jsboige nod): python tools/498-phase13-apply.py --write [--with-overrides] python tools/498-phase13-verify.py [--with-overrides] dotnet test -> PR review byte-check ai-01. 0 prod write in this commit. GATE (jsboige content nod) NOT crossed. Co-Authored-By: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 9, 2026
…tionnelles #753/#754/#755 + master 81a9e4e (#758) Refresh v5 of the release validation dossier (2026-07-09). Integrates the 4 PRs merged between d90ce61 and 81a9e4e — notably the AIF relational columns chantier: - #753 Fallacies AIF: 2 new columns AIF_attackType/AIF_attackedNode (46/1408 filled) - #754 Virtues AIF mirror script (dry-run) - #755 Virtues AIF mirror executed (222/223 filled, 206/13/3 distribution) - #756 serialization audit (read-only diagnostic) Added §3.1bis (new artifact inventory: AIF relational columns on both taxonomies). Header refreshed: master 81a9e4e, tests 594 pass / 1 known-fail #133 / 5 skip / 600 total (empirical dotnet test 2026-07-09, +16 vs v4.1's 578). Tag still unposéd. Key invariant: AIF columns are CSV metadata-only (additive layer, 0 impact on card rendering / CardPen / harvest / PDF) -> verdicts #140 (content) and #632 (CMYK) unchanged, bundle v3 remains the reference bundle. Companion index RELEASE-VERIFICATION-INDEX updated: §1 now points to v5 + delta AIF. Docs-only. No prod code. No DB write. No CSV prod mutation. Co-authored-by: Claude <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 9, 2026
…-paramétrable) (#757) * chore(taxonomy): #498 phase 1-3 apply script (prep, gated --write, D2-paramétrable) Companion APPLY script to #756 (the read-only audit, merged `81a9e4e6`). #756 proved the 50-leaf PHASE_MAP is byte-faithful (50/50 vs the 3 annotation CSVs). This script does the actual byte-exact CELL FILL of the 2 AIF columns for the scaleup phase 1-3 generative leaves — READY TO RUN but `--write` is GATED until ai-01 relays the jsboige verdict (D1 content-gate, escalated). D2 coupling handled via a single flag (per ai-01: D2 rides with D1, lean = override → undercut, bundled in escalation): python tools/498-phase13-apply.py # dry-run, 45 NEW (834/847 FAIL-LOUD) python tools/498-phase13-apply.py --write # APPLY 45 NEW (GATED — jsboige nod) python tools/498-phase13-apply.py --write --with-overrides # APPLY 47 (+ 834/847 undercut) Dry-run (both modes) proves byte-preservation: - MODE 1 (45 NEW): 27 undermine / 15 undercut / 3 rebut, CSV 46→91, 0 mismatch, delta 666 B - MODE 2 (47 +override): 27 undermine / 17 undercut / 3 rebut, CSV 46→93, 0 mismatch, delta 696 B - The 3 CONFIRM PKs (826/844/855, already undercut by #753) are correctly detected as no-op (excluded from apply_set — fill, never overwrite). - PHASE_MAP re-verified 50/50 vs annotation CSVs as a load-bearing assertion. At the verdict: 1 command (write + verify + tests) → PR review byte-check ai-01. Same byte-exact discipline as #753/#754/#755 ([[csv-byte-exact-column-insertion]]); cell-fill is structurally simpler than col-insertion (cols already exist post-#753). 0 prod write in this PR (dry-run only). GATE (jsboige content nod) NOT crossed. Co-Authored-By: Claude-Code <noreply@anthropic.com> * chore(taxonomy): #498 phase 1-3 independent verifier + apply backup (PR #757) Add the INDEPENDENT byte-preservation verifier for the phase 1-3 apply script (PR #757). Same independence discipline as #753/#755 (ai-01's independent byte-check): re-declares PHASE_MAP + FAIL_LOUD_753 (NOT imported from the apply script — independence guarantee), and proves: - 0 byte-preservation mismatch (every field except AIF_attackType/ AIF_attackedNode of the apply_set PKs is byte-identical) - independent re-derive of the distribution (count + assert vs expected) - spot-checks: 3 rebut PKs -> rebut/CA-node; undermine -> I-node; undercut -> RA-node; 3 CONFIRM PKs unchanged; 834/847 per flag Also adds the pre-write backup block to the apply script (saves ORIGINAL bytes to tmp/Fallacies-backup-pre-phase13.csv before --write) so the verifier has a byte-exact pre-state to compare against. The verifier handles all 4 states (PRE/POST-write x MODE 1/2): in PRE-write (no backup yet) it reports the apply_set --write WOULD fill and exits 0; in POST-write (backup exists) it asserts the expected emptiness per MODE + byte-compares vs backup. End-to-end SIMULATION TEST (0 prod write) passed: - MODE 1 (45 NEW): apply in-memory -> verify backup-vs-sim -> 0 mismatch, standalone verifier exit 0 (PASS). CSV 46->91, delta 666 B. - MODE 2 (47 +834/847 override): dry-run -> 0 mismatch. CSV 46->93, delta 696 B. - All spot-checks OK; 834/847 empty in MODE 1 (FAIL-LOUD kept). At the verdict (ai-01 relays jsboige nod): python tools/498-phase13-apply.py --write [--with-overrides] python tools/498-phase13-verify.py [--with-overrides] dotnet test -> PR review byte-check ai-01. 0 prod write in this commit. GATE (jsboige content nod) NOT crossed. Co-Authored-By: Claude-Code <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 9, 2026
…leaves, MODE 2 override) (#760) GO jsboige (interactif, relayé par ai-01 dispatch 6eo7cb 2026-07-09 12:06): D1 LEVÉE + D2 OVERRIDE = MODE 2. Serialize the 47 scaleup phase 1-3 generative leaves into the 2 AIF columns (45 NEW + 834/847 override → undercut). Cell-fill byte-exact into Cards/Fallacies/Argumentum Fallacies - Taxonomy.csv (columns exist post-#753; this is cell-fill, not insert). Apply: python tools/498-phase13-apply.py --write --with-overrides - apply_set: 47 PKs -> 27 undermine / 17 undercut / 3 rebut (NEW=45, conflict-overridden=2 [834/847], CONFIRM no-op=3 [826/844/855]) - PHASE_MAP re-verified 50/50 vs annotation CSVs (load-bearing assert) - pre-state check: all 47 apply_set PKs empty (fill, no overwrite) - byte-preservation: 0 mismatch; 1409 rows x 104 cols; CRLF+BOM preserved - CSV filled total: 46 -> 93 (delta 696 bytes) Independent verify (backup-vs-result, tools/498-phase13-verify.py): - 0 byte-preservation mismatch (every field except AIF_attackType/ AIF_attackedNode of the apply_set byte-identical) - PHASE_MAP PKs filled: 50 -> 27 undermine / 20 undercut / 3 rebut - DoD distribution 93 = 61 undercut / 29 undermine / 3 rebut (pre 46 [44u/2m from #753] + 47 written [27m/17u/3r]) - spot-checks OK: 3 rebut -> rebut/CA-node (1282/1313/1361, FIRST Fallacies rebut); undermine -> I-node; undercut -> RA-node; 3 CONFIRM (826/844/855) unchanged; 834/847 -> undercut/RA-node (MODE 2 override); non-phase PK 2 untouched. - CRLF 1409, BOM preserved, delta 696 B dotnet test: 594 pass / 1 fail (#133 OWL pre-existing, unrelated) / 5 skip / 600 total. 0 regression (metadata-only additive layer, 0 render/CardPen/ harvest/PDF impact — verdicts #140/#632 unchanged, bundle v3 stays ref). Same byte-exact discipline as #753/#755 ([[csv-byte-exact-column-insertion]]). 0 fabrication #677 (50-leaf map verbatim from phase docs, re-verified 50/50 vs the 3 machine-readable annotation CSVs). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 10, 2026
…t rebut cluster, gated proposal) (#766) First dedicated cluster doc for a rebut family (Obstruction / Relativisme abusif). Opens 4 unmapped leaves (1283-1286) under anchor 1282 (serialized rebut/CA-node by #760). Proposition only — GATED, 0 prod CSV write. Deliverables (docs/taxonomy/): - 498-aif-relativisme-abusif-cluster.md (prose §1-7 + gate boundaries) - 498-relativisme-abusif-annotations.csv (12-col machine-readable, 5 rows) Model (first rebut cluster = attack-columns-only pattern): - All 4 leaves: AIF_attackType=rebut + AIF_attackedNode=CA-node (deterministic map #707§4 option a: rebut -> CA-node). - AIF_skosExceptionRef=Commitment_Inference (native) for 1283 only (self-exemption honestly rebuts the arguer's own commitment); the other 3 have no clean native rebutted scheme -> ExceptionRef empty, fail-loud in AIF_skosOther. - AIF_skosDirectRef empty for all 4 (bare relativist rebut = structural conflict, no native Walton CQ-conflict token). #677 discipline (0 fabrication, code=truth verified): - CounterConclusionConflict_Conflict / IssueAvoidance_Conflict / TuQuoque_Conflict verified NOT native (absent from all filled skos cols) -> correctly excluded (as #760 did for the 3 merged rebuts). - Commitment_Inference verified native. - Annotation CSV uses honest structural descriptor in AIF_CA_node (no fabricated token) — improvement over phase-3 placeholder practice. Honest per-leaf boundary flags: 1284 undermine-flavor, 1285 undercut-flavor, 1286 false-equivalence — documented in prose + why_not_others, not silently forced. Coverage: 93/1408 mapped (code=truth rescan) -> 97 projected once applied; rebut population 3 -> 7 (Relativisme abusif becomes the rebut nucleus, 5 of 7). Gated review ai-01; jsboige ratifies -> gated apply. Relates #498 #760 #757 #753 #755 #763 #707 #677. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 10, 2026
…conciliation trajectory (#768) Refresh the stale coverage-status.md (2026-07-05, master 70bd160) with a code=truth scan at master 7796c12. Docs-only proposition (gated) — 0 prod CSV write. Central finding — the AIF mapping has TWO layers, never reconciled: - attack layer (AIF_attackType+attackedNode): 93 rows (6.6%) — #753+#760 - skos layer (AIF_skosDirectRef/ExceptionRef/MappingType): 70 rows (5.0%) — pre-chantier baseline - overlap = only 18 rows. Fully-modeled (both layers) = 18/1408 (1.3%). - union (any AIF signal) = 145/1408 (10.3%). The previous "70/1408 (5.0%)" was NOT wrong — it measured the skos layer, which predates the attack columns. "93" measures the attack layer. Two distinct counters, resolved here. Cross-tab (code=truth, 1408 rows): - 52 rows skos-only (vetted native tokens, NO attack columns) — highest-ROI back-fill, 0 fabrication risk (tokens already exist). Family spread: Cheating 13, Insufficiency 10, ML 9, Faulty logics 8, Math 6, Influence 3, Obstruction 3. - 75 rows attack-only (typed, NO skos): 44 ML (skos already proposed+ratified in merged cluster docs PR-5..12, awaiting deep serialization) + 31 scaleup (need skos modeling, fail-loud #677). Trajectory reprioritized (§5): reconcile the two layers (P1: 52 skos->attack; P2: 44 ML attack->skos) BEFORE opening new clusters ex-nihilo — the half-done rows carry vetted tokens and lift 2-layer completeness 1.3% -> ~7-8% for bounded effort. New clusters (P3) on the small clean residuals (Complication exageree 6u, Operation inappropriee 5u) + Obstruction rebut nuclei (Evasion, Proces en inconsistance). Distribution 61 undercut / 29 undermine / 3 rebut (RA/I/CA map exact). 3 rebut (1282/1313/1361) = first Fallacies rebut, all Obstruction. VERIFIED: all figures from CSV scan + git log. RAPPORTE: PR effects (git log). PENDING: #766 (Relativisme abusif rebut cluster, not merged — Relativisme abusif still shows 4 unmapped in code=truth). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 10, 2026
…ows typed (gated proposal + dry-run apply) (#769) Réconciliation P1 (skos-only -> attack columns), GO ai-01 `msg-20260710T180845-5i1v03`, couvert par le pilote GO #498. Proposition gated : docs + apply-script dry-run, 0 write prod CSV dans ce diff. Correction load-bearing du cadrage #768 : il n'existe PAS de sous-ensemble "inherit mécanique" parmi les 52 skos-only. La classif initiale "19 inherit du sous-sous anchor" est un artefact — 0/19 ont une signature skos alignée sur leur anchor (les anchors du même sous-sous sont skos-VIDES : couche attack-only #753/#760, arguments différents). Hériter leur attackType serait une fabrication. L'attackType est un jugement neuf : 0-risque token (les tokens skos existent), pas 0-risque modélisation. Raffine le "0 fabrication risk" de #768. Méthode : attackType dérivé de la propre signature skos de chaque ligne, ancré sur les 18 lignes fully-modeled (ground truth token->attackType). attackedNode déterministe #707§4 (a) : undercut->RA-node, undermine->I-node, rebut->CA-node. Tiering des 52 : - 14 PRECEDENT (token exact d'un précédent fully-modeled + contrôle sémantique) -> tranche 1, distribution 11 undermine / 2 undercut / 1 rebut. - 2 PREC-TIE (777 Inconsistance, 633 Relation infondée — votes divergents). - 36 SUFFIX-ONLY (aucun précédent ; le prior de suffixe vers undermine est non fiable — contre-ex. pente glissante 705/677 penchent undercut) -> modélisation Walton au cas par cas, sous-lots aux prochains ticks. Livrables : - docs/taxonomy/498-reconciliation-p1.md — proposition (correction, méthode, tranche 1 avec justif par ligne, reste scopé, bornes du gate). - docs/taxonomy/498-reconciliation-p1-annotations.csv — 12 cols, 14 lignes, BOM+CRLF (factuel lu du CSV master, raisonnement authored). - tools/498-p1-apply.py — apply gated (--write dry-run par défaut), mirroir de 498-phase13-apply.py (#757). Re-vérifie 14/14 vs annotation CSV, splitters byte-exact, preuve byte-preservation. Dry-run : 0 mismatch, 93 -> 107 attack-typed, delta 207 bytes, CRLF+BOM préservés, 0 write prod. Sérialisation prod = étape suivante gated (relais ai-01), pas dans ce PR. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 11, 2026
…NLY, famille Erreur de raisonnement) attack 114->121 (#779) Prod serialization of tranche-1c (proposition #775, merged 3d6dcf3). Fills the 2 AIF attack columns (AIF_attackType / AIF_attackedNode) for the 7 skos-only rows of the whole "Erreur de raisonnement" family — all typed undercut/RA-node. Rows: 696 Erreur de raisonnement, 697 Causalite douteuse, 705 Pente glissante, 719, 726, 758, 759 (all SUFFIX-ONLY; family signature verified in-set via 707/727/858, NOT a suffix default — suffix prior proscribed, in-set disproof pk804 _Conflict->undercut, #770). attack-typed 114 -> 121, fully-modeled 39 -> 46. Executed via `python tools/498-p1c-apply.py --write` (flow #753/#760, ai-01 GO msg-20260711T110157-8c8wnh, GO scoped tranche-1c only). Byte-exact verified 2x: - script self-proof (load-bearing re-verify P1C_MAP vs annotation CSV 7/7, pre-state targets empty + carry skos, only ATI/ANI of the 7 PK may differ): 0 mismatch, +105 B, 1409x104, CRLF+BOM preserved. - independent backup-vs-prod cell-by-cell (tmp/Fallacies-backup-pre-p1c.csv): exactly 14 cells changed (7 rows x 2 cols), changed PKs == {696,697,705,719, 726,758,759}, 0 stray (nothing outside AIF attack cols / target PKs), all empty->value, node/type 7/7 consistent, delta +105 B, PASS. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 19, 2026
…ations (read-only, 0 write) (#828) Export the EXISTING AIF modelling (dispatch ai-01 msg-eltaoz) into consumable artefacts for CoursIA ICT #7289 + Layer C #790. Read-only on CSV/OWL, post-tag-safe. Honest verdict (no fabrication): the AIF attack graph is BIPARTITE — each of the 145 fully-modeled fallacies is an attacker targeting an abstract AIF node-TYPE (RA/I/CA-node), NOT another fallacy. There is no inter-fallacy attack adjacency in the data; AIF_attackedNode encodes node-type, not a target PK (145/145 axiom, 0 violations). A separate inter-fallacy graph exists in the OWL (isRelatedTo, mirrors, etc., 1734 edges) but those are generic semantic relations, not typed AIF attack-edges — exported and labelled separately. Artefacts (docs/ontology/aif-export/): - aif-attack-edges.csv 145 bipartite attack-edges (CSV, PK-keyed, primary) - aif-canonical-concepts.csv 60 AIF canonical concepts (skos refs) - taxonomy-tree-edges.csv 1408 hierarchical tree edges - aif-owl-attack-edges.csv 142 attack-edges from OWL (cross-view, individual-keyed) - aif-relations-graph.csv 1734 inter-fallacy relations (NON-AIF) - README.md column-to-adjacency mapping + verdict tools/aif-attack-graph-export.py: reproducible (Python stdlib, ~3s, 0 write to sources). Refs: dispatch ai-01 msg-eltaoz, AIF tranches 1-1d (#498/#753/#769/#776/#779), CoursIA ICT #7289, Layer C #790. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 21, 2026
…07 edges, post-tag) (#834) Re-run du générateur 497-grappe-substrate.py (ai-01 lane, unchanged) contre le CSV Fallacies courant (master b442c65), pour actualiser le substrat de curation grappe-à-grappe. Le doc initial mesurait 22 crossLinks (état pré-modelling) — stale de ~6 semaines. Ce refresh quantifie la densité réelle post-tranches AIF/crosslinks (#753/#760/#763 + P1). Delta coverage: - Bubble-up grappe-edges: 16 -> 107 - Σ crossLink feuilles: ~22 -> ~1179 (cohérent README ontology 844 fallacies 59.9%, 1985 raw / 1734 distinct OWL) - Per-grappe cl explosé: 2.3 Manipulation mentale 7->195, 6.3 Raisonnement biaisé 0->204, 6.1 0->84, 2.1 0->81... Finding central: la densification est concentrée INTRA-grappe (top edges sont 2.3->2.3 137x, 6.3->6.3 134x...). Les ponts inter-familles restent clairsemés malgré la croissance brute -- c'est là que la curation #497 a le plus de ROI, pas dans les intra (2.3/6.3 déjà saturées). Recommendation: ne pas densifier intra (ROI faible), cibler les ponts inter-familles (ancre 2.3<->6.3 PredatesOn + 2 pistes lexicales défendables: causales Interprétation-quant<->Causalité-douteuse, attaque-affect Appel-émotion<->Ad-hominem). Read-only, 0 fabrication (re-agrégat de crossLink_* existants). Post-tag-safe (contenu sous review T&A, 0 écriture prod CSV). Artefacts régénérables (497-grappe-inventory.csv + 497-responding-grappes.csv, script idempotent). Verdict QA = ai-01. Deliverable primaire du dispatch ai-01 msg-ucdwi7 (#497/#498/bridge deep-queue, strate-6 CoursIA #7289). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 26, 2026
…e unreproducible numbers rectified (#950) The release dossier is the publication GATE (#134), so its byte-exact figures have to be reproducible by whoever verifies the tag. §3.4 had three that were not. Measured on master `accfeeab` (`git cat-file -s` on the committed blob): 1. Size. §3.4 printed 5,314,381 B. That matches NO committed blob: `c2a9b761` (its own reference) and `d206e59c` are both 5,378,765 B, master is 6,030,505 B. The gap to `c2a9b761` is exactly 64,384 B -- the "-64 KB" claimed in the same sentence, i.e. the delta looks subtracted twice. Corrected to 6,030,505 B, with the commit and the representation named (blob == worktree here; the blob already carries CRLF, so `core.autocrlf` creates no discrepancy). 2. Provenance. §3.4 credited the "régén fraîche" #634 / `c2a9b761`. That commit left NO change in `docs/ontology/`: `argumentum.owl` has the identical blob `3c76b691…` at `d206e59c` (March) and at `c2a9b761` (July), and `argumentum_virtues.owl` is absent from `c2a9b761` entirely although the section claims it was committed there. Both files come from #787 / `6fdf5726` (2026-07-12): +651,740 B, +9,733 lines, +1,977 crossLinks, +290 AIF assertions. Two readings remain possible from git alone (regen reproduced byte-identically, or its output was not committed) and the doc now says so rather than picking one -- the missing Virtues file leans toward the second. Either way the freshness the tag gate requires is satisfied by #787: the citation was wrong, not the conclusion. 3. Unit. "1 408 broader" is a raw grep count (identical at every commit, so reproducible as printed) but it counts 1,407 hierarchy edges plus the property declaration. 1,407 edges / 1,408 concepts -- the root has no parent. Same class of confusion just fixed in #948 for crossLinks (1,081 CSV cells / 1,977 assertions / 1,985 with declarations). Confirmed exact and left alone: 1,408 fallacies, 2,816 prefLabel, 5,558 EN literals, 862,709 B for the Virtues OWL. Flagged as mixed-provenance: the 4,861 FR count is post-#787 (it was 4,867 at the commit the section named). Also added: a property inventory that reconciles three documents which had been counting separately -- crossLink 1,977 (#763/#948), AIF attack 145 (#498 P1 closure), skos Walton mappings 70. It also corrects a near-miss of my own: `grep attackType` returns 0 because the properties are `aifAttackType`/`aifAttackedNode`, so the AIF layer IS serialized; the inventory is the only reliable measurement. And in §3.1bis: the "OWL can be regenerated post-tag" line is now done (#787), and the 46/1408 figure is marked as #753's deliverable rather than the current 145/1408. No verdict, status, arbitration or editorial content touched -- figures only, in the document's own dated-refresh style (v4, v4.1, v5, v5.1 → v5.2). Method rule recorded in the section: a byte-exact figure must name its commit AND its representation, a count must name its pattern. Otherwise the same object reads 1,407 or 1,408, and 1,081 or 1,977 or 1,985. Refs #134, #133, #763, #948 Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Implements the #498 Fallacies AIF column contract (#707§4 Option a) — serializes the §7 I/RA/CA decomposition from the 12
docs/taxonomy/498-aif-*-cluster.mdcluster docs into 2 new columns onCards/Fallacies/Argumentum Fallacies - Taxonomy.csv.Reassigned by ai-01 (dispatch
1pgunw): po-2023 dead-channel ~2j → I take the contract as [primaire]. Fallacies CSV ≠ Virtues CSV → 0 collision if po-2023 returns. First prod CSV write of chantier #498. Gated: review ai-01 + veto jsboige (structural reassignment). I do NOT self-merge.What changed
2 new columns inserted AFTER
AIF_skosMappingType(col idx 94), beforeshape(idx 95) — i.e. they join the existing AIF block (cols 91-96):AIF_attackTypeundermine/undercut/rebutAIF_attackedNodeI-node/RA-node/CA-nodePlacement note: the dispatch said "trailing APRÈS les colonnes AIF existantes".
AIF_skosMappingType(col 94) is followed by 7 utility cols (shape…depth_max4), so I inserted right after col 94 (true trailing-of-AIF-block), NOT at file end.shapeshifts 95→97. If ai-01 prefers true file-end append (cols 103-104) instead, trivial to change — flag it.Derivation
Source: §7 ("Mapping to jsboige's enriched DoD") of the 12 cluster docs. Each §7 has
### pk NNN — Title → **attack-type**headers.attackType= the bolded token.attackedNodeis deterministic per the ratified contract: undercut→RA-node, undermine→I-node, rebut→CA-node (no per-leaf prose derivation needed for this column).Distribution (46 of 1408 rows filled)
17 FAIL-LOUD/gap leaves left EMPTY (0 fabrication #677) + 1345 not-yet-decomposed leaves empty.
⚠ OPEN QUESTION for review (the FAIL-LOUD interpretation)
I took the strict-conservative reading: serialize a value ONLY where the §7 header explicitly bolds an attack-type; where §7 marks FAIL-LOUD/gap, leave BOTH cells empty. This makes 17 leaves empty:
829, 840, 847, 848, 853— RA-node exists, attack-type is hedged "would be an undercut" in the prose, but the modeler did NOT write a clean→ **undercut**. → empty.832, 834, 835, 837, 861, 868-874— no RA-node to attack / "no I/RA/CA decomposition at all". → empty (genuinely underivable).If you (ai-01/jsboige) prefer the generous reading — promote the 5 CA-token-missing leaves to
undercut/RA-node(their attack-type IS derivable, the FAIL-LOUD was only about the conflict-token columnAIF_skosOther, already documented) — that's a 1-line change intools/498-fallacies-aif-columns-apply.py(FAIL_LOUDset). I left them empty to err toward fail-loud on a first prod write. Your call.Surgical byte-exact (the load-bearing guarantee)
Rewrites NO existing field. Each logical row is split into byte-exact field-segments (CSV-aware splitter: respects doubled-quote escapes + the 144 LF embedded inside quoted cells); 2 new segments inserted at idx 95/96; rejoined.
Independently VERIFIED (post-write, backup vs result):
git diff --statshows 1409/1409 — that is the expected signature of adding 2 columns to every line (git diffs whole lines). The byte-preservation proof above is the authoritative "nothing existing changed" guarantee.CsvHelper maps by header name, so the insertion breaks no existing ClassMap (new cols are simply unmapped).
Tests
dotnet test= 594 pass / 1 fail / 5 skip / 600. The 1 fail isOwlE2EGenerationValidationTests…DroppedByOwl2XmlRoundTrip= pre-existing OWL #133 (OWLSharp round-trip bug, documented in CLAUDE.md, unrelated to this change). 0 new failures — Fallacies-loading tests (CsvBaseStrictContractTest,FallacyClassMapRegressionTests,FallaciesPullTests,MmGeneratorTests) all pass. No entity/test references the new column names; no test hardcodes the Fallacies col count.Audit / reproducibility
tools/498-fallacies-aif-columns-apply.py— re-runnable: embeds the §7-derived PK sets, performs the surgical byte-exact insertion, re-validates. Run--writeto apply (dry-run by default). Reviewer can re-run to independently confirm byte-preservation.Discipline
1pgunwread in full before any work; all 12 §7 sections extracted + 9 FAIL-LOUD prose blocks re-read to confirm header-vs-body consistency before classifying.Request
Review + (if acceptable) merge — but NOT by me (gated ai-01 + veto jsboige per the reassignment). Two decisions for the reviewer:
cc @jsboige (structural reassignment — FYI, your veto). cc @jsboigeEpita (po-2023 owner — if you revive that lane, flag any conflict).
🤖 Worker po-2024 — [primaire] deliverable of dispatch
1pgunw(reassigned from po-2023, dead-channel).