docs(dnn): i18n porting mechanism investigation (read-only) — coupled-release critical path - #669
Merged
Merged
Conversation
Investigate the mechanism for publishing DNN site content in the 7 non-FR languages (coupled-release critical path, ai-01 dispatch 8b3ymj). Builds on prod coverage audit #662 (site FR-only). Key findings: - Two bespoke apps at different i18n maturity: FallacyExplorer is multilingual-ready post-#490 (loc() helper, CmsContext.Culture cascade, lang-suffixed fields text_fr/text_en/...); RulesExplorer is FR-only (generic fields ruleEntity.Summary/.Material/..., no culture logic, hardcoded FR) — the direct cause of the #662 FR-only verdict. - The site Rules content (Summary/Material/Installation/Content/Variants/ Memo) is DB-only, manually-authored — it does NOT match the Rules CSV columns (Text/Text_en/...). The CSV translations are not reusable as-is; porting is prose translation of DB content. - 3 localization layers: L1 UI strings (#487 rail built, gated on portal export for res.* values), L2 static HTML (not wired), L3 content items (DB-only bulk — the dominant cost). DoD met: mechanism + per-language effort estimate + step plan. Read-only: 0 prod write, 0 DB mutation. Portal/2sxc export (jsboige) is the single hard unblocker. Highest-leverage worker-able prep = RulesExplorer view refactor (mirror the proven FallacyExplorer loc() pattern). Relates: #457 #487 #490 #662 #134 #140. Co-Authored-By: Claude-Code <noreply@anthropic.com>
clusterManager-Myia
left a comment
Collaborator
There was a problem hiding this comment.
[NanoClaw] — LGTM
Read-only investigation (+222/-0, single new file). Code-level evidence verified firsthand:
- Root-cause claim confirmed —
_RulesExplorer_RuleList.cshtmlL15 readsde @ruleEntity.MinNbPlayers à @ruleEntity.MaxNbPlayers joueurs(hardcoded FR) + L18@Html.Raw(ruleEntity.Summary)(generic field, no culture logic). Noloc(), noCmsContext.Cultureanywhere in the Rule views. This is exactly why audit #662 found the rules page FR-only. Sound diagnosis. - The #490 contrast is real —
_FallacyExplorer_Root.cshtmlconfirmed post-#490: L9lang = (CmsContext.Culture.CurrentCode ?? "fr-fr")..., L19-21 theloc()helper with lang-suffixed field selection, L36/40/41@loc(fallacy,"text"/"desc"/"link"). FallacyExplorer is genuinely code-ready for 8 langs; RulesExplorer is not. The two-apps/two-models framing holds. - §2c field-mismatch argument sound — site Rule content-type (
Summary/Material/Installation/Content/Variants/Memo) vs CSVText*columns (print/PDF rules) are genuinely different artifacts; the 8 CSV translations are not reusable as-is for the site. Correctly identifies the port as prose-translation-of-DB-content, not a CSV remap — and DB-gated. - Cross-refs resolve —
457-site-content-type-inventory.md(6765B),PHASE1-content-audit.md(9320B),2026-07-03-dnn-prod-rules-coverage.md(6908B) all EXIST; #487/#490/#662 all merged. (#457 is an epic issue, not a PR — consistent.) - Honest gate boundaries — explicitly read-only (0 prod write, 0 DB mutation); the RulesExplorer refactor is a proposal, not executed; #487 rail not enabled; no QA verdict (ai-01 lane). §6 correctly scopes it as post-tag for v0.9.0 assets, critical-path only if the coupled-release ships multilingual.
△ Nit (non-blocking): the §2a .cshtml block is simplified pseudocode — the real L21 uses ((IDictionary<string, object>)f).ContainsKey(...) cast (not bare f.ContainsKey) and L9 .Split(new[] { '-' })[0]. Logic identical, reasonable docs simplification, but a reader copy-pasting the snippet verbatim would miss the cast needed for the dynamic 2sxc entity. §7 already lists the templates as sources, so reproducibility is intact.
High-quality investigation; the portal-export-as-prerequisite + RulesExplorer-refactor-as-highest-leverage-prep recommendations are well-reasoned.
This was referenced Jul 4, 2026
Merged
Open
Open
Open
jsboige
added a commit
that referenced
this pull request
Jul 4, 2026
…-only binary scan) (#687) Dispatch lev5ct primary (2sxc export unblocked, voie #2 = local backup scan). Read-only extraction from the production DNN backup to unblock the i18n portage field-model decision (#682). Findings (signal, not PASS): - Rule content-type uses GENERIC single-value fields (EntityTitle, Summary, Material, MinNbPlayers, ...) — confirmed at DB level. ZERO language-suffixed fields (Summary_en/Summary_fr absent). Confirms #669 §2c from the view audit. - Production EAV is dimensioned FR+EN only. ru/ar/fa/zh = trace noise; pt/es absent. The 6 release target languages are NOT usable EAV dimensions today. - => #682 field-model decision effectively FORCED toward Path A (lang-suffixed + loc(), mirror #490 / PR #674): Path B (EAV dimensions) would require enabling 5 new DNN content cultures before any translation can attach. Blocker (honest): clean SQL restore denied — jsboi Windows login is not sysadmin on MSSQL$SQLEXPRESS, sa password not in keychain (not guessed, out of read-only scope). Two clean unblockers documented (sysadmin grant OR sa pwd OR voie-1 Playwright export). The binary-scan findings are already conclusive for the portage-direction decision; full per-attribute enumeration gated on the unblocker. Gate: read-only. No prod write, no DB mutation, no credential in the diff. Refs #681, #682, #674, #669. Dispatch msg-20260704T130644-lev5ct. Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 4, 2026
… review entry) (#688) Dispatch lev5ct secondary (jsboige wants to verify ALL docs before tagging). One index → one link + one "à vérifier" line per doc, so the whole release documentation can be eyeball-reviewed in a single pass. Grouped in 9 sections: - §1 TAG GATE: RELEASE-VALIDATION-v0.9.0.md (v4 fresh, 80 PDFs, verdicts #140/#632) - §2 Release notes: consolidated #659 (paste-ready) + CHANGELOG gap flag - §3 CMYK (PdfCmykPostProcess README + GDrive CMYK_COLOR_PROOF note) - §4 Pipeline resilience (retry smoke #680) - §5 DNN i18n / go-live (#669 mechanism, #681 schema export, #662 coverage) - §6 Coverage audits (Rules #661, polish sweep #667, taxonomy coherence, scanner-fp #642, prod hygiene) - §7 Mindmaps/OWL (#499 Phase2 confirm, FR-frozen mechanism, OWL EN+FR-only scope) - §8 Polish/misc (#654 mnemonics, #629 CardPen, #415 repo, #141 crossLink) - §9 Stale framework docs flagged (64-PDF superseded — NOT tag-gate) Key flags surfaced for jsboige: - CHANGELOG.md is the single biggest gap — predates bundle v3 entirely (no CMYK/80-PDF/P&P Standard/Light/Ghostscript/deadlock/logger). Needs an update pass before tag. - 5 framework docs still assert "64 PDFs" (superseded by dossier v4) — flagged to avoid cold-read confusion, none is the tag-gate. - OWL scope = EN+FR only (not 8-lang) — release notes must reflect this honest scoping. All paths verified on master 7590dfb (post cycle-3 batch merges). Co-authored-by: Claude-Code <noreply@anthropic.com>
This was referenced Jul 4, 2026
jsboige
added a commit
that referenced
this pull request
Jul 4, 2026
…#692) Precise cartography of Rule prose exists/missing per language: CSV (card-print) vs DNN site. Triggered by ai-01 dispatch sde6s0 (secondary). Read-only. Findings (base master 21e2c66): - CSV Rules: 15 rows x 8 langs = 120/120 cells filled, 0 FR-leak on master (native script verified: Cyrillic/CJK/RTL spot-checks). - P&P Rules CSV: 6 rows x 8 langs = 48/48 cells filled, 0 leak. - DNN site (reconciled from #662): 5/5 jeux FR published, 7 langs unpublished; richer HTML content, DB-only. - Conclusion: CSV != site content (#669 §2c). The #684 gap is site-DB content (~30 rich HTML entities, FR-only), NOT a CSV-coverage gap. CSV is a secondary reference for #684, not the translation source. Corrects a false-positive: an initial scan on the dnn/sandbox-runtime-1032 branch flagged Rules_15 ru as FR-contaminated; verified native Russian on master (0 FR markers). No action needed. Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 4, 2026
…ing + switcher) (#693) Design sketch (no prod execution) for step 4 of the #669 DNN i18n portage plan. Triggered by ai-01 dispatch sde6s0 (tertiary). jsboige-owned, parallel/non-blocked. Covers the 3 DNN-config layers to serve 8 cultures: - DNN content languages: enable 7 cultures (en/ru/pt/es/ar/fa/zh), FR canonical. - URL routing: path-based vs query-string (decision = jsboige, current state both broken: /en-US/ 404, ?language= ignored, <html lang> stuck fr-FR). - Language switcher: populate the <div class="language"> shell shipped by #490 (currently unpopulated). - <html lang>/<dir> reflection (RTL for ar/fa; #685 visual QA entry condition). Key insight: 2sxc loc() cascade (FallacyExplorer post-#490, RulesExplorer post-#674) already reads CmsContext.Culture.CurrentCode. #683 is purely the upstream DNN-config layer that makes CmsContext.Culture return the right value. Path A (lang-suffixed fields + loc()) does NOT need 2sxc EAV dimensioning. Design only: no prod write, no admin change, no web.config mutation. Decision points surfaced for jsboige (routing mode, culture codes, switcher UX, timing). Co-authored-by: Claude-Code <noreply@anthropic.com>
This was referenced Jul 5, 2026
Merged
jsboige
added a commit
that referenced
this pull request
Jul 5, 2026
…ng list (49 fields) (#694) Decision-input for #682 (step 2 of the #669 portage plan). Triggered by ai-01 dispatch 0hbg9t (primary). Analysis only — no DB write. Recommendation: Path A (lang-suffixed fields + loc() cascade, mirror #490/#674). - Provision 7 translatable fields x 7 non-FR langs = 49 new suffixed fields on the Rule content-type (EntityTitle/Summary/Material/Installation/Content/ Variants/Memo x en/ru/pt/es/ar/fa/zh). - FR stays canonical (unsuffixed) — no data migration. - Path B (EAV dimensions) rejected: prod EAV is FR+EN only (#687), Path B would block on enabling 5 cultures + their dimensions; Path A needs none of that. Exact field-list derived from #669 Sec 2c (view-template audit) + #687 (binary scan) + PR #674 Loc() cascade (7 fields routed). The 4th-fallback design (generic = FR canonical) preserves current FR rendering during transition. Open (gated): exact 2sxc attribute types (String/Hyperlink/...) remain gated on the sysadmin unblocker (#687 Sec 3 — jsboi has no server role, not mapped in ArgumentumGames DB). Best-effort inference provided; jsboige confirms via live 2sxc editor. Re-verified the sysadmin blocker this tick (still active). Co-authored-by: Claude-Code <noreply@anthropic.com>
jsboige
added a commit
that referenced
this pull request
Jul 5, 2026
…gs, prep) (#696) Manifest/prep for #684 (step 5 of the #669 portage plan, the dominant cost). Triggered by ai-01 dispatch 0hbg9t (secondary). Prolongs #692. Enabled=false, no execution. Covers: - Entity inventory: ~30 rich-HTML prose entities (6 fields x ~5 games) x 7 target langs = ~210 translation units (exact count gated on #681 export). - Source = 2sxc Rule content-type FR entities (#681 export, jsboige), NOT the Rules CSV (#692 = secondary reference; site content richer HTML DB-only). - Sink = 49 suffixed fields provisioned by #682. - Chunking: Scenarii-style SequentialChunks ChunkSize>=12, OpenRouter gpt-5.5, HTML-preservation prompt, max_completion_tokens ~7000. - DatasetUpdater task config sketch (Enabled=false), fields = raw export headers. - Re-import plan: entity count parity, 0 FR-contaminated cell guard (#216-style, model = Rules CSV scan #692), harvest invariance check. - Per-lang effort: one DatasetUpdater pass comparable to Scenarii 167x8. Manifest only: no translation, no API calls, no DB write. Gated on #681/#682/#674/#683. Co-authored-by: Claude-Code <noreply@anthropic.com>
Merged
3 tasks
jsboige
added a commit
that referenced
this pull request
Jul 11, 2026
…view + Δ1/Δ2 manifest) (#772) jsboige arbitrated the 4 res.Rule* reconciliation deltas in interactive session (2026-07-11, consigned #458). This PR ships the 2 repo-side deltas + stages the 2 DB-side deltas as a provisioning manifest for ops. Repo-side (land via this PR): - Δ3 RuleMemoCardFileNamePrefix: CSV fr Mémo→"Argumentum - Règle" (DB canonical), re-derived 7 langs (brand-translated policy: Argumentum verbatim + suffix localized). - Δ4 RuleContent: wire <h2>@Resources.RuleContent</h2> at view :47 (orphan heading resource now referenced) + add CSV row Contenu + 7 langs. DB-side (manifest only, gated jsboige/ops — NO DB write from repo): - Δ1 RuleMaterial: DB Materiel→Matériel (FR typo fix, eid=10340). - Δ2 RuleMemoCard: DB Carte Mémo→Carte mémo (sentence case, eid=10340). Byte-exact CSV mutation (CRLF + no-BOM preserved, QUOTE_MINIMAL); diff backup-vs-result confirms only the 4 targeted cells + 1 new row changed. View change = 1 line added (Razor template, DNN runtime — not compiled by .NET pipeline). Gate: 0 prod write (repo data/template only). QA verdict = ai-01. Relates: #490, #458, #681, #682, #669, dispatch 70iit0. 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.
What
Read-only investigation of the mechanism for publishing the Argumentum DNN site content in the 7 non-FR languages (EN/RU/PT/ES/AR/FA/ZH) — the coupled-release critical path (ai-01 dispatch
8b3ymj). Builds on the prod coverage audit #662 (site is FR-only, 7 translations not published).DoD met: mechanism + per-language effort estimate + step plan. Read-only — 0 prod write, 0 DB mutation.
Key findings
FallacyExploreris multilingual-ready post-feat(dnn-i18n): #457 translate DNN UI strings FR -> 7 langs via gpt-5.5 #490 (loc()helper,CmsContext.Culturecascadelang→en→fr, lang-suffixed fieldstext_fr/text_en/…).RulesExploreris FR-only (generic fieldsruleEntity.Summary/.Material/…, no culture logic, hardcoded FR "de X à Y joueurs") — the direct cause of the docs(dnn): prod rules coverage audit — 5/5 games present (FR), 7 langs not ported #662 FR-only verdict.Summary/Material/Installation/Content/Variants/Memo) do not match the CSV columns (Text/Text_en/…). The site content is richer, manually-authored, DB-only. The 8 existing CSV translations are not reusable as-is — porting is prose translation of DB content, not a field remap.Enabled=false, gated on portal export forres.*values), L2 static HTML (2 prose pages, not wired), L3 content items (DB-only bulk — the dominant cost).Effort (per language, 7 targets)
loc()pattern).Step plan
loc(), mirroring feat(dnn-i18n): #457 translate DNN UI strings FR -> 7 langs via gpt-5.5 #490).loc()into both Rule views; extract hardcoded players string.Recommendation
Consistent with #662: a post-tag candidate for v0.9.0 assets (decisions #27, #16), but on the critical path of the coupled release. The portal export (step 1) is the schedule-critical prerequisite (jsboige). The highest-leverage worker-able prep today is the RulesExplorer view refactor (step 3) — it mirrors the proven FallacyExplorer pattern and unblocks the code side independently of the DB export.
Gate boundaries
Read-only: 0 prod write, 0 DB mutation, no portal export attempted, no #487 enablement, no QA verdict (ai-01 only). All evidence source-level at master
27442add(base of this PR).Relates: #457 #487 #490 #662 #134 #140.
🤖 Worker po-2023 (GLM)