Skip to content

chore(dnn): #131 migrate 12 RazorComponent templates to Razor14 (source-level, runtime pending) - #596

Merged
jsboige merged 1 commit into
masterfrom
chore/dnn-razor14-migration
Jul 21, 2026
Merged

chore(dnn): #131 migrate 12 RazorComponent templates to Razor14 (source-level, runtime pending)#596
jsboige merged 1 commit into
masterfrom
chore/dnn-razor14-migration

Conversation

@jsboige

@jsboige jsboige commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Source-level migration of the 12 deprecated ToSic.Sxc.Dnn.RazorComponent templates (the Dnn-specific base, removed in 2sxc 21 LTS) to the modern Dnn-agnostic Custom.Hybrid.Razor14 base. This is the last remaining 2sxc breaking-risk identified in the DNN 10.3.2 + 2sxc 21 upgrade arc (#458 / #131).

Note: this is a SOURCE-LEVEL migration only. Runtime validation is PENDING on the sandbox (see §Validation). These .cshtml files are interpreted by 2sxc at runtime in DNN — they are not compiled by dotnet build, so they cannot be validated locally by the .NET pipeline. The PR is opened for sandbox runtime validation, per the ai-01 dispatch (2026-06-25 14:05).

Dispatched by ai-01 (coordinator). Worker: po-2023.

Scope (12 files — all under DNNPlatform/)

News5/bs3 (5):

  • _Details.cshtml
  • _List.cshtml
  • _List archive.cshtml
  • _List Columns.cshtml
  • _List Columns without images.cshtml

Content/bs3 (7):

  • Layout/_Line.cshtml
  • Link/_Large emphasized link.cshtml
  • Link/_List of document-links.cshtml
  • Link/_List of icon-links.cshtml
  • Link/_List of image-links with overlay.cshtml
  • Link/_List of image-links.cshtml
  • Link/_List of links.cshtml

0 files under Cards/ (release freeze respected — master stays bef3bc6c).

API migrations (semantics preserved, 2sxc 21-compatible)

Legacy (RazorComponent) Modern (Razor14) Count Where
@inherits ToSic.Sxc.Dnn.RazorComponent @inherits Custom.Hybrid.Razor14 12× all
Request.QueryString["category"] CmsContext.Page.Parameters["category"] News5
Dnn.Module.ModuleID CmsContext.Module.Id Content/Link
@using ToSic.Eav.Run; @using ToSic.Sxc.Context; News5 _List*
CustomizeSearch(... IContainer moduleInfo ...) CustomizeSearch(... IModule moduleInfo ...) News5 _List*

The CustomizeSearch signature is aligned with the repo's already-modern News5/DnnSearch/SearchMapper.cs (Custom.Hybrid.Code12, ICustomizeSearch, IModule). Each of the 4 _List* overrides preserves its own logic (_List.cshtml = stream cleanup + per-entity querystring; the 3 others = searchInfos.Clear() to prevent duplicate results) — none were removed or merged into SearchMapper, to avoid changing behavior without runtime tests.

APIs preserved (still valid in Razor14 — confirmed)

App.Data, AsList, AsDynamic, Content, CreateInstance, GetService, Edit.TagToolbar / Edit.Enabled, Text.Has, Tags.* (Tags.Nl2Br, Tags.Strip), @RenderPage, @Html.Partial, @Html.Raw, CmsContext.View.Identifier (already modern in _Line.cshtml).

Out-of-scope shared dependencies left untouched (per dispatch perimeter):

  • News5/bs3/shared/_Parts.cshtml — already Custom.Hybrid.Razor12 (2sxc 21 supports Razor12).
  • Content/bs3/Link/_LinkHelper.cshtml — helper with no @inherits, not in the 12-template list.

⚠️ Runtime validation PENDING on sandbox

These points cannot be verified by dotnet build (2sxc interprets .cshtml at runtime). To validate on the DNN sandbox post-2sxc-21-upgrade:

  1. CustomizeSearch override signature (IModule) in the 4 News5 _List* — confirm Custom.Hybrid.Razor14 still exposes the virtual override. If 2sxc 21 dropped template-level overrides in favor of the ICustomizeSearch interface, fall back to the existing News5/DnnSearch/SearchMapper.cs pattern (move the per-template logic into SearchMapper or a per-view SearchMapper).
  2. CmsContext.Page.Parameters["category"] null-behavior — verify it returns null when the parameter is absent (downstream Text.Has(...) handles null). If it throws on missing key, wrap with .ContainsKey("category").
  3. _LinkHelper.cshtml:30 uses Dnn.Portal.PortalAlias.HTTPAlias (legacy). NOT migrated here (outside the 12-template scope, no @inherits). It may break when instantiated from a Razor14 template → candidate follow-up PR if the sandbox reveals it.

Diff hygiene

29 insertions / 29 deletions (no line-ending noise — repo has no .gitattributes + core.autocrlf=false; files were re-normalized to match each original's line ending).

Related

🤖 Worker po-2023 · dispatched by ai-01 · runtime validation pending on sandbox

Source-level migration of the 12 deprecated `ToSic.Sxc.Dnn.RazorComponent`
templates (the Dnn-specific base, removed in 2sxc 21 LTS) to the modern
Dnn-agnostic `Custom.Hybrid.Razor14` base.

Files (12):
  News5/bs3 (5): _Details, _List, _List archive, _List Columns,
                 _List Columns without images
  Content/bs3 (7): Layout/_Line, Link/_Large emphasized link,
                   Link/_List of document-links, Link/_List of icon-links,
                   Link/_List of image-links with overlay,
                   Link/_List of image-links, Link/_List of links

API migrations (semantics preserved, 2sxc 21-compatible):
- @inherits ToSic.Sxc.Dnn.RazorComponent -> Custom.Hybrid.Razor14  (12x)
- Request.QueryString["category"] -> CmsContext.Page.Parameters["category"]  (5x, News5)
- Dnn.Module.ModuleID -> CmsContext.Module.Id  (4x, Content/Link)
- @using ToSic.Eav.Run -> @using ToSic.Sxc.Context  (4x, News5 _List*)
- CustomizeSearch: IContainer moduleInfo -> IModule moduleInfo  (4x, News5 _List*)
  Signature aligned with the repo's modern News5/DnnSearch/SearchMapper.cs
  (Custom.Hybrid.Code12, ICustomizeSearch, IModule).

Preserved APIs (still valid in Razor14): App.Data, AsList, AsDynamic, Content,
CreateInstance, GetService, Edit.TagToolbar/Enabled, Text.Has, Tags.*,
@renderpage, @Html.Partial/Raw, CmsContext.View.

Runtime validation PENDING on sandbox (SOURCE-LEVEL migration only — these
.cshtml are interpreted by 2sxc at runtime in DNN, not compiled by dotnet build,
so cannot be validated locally by the .NET pipeline):
  1. CustomizeSearch override signature (IModule) in the 4 News5 _List* — confirm
     Custom.Hybrid.Razor14 still exposes the virtual override. If 2sxc 21 dropped
     template-level overrides in favor of the ICustomizeSearch interface, fall
     back to the existing News5/DnnSearch/SearchMapper.cs pattern.
  2. CmsContext.Page.Parameters["category"] null-behavior (returns null if absent,
     handled downstream by Text.Has) — verify on sandbox.
  3. _LinkHelper.cshtml:30 uses Dnn.Portal.PortalAlias.HTTPAlias (legacy, NOT
     migrated here — outside the 12-template scope, no @inherits). May break when
     instantiated from a Razor14 template -> candidate follow-up PR.

Scope: DNNPlatform/ only. 0 files under Cards/ (release freeze respected, master
stays bef3bc6). Out-of-scope shared deps (_Parts.cshtml already Razor12,
_LinkHelper.cshtml helper) left untouched per dispatch perimeter.

Refs #131.

Co-Authored-By: Claude <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]

LGTM — migration source-level complète et cohérente (12 templates, #131).

Vérifications :

  • @inherits : 12/12 ToSic.Sxc.Dnn.RazorComponentCustom.Hybrid.Razor14. Aucun fichier oublié.
  • APIs DNN-spécifiques : les 4 occurrences de Dnn.Module.ModuleIDCmsContext.Module.Id (l'équivalent CMS-agnostique de Razor14).
  • Le point qui compte sous Razor14 — c'est une base CMS-neutre, donc tout appel Dnn.* restant casserait au runtime. J'ai scanné les 12 fichiers migrés : 0 référence Dnn.* résiduelle (les 4 hits du diff sont tous des lignes - supprimées). Le risque de runtime-breakage prévisible est donc écarté côté source.

Le caveat « runtime pending » du titre est honnête et approprié : la migration source est complète, reste à valider contre une instance DNN/2sxc live. Rien à redire sur ce qui est dans le scope du PR.

@jsboige

jsboige commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

Sandbox runtime-readiness assessment (2026-06-25, po-2023)

Per ai-01 dispatch v2 ("runtime-valider #596 → un-gate merge ; fallback explicite = documente précisément le gap, ne stalle pas"). Sandbox not yet booted this tick — but the readiness picture is now precise, and better than expected (the hard piece is present).

✅ Present & functional (verified this tick)

  • LocalDB MSSQLLocalDB started; the ArgumentumGames DB is a real, populated DNN 9.11.1 database — 163 base tables, Version row 9.11.1, full aspnet_* membership schema.
  • DNNPlatform/bin/: DNN 9.11.1.19 + 2sxc 21.07.00 (ToSic.Sxc.Dnn.dll) — the dispatch's "2sxc 21" target, confirmed. Razor14 is fully supported at this version.
  • The 12 migrated templates are present in-tree under Portals/1/2sxc/{News5/bs3, Content/bs3/{Link,Layout}}/.

→ The sandbox is bootable. The web.config reading Data Source=REPLACE is a committed placeholder, not a missing DB.

⚠️ Local-config gaps before first boot (none of these are committable — secrets/DB are out-of-band)

  1. Connection string web.configData Source=REPLACE placeholder. Set locally to (localdb)\MSSQLLocalDB;Database=ArgumentumGames;Integrated Security=True (matches UPGRADE-ASSESSMENT §1).
  2. machineKeyvalidationKey="REPLACE" decryptionKey="REPLACE". Generate a throwaway dev key locally. Never commit — production machineKey is GDrive-authoritative (UPGRADE-ASSESSMENT §1).
  3. IIS Express config: no applicationhost.config in repo. Create one + launch via /config: + explicit site binding (gotcha: /path: is broken — feedback-dnn-iis-express, use /config: + named site).

⚠️ The actual DoD step (where the work is)

  1. The 12 templates are file-based Razor, interpreted by 2sxc at runtime. A render-check needs each template assigned to a 2sxc App module on a DNN page (which pages exist in ArgumentumGames is unverified), then browser-navigate + screenshot per template → OK/KO report. Realistic effort ~30-60 min of focused sandbox work.

Bottom line (honest)

  • I did not fabricate a validation report this tick — the sandbox is bootable but not yet booted, and runtime validation needs step 4 (page-assignment + browser verify).
  • This is materially closer to runnable than "non-functional": the populated DNN 9.11.1 DB (the usually-hard part) is present.
  • Concrete next step = execute the 4-step boot recipe + browser verify. I can do this on the next tick if dispatched, or ai-01 can scope it as a focused sandbox-boot task. The merge-un-gate (DoD) remains gated on step 4.

Refs: UPGRADE-ASSESSMENT.md §1 (DB state) · existing runbooks on docs/131-dnn-step1-sandbox-runbook, docs/131-dnn-upgrade-sandbox-v2.

🤖 po-2023 (dispatched by ai-01, 2026-06-25 v2)

@jsboige

jsboige commented Jun 25, 2026

Copy link
Copy Markdown
Contributor Author

Sandbox boot attempted (2026-06-25, po-2023 tick 2) — precise blocker found: bin/ SDK-assembly contamination

Update to my earlier readiness comment. I moved from "readiness assessment" to an actual boot attempt this tick. The boot infrastructure works, but DNN itself cannot start due to a pre-existing bin/ corruption — independent of the 12 templates and of the #596 migration.

What booted ✅

  • LocalDB MSSQLLocalDB + ArgumentumGames DB (DNN 9.11.1, 163 tables) — alive.
  • IIS Express site "DNN Argumentum" (:8090, Clr4IntegratedAppPool v4.0, physicalPath DNNPlatform/) — existing Documents/IISExpress/config/applicationhost.config already had it.
  • Local web.config edits (LocalDB conn string, throwaway dev machineKey) — applied, reverted after (never committed; machineKey is GDrive-authoritative in prod).
  • DNN did handle requests (HTTP responses, not connection refused).

❌ Blocker: cascade of FileLoadExceptionbin/ has .NET 6/9 SDK contract assemblies

DNN returns HTTP 500, title (FR locale): « Impossible de charger le fichier ou l'assembly '<System.X>' … La définition trouvée du manifeste de l'assembly ne correspond pas à la référence de l'assembly (0x80131040) ». The failing assembly advances with each web.config redirect I patch — a cascade, not a single fix:

Assembly (physical bin/) AssemblyVersion FileVersion Expected by redirect / libs
System.Buffers 4.0.4.0 4.600.24.56208 (.NET 6 SDK) 4.0.3.0 (Imageflow/2sxc)
System.Collections.Immutable 9.0.0.0 9.0.24.52809 (.NET 9 SDK) ~5.0/6.0
System.Text.Json 9.0.0.0 9.0.24.52809 (.NET 9 SDK) ~5.0/6.0
System.Memory 4.0.1.2 4.6.31308.01 4.0.1.1
System.Numerics.Vectors 4.1.4.0 4.6.26515.06 4.1.3.0/4.1.4.0
System.Runtime.CompilerServices.Unsafe 6.0.0.0 6.0.21.52210 4.0.4.1/4.5.x

The fileVersions (4.600.x, 9.0.x) are .NET 6/9 SDK forwarder/contract assemblies — they should not be in a .NET Framework 4.8 DNN bin/. They appear to have been dropped by a global-tool / SDK NuGet restore polluting bin/. System.Collections.Immutable 9.0.0.0 + System.Text.Json 9.0.0.0 are the smoking gun: a DNN 9.11.1 site on .NET Framework 4.8 cannot bind these.

Why I stopped at whack-a-mole

Patching binding redirects one-by-one (I did fix System.Buffers → 4.0.4.0; that advanced the error to System.Collections.Immutable) is a fragile band-aid: ~6+ redirects to update, and the newer contract assemblies may be ABI-incompatible with the Imageflow/2sxc code compiled against the older versions → runtime errors even if binding succeeds. The correct fix is a clean bin/ re-deploy of the correct-framework assemblies (DNN 9.11.1 + 2sxc 21.07 + Imageflow.Net 0.14 built for net48), not redirect-patching.

Conclusion (honest, for the WE review)

Refs: UPGRADE-ASSESSMENT.md §1 (DB state). Scratchpad probe logs retained locally (not committed).

🤖 po-2023 (dispatched by ai-01, 2026-06-25 v2 — tick 2)

jsboige added a commit that referenced this pull request Jun 26, 2026
Net-new turnkey navigator that organizes the #131 DNN arc by RDP-session
need (not by technical phase — the dnn-localization README already does
phase-order). Motivated by jsboige coupling v0.9.0 to the DNN go-live
(26/06): most of the arc is agent-delivered without touching runtime; a
bounded set REQUIRES jsboige's interactive RDP session.

Split:
- [A] Done without RDP (verify only): #596 templates, #593 CVE/target,
  #132 deployment, #131-step2 smoke gate, #603 runbooks.
- [B] Requires RDP session, turnkey sequence: B1 bin/ repair (sandbox-
  bootstrap §3 recipe), B2 sandbox upgrade + smoke, B3 browser-verify 12
  templates (#596 runtime un-gate), B4 prod go-live (#132 Phase 5).

References the authoritative doc for each step (no duplication). Added to
the #603 branch (3 DNN ops docs together: sandbox-bootstrap + go-live-
smoke-test + go-live-turnkey-checklist) for coherent internal links.

Related: #131, #596, #597, #132. Read-only doc, no code, no Cards/ change.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jun 26, 2026
PowerShell tooling that makes the first RDP blocker (B1 of go-live-turnkey-
checklist.md) executable in one command. The bin/ SDK contamination (5 .NET 9
contract assemblies + 2 .NET 6 markers) currently blocks all DNN sandbox boot
(PR #596 issuecomment-4804068740); the recipe was documented in sandbox-
bootstrap-runbook.md section 3 - this script executes it.

- DryRun is the DEFAULT: prints current->target asmVer map (verified via
  reflection: System.Collections.Immutable 9.0.0.0 -> 6.0.0.0, etc.), no changes.
  -Apply executes: backup bin\ -> bin.contaminated.bak, copy 2 clean DLLs from
  bin\Imageflow\ (Buffers 4.0.3.0, Memory 4.0.1.1), download+extract 5 NuGet
  6.0.0 (lib/net4x, verified net48-compatible), drop into bin\.
- web.config redirect alignment NOT auto-applied (prints the map + points to
  sandbox-bootstrap section 3.3 - keeps blast radius to the binaries).
- bin/ is git-tracked: prints the revert command after. Manual run in jsboige's
  RDP session only (no auto-execution without GO).

DryRun validated on po-2023: all 7 asmVer read correctly via reflection, match
the sandbox-bootstrap section 2 table. go-live-turnkey-checklist.md B1 updated
to point at the script (alongside the recipe doc).

Placed in docs/dnn/ (not docs/dnn/scripts/ - that dir is gitignored by the
global Scripts/ rule at .gitignore:163). Added to the #603 DNN ops bundle.
Related: #131, #596.

Co-Authored-By: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jun 27, 2026
…e-test + turnkey checklist (#603)

* docs(dnn): add sandbox-bootstrap + go-live smoke-test runbooks

Two new ops docs in docs/dnn/, both NET-NEW complements (no duplication
of the #132 deployment runbook in docs/dnn-localization/):

- sandbox-bootstrap-runbook.md (idle track): capitalizes the 2026-06-25
  bin/ SDK-contamination characterization. Documents the verified boot
  infrastructure (LocalDB + IIS Express :8090 + DB ArgumentumGames) and
  the bounded clean bin/ re-deploy recipe (replace ~8 net48 assemblies:
  Buffers/Memory from bin/Imageflow/, fetch 5 .NET 9 contaminants at
  6.0.x NuGet). The remaining ops work to un-gate #596 runtime.

- go-live-smoke-test.md (secondary track): detailed URL-level smoke
  checklist run in the maintenance window after the #132 Phase-5 wizard.
  Complements #132 (which treats smoke as 1-liners). Three sections:
  (A) platform core, (B) 12 Razor14 templates (#596, post-dating #132),
  (C) 4 social-auth connectors (#597, post-dating #132) + eshop path.
  Sign-off gate references #132 §6 rollback contract.

Related: #131 (DNN upgrade arc), #596 (runtime-pending), #597 (auth).
Read-only docs, no code, no Cards/ changes (master stays bef3bc6 for
v0.9.0 release).

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

* docs(dnn): add go-live turnkey checklist (RDP-session navigator)

Net-new turnkey navigator that organizes the #131 DNN arc by RDP-session
need (not by technical phase — the dnn-localization README already does
phase-order). Motivated by jsboige coupling v0.9.0 to the DNN go-live
(26/06): most of the arc is agent-delivered without touching runtime; a
bounded set REQUIRES jsboige's interactive RDP session.

Split:
- [A] Done without RDP (verify only): #596 templates, #593 CVE/target,
  #132 deployment, #131-step2 smoke gate, #603 runbooks.
- [B] Requires RDP session, turnkey sequence: B1 bin/ repair (sandbox-
  bootstrap §3 recipe), B2 sandbox upgrade + smoke, B3 browser-verify 12
  templates (#596 runtime un-gate), B4 prod go-live (#132 Phase 5).

References the authoritative doc for each step (no duplication). Added to
the #603 branch (3 DNN ops docs together: sandbox-bootstrap + go-live-
smoke-test + go-live-turnkey-checklist) for coherent internal links.

Related: #131, #596, #597, #132. Read-only doc, no code, no Cards/ change.

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

* docs(dnn): add bin/ repair script (B1 turnkey, dry-run default)

PowerShell tooling that makes the first RDP blocker (B1 of go-live-turnkey-
checklist.md) executable in one command. The bin/ SDK contamination (5 .NET 9
contract assemblies + 2 .NET 6 markers) currently blocks all DNN sandbox boot
(PR #596 issuecomment-4804068740); the recipe was documented in sandbox-
bootstrap-runbook.md section 3 - this script executes it.

- DryRun is the DEFAULT: prints current->target asmVer map (verified via
  reflection: System.Collections.Immutable 9.0.0.0 -> 6.0.0.0, etc.), no changes.
  -Apply executes: backup bin\ -> bin.contaminated.bak, copy 2 clean DLLs from
  bin\Imageflow\ (Buffers 4.0.3.0, Memory 4.0.1.1), download+extract 5 NuGet
  6.0.0 (lib/net4x, verified net48-compatible), drop into bin\.
- web.config redirect alignment NOT auto-applied (prints the map + points to
  sandbox-bootstrap section 3.3 - keeps blast radius to the binaries).
- bin/ is git-tracked: prints the revert command after. Manual run in jsboige's
  RDP session only (no auto-execution without GO).

DryRun validated on po-2023: all 7 asmVer read correctly via reflection, match
the sandbox-bootstrap section 2 table. go-live-turnkey-checklist.md B1 updated
to point at the script (alongside the recipe doc).

Placed in docs/dnn/ (not docs/dnn/scripts/ - that dir is gitignored by the
global Scripts/ rule at .gitignore:163). Added to the #603 DNN ops bundle.
Related: #131, #596.

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

---------

Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige added a commit that referenced this pull request Jul 3, 2026
…shed pack (#663)

Tertiaire dispatch kp26j6. Refines the #415 Phase-2 proposal (PR #628, read-only,
no execution). Re-measured on current master 9c19e51 (was 33b1c0b at proposal time).

Two findings that sharpen the plan:

1. Mindmapper gap (186.7 MB) — the proposed git filter-repo --path prefixes are
   exact-prefix matches and MISS two sibling build-output trees:
   - .../AssetConverter/Mindmapper/Published/  (129.2 MB)
   - Cartes/Generation/Mindmap/Mindmapper/Published/  (57.5 MB)
   These are regenerable dotnet-publish output (.csproj/.sln committed in history,
   binaries deleted at HEAD, .REMOVED.git-id sentinels alongside). Corrected strip
   target = ~1.8 GB (proposal said ~1.557 GB). The --path set is updated to close
   the gap; they were misclassified into the "other" zone by the audit path regex.

2. Pack grew 2.05 -> 2.08 GiB (+3868 objects) but the growth is text/code only
   (other zone 882.8 -> 946.7 MB); regenerable binary zones byte-for-byte unchanged.
   Bloat source is NOT recurring — no new build artifacts committed.

Risk #2 currency update: open PRs 8 -> 3 (#596/#661/#662), lowering rewrite risk.

READ-ONLY per DoD: 0 history mutation, 0 force-push, 0 clone, 0 Cards/ write.
Reproducible via python tools/git-weight-audit.py + scratchpad 415_mindmapper_gap.py.
Go/no-go = jsboige. Recommendation (DEFER post-tag) unchanged.

Co-authored-by: Your <your.email@example.com>
Co-authored-by: Claude-Code <noreply@anthropic.com>
This was referenced Jul 4, 2026
jsboige added a commit that referenced this pull request Jul 8, 2026
…columns AIF_attackType + AIF_attackedNode (#753)

Reassigned by ai-01 (po-2023 dead-channel ~2j, dispatch 1pgunw). First prod CSV
write of chantier #498. Adds 2 trailing-AIF-block columns to
Cards/Fallacies/Argumentum Fallacies - Taxonomy.csv, inserted AFTER
AIF_skosMappingType (col idx 94), before `shape` (idx 95) — new cols join the
existing AIF block (cols 91-96).

Derivation: §7 of the 12 docs/taxonomy/498-aif-*-cluster.md cluster docs.
attackType = bolded token in each `### pk NNN -> **type**` header.
attackedNode DETERMINISTIC per ratified contract #707§4 Option (a):
undercut->RA-node, undermine->I-node, rebut->CA-node.

Distribution (46 filled of 1408): 44 undercut/RA-node + 2 undermine/I-node
(838, 843). 0 rebut (consistent with rebut-rarity). 17 FAIL-LOUD/gap leaves
left EMPTY (0 fabrication #677): CA-token-missing {829,840,847,848,853} +
RA-node/gap {832,834,835,837,861,868-874}. Remaining 1345 leaves (not decomposed
in §7) empty.

SURGICAL byte-exact: rewrites NO existing field. Byte-preservation VERIFIED
independently — 0 mismatches: every existing field (idx 0-94 and 95-101) is
byte-identical between backup and result; only 2 new fields inserted per row.
CRLF (1409) + 144 embedded-LF + BOM preserved. CsvHelper maps by header name,
so insertion breaks no existing mapping.

Tests: dotnet test = 594 pass / 1 fail (#133 OWL pre-existing, unrelated) /
5 skip — 0 new failures; Fallacies-loading tests all pass.

Audit: tools/498-fallacies-aif-columns-apply.py (re-runnable derivation +
surgical apply + verify).

Gated: review ai-01 + veto jsboige (structural reassignment). 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>
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
@jsboige
jsboige merged commit b920f89 into master Jul 21, 2026
3 checks passed
@jsboige
jsboige deleted the chore/dnn-razor14-migration branch July 21, 2026 17:25
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