tools(taxonomy): reusable anti-fab validator for scale-up CSVs - #518
Conversation
Encodes the manual anti-fabrication passes done per taxonomy scale-up phase (pilots #503/#505/#508, phase-1 #509/#510) into a stdlib-only Python tool so each new proposition CSV can be validated automatically before its PR. Dispatched by ai-01 (msg-20260617T051231); built by worker po-2024. Why a script, not a C# test: the docs/taxonomy/ propositions have HETEROGENEOUS schemas (virtues / AIF-triple / cross-links) that are not C# entities, and the generation+anti-fab tooling for this lane is Python. A stdlib-only script adds no runtime the repo does not already imply, and accepts arbitrary CSV paths so a worker validates a phase file on its own branch before opening the PR. Checks (per detected schema kind): - (a) HARD PK membership — every *_pk / opposed PK / family PK / source+target PK is a real PK in the corresponding corpus CSV; family PKs are depth 1. - (b) HARD link_type in the 8 crossLink_* types. - (c) WARN Walton scheme in the union used by validated pilots (drift detection). - (d) HARD attack_type in {undermine, undercut, rebut}. - (e) WARN attacked_component coherent with attack_type (data-grounded map). - (f) HARD symmetric links: the reverse edge is encoded (symmetric flag = source of truth, not a type-set heuristic). Anti-fab design: no machine-readable canonical "Walton 24" exists in the repo (corpus AIF_skosDirectRef holds AIF node IDs, not scheme names; generation was ad-hoc). Hardcoding Walton from memory risks false fail/pass. So check (c) is a WARNING built from the union of scheme names used by merged validated pilots — catches drift honestly without fabricating a canonical list. DoD: 0 HARD violations across all 5 existing CSVs (497-pilot-crosslinks, 498-pilot-annotations, 499-pilot-annotations on master + 498-scaleup-phase1 #509, 499-scaleup-phase1 #510 from their branches). Negative test: deliberately corrupted CSVs trigger every HARD check (bad PK, bad link type, wrong family depth, bad attack type, missing reciprocal edge) — proven, not assumed. Gate-safe: pure tooling, 0 prod change (no CSV, no config, no workflow). Contributes to the taxonomy scale-up lane (#497/#498/#499). Refs #509/#510. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
[NanoClaw] Argumentum #518 — anti-fab validator tool Two new files: a Python stdlib-only validator script ( What it does: Check matrix:
Anti-fab design choices (well-motivated):
Grounded in corpus: Loads Fallacies + Virtues PK maps from Validated: DoD table shows 0 HARD violations across all 5 corpus CSVs, with expected WARNINGs (8 diacritic-stripped titles in 499 pilot). Negative tests confirm all HARD checks fire correctly. Minor notes:
Substantial tool. GATED: this adds tooling, no production CSV changes — jsboige validation required before merge. |
|
[NanoClaw] High-quality tooling addition. The anti-fabrication validator encodes the manual review passes from #503/#505/#508/#509/#510 into an automated stdlib-only Python script. Design strengths:
One observation: the dispatch message reference ( No security concerns (stdlib-only, no network, no eval). LGTM. |
… depth-3..4 leaves (gated) (#530) Phase 2 begins the depth-3..7 leaf layer (194 nodes). This batch 1 covers the smallest family, Langage exact (14 nodes: 9 depth-3 + 5 depth-4), as a calibration batch for leaf-level granularity. Same method, schema, and anti-fab guarantee as Phase 1 (#510, merged 0ad4025): - gpt-5.5 /v1/responses reasoning:low, grounding catalog of 7 family PKs + 63 real depth-3 fallacies (forbidden to use any PK outside it). - Family mirror as hard constraint: every Langage-exact leaf -> Abus de langage (PK 798). - Three independent verification layers re-checked against the REAL corpus (not the prompt catalog): catalog membership, ground-truth PK<->text_fr on the 1408-row Fallacies CSV, mirror consistency. 14/14 annotated, 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 14 rows, 0 HARD, 0 WARN. Granularity refinement for leaves: a depth-4 virtue opposes the most specific applicable fallacy under the family (e.g. "Ponctuation correcte" -> Amphibologie 847, not a broad ambiguity). GATED proposal — docs/taxonomy/ only, no production Virtues CSV change. 6 families (180 nodes) remain for subsequent phase-2 batches. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…matique depth-3..4 leaves (gated) (#532) Phase 2 batch 2: the Rigueur mathematique family (16 leaves: 9 depth-3 + 7 depth-4). Same method, schema, and anti-fab guarantee as batch 1 (#530, merged fc2013f) and Phase 1 (#510). - gpt-5.5 /v1/responses reasoning:low, grounding catalog of 7 family PKs + 63 real depth-3 fallacies (forbidden to use any PK outside it). - Family mirror hard constraint: every Rigueur-mathematique leaf -> Erreur mathematique (PK 594). - Three independent verification layers re-checked against the REAL corpus: catalog membership, ground-truth PK<->text_fr on the 1408-row Fallacies CSV, mirror consistency. 16/16 annotated, 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 16 rows, 0 HARD, 0 WARN. Depth-4 leaves oppose the most specific applicable math fallacy (e.g. "Exactitude numerique" -> Erreur de calcul 681 + Imprecision 667, not a broad sampling fallacy). "Sign" scheme dominance reflects the probabilistic nature of most math-rigor virtues. GATED proposal — docs/taxonomy/ only, no production Virtues CSV change. 5 families (164 nodes) remain for subsequent phase-2 batches. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ellectuelle depth-3..5 leaves (gated) (#534) Gated proposal, no production CSV change. Batch 3 of Phase 2 depth-3..7 leaf layer: Honnêteté intellectuelle family (segment 6, 23 nodes: 9 d3 + 12 d4 + 2 d5), mirror Tricherie (Fallacy family 887). - 23/23 annotated via gpt-5.5 (/v1/responses, effort=low), 2 depth-3 fallacies opposed per leaf, Walton scheme + CQ restored. - 3-layer anti-fab verify: catalog membership + ground-truth vs real 1408-row Fallacies CSV (text_fr) + mirror consistency — 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 23 rows, 0 HARD, 0 WARN. - Scheme distribution Bias-dominant (11/23), expected for the honesty family opposite cognitive bias — distinct from batch 1 (Verbal Classification) and batch 2 (Sign), confirming per-family semantic fidelity. Files: docs/taxonomy/499-virtues-scaleup-phase2-honnetete.md + CSV only. Generation scripts/raw output kept ephemeral in tmp/ (not committed). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…intègre depth-3..5 leaves (gated) (#535) Gated proposal, no production CSV change. Batch 4 of Phase 2 depth-3..7 leaf layer: Présentation intègre family (segment 2, 21 nodes: 9 d3 + 7 d4 + 5 d5), mirror Tricherie (Fallacy family 887) — distinct Virtue family from batch 3 (Honnêteté intellectuelle, same mirror) covering presentation/rhetoric. - 21/21 annotated via gpt-5.5 (/v1/responses, effort=low), 2 depth-3 fallacies opposed per leaf, Walton scheme + CQ restored. - 3-layer anti-fab verify: catalog membership + ground-truth vs real 1408-row Fallacies CSV (text_fr) + mirror consistency — 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 21 rows, 0 HARD, 0 WARN. - Scheme distribution balanced (7 distinct schemes): Verbal Classification x5, Commitment x4, Values x4, Bias x3, Analogy x2, Consequences x2, Position to Know x1. The Values cluster (x4, all humor virtues opposing Humour 219) is the family's semantic signature. Broader than single-scheme-dominant batches 1-3, confirming per-family semantic fidelity. Files: docs/taxonomy/499-virtues-scaleup-phase2-presentation.md + CSV only. Generation scripts/raw output kept ephemeral in tmp/ (not committed). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…inent depth-3..6 leaves (gated) (#537) Gated proposal, no production CSV change. Batch 5 of Phase 2 depth-3..7 leaf layer: Argument pertinent family (segment 1, 29 nodes: 9 d3 + 13 d4 + 5 d5 + 2 d6) — largest single batch so far, mirror Insuffisance (Fallacy family 1). - 29/29 annotated via gpt-5.5 (/v1/responses, effort=low, max_output_tokens raised 4500 -> 7000 to fit the 29-node batch — 4500 truncated mid-JSON). - 3-layer anti-fab verify: catalog membership + ground-truth vs real 1408-row Fallacies CSV (text_fr) + mirror consistency — 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 29 rows, 0 HARD, 0 WARN. - Scheme distribution broadest yet (10 distinct schemes): Position to Know x6, Expert Opinion x5, Sign x4, Bias x4, Cause to Effect x4, Example x2. The Position-to-Know + Expert-Opinion dominance = the source-evaluation signature. Most-opposed fallacies Argument d'autorite 71 and Fausse attribution 942 each appear 11x = the family's semantic anchor (relevant argument requires competent + faithfully-reported source). Depth reaches d6 (pk 18 Expert du domaine, pk 23 Preuves empiriques) — deepest leaves so far. Files: docs/taxonomy/499-virtues-scaleup-phase2-argument.md + CSV only. Generation scripts/raw output kept ephemeral in tmp/ (not committed). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…chissant pks 181-199 (gated) (#538) Gated proposal, no production CSV change. Batch 6a = first sub-batch of the Échange enrichissant family (segment 7, 40 nodes total, split 6a=18 + 6b=22). 6a covers pks 181-199 (18 nodes: 5 d3 + 9 d4 + 3 d5 + 1 d6), mirror Obstruction (Fallacy family 1280). - Sub-batch rationale: 40 nodes too large for one gpt-5.5 generation (batch 5 truncated at 4500 tokens; fix applied 7000 tokens). Split by pk range. - 18/18 annotated via gpt-5.5 (/v1/responses, effort=low, max_output_tokens 7000). - 3-layer anti-fab verify: catalog membership + ground-truth vs real 1408-row Fallacies CSV (text_fr) + mirror consistency (all 1280) — 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 18 rows, 0 HARD, 0 WARN. - Scheme distribution Commitment-dominant (9/18) = epistemic-honesty signature. Most-opposed fallacy Évasion 1313 appears 10x = family semantic anchor (enriching exchange requires genuine engagement, not evasion). Depth reaches d6 (pk 191 Empathie). Files: docs/taxonomy/499-virtues-scaleup-phase2-echange-a.md + CSV only. Generation scripts/raw output kept ephemeral in tmp/ (not committed). Batch 6b (pks 200-222) follows next tick. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ks 81-104 (22 leaves) (#540) First sub-batch of the last Phase-2 family (Raisonnement valide, segment 4, mirror Erreur de raisonnement 696). 22 depth-3..6 leaves: premises/causality/ formal-validity + the formal inference rules (modus ponens, modus tollens, conjunction, reductio ad absurdum, resolution). Rule-dominant scheme (17/22) — the strongest single-scheme dominance of all batches, the formal-logic signature. Most-opposed fallacies form the formal-validity cluster: Erreur de logique propositionnelle 727 (x14), Syllogisme invalide 784 (x8), Inconsistance 777 (x5) — exact mirror of Erreur de raisonnement 696. Method unchanged: gpt-5.5 (/v1/responses, effort=low, 7000 tokens), 63-fallacy grounding catalog, family-mirror hard constraint. 3-layer anti-fab verify PASS (catalog + ground-truth vs 1408-row Fallacies CSV + mirror consistency, 0 violations). Anti-fab validator #518: CLEAN — 22 rows, 0 HARD, 0 WARN. GATED proposal: docs/taxonomy/ only. No production Virtues CSV edited; awaiting jsboige content approval. 7b (pks 105-127, syllogistic modes incl. d7) and 7c (pks 128-133, 6 leaves) follow to complete Phase 2 (194/194 leaves). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ks 105-127 (23 leaves, depth-6/7) (#541) Second sub-batch of the last Phase-2 family (Raisonnement valide, segment 4, mirror Erreur de raisonnement 696). 23 leaves: 4 depth-6 figure anchors + 19 depth-7 syllogistic modes (Barbara, Celarent, Darii, Ferio, Cesare, Camestres, Festino, Baroco, Darapti, Felapton, Disamis, Datisi, Bocardo, Ferison, Camenes, Dimatis, Fesapo, Fresison, Bamalip). This reaches depth-7 — the deepest layer of the entire Virtues taxonomy. Scheme distribution: Rule x23 (100% — total single-scheme dominance, the strongest of all batches). Syllogisme invalide 784 appears in all 23 rows (100%): each valid syllogistic mode is the precise inverse of an invalid syllogism. Erreur de quantification 735 x16 names the distribution errors. The depth-7 CQs carry per-mode specificity — each names the exact premise quantity/quality of that mode (Barbara = two universal affirmatives -> universal affirmative conclusion; Celarent = universal negative + universal affirmative -> universal exclusion). gpt-5.5 reproduces the classical syllogistic mnemonics with correct figure and mood. Method unchanged: gpt-5.5 (/v1/responses, effort=low, 7000 tokens), 63-fallacy grounding catalog, family-mirror hard constraint. 3-layer anti-fab verify PASS (catalog + ground-truth vs 1408-row Fallacies CSV [PK/text_fr] + mirror consistency, 0 violations). Anti-fab validator #518: CLEAN — 23 rows, 0 HARD, 0 WARN. GATED proposal: docs/taxonomy/ only. No production Virtues CSV edited; awaiting jsboige content approval. 7c (pks 128-133, 6 informal/analytical-reasoning leaves) follows to complete Phase 2 (194/194 leaves). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…al points) Realign the batch 6b proposal MD to the CSV ground truth, addressing the 3 structural inconsistencies flagged by ai-01's NanoClaw review (hard-rules #518 unaffected — these are narrative doc-vs-data coherence points): (a) pk 207 gap: the range 200-222 = 23 numbers for 22 leaves; pk 207 is `Respect de la personne` (path 7.3), a depth-2 backbone sub-family annotated in Phase 1 — correctly skipped as a non-leaf. Added an explanatory note in §1. (b) Depth split: prose said "7 d3 + 13 d4 + 2 d5" but the §5 table and the REAL Virtues corpus give "6 d3 + 14 d4 + 2 d5". Corrected the prose to 6/14/2 (table was already right). (c) Most-opposed tally: recomputed exactly from the 44 crossLink_Opposes PKs. Évasion 1313 = x9 (the true #1, was shown x6 and mis-ranked below Attaque personnelle), 1398 x7, 1352 x6, 1345 x4, 322 x4, 1371 x3, 420 x3. Rewrote the §5 tally as a ranked table and reordered the narrative (Évasion dominates, not Attaque personnelle); added 1345 and 1371. Also rebuilt the §5 leaf table from the CSV ground truth so the CQ column matches character-for-character (the original table held abbreviated CQ paraphrases; the CSV carries gpt-5.5's full CQs). opposes + scheme columns were already exact. CSV unchanged (only the proposal MD). Validator #518 still CLEAN (22 rows, 0 HARD, 0 WARN) — CSV untouched. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…pks 200-222 (gated) (#539) * docs(taxonomy): #499 Virtues scale-up phase 2 batch 6b — Échange enrichissant pks 200-222 (gated) Gated proposal, no production CSV change. Batch 6b = second/last sub-batch of the Échange enrichissant family (segment 7). Covers pks 200-222 (22 nodes: 7 d3 + 13 d4 + 2 d5), mirror Obstruction (Fallacy family 1280). With 6a merged, this completes the Échange enrichissant family (40/40 leaves). - 22/22 annotated via gpt-5.5 (/v1/responses, effort=low, max_output_tokens 7000). - 3-layer anti-fab verify: catalog membership + ground-truth vs real 1408-row Fallacies CSV (text_fr) + mirror consistency (all 1280) — 0 violations. - Anti-fab validator #518 (kind=virtues): CLEAN — 22 rows, 0 HARD, 0 WARN. - Scheme distribution Commitment-dominant (15/22) = respect/civility signature. Most-opposed fallacies = disqualification cluster: Attaque personnelle 1398 x7, Évasion 1313 x6, Empoisonnement du puits 1352 x6, Repoussoir 322 x4, Jeu de pouvoir 420 x3 = family semantic anchor (enriching exchange = criticize arguments not person, engage not evade/impose, interpret charitably). Combined with 6a, full Échange enrichissant anchored on engagement-vs-obstruction = exact mirror of Obstruction 1280. Depth reaches d5 (pk 218, pk 220). Files: docs/taxonomy/499-virtues-scaleup-phase2-echange-b.md + CSV only. Generation scripts/raw output kept ephemeral in tmp/ (not committed). Batch 7 = Raisonnement valide (51, sub-batched) remains. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(taxonomy): #539 realign Échange-b MD to CSV (3 NanoClaw structural points) Realign the batch 6b proposal MD to the CSV ground truth, addressing the 3 structural inconsistencies flagged by ai-01's NanoClaw review (hard-rules #518 unaffected — these are narrative doc-vs-data coherence points): (a) pk 207 gap: the range 200-222 = 23 numbers for 22 leaves; pk 207 is `Respect de la personne` (path 7.3), a depth-2 backbone sub-family annotated in Phase 1 — correctly skipped as a non-leaf. Added an explanatory note in §1. (b) Depth split: prose said "7 d3 + 13 d4 + 2 d5" but the §5 table and the REAL Virtues corpus give "6 d3 + 14 d4 + 2 d5". Corrected the prose to 6/14/2 (table was already right). (c) Most-opposed tally: recomputed exactly from the 44 crossLink_Opposes PKs. Évasion 1313 = x9 (the true #1, was shown x6 and mis-ranked below Attaque personnelle), 1398 x7, 1352 x6, 1345 x4, 322 x4, 1371 x3, 420 x3. Rewrote the §5 tally as a ranked table and reordered the narrative (Évasion dominates, not Attaque personnelle); added 1345 and 1371. Also rebuilt the §5 leaf table from the CSV ground truth so the CQ column matches character-for-character (the original table held abbreviated CQ paraphrases; the CSV carries gpt-5.5's full CQs). opposes + scheme columns were already exact. CSV unchanged (only the proposal MD). Validator #518 still CLEAN (22 rows, 0 HARD, 0 WARN) — CSV untouched. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…uffisance (12 fallacies, triple-AIF) (#542) Phase 2 of the AIF scale-up: extends the triple-AIF (RA-node + ASPIC+ attack-type + CA-node/CQ) to 2 more families — Erreur mathematique (6) + Insuffisance (6) = 12 no-AIF depth-3 fallacies. Base master 909d04c. Combined with phase 1 (11), that is 23/44 no-AIF depth-3 annotated (52%). Attack-type distribution: undermine 6 / undercut 6 / rebut 0 — confirms the phase-1 prediction of an undermine-shift for evidence/premise families, but with genuine per-case discrimination: - Erreur mathematique: undermine 4 / undercut 2 (data/premise fallacies = undermine: UnrepresentativeSample, BaseRateNeglect, ImpreciseData, CalculationError; model/form fallacies = undercut: UnwarrantedContinuum, InvalidMathematicalModel). - Insuffisance: undermine 2 / undercut 4 (inverted — its fallacies are rule-applicability errors, not data errors: NaturalisticValueTransfer, MoralFactInference, OversimplifiedAnalogy, BiasDoesNotRefuteClaim = undercut; AdHocPremise, UnparsimoniousPremise = undermine). The why_not_others field documents the discrimination per case (e.g. pk596 Echantillon biaise: the Example rule is legitimate, only the premise is bad -> undermine). Phase 3 (Obstruction/Influence/Tricherie) now expected to surface rebut (the third type, absent from phases 1-2). Method unchanged from phase 1: gpt-5.5 (/v1/responses, effort=low, 7000 tokens), 24-scheme Walton catalog grounding, ASPIC+ coherence hard constraint (attack_type <-> attacked_component), active discrimination via why_not_others. 3-layer anti-fab verify PASS (catalog membership + ground-truth vs 1408-row Fallacies CSV [all 12 confirmed no-AIF, no scope collision] + ASPIC+ coherence, 0 violations). Anti-fab validator #518: CLEAN (12 rows, kind=aif-scaleup, 0 HARD, 0 WARN). GATED proposal: docs/taxonomy/ only. No production Fallacies CSV edited; awaiting jsboige content approval. Phase 3 (21 fallacies) follows to complete the 44 no-AIF depth-3. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…ub-batch C (pks 128-133), FINAL batch → Phase 2 194/194 complete (#544) Phase-2 batch 7c: the informal/analytical cluster of Raisonnement valide (segment 4, pks 128-133, 6 leaves: 1 depth-4 + 5 depth-5). Mirrors Erreur de raisonnement (family PK 696). This is the FINAL sub-batch of the family and of the entire Phase-2 Virtues scale-up — completes Raisonnement valide (51/51) and Phase 2 (194/194 leaves). Informal/analytical signature: 5 distinct Walton schemes across 6 leaves (Sign x2, Rule / Bias / Cause to Effect / Analogy x1 each), maximally dispersed — the polar opposite of 7a (Rule 17/22) and 7b (Rule 23/23). 11 distinct opposed fallacies, none opposed more than twice (Inconsistance 777 x2 the only repeat). Each virtue engages a distinct non-formal reasoning mode (sign-tracking, analytic decomposition, synthesis, bias-detection, abduction, analogy). Verification (3 independent layers, re-checked vs real 1408-row Fallacies CSV): 6/6 annotated, 0 violations. Mirror consistency all = 696. Anti-fab validator #518: CLEAN — 6 rows, 0 HARD, 0 WARN. GATED PROPOSAL — no production Virtues CSV change. docs/taxonomy/ proposition only (md + annotation CSV). Awaiting ai-01 structural review + jsboige content approval. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…bstruction (27 fallacies, triple-AIF) (#546) Phase-3 triple-AIF: the rhetorical/divergence families (Influence + Tricherie + Obstruction, 27 depth-3 fallacies, 9 each). These three families were entirely unannotated before this batch. With phases 1+2 (23 fallacies) and phase 3 (27), AIF depth-3 coverage reaches 50/63 (79%). Distribution: undermine 20 / undercut 4 / rebut 3. Phase 3 is where the rebut attack-type (absent in phases 1-2: 0/23) finally appears — exactly where the divergence families license it: Relativisme abusif 1282 (competing-truth counter-claim), Évasion 1313 (issue substitution), Procès en incohérence 1361 (tu-quoque counter). The undermine dominance (20/27) is the Tricherie/Obstruction signature — false/biased premises, credibility attacks, bare assertions. Family signatures: - Influence (9): pure undermine — every fallacy counterfeits a persuasion scheme via a loaded/emotion-laden premise (schemes disperse across the persuasion catalog: Verbal Classification, Popular Opinion, Values x2, Bias, Consequences, Sign x2, Commitment). - Tricherie (6 undermine / 3 undercut): deception splits into false/biased premises (Mensonge, fausse attribution, attention sélective, biais x3) and double-standard rule shifts (Exigence renforcée/relâchée, Vouloir le beurre) — the undercut cluster is the special-pleading trio. - Obstruction (5 undermine / 3 rebut / 1 undercut): the only rebut-bearing family. 3 rebut = the genuine counter-conclusion fallacies; undermine = credibility attacks (attaque personnelle, sophisme génétique, empoisonnement du puits) + bare assertion. Verification (3 independent layers, re-checked vs real 1408-row Fallacies CSV): 27/27 annotated, 0 violations. Ground-truth: all 27 present, unique, depth=3, correct family. ASPIC+ coherence (attack_type <-> attacked_component) PASS. Anti-fab validator #518: CLEAN — 27 rows, 0 HARD, 0 WARN (kind=aif-scaleup). md <-> CSV char-for-char consistency: 0 issues (table built from CSV ground truth). GATED PROPOSAL — no production Fallacies CSV change. docs/taxonomy/ proposition only (md + annotation CSV). Bases on master, independent of phase 2 merge. Awaiting ai-01 structural review + jsboige content approval. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…sts, stdlib-only) (#549) Pins the contract the taxonomy scale-up lane depends on, with no dependency on the real corpus — synthetic in-memory rows + ground-truth exercise the LOGIC, so a HARD-violation detection regression surfaces as a failing assertion. Covers: detect_kind (4 kinds + unknown + precedence), split_pks, validate_virtues, validate_aif_scaleup, validate_aif_pilot, validate_crosslinks (symmetry HARD), build_walton_catalog, and the CROSSLINK_TYPES/ATTACK_TYPES/ATTACK_COMPONENT_OK constants. Output-neutral: no change to the tool under test. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…lot diacritics (#578) Add the closure dossier for #499 (Virtues relational/AIF parity) and normalize the pilot CSV's display diacritics, giving ai-01/jsboige one consolidated, validator-clean dossier to review. Context: ai-01 dispatched GO #499 (relational layer, draft non-prod, docs/taxonomy/, gpt-5.5). Verify-before-code showed generation was already COMPLETE: pilot (#503) + phase 1 (#510) + phase 2 batches 1-7 (#530-#544) cover all 8 Virtue families depth 1-7. So the genuine remaining un-gated work was consolidation + validation, not generation. Coverage (measured against the real 223-row Virtues CSV): - 223/223 Virtue PKs annotated (0 unannotated) = 100% coverage. - 222 annotation rows across 12 CSVs (pilot + phase 1 re-confirm roots). - 14 distinct Walton schemes referenced (Rule 50, Commitment 40, Bias 27, Sign 26, Verbal Classification 21, ...) - semantic specificity, not template repetition. - 7 Virtue families -> 6 Fallacy families (Presentation intregre 34 + Honnetete 152 both -> Tricherie 887, the dual-facet mapping gpt-5.5 recovered independently). Validator #518 holistic run across all 12 CSVs: - BEFORE: 12/12 CLEAN, 0 HARD, 8 WARN (all in the pilot CSV #503). - The 8 warnings were cosmetic diacritic-folding in the pilot's display columns (virtue_title/prevented_family_name/opposed_fallacies_readable): "Premisses fiables" vs corpus "Premisses fiables" (ASCII-folded). PKs, Walton schemes, CQs were all real and verified - WARN, not HARD. - This PR normalizes the pilot display diacritics to the corpus (aligning it with its own pilot MD section 4 table, which already shows accented forms). No PK, scheme, CQ, link_type, or justification changed. - AFTER: 12/12 CLEAN, 0 HARD, 0 WARN. Closure recommendation: CLOSE #499 (content-proposal layer). Generation complete, 100% coverage, 0 HARD violations, fail-loud satisfied. Remaining steps are all GATED on jsboige: (1) content validation, (2) prod 12-col Virtues CSV write, (3) OWL propagation (Virtues not yet in OWL export - OwlAdapter handles Fallacies only), (4) EPITA consumer wiring. New file: docs/taxonomy/499-virtues-parity-closure.md (mirrors 498-aif-closure.md structure). Modified: 499-pilot-annotations.csv (display diacritics only). No production Virtues CSV touched. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
…e / Causalités cluster (proposition, gated) (#741) Pilot for serializing the ratified #707 §4(a) schema (AIF_attackType + AIF_attackedNode) on the Virtues side, mirroring the po-2023 Fallacies chantier format (#498 PR-1 #699). Dispatch ai-01 ompwhx [primaire] #499 Virtues AIF. One cluster modeled: Raisonnement valide (family 4) / Causalités bien identifiées (subfamily 4.1) — anchor pk 80 + leaves 81/82/83. Chosen as the cleanest inverse-paradigm mirror: the Fallacies subfamily Causalité douteuse sits at path 4.1.x (698/707/719), the Virtues subfamily sits at path 4.1 — same path, opposite tenor (structural corroboration of jsboige's inverse paradigm, independent of the crossLink_Opposes mapping). The Virtues 12-col relational layer is already generated + validated CLEAN (222/222 nodes, 9 PRs merged June 2026, validator #518). This PR does NOT redo it; it extends it with the I/RA/CA decomposition the ratified schema asks for, reusing the existing scheme/CQ/opposed-PK grounding (no re-derivation). Inverse-paradigm adaptation FLAGGED for jsboige validation (not decided alone): the ratified columns are attack-shaped, but a Virtue is the good holding of a scheme, not an attack. Three options documented (A attack-resisted [reco], B structurally-empty, C AIF-native support). Pilot written under Option A; only the last two table columns change if jsboige picks B or C. 0 fabrication (undercut + RA-node are native AIF). Native vocab only (discipline #677). 0 prod CSV write, 0 DB, 0 OWL regen, 0 Cards/. Proposition doc only. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
… (Option A, HOLD prod) (#744) Specifies the deterministic derivation of the 2 new columns (AIF_attackType + AIF_attackedNode, schema #707§4 Option A ratified) for all 222 Virtues nodes, from the existing 12-col relational grounding (phase-2, CLEAN 222/222 #518). Generalizes the method validated on 3 clusters (PR #741/#742/#743, 9 leaves, 14 fallacy-instances) into a programmable 2-step rule: 1. DEFAULT = undercut/RA-node (the inference is broken — credibility, bias, causal link, tool-misuse, commitment short-circuit). Covers ~95% of nodes. 2. OVERRIDES (rare): - undermine/I-node: fallacy asserts a known-false proposition (889 Mensonge, 9 nodes clean; 804 Acception arbitraire borderline, 4 nodes, conservative default undercut/RA unless per-case override). - rebut/CA-node: EMPTY SET — scan of all 60 opposed fallacies = 0 occurrences, confirms rebut-rarity finding (PR #743 §3) at full scale. Expected output distribution: ~209-213 undercut/RA + 9 undermine/I (889) + 0-4 borderline (804) + 0 rebut/CA. Includes: full-scale scheme distribution (14 families), override tables with false-positive exclusions (644/727/735/750/942/974/1287 = tool-misuse/credibility → undercut/RA, NOT undermine), programmatic apply-script pseudo-code (ready to execute), anti-drift gating sequence (0 write until po-2023 column contract #498 lands on master + ai-01 review), validation checklist (fail-loud conditions). KEY LOAD-BEARING OUTPUT for ai-01/jsboige: AIF_attackType column will be undercut-dominated ~95%. Don't over-invest rebut/undermine coverage in validator tooling — their rarity is the domain's real structure, not a modeling gap. DISCIPLINE: - HOLD prod-CSV write per ai-01 order (anti-drift vs po-2023 column contract). - 0 fabrication (#677), 0 write CSV/DB/OWL/Cards. Docs-only. - Reuses CLEAN 12-col grounding, does not re-derive. Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
What
Dispatch primaire from ai-01 (
msg-20260617T051231-o6izvl): a reusable anti-fabrication validator that encodes the manual anti-fab passes done per taxonomy scale-up phase, so each new proposition CSV can be validated automatically before its PR. Built while #499 Virtues phase-2 is gated on the jsboige calibration nod.tools/validate_taxonomy_annotations.py(stdlib-only Python) +tools/validate_taxonomy_annotations.md.Why a script, not a C# test
The
docs/taxonomy/propositions have heterogeneous schemas (virtues / AIF-triple / cross-links) that are not C# entities, and the generation + anti-fab tooling for this lane is already Python. A stdlib-only script adds no runtime the repo doesn't already imply, and accepts arbitrary CSV paths so a worker validates a phase file on its own branch before opening the PR (the reuse value ai-01 asked for).Checks (per detected schema kind)
*_pk/ opposed PK / family PK / source+target PK is real in the corpus; family PKs depth 1link_type∈ 8crossLink_*typesattacked_component↔attack_type(data-grounded map)symmetric=True⇒ reverse edge encoded (flag = source of truth)Schema kinds detected: virtues · aif-scaleup (triple AIF) · aif-pilot (legacy) · crosslinks.
Anti-fab design — why (c) is a WARNING, not HARD
The dispatch asked for
RA_scheme∈ "Walton 24", but no machine-readable canonical Walton list exists in the repo: the corpusAIF_skosDirectRefholds AIF node IDs (Bias_Inference, …), not scheme names; the AIF lane was generated ad-hoc. Hardcoding Walton's 24 from memory risks false fail/pass — a fabrication risk. So the catalog = union of scheme names used by merged validated pilots, and a novel scheme is flagged for human review. Honest drift detection, no invented canonical list.DoD — 0 HARD violations across all 5 existing CSVs
497-pilot-crosslinks.csv498-pilot-annotations.csv499-pilot-annotations.csv498-scaleup-phase1-annotations.csv(#509, from branch)499-scaleup-phase1-annotations.csv(#510, from branch)Negative test: deliberately corrupted CSVs trigger every HARD check (bad PK, bad link type, wrong family depth, bad attack type, missing reciprocal edge) → exit 1. Proven to catch errors, not just pass everything.
Gate safety
csv,argparse,os,sys) — no new dependencytmp/(ephemeral gen/test scripts) excluded from the commitContributes to the taxonomy scale-up lane (#497/#498/#499). Refs #509/#510 (phase-1 CSVs validated). Workers run
python tools/validate_taxonomy_annotations.py <phase.csv>before opening each phase PR.🤖 Worker po-2024 — primaire of ai-01 dispatch
msg-20260617T051231-o6izvl.