feat(ontology): complete Fallacies ontological integration — crosslinks 59% + AIF attack wiring (#141/#498) - #763
Merged
Conversation
…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
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>
5 tasks
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>
This was referenced Jul 25, 2026
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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
@jsboige a constaté (notebook CoursIA
Ontology_CrossLinks, commit890669) 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) etAIF_attackType/attackedNoden'étaient ni mappées dans l'entitéFallacyni é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É)
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 blocAIFSkos*.OwlGeneratorConfig.cs: 2ᵉ passe d'émission (dictconceptscomplet → pas de forward-ref). Déclare 8 ObjectProperties crossLink, résout les cibles pointées;-splittées viafallaciesByPath, émetAnnotateConceptWithResource(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)Régénération
docs/ontology/argumentum.owlrégénéré via--generate-owl— diff 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
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).Hors-scope (follow-ups gated, hors des 2 décisions ratifiées)
mappingTypepar défaut est un choix sémantique non encore ratifié ; les 42/50 refs existantes émettent toujours.Tracks #458. Refs #141 (scan), #498/#707 (AIF).
🤖 Generated with Claude Code