docs(ontology): AIF attack-graph export — typed bipartite edges + relations (read-only, 0 write) - #828
Conversation
…ations (read-only, 0 write) 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: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
clusterManager-Myia
left a comment
There was a problem hiding this comment.
[NanoClaw] — docs(ontology): AIF attack-graph export — LGTM deep (byte-verified firsthand)
Typed bipartite edges PROVEN (quoted-field-aware parse of docs/ontology/aif-export/aif-attack-edges.csv, 13 cols, 145 attack-edge rows):
- Distribution EXACT: undercut→RA-node 87, undermine→I-node 53, rebut→CA-node 5 (sums to 145, matches body claim 87/53/5)
- 145/145
node_type_axiom_ok✓ — every edge's attacked-node type conforms to its attack-type axiom - Reed-Norman AIF semantics sound: undercut attacks a rule (RA-node), undermine attacks a premise/conclusion content (I-node), rebut attacks a counter-conclusion (CA-node) — textbook Reed-Norman/Walton instantiation, no schema violations
Read-source → write-export pattern (not source mutation) verified firsthand against tools/aif-attack-graph-export.py:
- Reads canonical source CSVs (
utf-8-sig, read-only) — Fallacies/Rules/Virtues taxonomy CSVs untouched (8 PR files ALLadded, 0 modifications to source data) - Writes derived export artifacts to
docs/ontology/aif-export/(OUT_DIR,os.makedirs(..., exist_ok=True)— by-design output) - 5 export files all row-count verified: aif-attack-edges 145 ✓, aif-relations-graph 1734 ✓, taxonomy-tree-edges 1408 ✓, aif-canonical-concepts 142 ✓, aif-owl-attack-edges 60 ✓
- Investigation doc
docs/investigations/2026-07-19-aif-attack-graph-export.md+ export README both additive
0 secret / 0 PII / 0 machine-path leak across the 6 export+script+doc files.
△ Nit (non-blocking, wording) — body/PR title says "read-only, 0 write"; firsthand the script does write — to the export OUT_DIR (by design). The intent ("0 write to source taxonomy data") is accurate and verified (source CSVs untouched); suggest rewording "0 source-mutation, export-write by design" to avoid the literal contradiction for future readers.
Verdict: mergeable — delivers a sound typed-bipartite AIF attack-edge export, derived read-only from canonical sources, axiom-conformant 145/145, Reed-Norman distribution exact. The "0 write" prose is a wording nit, not a defect.
…es↔Virtues vocabularies disjoint) Empirical finding (read-only, no fabrication): Fallacies (#828) and Virtues (#829) reference DISJOINT AIF vocabularies (intersection = 0). - Fallacies: 60 concepts, "<Topic>_<Type>" suffix (_Inference/_Conflict/_Scheme) - Virtues: 14 concepts, "Argument from <Topic>" readable form Both conventions co-exist as declared classes in the source AIF ontology (Ontology/Resources/AIF.owl: 125 _Type forms + 15 "Argument from X" forms). A lexical alignment is inferrable in several cases but NO materialised mapping table exists in the source data. The export therefore does NOT unify the two vocabularies — documented to prevent the false assumption that the two concept spaces are pre-aligned. A consumer needing a unified AIF space must build that mapping explicitly (modelling decision, not export). Same lane (Cards/AIF), post-tag-safe, 0 write to sources. Amend to PR #829. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…bility) The ontology README (§2 Layer 3) documents the AIF attack-typed counts (Fallacies 145, Virtues 222) but did not reference the consumable CSV exports in aif-export/ added by #828 + #829. Add a short pointer in §3 so downstream consumers (CoursIA ICT #7289, Layer C #790) can discover the bipartite attack-edges, good-tenor edges, canonical concepts, taxonomy tree, and inter-fallacy relations CSVs + the reproducible export scripts. Same lane (Cards/AIF docs), post-tag-safe, 0 write to sources. Amend to PR #829. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…B modelling, read-only) (#829) * docs(ontology): AIF Virtues export — companion to #828 (double V-A/V-B modelling, read-only) Extends the AIF export (#828, Fallacies) to the Virtues Taxonomy. Companion to aif-attack-graph-export.py. Read-only on sources, post-tag-safe. Honest verdict: the 222 virtues carry a DOUBLE AIF modelling of the same population — two complementary views, never merged: - V-A (CSV): 222 bipartite attack-edges (virtue -> node-TYPE RA/I/CA), 0 axiom violations (undercut->RA 206, undermine->I 13, rebut->CA 3). - V-B (OWL aif#goodTenorOf): 222 virtue -> canonical argument-scheme edges (14 schemes: Rule 50, Commitment 40, Bias 27, Sign 26, ...). Same 14-scheme vocabulary, different predicates. Not redundant, not contradictory. Contrast with Fallacies (#828): Fallacies carry ONLY the attack-graph (V-A), no goodTenorOf. Virtues are the dual (BOTH views). Do NOT fuse Fallacies-attacks + Virtues-attacks — Virtues-attacks encode counter-arguments to fallacies. Artefacts (docs/ontology/aif-export/): - aif-virtues-attack-edges.csv 222 V-A bipartite attack-edges (PK-keyed) - aif-virtues-good-tenor.csv 222 V-B virtue->scheme edges - aif-virtues-canonical-concepts.csv 14 AIF schemes (skos refs) - aif-virtues-schemes.csv 14 schemes distribution - README.md + Virtues companion section tools/aif-virtues-export.py: reproducible (Python stdlib, ~1s, 0 write to sources). Refs: #828 (Fallacies AIF export), CoursIA ICT #7289, Layer C #790. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(ontology): AIF export — add cross-family coherence note (Fallacies↔Virtues vocabularies disjoint) Empirical finding (read-only, no fabrication): Fallacies (#828) and Virtues (#829) reference DISJOINT AIF vocabularies (intersection = 0). - Fallacies: 60 concepts, "<Topic>_<Type>" suffix (_Inference/_Conflict/_Scheme) - Virtues: 14 concepts, "Argument from <Topic>" readable form Both conventions co-exist as declared classes in the source AIF ontology (Ontology/Resources/AIF.owl: 125 _Type forms + 15 "Argument from X" forms). A lexical alignment is inferrable in several cases but NO materialised mapping table exists in the source data. The export therefore does NOT unify the two vocabularies — documented to prevent the false assumption that the two concept spaces are pre-aligned. A consumer needing a unified AIF space must build that mapping explicitly (modelling decision, not export). Same lane (Cards/AIF), post-tag-safe, 0 write to sources. Amend to PR #829. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(ontology): link aif-export/ CSVs from ontology README (discoverability) The ontology README (§2 Layer 3) documents the AIF attack-typed counts (Fallacies 145, Virtues 222) but did not reference the consumable CSV exports in aif-export/ added by #828 + #829. Add a short pointer in §3 so downstream consumers (CoursIA ICT #7289, Layer C #790) can discover the bipartite attack-edges, good-tenor edges, canonical concepts, taxonomy tree, and inter-fallacy relations CSVs + the reproducible export scripts. Same lane (Cards/AIF docs), post-tag-safe, 0 write to sources. Amend to PR #829. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs(ontology): reconcile aif-relations-graph count (1734 distinct vs README 1985 raw) Resolves the crossLink delta tracked at tick 49 (README §2 Layer 2 = 1985 vs aif-relations-graph.csv = 1734). Read-only investigation finding — NOT a bug, a counting-methodology difference: - README 1985 = RAW emitted assertions (pre-dedup). - Raw OWL parse = 1977 (= README 1985 minus 8 schema self-definitions, one per verb across the 8 relation verbs). - 1977 raw - 1734 distinct = 243 EXACT-duplicate triples (OWLSharp serializer idempotency quirk, not a data issue). The dedup is correct for a consumer. - Symmetric verbs (mirrors/isRelatedTo/inverts/opposes) are emitted bidirectionally as two distinct triples (A,p,B)+(B,p,A) — both kept (not duplicates). Added a count-reconciliation note to the aif-relations-graph.csv section of the export README so consumers understand the 1734 vs 1985 difference. Same lane (Cards/AIF docs), post-tag-safe, 0 write to sources. Amend to PR #829. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…al AIF target (#833 review) Addresses NanoClaw's structural-review nit on the #7289 Phase-B consumption contract: the new "Typed edges" bullet said `rebut` "attacks the conclusion, CA-node", conflating the canonical semantic target (an I-node) with the export's node-type marker (`CA-node`). Verified against aif-attack-edges.csv: the export genuinely emits `rebut → CA-node` (5 rows, node_type_axiom_ok=1), consistent with the already-merged verdict table (#828). Reworded the bullet to state that `CA` here is the export's *conflicting-application* mode-marker (keeping the three attack types on distinct node-types = separable spectral channels), NOT the canonical AIF target — in canonical AIF/ASPIC+ a rebuttal targets the conclusion I-node. Consumer should read it as a type channel, not a node instance. Additive docs-only clarification; CSVs unchanged, 0 data change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ract (#7289 Phase-B) (#833) * docs(ontology): AIF export — directed/typed spectral consumption contract (#7289 Phase-B) Bridge note (tertiary deliverable of ai-01 dispatch #497/#498/bridge deep-queue) for CoursIA ICT #7289 strate-6 Phase-B consumers, and the nit raised in notebook #7341 review: the AIF attack graph is DIRECTED (attacker -> abstract node-TYPE, bipartite) and TYPED (undercut/undermine/rebut). A spectral/Laplacian consumer must preserve both, or collapse the mode-of-attack signal the analysis wants to surface. - Directed, not symmetric: standard L_sym on an undirected projection treats attacker and attacked node-type as interchangeable (they are not; direction is the semantics). - Typed edges carry distinct modes: do not binarise undercut/undermine/rebut (RA-node / I-node / CA-node = three argumentative operations). - Complementary graphs have different symmetries: aif-relations-graph.csv (bidirectional mirrors/isRelatedTo) vs aif-attack-edges.csv (typed directed) -- pick the graph matching the question, do not merge. - Recommended (consumer choice, not exported): directed / magnetic hermitian Laplacian, or type-weighted / multi-channel edges. Consumption contract only -- CSVs unchanged, 0 data change, 0 fabrication. Read-only docs lane (same as #828/#829), post-tag-safe. Verdict QA = ai-01. Refs: dispatch ai-01 -> po-2024 (msg-20260721T174854-ucdwi7). Co-Authored-By: Claude-Code <noreply@anthropic.com> * docs(ontology): clarify rebut→CA is export's mode-marker, not canonical AIF target (#833 review) Addresses NanoClaw's structural-review nit on the #7289 Phase-B consumption contract: the new "Typed edges" bullet said `rebut` "attacks the conclusion, CA-node", conflating the canonical semantic target (an I-node) with the export's node-type marker (`CA-node`). Verified against aif-attack-edges.csv: the export genuinely emits `rebut → CA-node` (5 rows, node_type_axiom_ok=1), consistent with the already-merged verdict table (#828). Reworded the bullet to state that `CA` here is the export's *conflicting-application* mode-marker (keeping the three attack types on distinct node-types = separable spectral channels), NOT the canonical AIF target — in canonical AIF/ASPIC+ a rebuttal targets the conclusion I-node. Consumer should read it as a type channel, not a node instance. Additive docs-only clarification; CSVs unchanged, 0 data change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
What
Read-only export of the existing AIF modelling into consumable artefacts for CoursIA (ICT #7289, uplift #5721/#6409) and Argumentum Layer C v1.0 (#790). Dispatched by ai-01 (msg-eltaoz) as a non-blocking, post-tag-safe capacity fill while the release v0.9.0 is gated.
0 new modelling. 0 write to sources (CSV / argumentum.owl). Python stdlib script, reproducible.
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-node/I-node/CA-node), NOT another fallacy. There is no inter-fallacy attack adjacency ("X attacks Y") in the data:AIF_attackedNodeencodes the node-type attacked, not a target PK.aifAttackTypeLiteral +aifAttackedNodeIRI on each fallacy individual).A separate inter-fallacy graph does exist in the OWL (
isRelatedTo,mirrors, …, 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.csvaif-canonical-concepts.csvtaxonomy-tree-edges.csvaif-owl-attack-edges.csvaif-relations-graph.csvREADME.mdtools/aif-attack-graph-export.py— reproducible (python tools/aif-attack-graph-export.py, stdlib only, ~3s, idempotent, 0 write to sources).CSV ↔ OWL granularity note
The CSV (145, row-level PK-keyed) and OWL (142, fallacy-individual camelCase IRI) attack-edges are not a bijective cross-check — different granularities, no PK→IRI join key in the CSV. Both internally consistent (0 axiom violations each); attackType distribution closely aligned. Documented in the README + investigation doc.
Post-tag-safe
Docs + generated CSVs only. No source change. No release impact. Gate (b)/(d) untouched.
Refs
🤖 Generated with Claude Code