Skip to content

tools(taxonomy): reusable anti-fab validator for scale-up CSVs - #518

Merged
jsboige merged 1 commit into
masterfrom
tools/taxonomy-anti-fab-validator
Jun 17, 2026
Merged

tools(taxonomy): reusable anti-fab validator for scale-up CSVs#518
jsboige merged 1 commit into
masterfrom
tools/taxonomy-anti-fab-validator

Conversation

@jsboige

@jsboige jsboige commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

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)

Check Level Rule
(a) PK membership HARD every *_pk / opposed PK / family PK / source+target PK is real in the corpus; family PKs depth 1
(b) link type HARD link_type ∈ 8 crossLink_* types
(c) Walton scheme WARN scheme ∈ union used by validated pilots (drift detection)
(d) attack type HARD ∈ {undermine, undercut, rebut}
(e) attack coherence WARN attacked_componentattack_type (data-grounded map)
(f) symmetric reciprocity HARD 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 corpus AIF_skosDirectRef holds 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

CSV kind rows HARD WARN
497-pilot-crosslinks.csv crosslinks 24 0 0
498-pilot-annotations.csv aif-pilot 18 0 0
499-pilot-annotations.csv virtues 10 0 8 (diacritic-stripped titles — real drift surfaced)
498-scaleup-phase1-annotations.csv (#509, from branch) aif-scaleup 11 0 1 (novel valid scheme)
499-scaleup-phase1-annotations.csv (#510, from branch) virtues 18 0 0

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

  • ✅ Pure tooling — 0 prod change (no CSV, no config, no workflow, no C# code)
  • ✅ Python stdlib only (csv, argparse, os, sys) — no new dependency
  • tmp/ (ephemeral gen/test scripts) excluded from the commit

Contributes 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.

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>
@jsboige
jsboige merged commit 3d6b6c3 into master Jun 17, 2026
3 checks passed
@jsboige
jsboige deleted the tools/taxonomy-anti-fab-validator branch June 17, 2026 08:18
@clusterManager-Myia

Copy link
Copy Markdown
Collaborator

[NanoClaw] Argumentum #518 — anti-fab validator tool

Two new files: a Python stdlib-only validator script (tools/validate_taxonomy_annotations.py, 415 lines) and its documentation (tools/validate_taxonomy_annotations.md, 77 lines).

What it does:
Validates proposition CSVs for the taxonomy scale-up pipeline by checking PK membership against the ground-truth corpus (Cards/Fallacies). Detects schema kind (virtues, aif-scaleup, aif-pilot, crosslinks) from CSV headers and runs applicable checks.

Check matrix:

  • HARD: PK membership, link_type validity, attack_type validity, symmetric reciprocity
  • WARN: Walton scheme drift detection, name-field drift, attack coherence

Anti-fab design choices (well-motivated):

  • Check (c) is WARNING not HARD because no machine-readable canonical Walton 24 list exists in-repo — drift-detection against validated pilots avoids fabricating a false canonical
  • errors='replace' on read handles diacritics without false failures
  • Exit codes: 0=clean, 1=HARD violations, 2=IO error — CI-friendly

Grounded in corpus: Loads Fallacies + Virtues PK maps from Cards/Fallacies/Argumentum * - Taxonomy.csv — no hardcoded PK lists.

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:

  • _repo_root() walks up 8 levels — sufficient for typical repo clones but could silently return None in unusual layouts; the FileNotFoundError on missing corpus provides a clear error path
  • The TRUTHY set includes French values (oui, vrai) — appropriate for this bilingual corpus

Substantial tool. GATED: this adds tooling, no production CSV changes — jsboige validation required before merge.

@clusterManager-Myia

Copy link
Copy Markdown
Collaborator

[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:

  • Schema auto-detection from CSV headers — 4 kinds (virtues, aif-scaleup, aif-pilot, crosslinks) cleanly separated.
  • HARD vs WARN separation is disciplined: PK membership, link_type, attack_type, symmetry reciprocity are HARD-fail; Walton scheme drift and name drift are WARNING-only. This is honest anti-fab — the tool doesn't fabricate a canonical Walton list it can't verify.
  • Walton catalog built from union of already-validated pilot CSVs (not from memory) — drift detection, not gatekeeping.
  • Exit codes: 0=clean, 1=HARD violations, 2=usage/IO error — CI-friendly.
  • Doc is excellent: 77-line markdown with validated corpus table (0 HARD across all 5 files), honest limitations section.

One observation: the dispatch message reference (msg-20260617T051231-o6izvl) in the docstring ties this to a specific cluster dispatch — fine for provenance, but if the docstring leaks to a public-facing context it may want trimming.

No security concerns (stdlib-only, no network, no eval). LGTM.

jsboige added a commit that referenced this pull request Jun 18, 2026
… 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>
jsboige added a commit that referenced this pull request Jun 18, 2026
…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>
jsboige added a commit that referenced this pull request Jun 18, 2026
…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>
jsboige added a commit that referenced this pull request Jun 18, 2026
…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>
jsboige added a commit that referenced this pull request Jun 18, 2026
…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>
jsboige added a commit that referenced this pull request Jun 18, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige pushed a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 19, 2026
…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>
jsboige added a commit that referenced this pull request Jun 22, 2026
…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>
jsboige added a commit that referenced this pull request Jul 7, 2026
…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>
jsboige added a commit that referenced this pull request Jul 7, 2026
… (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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants