Skip to content

feat(ontology): #499 Phase 2 — Virtue ClassMap + OWL generator (mono-corpus, aif:goodTenorOf) - #592

Merged
jsboige merged 2 commits into
masterfrom
feat/499-virtues-owl-emission
Jun 24, 2026
Merged

feat(ontology): #499 Phase 2 — Virtue ClassMap + OWL generator (mono-corpus, aif:goodTenorOf)#592
jsboige merged 2 commits into
masterfrom
feat/499-virtues-owl-emission

Conversation

@jsboige

@jsboige jsboige commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

#499 Phase 2 — Virtue ClassMap + OWL pass ✅ READY (Part 1 + Part 2)

Status: READY — Part 1 (ClassMap) + Part 2 (Virtue OWL generator) both delivered.
Base 6e029a6f (#590 merged). Dispatch: msg-20260623T151404-vjbzs9.


Part 1 — ClassMap ✅ (commit e0be8911)

  • Mapped the 12 feat(virtues): amener la taxonomie Virtues à parité (relationnel + AIF + export consommable) #499 columns onto Virtue / VirtueClassMap — the entity that loads
    the prod CSV (CsvType = typeof(Virtue)) and feeds the pipeline. All 12 .Optional().
  • Entity-target correction (validated): the dispatch named ArgumentVirtueClassMap, but
    ArgumentVirtue is only the AutoMapper projection target — not a CSV loader. The prod
    Virtues CSV operates on Virtue.
  • Tests +2 in VirtueClassMapRegressionTests (suite 533 → 535).

Part 2 — Virtue OWL generator ✅ (commit d5ce3228)

Discovery: OwlGeneratorConfig only emitted argumentum_fallacies.owlno OWL pass
existed for Virtues
. Part 2 therefore creates the generator from scratch, mirroring
OwlGeneratorConfig / OwlDocumentConfig (Fallacies):

  • VirtueOwlGeneratorConfig + VirtueOwlDocumentConfig (Ontology/, new file) — emits
    argumentum_virtues.owl: a concept scheme with the 7-family hierarchy (skos:narrower
    via Path/Depth, same GetParent shape), one concept per Virtue node (prefLabel /
    definition FR+EN on Title*/Description*), and a custom AIF object property.
  • Wired into the pipeline (AssetConverterConfig.cs): new property + invoked in the
    OwlGenerator mode block (sync + async), parallel to OwlGeneratorConfig.Apply.

Design decisions (jsboige interactive 2026-06-24)

  1. AIF predicate = custom aif:goodTenorOf (DeclareObjectProperty), not a
    skos:*Match token. The Virtue AIF_skosMappingType column holds the FR-prose critical
    question, not a skos enum, so the Fallacies switch(AIFSkosMappingType) cannot fire.
    The prose is carried as an rdfs:comment annotation. The AIF namespace already exists
    in the Fallacies pass (http://www.arg.dundee.ac.uk/aif#) — no new namespace.
  2. Cross-corpus crossLink_Opposes (PK→URI) DEFERRED to Phase 3. Resolving Fallacy PKs
    requires loading the Fallacies corpus (concept URIs derive from GetId(TextEn), not PK) —
    new architecture beyond this single-dataset pass. This pass is strictly mono-corpus.

Tests +5 (VirtueOwlGenerationContractTests)

  • GetId mirrors the Fallacies IRI transform (byte-identical; asserted on the same proven
    inputs A-B / A, B / Appel à l'autorité).
  • Generator defaults lock the ontology identity (argumentum_virtues.owl /
    VirtuesTaxonomy dataset / namespace / AIF namespace).
  • aif:goodTenorOf URI construction pinned for Phase 3 reuse.

Verified: build 0 errors, 0 new warnings; suite 535 → 540 passed / 0 failed / 5 skipped.


Honesty note — E2E not yet exercised ⚠️

The generator compiles, is wired, and is covered by pure contract tests (transform /
defaults / URI). The actual end-to-end .owl file emission has NOT been run — that
needs the compute-heavy pipeline (CardPen harvest is not my lane solo). Flagged explicitly:
concept count, hierarchy depth, and aif:goodTenorOf triples should be byte-checked against
the 222 populated Virtue nodes on the next coordinated pipeline run. Cross-corpus Phase 3 +
E2E validation are the open tails.

DoD #499 coverage

🤖 Worker po-2024 · #499 Phase 2 · Part 1 (ClassMap) + Part 2 (OWL gen) delivered · 540/0/5

…e entity

Phase 2 ClassMap: map the 12 columns appended to the Virtues prod CSV in #590
(66->78) onto Virtue / VirtueClassMap -- the entity that loads the prod CSV
(CsvType = typeof(Virtue), AssetConverterConfig.cs) and feeds the OWL/mindmap
pipeline (ParallelVirtueDocumentCreatorConfigBase<Virtue>).

Entity-target correction: ai-01's dispatch named ArgumentVirtueClassMap, but
ArgumentVirtue is only the AutoMapper ArgumentVirtue->Fallacy projection target
(MappingProfile.cs) -- it is NOT a CSV loader. The prod Virtues CSV + downstream
pipeline operate on Virtue. Flagged to ai-01 (the two entities are near-identical;
the naming conflates them in the dispatch and in CLAUDE.md).

All 12 columns .Optional() -- 9 structurally empty by design, 3 populated for the
222 real Virtue nodes (pk=0 root left empty):
  crossLink_PredatesOn..IsRelatedTo (x8) -- only crossLink_Opposes populated
    (semicolon list of prevented Fallacy PKs)
  AIF_skosDirectRef/ExceptionRef/Other/MappingType (x4) -- DirectRef + MappingType
    populated (Walton scheme label + FR-prose critical question)

Tests (+2 in VirtueClassMapRegressionTests):
  - Maps499RelationalAndAifColumns: populated row mirrors prod pk=71
    (crossLink_Opposes=681;690, AIF_skosDirectRef=Argument from Sign,
    AIF_skosMappingType=FR prose RFC4180-quoted for its internal comma);
    9 structural empties map to "" (CsvHelper empty-cell behavior, not null).
  - 499ColumnsAbsent_DoesNotThrow: Optional contract -- a header missing the
    relational block loads without throwing (property null, not throw).
  Suite: 533 -> 535 passed, 0 failed, 5 skipped.

Phase 2 part 2 (OwlAdapter Virtues OWL pass) follows in this branch once the 2
flagged design adaptations are confirmed with ai-01:
  1. AIF: Virtue AIF_skosMappingType is FR prose (not a skos:*Match enum token),
     so the Fallacies switch cannot fire -> adapt to skos:relatedMatch + annotation.
  2. crossLink_Opposes is cross-corpus (Virtue->Fallacy PKs); Fallacy concept URIs
     derive from TextEn, not PK -> the Virtues pass must load the Fallacies corpus
     to resolve PK->URI for the 0-dangling DoD.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

@clusterManager-Myia clusterManager-Myia left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NanoClaw] #499 Phase 2 Part 1 — reviewed at e0be8911a6. Small, clean ClassMap/entity diff (32 LOC) + 2 regression tests.

Scope note for future readers: the PR title says "OWL pass" but this branch ships only Part 1 (the 12 crossLink_* / AIF_skos* properties on Virtue + VirtueClassMap mappings, all .Optional()). The OwlAdapter pass itself is deferred to Part 2 pending the two design decisions flagged in the PR body (FR-prose skos:relatedMatch vs. enum token; cross-corpus PK→URI resolution for crossLink_Opposes). That's a reasonable split — nothing broken is hidden behind the WIP tag.

Correctness verified by hand: in Maps499RelationalAndAifColumns the 12 newCols headers align 1:1 with the 12 RFC4180-parsed newRow values (I counted — the four ,,,, segments plus 681;690, Argument from Sign, and the quoted FR-prose field land in the right slots; the internal comma in "Les résultats…cohérents ?" parses as a single field). The two tests together correctly pin CsvHelper's .Optional() contract: present-but-empty cell → "" (BeEmpty), absent column → null (BeNull) — a good regression pair. The entity-target correction (prod loader is Virtue, not ArgumentVirtue) is right; ArgumentVirtue is the AutoMapper projection target, not a CSV loader.

No path/secret leaks, no stubs/TODOs in the shipped code. Trivial nit: Virtue.cs ends without a trailing newline (pre-existing, not introduced here). Looking forward to Part 2 — the cross-corpus PK→URI resolution is the architecturally interesting piece.

…corpus OWL pass)

Create the Virtues OWL/SKOS generator from scratch (mirroring OwlGeneratorConfig /
OwlDocumentConfig for Fallacies) and wire it into the pipeline alongside the Fallacies
pass. Emits argumentum_virtues.owl: a concept scheme with the 7-family hierarchy
(skos:narrower via Path/Depth, same GetParent shape as Fallacies), one concept per
Virtue node (prefLabel/description FR+EN on Title*/Description*), and a custom AIF
object property aif:goodTenorOf linking each Virtue to its Walton argumentation scheme.

Design decisions (jsboige interactive 2026-06-24):
- AIF predicate = custom `aif:goodTenorOf` (DeclareObjectProperty), NOT a skos:*Match
  token. The Virtue AIF_skosMappingType column holds the FR-prose critical question,
  not a skos enum token, so the Fallacies switch over AIFSkosMappingType cannot fire
  (design adaptation 1). The prose is carried as an rdfs:comment annotation.
- The AIF namespace already exists in the Fallacies pass
  (ExternalReferenceOntologyNamespaceURI = http://www.arg.dundee.ac.uk/aif#) — no new
  namespace introduced; aif:goodTenorOf resolves in the Dundee AIF ontology.
- Cross-corpus Virtue↔Fallacy links (crossLink_Opposes PK→URI resolution) DEFERRED to
  Phase 3. Resolving Fallacy PKs requires loading the Fallacies corpus (concept URIs
  derive from GetId(TextEn), not PK) — new architecture beyond this single-dataset
  pass. This pass is strictly mono-corpus Virtues.

Wiring (AssetConverterConfig.cs):
- new VirtueOwlGeneratorConfig property (instantiated, default Enabled=true).
- invoked in the OwlGenerator mode block (both sync + async branches), parallel to
  OwlGeneratorConfig.Apply.

Tests (+5 in VirtueOwlGenerationContractTests): GetId mirrors the Fallacies IRI transform
(byte-identical, asserted on the same proven inputs A-B/A, B/Appel à l'autorité);
generator defaults lock the ontology identity (document name / VirtuesTaxonomy dataset /
namespace / AIF namespace); aif:goodTenorOf URI construction pinned for Phase 3 reuse.

Verified: build 0 errors, 0 new warnings; suite 535 → 540 passed / 0 failed / 5 skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jsboige jsboige changed the title feat(ontology): #499 Phase 2 — Virtue ClassMap + OWL pass (WIP, Part 1/2) feat(ontology): #499 Phase 2 — Virtue ClassMap + OWL generator (mono-corpus, aif:goodTenorOf) Jun 24, 2026
@jsboige
jsboige marked this pull request as ready for review June 24, 2026 09:59
@jsboige
jsboige merged commit 8d5d275 into master Jun 24, 2026
3 checks passed
@jsboige
jsboige deleted the feat/499-virtues-owl-emission branch June 24, 2026 10:56
jsboige added a commit that referenced this pull request Jun 24, 2026
…proven + Virtues FR-gap

§3.2: + reproductibilité byte-proven (régên 8-lang 2026-06-24, Fallacies_zh.svg
cmp IDENTICAL) + gap structurel honnête (Virtues .content.svg FR-figés, non-bloquant).
§3.4: #499 Phase 2 OWL — 'en cours po-2024' → MERGED (#592, 8d5d275).
§5.5: RELEASE-NOTES-v0.9.0.md créé dans cette PR (n'existait pas sur master).
§5.6: #499 Phase 2 OWL — livré avant ce dossier, conservé pour traçabilité.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jun 25, 2026
…5 post-#595 (vraiment)

§3.3: 'RAPPORTÉ régén 12 juin' → ✅ régên fraîche 2026-06-25 (bef3bc6). PDFs Virtues
re-rendered post-#595 (clobber targeted, Chromium invoqué, labels familiaux localisés
vérifiés : zh 有效论证, ar حجة_معتبرة). i18n distinct anti-leak #216 OK. Régén headless.
§5.2: décision 'régén fraîche ?' → FAITE. Risque résiduel '16 commits depuis 12 juin' levé.
§7: risque 'régén 12 juin non reproduite' → LEVÉ (régén fraîche reproduit counts + #592/#595).
  + note de procédure stale-harvest honnête (oubli clobber corrigé ce cycle).
§8: reco point 3 (régén fraîche) → FAITE.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jun 25, 2026
…ualisés (relecture)

Header note de méthode : 'RAPPORTÉS non re-vérifiés ce jour' → régén fraîche 2026-06-25
re-vérifiée ce jour (résout contradiction header vs §3.3 refresh tick préc.).
§4 tests : 533 pass (22eb5f3) → 540 pass (bef3bc6, test run Release 22s),
+7 = tests OWL Virtues #592. 0 fail, 5 skip (GUI/Freeplane).

Relecture cohérence read-only (pas de polish) : 1 contradiction header/corps
résiduelle trouvée + facts actualisés vs bef3bc6.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jun 25, 2026
…ale + mineurs

FINDING principal (po-2024 cross-verify, gate go-live) :
- ligne 6 (Master de référence) : 22eb5f3/533 → bef3bc6/540 (j'avais corrigé ligne 14
  mais manqué la 6 — contradiction header/corps résiduelle).

Mineurs :
- ligne 3 (date) : 2026-06-23 → 2026-06-25 (refresh).
- ligne 95 (attribution) : '+7 = tests OWL Virtues #592' → précisé +5 VirtueOwlGeneration
  +ContractTests + +2 VirtueClassMapRegressionTests (#592 = 8d5d275). +7 confirmé correct
  vs doute po-2024 (message commit #592 liste explicitement +5 et +2).

Dossier cohérent bout-en-bout après cross-verify indépendant po-2024.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jun 25, 2026
…-NOTES régên date

Coherence cross-check RELEASE-NOTES + dossier §3.2 (extension relecture po-2024
qui n'avait vérifié que RELEASE-VALIDATION). 2 nombres faux vs assets réels :

- Taille Fallacies_zh.svg : '17.2 MB (18 075 919 B)' → '5.45 MB (5 451 309 B)'
  (fichier réellement commité, byte-proven régên 2026-06-25). Aucun SVG zh n'est
  à 17.2 MB (content/links = 4.0 MB, main = 5.45 MB). Corrigé dans RELEASE-NOTES
  l.23 + dossier §3.2 table zh.
- RELEASE-NOTES l.22 : 'régên 12 juin 2026' → 'régên fraîche 2026-06-25 bef3bc6
  post-#592/#595' (cohérent dossier §3.3 refresh).

CHANGELOG '21 SVGs FR/EN/RU/PT' l.47 = section historique recovery (commits
avril 2026), pas contradiction avec l.16 Added '8 languages' = laissé intact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 1, 2026
…ANGELOG SVGs 8-lang (#591)

* docs(release): v0.9.0 validation dossier + fix CHANGELOG SVGs 8-lang

Add the v0.9.0 release validation dossier (go-live GATE for #134):
- scope (8 languages, jsboige decisions), verified asset inventory
  (CSV 8-lang, MindMap SVGs 8-lang via #565, OWL 5.4MB, PDFs reported
  from 12-Jun regen 64/64), toolchain state (zero-warning CS+NU,
  533/0/5), residual risks, and the decision points that need jsboige
  before the tag (pixel RTL/CJK eyeball, fresh regen, DNN coupling,
  tag v0.9.0).

Fix CHANGELOG line 16: it stated "ES/AR/FA/ZH SVG regeneration
pending" but #565 (merged 2fff84c) shipped those 12 SVGs. Wording
now reflects the delivered 8-language set including RTL + CJK.

Dossier built on committed assets + the reported 12-Jun release
regen (64/64 PDFs, 9834 images, exit 0); no fresh regen run this
session (bin/ empty post-crash, no RDP GO).

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(release): #591 address NanoClaw review notes on v0.9.0 dossier

- Byte-verify asset sizes: OWL 5.4MB→5.13MB (5,378,765 bytes),
  zh SVG 18MB→17.2MB (18,075,919 bytes).
- Add §3.1 source pointer for the 1408/223/167 taxonomy counts
  (issues #335/#499 spec / Scenarii commits, not re-derived this day).
- Clarify §5 point 5: CHANGELOG already fixed in this PR;
  docs/RELEASE-NOTES-v0.9.0.md does NOT exist on master
  (verified 22eb5f3) — only CHANGELOG.md documents the release.

Non-blocking review notes from ai-01/NanoClaw; no content change
to the 6 gate decisions.

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(release): #591 update coupling reco + draft v0.9.0 release notes

Per ai-01 jalon dispatch (review-ready WE):
- Update dossier §5 point #3 with po-2023 recommendation: DE-COUPLE
  (tag assets-only; DNN upgrade as post-release ops milestone), with
  effort estimate pointer to UPGRADE-ASSESSMENT §10 (#593).
- Add docs/RELEASE-NOTES-v0.9.0.md (draft, did not exist on master) —
  GitHub Release body auto-built from CHANGELOG + dossier, for jsboige
  to validate/paste. Covers 8-language scope, assets, pipeline infra,
  recovery fixes, quality (533 tests, zero-warning build), and a
  security note (DNN CVEs → post-release, target 10.3.2).

Co-Authored-By: Claude <noreply@anthropic.com>

* docs(release): #591 refresh dossier — #592 OWL merged + MindMap byte-proven + Virtues FR-gap

§3.2: + reproductibilité byte-proven (régên 8-lang 2026-06-24, Fallacies_zh.svg
cmp IDENTICAL) + gap structurel honnête (Virtues .content.svg FR-figés, non-bloquant).
§3.4: #499 Phase 2 OWL — 'en cours po-2024' → MERGED (#592, 8d5d275).
§5.5: RELEASE-NOTES-v0.9.0.md créé dans cette PR (n'existait pas sur master).
§5.6: #499 Phase 2 OWL — livré avant ce dossier, conservé pour traçabilité.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(release): #591 refresh §3.3/§5.2/§7/§8 — régên fraîche 2026-06-25 post-#595 (vraiment)

§3.3: 'RAPPORTÉ régén 12 juin' → ✅ régên fraîche 2026-06-25 (bef3bc6). PDFs Virtues
re-rendered post-#595 (clobber targeted, Chromium invoqué, labels familiaux localisés
vérifiés : zh 有效论证, ar حجة_معتبرة). i18n distinct anti-leak #216 OK. Régén headless.
§5.2: décision 'régén fraîche ?' → FAITE. Risque résiduel '16 commits depuis 12 juin' levé.
§7: risque 'régén 12 juin non reproduite' → LEVÉ (régén fraîche reproduit counts + #592/#595).
  + note de procédure stale-harvest honnête (oubli clobber corrigé ce cycle).
§8: reco point 3 (régén fraîche) → FAITE.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(release): #591 cohérence — header note de méthode + §4 tests actualisés (relecture)

Header note de méthode : 'RAPPORTÉS non re-vérifiés ce jour' → régén fraîche 2026-06-25
re-vérifiée ce jour (résout contradiction header vs §3.3 refresh tick préc.).
§4 tests : 533 pass (22eb5f3) → 540 pass (bef3bc6, test run Release 22s),
+7 = tests OWL Virtues #592. 0 fail, 5 skip (GUI/Freeplane).

Relecture cohérence read-only (pas de polish) : 1 contradiction header/corps
résiduelle trouvée + facts actualisés vs bef3bc6.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(release): #591 fix FINDING relecture po-2024 — header ligne 6 stale + mineurs

FINDING principal (po-2024 cross-verify, gate go-live) :
- ligne 6 (Master de référence) : 22eb5f3/533 → bef3bc6/540 (j'avais corrigé ligne 14
  mais manqué la 6 — contradiction header/corps résiduelle).

Mineurs :
- ligne 3 (date) : 2026-06-23 → 2026-06-25 (refresh).
- ligne 95 (attribution) : '+7 = tests OWL Virtues #592' → précisé +5 VirtueOwlGeneration
  +ContractTests + +2 VirtueClassMapRegressionTests (#592 = 8d5d275). +7 confirmé correct
  vs doute po-2024 (message commit #592 liste explicitement +5 et +2).

Dossier cohérent bout-en-bout après cross-verify indépendant po-2024.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(release): #591 fix taille SVG zh fausse (17.2→5.45 MB) + RELEASE-NOTES régên date

Coherence cross-check RELEASE-NOTES + dossier §3.2 (extension relecture po-2024
qui n'avait vérifié que RELEASE-VALIDATION). 2 nombres faux vs assets réels :

- Taille Fallacies_zh.svg : '17.2 MB (18 075 919 B)' → '5.45 MB (5 451 309 B)'
  (fichier réellement commité, byte-proven régên 2026-06-25). Aucun SVG zh n'est
  à 17.2 MB (content/links = 4.0 MB, main = 5.45 MB). Corrigé dans RELEASE-NOTES
  l.23 + dossier §3.2 table zh.
- RELEASE-NOTES l.22 : 'régên 12 juin 2026' → 'régên fraîche 2026-06-25 bef3bc6
  post-#592/#595' (cohérent dossier §3.3 refresh).

CHANGELOG '21 SVGs FR/EN/RU/PT' l.47 = section historique recovery (commits
avril 2026), pas contradiction avec l.16 Added '8 languages' = laissé intact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs(release): #591 refresh dossier v0.9.0 — régén 2026-07-01 + verdict visuel PASS ai-01

The validation dossier was last refreshed 2026-06-25 and flagged the PDF counts as
"RAPPORTÉS" and the visual verdict as "remaining (ai-01, règle HARD)". Both are now
resolved as of the 2026-07-01 cycle:

- Régén Release 8-lang executed 2026-07-01 on 18b4d02 + #614 (serial,
  EnableParallelism=false, isolated worktree) — 0 échec, 64/64 PDFs, 1229 img/lang ×8,
  "Generation finished.", bundle on GDrive review-v0.9.0-2026-06-28/ with sha256 manifest.
- Verdict visuel ai-01 = PASS représentatif (2026-07-01 08:50): spot-check
  Fallacies_Web_Thumbnails p1 across zh/ar/fa/ru/es covering CJK + RTL + cyrillic + latin;
  bug #216 (FR contamination) held, structure complete 8 types × 8 languages.
- DNN migration full-IIS now CLOSED (dnn.argumentum.myia.io LIVE) — coupling no longer an
  assets blocker.

Refreshed sections: header (date/status/master-ref), §1 (méthode), §3.3 (PDFs counts +
verdict PASS), §4 (tests 549/0/5), §5 (decisions: verdict FAIT/PASS, régén 07-01, DNN LIVE,
new §5.7 params Debug-vs-Release), §7 (risks lifted), §8 (recommendations).

content-only, 0 write Cards/, 0 runtime change. CHANGELOG + RELEASE-NOTES untouched.

Co-Authored-By: Claude-Code <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 2, 2026
… scope (#637)

The committed argumentum.owl dated 2026-03-28 (d206e59) — stale ~3
months, BLOQUEUR TAG. Regenerated fresh 2026-07-02 on master c2a9b76
(Mode.OwlGenerator, no Playwright/harvest — OWL reads CSV directly).

Scope reported honestly (not 8 languages — downgrade claim):
- argumentum.owl: 5,314,381 B (5.07 MB, -64 KB vs stale), 1408 fallacies,
  BILINGUE EN/FR literals (5558 EN + 4861 FR), 2816 prefLabel, 1408 broader.
- argumentum_virtues.owl: 862,709 B (842 KB), NEW (#592) — 223 Virtues,
  223 aif:goodTenorOf, 7 families, FR/EN literals.

The OWL generator only embeds EN+FR (OwlGeneratorConfig is mono
DefaultLanguage) — the 6 other release languages (RU/PT/ES/AR/FA/ZH)
are NOT in the OWL. OWL = bilingual reference ontology, NOT 8-language.
CSV/PDF/SVG = 8 languages; OWL = EN+FR. RELEASE-VALIDATION §3.4 updated
to reflect this (was claiming 5.13 MB stale size, no Virtues file).

Relates #134 #592 #634.

Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 4, 2026
…rified, no regen) (#672)

Primaire dispatch l0wt63 (ai-01). Verifies the Virtues OWL Phase 2 (inverse
paradigm aif:goodTenorOf) is generated, committed, and content-current.

Verified (code=truth, master a41cbda):
- argumentum_virtues.owl committed (862 KB), PR #592, fresh-regen #637 batch
- aif:goodTenorOf = 223 (ObjectProperty + AnnotationProperty + AnnotationAssertions
  on the 7 family schemes) — inverse paradigm wired
- Bilingual FR 884 / EN 641 literals, 223 Virtues, 7 families

Freshness check (the #634-prevention): OWL mtime (02:30) predates the last Virtues
CSV touch (#650 at 14:59). Column-level diff proves this is NOT a #634 repeat:
- 223 nodes before/after #650 (structure unchanged)
- 0 OWL-relevant column changes (title/desc/remark/family x 26 cols)
- Only print_and_play flag changed (16 rows) — OWL generator doesn't read it

Committed OWL is content-current. No regen warranted (would be byte-identical).
Reporting confirmed-done per dispatch 'si deja fait -> INFO' branch rather than
fabricating a redundant pipeline run.

Relates #499 #592 #637 #634 #650. Base a41cbda.

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 4, 2026
…tability fixes) (#134) (#689)

The v0.9.0 entry predating bundle v3 missed the print-production and
late-cycle stability work. This refresh brings it in line with master
`21e2c666`, cross-checked against the release-validation dossier v4
(docs/RELEASE-VALIDATION-v0.9.0.md §3.3) and dashboard decisions #26-69.

Added:
- "Print Production (CMYK & Print&Play)" section: Ghostscript post-process
  (#632), `--pdf-cmyk` entry-point (#652), bundle v3 = 80 PDFs DeviceCMYK +
  SWOP OutputIntent (6.18 GB RGB -> 5.30 GB CMYK), P&P Standard/Light
  (#645/#648-650, 64 -> 80 PDFs), GS timeout 180->900s (#670)
- "OWL Ontology (Bilingual EN/FR)" section: Fallacies OWL 5.07 MB (#634
  regen), Virtues OWL (#592/#499 Phase 2), honest scope note (EN+FR only,
  not 8-lang)
- "Fixed - Pipeline Stability (Jun-Jul 2026)" section: harvest deadlock
  #651, serial retry #613/#676, logger Spectre #630/#655, CMYK oxymore,
  Johnny 6.1.3 #653, Rules i18n refonte #640, CSV hygiene #579/#581/#584,
  OWL staleness #634

Corrected (code=truth):
- Magick.NET 14.13.1 -> 14.14.0 (verified in .csproj)
- Test count 548 -> 578 pass / 1 known-fail #133 / 5 skip / 584 total
  (empirical `dotnet test` on Argumentum.AssetConverter.Tests, 2026-07-04,
  .NET 9). Previous counts in docs (548/549/570) were all stale

No existing content regressed; all prior sections preserved.

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