docs(taxonomy): #499 Virtues AIF mirror script — [secondaire] back-fill prep, gated execution (anti-drift with PR #753) - #754
Merged
Conversation
…ll prep, gated execution Consolidated tools/499-virtues-aif-columns-apply.py — the MIRROR of the Fallacies contract (PR #753, #498/#707§4a). Applies the ratified deterministic back-fill (plan #750 v2) to Cards/Fallacies/Argumentum Virtues - Taxonomy.csv, adding the same 2 columns (AIF_attackType + AIF_attackedNode) so both taxonomies share an identical AIF column contract (anti-drift). Derivation (plan #750 v2, re-confirmed programmatically on master): default undercut/RA-node override undermine/I-node if opposes {889, 804} (fabricated premise) override rebut/CA-node if opposes {340} (counter-conclusion) Distribution EXACT: 206 undercut + 13 undermine + 3 rebut = 222 nodes with scheme; 1 root node (pk 0, no scheme) = empty. Technique: byte-exact surgical (same as Fallacies script, memory [[csv-byte-exact-column-insertion]]). Re-writes NO existing field. Verified dry-run: 0 byte-preservation mismatch; placement after AIF_skosMappingType (idx 77), print_and_play shifts to 80. ⚠ GATED EXECUTION: dry-run by default. Apply ONLY after the Fallacies contract (PR #753) is merged + reviewed (ai-01 + jsboige veto). 0 write to Virtues prod CSV in this PR — script only. Placement constant (INSERT_AFTER_IDX=77) stays anti-drift with whatever the Fallacies PR #753 open-question-#2 decision lands. This is [secondaire] prep work — reduces post-unblock cycle time: once the contract merges, the mirror is 1 PR (run --write). No blocker removed, no gate crossed. Co-Authored-By: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 8, 2026
…v2) into 2 new columns (#755) Executes the [primaire] mirror per ai-01 dispatch tw8www (post #753 merge). Applies the ratified deterministic back-fill (plan #750 v2) to Cards/Fallacies/Argumentum Virtues - Taxonomy.csv as the same 2 columns (AIF_attackType + AIF_attackedNode) — anti-drift with the Fallacies contract (#753). Both taxonomies now share an identical AIF column contract. Derivation (plan #750 v2, re-confirmed programmatically on master): default undercut/RA-node override undermine/I-node if opposes {889 Mensonge, 804 Acception arbitraire} override rebut/CA-node if opposes {340 Appel aux conséquences} Distribution EXACT: 206 undercut + 13 undermine {34,36,49,55,56,73,137,139,140, 153,154,155,158} + 3 rebut {53,54,165} = 222 nodes with scheme; 1 root node (pk 0, no scheme) = empty. SURGICAL byte-exact (same technique as #753, tools/499-...-apply.py on master via #754): rewrites NO existing field. Independently VERIFIED post-write backup-vs-result: 0 byte-preservation mismatch across all 223 data rows (fields idx 0-77 and 78 original -> 80 after byte-identical); CRLF (224) + BOM preserved; re-parse clean 81 cols (was 79). CsvHelper maps by header name -> 0 ClassMap break. Placement: after AIF_skosMappingType (idx 77), before print_and_play (->80). Same convention as #753 (per ai-01 verdict: keep after-AIF-block). Tests: dotnet test = 594 pass / 1 fail (#133 OWL pre-existing, unrelated) / 5 skip -- 0 new failures; Virtues-loading tests (VirtueClassMapRegressionTests, EntityClassMapRegressionTests) all pass. 0 entity/test references new cols. Gated: review ai-01 (independent byte-check, same as #753). Does NOT self-merge. Does NOT touch #674/#666/#596 (HOLD). Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <noreply@anthropic.com>
This was referenced Jul 8, 2026
Merged
jsboige
added a commit
that referenced
this pull request
Jul 9, 2026
…tionnelles #753/#754/#755 + master 81a9e4e (#758) Refresh v5 of the release validation dossier (2026-07-09). Integrates the 4 PRs merged between d90ce61 and 81a9e4e — notably the AIF relational columns chantier: - #753 Fallacies AIF: 2 new columns AIF_attackType/AIF_attackedNode (46/1408 filled) - #754 Virtues AIF mirror script (dry-run) - #755 Virtues AIF mirror executed (222/223 filled, 206/13/3 distribution) - #756 serialization audit (read-only diagnostic) Added §3.1bis (new artifact inventory: AIF relational columns on both taxonomies). Header refreshed: master 81a9e4e, tests 594 pass / 1 known-fail #133 / 5 skip / 600 total (empirical dotnet test 2026-07-09, +16 vs v4.1's 578). Tag still unposéd. Key invariant: AIF columns are CSV metadata-only (additive layer, 0 impact on card rendering / CardPen / harvest / PDF) -> verdicts #140 (content) and #632 (CMYK) unchanged, bundle v3 remains the reference bundle. Companion index RELEASE-VERIFICATION-INDEX updated: §1 now points to v5 + delta AIF. Docs-only. No prod code. No DB write. No CSV prod mutation. Co-authored-by: Claude <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 9, 2026
…-paramétrable) (#757) * chore(taxonomy): #498 phase 1-3 apply script (prep, gated --write, D2-paramétrable) Companion APPLY script to #756 (the read-only audit, merged `81a9e4e6`). #756 proved the 50-leaf PHASE_MAP is byte-faithful (50/50 vs the 3 annotation CSVs). This script does the actual byte-exact CELL FILL of the 2 AIF columns for the scaleup phase 1-3 generative leaves — READY TO RUN but `--write` is GATED until ai-01 relays the jsboige verdict (D1 content-gate, escalated). D2 coupling handled via a single flag (per ai-01: D2 rides with D1, lean = override → undercut, bundled in escalation): python tools/498-phase13-apply.py # dry-run, 45 NEW (834/847 FAIL-LOUD) python tools/498-phase13-apply.py --write # APPLY 45 NEW (GATED — jsboige nod) python tools/498-phase13-apply.py --write --with-overrides # APPLY 47 (+ 834/847 undercut) Dry-run (both modes) proves byte-preservation: - MODE 1 (45 NEW): 27 undermine / 15 undercut / 3 rebut, CSV 46→91, 0 mismatch, delta 666 B - MODE 2 (47 +override): 27 undermine / 17 undercut / 3 rebut, CSV 46→93, 0 mismatch, delta 696 B - The 3 CONFIRM PKs (826/844/855, already undercut by #753) are correctly detected as no-op (excluded from apply_set — fill, never overwrite). - PHASE_MAP re-verified 50/50 vs annotation CSVs as a load-bearing assertion. At the verdict: 1 command (write + verify + tests) → PR review byte-check ai-01. Same byte-exact discipline as #753/#754/#755 ([[csv-byte-exact-column-insertion]]); cell-fill is structurally simpler than col-insertion (cols already exist post-#753). 0 prod write in this PR (dry-run only). GATE (jsboige content nod) NOT crossed. Co-Authored-By: Claude-Code <noreply@anthropic.com> * chore(taxonomy): #498 phase 1-3 independent verifier + apply backup (PR #757) Add the INDEPENDENT byte-preservation verifier for the phase 1-3 apply script (PR #757). Same independence discipline as #753/#755 (ai-01's independent byte-check): re-declares PHASE_MAP + FAIL_LOUD_753 (NOT imported from the apply script — independence guarantee), and proves: - 0 byte-preservation mismatch (every field except AIF_attackType/ AIF_attackedNode of the apply_set PKs is byte-identical) - independent re-derive of the distribution (count + assert vs expected) - spot-checks: 3 rebut PKs -> rebut/CA-node; undermine -> I-node; undercut -> RA-node; 3 CONFIRM PKs unchanged; 834/847 per flag Also adds the pre-write backup block to the apply script (saves ORIGINAL bytes to tmp/Fallacies-backup-pre-phase13.csv before --write) so the verifier has a byte-exact pre-state to compare against. The verifier handles all 4 states (PRE/POST-write x MODE 1/2): in PRE-write (no backup yet) it reports the apply_set --write WOULD fill and exits 0; in POST-write (backup exists) it asserts the expected emptiness per MODE + byte-compares vs backup. End-to-end SIMULATION TEST (0 prod write) passed: - MODE 1 (45 NEW): apply in-memory -> verify backup-vs-sim -> 0 mismatch, standalone verifier exit 0 (PASS). CSV 46->91, delta 666 B. - MODE 2 (47 +834/847 override): dry-run -> 0 mismatch. CSV 46->93, delta 696 B. - All spot-checks OK; 834/847 empty in MODE 1 (FAIL-LOUD kept). At the verdict (ai-01 relays jsboige nod): python tools/498-phase13-apply.py --write [--with-overrides] python tools/498-phase13-verify.py [--with-overrides] dotnet test -> PR review byte-check ai-01. 0 prod write in this commit. GATE (jsboige content nod) NOT crossed. Co-Authored-By: Claude-Code <noreply@anthropic.com> --------- Co-authored-by: Your <your.email@example.com> Co-authored-by: Claude-Code <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.
Summary
[secondaire] prep work — consolidated
tools/499-virtues-aif-columns-apply.py, the MIRROR of the Fallacies contract (PR #753, #498/#707§4a). Applies the ratified deterministic back-fill (plan #750 v2) toCards/Fallacies/Argumentum Virtues - Taxonomy.csvas the same 2 columns, so both taxonomies share an identical AIF column contract (anti-drift).Script only — 0 write to the Virtues prod CSV in this PR. Execution is GATED (dry-run by default) until the Fallacies contract (PR #753) is merged + reviewed (ai-01 + jsboige veto). This PR just lands the ready-to-run mirror so the [secondaire] becomes 1 PR once unblocked — reduces post-unblock cycle time. No gate crossed, no blocker removed.
Per ai-01 direction (
1pgunw): "Ne reste pas en stand-by, ouvre des PRs en mode autonome." This is the highest-value unblocked [secondaire] work.What it does (dry-run validated)
Derivation (plan #750 v2, ratified; re-confirmed programmatically on master
c43bd7b5):undercut/RA-nodeundermine/I-nodeif the virtue opposes{889 Mensonge, 804 Acception arbitraire}(fabricated premise)rebut/CA-nodeif the virtue opposes{340 Appel aux conséquences}(counter-conclusion)Distribution EXACT: 206 undercut + 13 undermine + 3 rebut = 222 nodes with scheme; 1 root node (pk 0, no scheme) = empty. Matches plan #750 v2's 206/13/3 exactly. 0 overlap between the {889,804} and {340} override sets.
Technique = byte-exact surgical (same as Fallacies PR #753)
Re-writes NO existing field. Byte-exact field-segment splitter (CSV-aware: doubled-quote escapes + embedded newlines), inserts 2 new field-segments, rejoins. Memory lesson
[[csv-byte-exact-column-insertion]]. Dry-run self-verifies 0 byte-preservation mismatch (existing fields idx 0-77 + 78-78 original → 81-81 after are byte-identical).Placement note (anti-drift with Fallacies PR #753)
Inserted AFTER
AIF_skosMappingType(idx 77), beforeprint_and_play(idx 78 → shifts to 80). This mirrors the Fallacies placement (PR #753). If the Fallacies open-question-#2 (placement) decision lands as true-file-end instead, changeINSERT_AFTER_IDXhere — it's a single constant, stays anti-drift.Discipline
--writeis GATED, not exercised in this PR).Request
Review + (if acceptable) merge. This is low-risk prep: a script that doesn't touch any prod file until its gate lifts. Once PR #753 merges + ai-01/jsboige review it, the [secondaire] mirror is 1 PR (
python tools/499-virtues-aif-columns-apply.py --write+ byte-preservation verify + tests).cc @jsboige (Option A FYI; anti-drift with Fallacies PR #753).
🤖 Worker po-2024 — [secondaire] prep, dispatch
1pgunwdeep-queue.