Skip to content

feat(ontology): complete Fallacies ontological integration — crosslinks 59% + AIF attack wiring (#141/#498) - #763

Merged
jsboige merged 1 commit into
masterfrom
feat/ontology-crosslinks-aif-integration
Jul 10, 2026
Merged

feat(ontology): complete Fallacies ontological integration — crosslinks 59% + AIF attack wiring (#141/#498)#763
jsboige merged 1 commit into
masterfrom
feat/ontology-crosslinks-aif-integration

Conversation

@jsboige

@jsboige jsboige commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Context

@jsboige a constaté (notebook CoursIA Ontology_CrossLinks, commit 890669) que la couverture des liens transverses plafonnait à 1.5 % malgré la validation d'un scan de généralisation, et a demandé que l'intégration ontologique soit complète (crosslinks + articulation façon AIF), faite par moi-même (po-2024 HS).

Root cause : le générateur OWL des Fallacies n'émettait qu'une des trois couches. Les colonnes crossLink_* (8 verbes transverses) et AIF_attackType/attackedNode n'étaient ni mappées dans l'entité Fallacy ni émises → peupler le CSV seul les laissait inertes. « Complet » = chemin de code CSV→OWL + données curées + régénération.

Décisions jsboige (interactif, VÉRIFIÉ)

  1. Crosslinks → transverse + confidence ≥ 0.6 → 59 %.
  2. AIF attackType → câbler l'OWL + émettre les 93 typés maintenant ; les 866 feuilles restantes = phase suivante trackée (hors chantier).

Ce que fait cette PR

Code — rend les colonnes émettables

  • Fallacy.cs : 10 props + 10 lignes ClassMap .Optional() (8 crossLink + AIF_attackType/attackedNode), en miroir du bloc AIFSkos*.
  • OwlGeneratorConfig.cs : 2ᵉ passe d'émission (dict concepts complet → pas de forward-ref). Déclare 8 ObjectProperties crossLink, résout les cibles pointées ;-splittées via fallaciesByPath, émet AnnotateConceptWithResource (verbes symétriques opposes/inverts/mirrors/isRelatedTo émis bidirectionnellement), et pour chaque feuille typée AIF : aifAttackType (littéral) + aifAttackedNode (RA/I/CA-node, ASPIC+ docs(taxonomy): #498 AIF chantier — coverage-status synthesis for jsboige ratification #707§4 : undercut→RA, undermine→I, rebut→CA).
  • Program.cs : nouvel entry-point --generate-owl (régén OWL seule, sans harvest/PDF), calqué sur --pdf-cmyk — la façon reproductible de rafraîchir l'OWL committé après édition de la taxonomie.
  • OwlE2EGenerationValidationTests : garde-fou de régression (au moins un crossLink + un aifAttack survivent le round-trip). Le known-fail feat(ontology): Publish OWL ontology to public endpoint #133 n'est pas touché.

Données — additif, byte-exact (tools/141-crosslink-apply.py, gated)

  • Layer A crosslinks : candidats scan 0-fabrication, sous-ensemble transverse (cible ni ancêtre ni descendante de la source) conf ≥ 0.6, 0 warns → 1210 relations ; 1 droppée (source absente de la taxonomie), 1 collision de seed sautée → 1059 cellules vides remplies (1208 relations, max 3/cellule). Couverture 1.5 % → 59.9 % (844/1408 nœuds). Les 22 seeds manuels préservés intacts ; byte-check indépendant : seules les colonnes crossLink changent, 0 cellule non-crossLink sur les 104 colonnes (8 langues incluses), CRLF+BOM préservés.
  • AIF attack : les 93 feuilles typées (déjà en CSV depuis feat(taxonomy): #498 Fallacies AIF — serialize scaleup phase 1-3 (47 leaves, MODE 2) #760) deviennent émettables via le câblage — aucune nouvelle écriture CSV. Distribution 61 undercut / 29 undermine / 3 rebut.

Régénération

docs/ontology/argumentum.owl régénéré via --generate-owldiff purement additif (+10851/-0), superset fidèle (prefLabel 2816, hiérarchie, skos matches identiques). Porte désormais isRelatedTo 643, mirrors 721, leverages 403, …, aifAttackType 93, aifAttackedNode 93, +3 classes AIF node. Métadonnées ontologiques uniquement — non rendues sur les cartes, orthogonales au GO visuel v0.9.0.

Validation

  • ✅ Build solution zéro-warning.
  • dotnet test : 595 pass / 1 fail / 5 skip. Le seul fail = le known-fail feat(ontology): Publish OWL ontology to public endpoint #133 (LoadedOntology_RdfTypeAndInScheme_DroppedByOwl2XmlRoundTrip, bug round-trip OWLSharp) — prouvé identique sur l'ancien OWL (échoue déjà à HEAD, non introduit par cette PR).
  • ✅ Byte-check CSV indépendant (backup pré-write vs écrit) : PASS.

Hors-scope (follow-ups gated, hors des 2 décisions ratifiées)

  • Layer B — expansion bulk AIF_skos (Walton) : le mappingType par défaut est un choix sémantique non encore ratifié ; les 42/50 refs existantes émettent toujours.
  • Layer C — passe générative attackType pour les ~866 feuilles non typées.
  • Émission crossLink côté Virtue (déjà chargée, différée là-bas).

Tracks #458. Refs #141 (scan), #498/#707 (AIF).

🤖 Generated with Claude Code

…ks (59%) + AIF attack wiring (#141/#498)

The transverse cross-link layer was stuck at 1.5% (21 nodes) and the AIF
attack-typing was inert because the Fallacies OWL generator only emitted the
AIF_skos* Walton mapping — the crossLink_* and AIF_attack* CSV columns were
never read (unmapped in the Fallacy entity) nor emitted. Populating the CSV
alone left them dead. "Complete integration" = code path + curated data + regen.

Code (makes the columns emittable in OWL):
- Fallacy.cs: map the 8 crossLink_* columns + AIF_attackType/AIF_attackedNode
  (10 props + 10 .Optional() ClassMap lines, mirroring the AIFSkos* block).
- OwlGeneratorConfig.cs: 2nd emission pass (concepts dict fully populated) —
  declares 8 crossLink ObjectProperties, resolves ';'-split dotted targets via
  fallaciesByPath, emits AnnotateConceptWithResource (symmetric verbs
  opposes/inverts/mirrors/isRelatedTo emitted bidirectionally), and for each
  AIF-typed leaf emits aifAttackType (literal) + aifAttackedNode (RA/I/CA-node,
  per ASPIC+ #707§4: undercut→RA, undermine→I, rebut→CA).
- Program.cs: add --generate-owl entry point (single-stage OWL regen, no harvest
  /PDF), mirroring --pdf-cmyk — the reproducible way to refresh the committed OWL.
- OwlE2EGenerationValidationTests: regression guard asserting crossLink +
  aifAttack assertions survive the round-trip (#133 known-fail left untouched).

Data (additive, byte-exact — tools/141-crosslink-apply.py, gated):
- Layer A crosslinks: from the 0-fabrication scan candidates, transverse subset
  (target neither ancestor nor descendant of source) at confidence >= 0.6, no
  warns → 1210 relations; 1 dropped (source path absent from taxonomy), 1 seed
  collision skipped → 1059 empty cells filled (1208 relations, max 3/cell).
  Coverage 1.5% → 59.9% (844/1408 nodes). All 22 manual seeds preserved
  untouched; independent byte-check confirms only crossLink columns changed,
  0 non-crossLink cells across all 104 columns, CRLF+BOM preserved.
- AIF attack: the 93 typed leaves already present (merged #760) become emittable
  via the wiring above — no new CSV write. Distribution 61 undercut / 29
  undermine / 3 rebut.

Regen: docs/ontology/argumentum.owl regenerated via --generate-owl — a pure-
addition diff (+10851/-0), faithful superset (prefLabel 2816, hierarchy, skos
matches identical). Now carries isRelatedTo 643, mirrors 721, leverages 403, …,
aifAttackType 93, aifAttackedNode 93, +3 AIF node classes. Ontology metadata
only — not rendered on cards, orthogonal to the v0.9.0 visual GO.

Tests: 595 pass / 1 fail (pre-existing #133 OWLSharp round-trip known-fail,
proven identical on old OWL) / 5 skip. Zero-warning solution build.

Deferred (gated follow-ups, not part of this chantier's two ratified decisions):
- Layer B — AIF_skos bulk Walton expansion (default mappingType is a semantic
  call not yet ratified; existing 42/50 refs still emit).
- Layer C — generative attackType fill for the ~866 untyped leaves.
- crossLink emission on the Virtue side (already loaded, deferred there).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@jsboige
jsboige merged commit 053257c into master Jul 10, 2026
3 checks passed
@jsboige
jsboige deleted the feat/ontology-crosslinks-aif-integration branch July 10, 2026 00:29
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 12, 2026
…45) + P1 closure doc (#787)

Regenerate docs/ontology/argumentum.owl from master 474607c via the
--generate-owl entry-point (single-stage, 0 harvest/PDF/mindmap). The committed
OWL was stale (pre-P1): its AIF attack layer counted 93 annotation assertions
while prod CSV had advanced to 145 via the #498 P1 reconciliation.

3-layer validation (argumentum-owl-validation-2026-07-12.md):
  - Layer 1 skos Walton: 70 mappings (stable, +0)
  - Layer 2 crossLink #763: 1985 relational verbs (stable, +0)
  - Layer 3 AIF attack #498: 93 -> 145 (+52) == CSV prod attack-typed total PASS
Distribution reflected: 87 undercut/RA-node, 53 undermine/I-node, 5 rebut/CA-node.
0 node/type inconsistency in prod (deterministic ASPIC+ Option a, #707 section 4).

Diff scope verified AIF-only: 530 insertions / 10 deletions, every added line an
<AnnotationAssertion> for aifAttackType/aifAttackedNode. skos + crossLink + concept
declarations + multilingual labels byte-stable. argumentum_virtues.owl regenerated
byte-identical (not re-committed).

Also adds docs/taxonomy/498-reconciliation-p1-closure.md — the P1 closure report:
52 skos-only back-filled (14 PRECEDENT + 2 PREC-TIE + 36 SUFFIX-ONLY), tiering
methodology, 7-tranche serialization record (93->145), defect-nature modeling,
same-token divergence principle (pk808/pk33, pk888/pk2), anchor audit #770
foundation (16 CLEAN/2 SOFT). Feeds release notes + #133.

0 write prod CSV (--generate-owl reads CSV, emits OWL; Cards/ untouched). Layer C
(~750 leaves, generative pass) = jsboige decision, out of scope, not started.

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 12, 2026
… + 595 tests) + #133 OWL README (#789)

Refresh the v0.9.0 release docs to reflect the late-cycle AIF argumentation
work (#498/#499, #763, #787) and the current test/mindmap reality. The existing
CHANGELOG.md and RELEASE-NOTES-v0.9.0.md were frozen mid-June and missed the
July AIF reconciliation wave.

CHANGELOG.md (root):
  - New section "Added — AIF Argumentation Layer (#498 Fallacies, #499 Virtues)"
    documenting: 145/1408 fallacies attack-typed (87 undercut/RA, 53 undermine/I,
    5 rebut/CA), P1 skos-only reconciliation (93->145, 7 tranches, 0 fabricated),
    crossLink #763 (8 verbs, 1081 cells, 844 rows 59.9%), Virtues mirror (222/223),
    anchor audit #770 (16 CLEAN/2 SOFT), Layer C deferred.
  - OWL section updated: 3 relational layers now serialized in argumentum.owl
    (#787 regen, AIF 93->145), freshly aligned to prod.
  - Test count corrected 578 -> 595 (600 total, zero-warning build, 2026-07-11).

RELEASE-NOTES-v0.9.0.md:
  - New "AIF Argumentation Layer (#498/#499)" highlight section.
  - Assets table: mindmaps 4-lang/21 -> 8-lang/41 (PR #565 closed); OWL
    FR-only -> bilingual EN/FR ~5.9 MB.
  - Tests 159 -> 595.
  - Known Limitations: mindmap 8-lang CLOSED (regen-on-demand); add AIF Layer C
    note (~1263 leaves deferred).
  - Contributors: add po-2024 (AIF/OWL/release docs).
  - Release date clarifies tag pending jsboige visual GO (week of 2026-07-13).

docs/ontology/README.md (net-new, #133):
  - Publication README for the OWL artefacts: 2 ontologies (Fallacies 5.9 MB /
    Virtues 863 KB), namespace IRIs, LGPL-3.0 license.
  - Documents the 3 relational layers with exact counts (skos 70, crossLink 1985,
    AIF attack 145 Fallacies / 222 Virtues), the deterministic ASPIC+ node map,
    and rebut rarity.
  - Regeneration procedure (--generate-owl), known limitations (bilingual FR+EN,
    Layer C deferred, OWLSharp round-trip #133), publication procedure (staged,
    requires infra/jsboige), provenance.

Doc-only (0 write prod CSV, Cards/ untouched). Lane: release-adjacent docs
(distinct from po-2023 visual-validation dossier). Verdict QA = ai-01.

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 16, 2026
…6 tests / AIF layer (po-2024 tick 24) (#816)

Sync release-notes canonical figures with the actual post-#807 master state:

- 80 PDFs (10 types × 8 langues), not 64. Print&Play Standard + Light
  were added post-#648-650; the bundle now spans {Tarot, Poker,
  A0 poster, Thumbnails, Mémo, Rules, FallaciesWeb, Print&Play Standard,
  Print&Play Light, +1 expert tier} × 8 langues. Bundle v3
  (2026-07-03) is 80/80 DeviceCMYK + SWOP OutputIntent (verified via
  pdfimages -list, Ghostscript post-process #632/#652).

- 596 tests pass (post-#807 alignement; #133 OWLSharp known-fail cleared
  in #793), not 578.

- AIF attack layer detailed: 145/1408 fallacies + 222/223 vertus with
  deterministic ASPIC+ node map; tiering methodology explained;
  anchor audit results (16 CLEAN / 2 SOFT / 0 erreur).

- CrossLink layer: 1985 cells across 844 fallacies (59.9 percent),
  8 relational predicates (#763).

- Print production hardening: GS timeout 180s -> 900s (#670);
  per-image CMYK oxymore explained (PNG cannot carry CMYK, the
  authoritative CMYK path is the GS post-process).

Out of scope (this PR):
- Tag creation. The release is gated on jsboige visual GO + tag.
- DNN security upgrade (separate post-release op, lane po-2023:jsboige).
- Layer C (~1263 leaves without skos signature, generative pass),
  requires its own gated pilot.

Diff: docs-only, 1 file. 0 code change.

Refs: #134, #632, #648-650, #652, #670, #793, #807.
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 22, 2026
…read-only) — MEASURE not verdict (#850)

Acompte compute du dispatch ai-01 (msg-lool0s, bascule po-2024 → audit #847).
Calcule par nœud parent les couches (a)+(b) du method doc
aif-structural-audit-method.md §4, sur 145 fully-modeled + projection 145+8
clusters Layer-C. (c) DEFER (non-instrumenté).

=== Instrument (opérationnel, code=truth) ===
(a) attack-type heterogeneity : Shannon entropy normalisé [0,1] de la
    distribution undercut/undermine/rebut, par family/sub-family/sub-sub.
    a_high = H_norm >= 0.5.
(b) fail-loud rate : fraction de leaves SANS token _Inference natif dans
    skosDirectRef OU skosExceptionRef (prod) / colonnes schème annotation
    (clusters). b_high = >= 0.5.
(c) DEFER : reference-reachability + label-distortion pas instrumentés.

=== HEADLINE ===
145-only : 87uc/53um/5rb | native-scheme 34.5% | fail-loud 65.5% | entropy 0.720
projected (145+46 cluster leaves=191) : 107/72/12 | native 41.9% | fail-loud
58.1% | entropy 0.788

=== Findings (nombres, pas verdict) ===
1. (b) DOMINE : matériel de base matériellement résistant (65.5% fail-loud) →
   hétérogénéité family-level majoritairement axis-B (matériau), pas axis-A
   (regroupement). Quantifie « changes at the margin ».
2. LE CHANTIER CONVERTIT B→A : plier les 8 clusters native-rich fait passer
   Obstruction (b 0.67→0.49) ET Erreur mathématique (b 0.50→0.48) de
   « material-resistance B+A » à « tree-tension A-candidate ». Valide la
   stratégie native-rich du chantier.
3. TREE-TENSION GENUINE (a-high/b-low) concentre sur : Ad hominem (b=0.00→0.21,
   le cluster #844/#845/#846 — specimen tu quoque/whataboutisme du method doc
   §4 devenu nombre), Mauvaise déduction (b=0.20, cluster #843),
   Erreur de raisonnement family (b=0.36→0.27). TOUS c-DEFER (peuvent être
   bridge nodes axis-C, pas défauts).
4. Influence = seule family fully coherent (a-low).

=== Piège corrigé ===
Scan skosDirectRef seul = 92% fail-loud (FAUX). Tokens _Inference vivent dans
skosExceptionRef (43) pas DirectRef (10). Bon dénominateur = union des 2 →
50/145 native-scheme, 65.5% fail-loud. Documenté pour ne pas re-piéger.

=== Gated ===
MESURE pas verdict. Aucun libellé « à réorganiser ». Tags mécaniques only.
Synthèse+verdict = ai-01. 0 prod CSV. Header explicite « INPUT for ai-01
synthesis, GATED jsboige ratification, 0 prod CSV ».

Artefacts :
- docs/taxonomy/847-acompte.csv (145-only, 42 rows)
- docs/taxonomy/847-acompte-projected.csv (145+clusters, 51 rows)
- docs/taxonomy/847-acompte-homogeneity.md (narratif)

Relates #847 #498 #845 #846 #770 #763 #677. Base master 2becf12.

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
…ls (unit label) (#948)

The number was already right and already reconciled; only the unit word was wrong.

RELEASE-NOTES-v0.9.0.md said "1985 cellules across 844 fallacies", while CHANGELOG.md
said "1081 cells across 844 fallacies (59.9%)" for the same layer. A reader comparing the
two release documents sees a contradiction where there is none: 1985 counts emitted OWL
relations, 1081 counts non-empty CSV cells.

Measured on master before editing:
- 1081 non-empty crossLink_* cells in Cards/Fallacies/Argumentum Fallacies - Taxonomy.csv,
  of which 137 are multi-valued (";") -> 1230 individual targets
- 844 rows carry at least one crossLink = 59.9% of 1408 (matches every doc)
- 1977 AnnotationProperty references to the 8 crossLink IRIs in docs/ontology/argumentum.owl
  (exact IRI match; a naive grep on the bare verb also hits prose, e.g. "lighting and
  mirrors in our store" at line 28587)
- 8 ObjectProperty declarations, one per verb -> 1977 + 8 = 1985

That last delta is NOT a new finding: docs/ontology/aif-export/README.md:73 already
documents it ("Raw parse = 1977 ~ README 1985, the -8 delta is one schema self-definition
counted per verb, 8 verbs"), and 1985 is the figure asserted by the passing test
LoadedOntology_ContainsCrossLinkAndAifAttackAssertions and used consistently across
docs/ontology/README.md, the #133 publication certificate and CHANGELOG.md:52. Nothing is
renumbered here.

498-reconciliation-p1-closure.md attached "(59.9% of leaves)" to 1985; the 59.9% belongs
to 844. Same fix.

Refs #763, #133

Co-authored-by: Claude Opus 5 (1M context) <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>
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.

1 participant