Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
@Html.Raw(ruleEntity.Installation)
</div>
<div class="col-md-12 position-relative">
<h2>@Resources.RuleContent</h2>
@Html.Raw(ruleEntity.Content)
@if (ruleEntity.Variants != "")
{
Expand Down
113 changes: 113 additions & 0 deletions docs/dnn-localization/490-res-rule-provisioning-manifest.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# 2026-07-11 — #490 `res.Rule*` provisioning manifest (Δ1/Δ2 DB writes, gated ops)

**Scope**: the 2 DB-only deltas from the [reconciliation](490-res-rule-reconciliation.md) that
**jsboige arbitrated in interactive session** (2026-07-11 ~01:15, consigned on #458). These are
**2sxc App-Resource value fixes on eid=10340** (app=60, FR dimensionless default) — they live in the
DB, **not** the repo, so they cannot be PR'd. This manifest is the **prep artifact** the prod operator
(jsboige / ops) applies via the 2sxc admin or a Method B write script on the live DNN instance.

**Repo reference**: branch `fix/490-res-rule-deltas`, base master `daa71763`. Issue: #490. Owner:
jsboige (DB write). Triggered by ai-01 dispatch `70iit0` (2026-07-11, 4 arbitrages tranchés).

> ⚠ **Status = manifest only.** No DB write is executed from this repo. The 2 operations below are
> **staged for prod apply** (gated jsboige). The repo-side deltas (Δ3 CSV + Δ4 view) ship in the
> companion PR on this same branch — they are independent of these DB writes.

---

## The 2 DB writes (eid=10340, FR dimensionless default)

Both target the **App-Resource entity eid=10340** (app=60), the `res.*` rail consumed by
`_RulesExplorer_RuleDetail.cshtml` via `@Resources.X`. The FR value is the **dimensionless default**
(the value 2sxc returns when no culture-specific value is attached).

### Δ1 — `res.RuleMaterial`: fix FR typo (missing accent)

| | |
|---|---|
| **Resource key** | `RuleMaterial` |
| **Entity** | eid=10340 (app=60) |
| **Dimension** | FR dimensionless default |
| **Current DB value** | `Materiel` (**typo** — no accent) |
| **Target DB value** | `Matériel` (correct French) |
| **Rationale** | jsboige arbitration 2026-07-11: the rendered `<h2>` currently shows "Materiel" (wrong). CSV already correct (`Matériel`), so no repo change — DB-only fix. |
| **Blast radius** | **None.** The 7 non-FR translations (`Materials`/`Материалы`/`Material`/`Material`/`المواد`/`محتویات بازی`/`材料`) were translated from the *correct* FR and remain valid. |

### Δ2 — `res.RuleMemoCard`: fix FR case (title → sentence)

| | |
|---|---|
| **Resource key** | `RuleMemoCard` |
| **Entity** | eid=10340 (app=60) |
| **Dimension** | FR dimensionless default |
| **Current DB value** | `Carte Mémo` (title case — capital `M`) |
| **Target DB value** | `Carte mémo` (sentence case — lowercase `m`) |
| **Rationale** | jsboige arbitration 2026-07-11: sentence case is more conventional for FR headings. CSV keeps `Carte mémo` as canonical (unchanged). |
| **Blast radius** | **None.** The 7 non-FR translations (`Memo card`/`Памятка`/`Cartão de resumo`/`Tarjeta de resumen`/`بطاقة تذكيرية`/`کارت یادآوری`/`备忘卡`) are case-insensitive equivalents and remain valid. |

---

## Apply procedure (jsboige / ops, gated)

Two equivalent paths — pick per ops preference:

### Path A — 2sxc admin UI (lowest risk, visual)
1. Log into the DNN instance as host/admin.
2. Open the 2sxc app 60 (Argumentum) → App Resources (entity eid=10340).
3. For `RuleMaterial` (FR default): edit value `Materiel` → `Matériel`. Save.
4. For `RuleMemoCard` (FR default): edit value `Carte Mémo` → `Carte mémo`. Save.

### Path B — Method B write script (on-box, gated)
A SQL/PowerShell write against the live DNN DB, run from `myia-web1` (the same box that delivered
export #681 via Method B read-only). **Requires write credentials** (the export was read-only SELECT).

```sql
-- Δ1: RuleMaterial FR typo fix (eid=10340, FR dimensionless default = no DimensionID / dimension 0)
UPDATE [dbo].[ToSIC_EAV_Values]
SET [Value] = N'Matériel'
WHERE [AttributeId] = (SELECT [AttributeId] FROM [dbo].[ToSIC_EAV_Attributes]
WHERE [StaticName] = 'RuleMaterial')
AND [EntityId] = 10340
AND [DimensionID] IS NULL; -- FR dimensionless default

-- Δ2: RuleMemoCard FR case fix (eid=10340, FR dimensionless default)
UPDATE [dbo].[ToSIC_EAV_Values]
SET [Value] = N'Carte mémo'
WHERE [AttributeId] = (SELECT [AttributeId] FROM [dbo].[ToSIC_EAV_Attributes]
WHERE [StaticName] = 'RuleMemoCard')
AND [EntityId] = 10340
AND [DimensionID] IS NULL; -- FR dimensionless default
```

> ⚠ **The SQL above is a draft from the EAV schema model — verify column/table names against the live
> 2sxc v21 schema before executing.** The 2sxc EAV table names (`ToSIC_EAV_Values`,
> `ToSIC_EAV_Attributes`) and the FR-dimensionless convention (`DimensionID IS NULL`) match the export
> #681 shape; confirm on-box. Path A (2sxc admin UI) avoids this risk entirely.

### Post-apply verification
After either path, re-export eid=10340 (Method B read-only) and confirm:
- `RuleMaterial` FR default = `Matériel` (accent present)
- `RuleMemoCard` FR default = `Carte mémo` (lowercase `m`)

The re-export diff vs #681 should show **exactly these 2 FR cells changed**, nothing else.

---

## Gate boundaries (HARD)

- ❌ **Zero DB write from this repo** — the manifest is a staging artifact; apply is gated jsboige/ops.
- ❌ Does not modify `Cards/` CSV (game-content is po-2024's lane).
- ❌ Does not provision the 5 non-FR/non-EN culture dimensions on eid=10340 (that is #682 Path A,
separate lane) — Δ1/Δ2 fix the **FR dimensionless default only**, which already exists.
- ❌ Does not declare a QA verdict — that's ai-01.

## What is NOT here (companion repo PR, this branch)

The 2 **repo-side** deltas (Δ3 `RuleMemoCardFileNamePrefix` CSV fix + Δ4 `RuleContent` view+CSV) ship
in the companion commits on this same branch — they are independent of these DB writes and land via
normal PR review. See the branch diff for `dnn-ui-strings.csv` (Δ3 row + Δ4 new row) and
`_RulesExplorer_RuleDetail.cshtml:47` (Δ4 heading wire).

Relates: dispatch `70iit0`, #490 (res.* rail), #681 (export), #458 (epic), #682 (dimension
provisioning — separate lane), #669 (mechanism), reconciliation doc
[490-res-rule-reconciliation.md](490-res-rule-reconciliation.md).
7 changes: 4 additions & 3 deletions docs/dnn-localization/dnn-ui-strings.csv
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,11 @@ key,context,source_file,fr,en,ru,pt,es,ar,fa,zh,notes
ui.fallacy.find_out_more,FallacyExplorer link label '(find out more)',Portals/1/2sxc/Argumentum/_FallacyExplorer_Root.cshtml:20,en savoir plus,Learn more,Подробнее,Saiba mais,Más información,اعرف المزيد,بیشتر بدانید,了解更多,"Template hardcodes EN value AND reads text_en/desc_en/link_en regardless of culture (i18n bug, see audit s4)"
ui.rules.players_range,Rules list/detail player-count line 'de {0} a {1} joueurs',Portals/1/2sxc/Argumentum/_RulesExplorer_RuleList.cshtml:15;_RulesExplorer_RuleDetail.cshtml:36,de {0} à {1} joueurs,from {0} to {1} players,от {0} до {1} игроков,de {0} a {1} jogadores,de {0} a {1} jugadores,من {0} إلى {1} لاعبين,از {0} تا {1} بازیکن,{0} 至 {1} 名玩家,Hardcoded FR; keep {0}/{1} placeholders; source uses &agrave; entity
res.RuleSummary,Rule detail section heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:37,Résumé,Summary,Краткое описание,Resumo,Resumen,ملخص,خلاصه,摘要,VERIFIED FR via export #681 (eid=10340); CSV=DB match
res.RuleMaterial,Rule detail section heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:41,Matériel,Materials,Материалы,Material,Material,المواد,محتویات بازی,材料,VERIFIED FR via export #681 (eid=10340); DELTA D1 — DB "Materiel" (typo / no accent); CSV "Matériel" correct; DB fix flagged jsboige
res.RuleMaterial,Rule detail section heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:41,Matériel,Materials,Материалы,Material,Material,المواد,محتویات بازی,材料,VERIFIED FR via export #681 (eid=10340); DELTA D1 RESOLVED — jsboige acté DB fix Materiel→Matériel; CSV correct (unchanged); DB write = provisioning manifest eid=10340 (gated ops, see 490-res-rule-provisioning-manifest.md)
res.RuleInstallation,Rule detail section heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:43,Installation,Setup,Подготовка,Preparação,Preparación,الإعداد,آماده‌سازی,设置,VERIFIED FR via export #681 (eid=10340); CSV=DB match
res.RuleVariants,Rule detail section heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:50,Variantes,Variants,Варианты,Variantes,Variantes,الأنواع,گونه‌ها,变体,VERIFIED FR via export #681 (eid=10340); CSV=DB match
res.RuleMemoCard,Rule detail memo-card heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:58,Carte mémo,Memo card,Памятка,Cartão de resumo,Tarjeta de resumen,بطاقة تذكيرية,کارت یادآوری,备忘卡,VERIFIED FR via export #681 (eid=10340); DELTA D2 — DB "Carte Mémo" (title case) vs CSV "Carte mémo" (sentence); case arbitration jsboige
res.RuleMemoCard,Rule detail memo-card heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:58,Carte mémo,Memo card,Пامятка,Cartão de resumo,Tarjeta de resumen,بطاقة تذكيرية,کارت یادآوری,备忘卡,VERIFIED FR via export #681 (eid=10340); DELTA D2 RESOLVED — jsboige acté sentence case; CSV "Carte mémo" canonical (unchanged); DB write Carte Mémo→Carte mémo = provisioning manifest eid=10340 (gated ops, see 490-res-rule-provisioning-manifest.md)
res.RuleMemoInstructions,"Rule detail memo-card instructions (Html.Raw, multi-sentence)",Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:59,Vous pouvez télécharger la carte de mémo suivante pour retrouver facilement les règles.,You can download the following memo card to refer back to the rules easily.,"Вы можете скачать следующую карточку-памятку, чтобы легко вернуться к правилам.",Você pode baixar o cartão-memo a seguir para consultar as regras facilmente.,Puedes descargar la siguiente tarjeta memo para consultar fácilmente las reglas.,يمكنك تنزيل بطاقة التذكير التالية للرجوع إلى القواعد بسهولة.,می‌توانید کارت یادآوری زیر را دانلود کنید تا به‌راحتی به قوانین مراجعه کنید.,你可以下载以下备忘卡,以便轻松查阅规则。,VERIFIED FR via export #681 (eid=10340 / HTML-encoded <p>...</p> in DB); CSV = canonical translation source; en/ru/pt/es/ar/fa/zh via gpt-5.5
res.RuleMemoCardFileNamePrefix,Memo card filename prefix in card name,Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:67,Mémo,Memo,Памятка,Memorando,Memo,مذكرة,یادداشت,备忘,VERIFIED FR via export #681 (eid=10340); DELTA D3 — DB "Argumentum - Règle" (real brand prefix) vs CSV "Mémo" (wrong); brand-policy arbitration jsboige (7 langs HOLD)
res.RuleMemoCardFileNamePrefix,Memo card filename prefix in card name,Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:67,Argumentum - Règle,Argumentum - Rule,Argumentum - Правило,Argumentum - Regra,Argumentum - Regla,Argumentum - قاعدة,Argumentum - قانون,Argumentum - 规则,VERIFIED FR via export #681 (eid=10340); DELTA D3 RESOLVED — jsboige acté brand-translated policy (Argumentum=brand verbatim; descripteur "Règle" localized); CSV fr aligned to DB canonical "Argumentum - Règle"; en/ru/pt/es/ar/fa/zh re-derived (suffix localized, brand verbatim)
res.RuleMemoCardDownload,Memo card download button label,Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:89,Télécharger la carte mémo,Download memo card,Скачать карточку-памятку,Baixar cartão-memo,Descargar tarjeta memo,نزّل بطاقة التذكير,دانلود کارت یادآوری,下载备忘卡,VERIFIED FR via export #681 (eid=10340); CSV=DB match; en/ru/pt/es/ar/fa/zh re-translated gpt-5.5
res.RuleContent,Rule detail section heading (<h2>),Portals/1/2sxc/Argumentum/_RulesExplorer_RuleDetail.cshtml:47,Contenu,Content,Содержание,Conteúdo,Contenido,المحتوى,محتوا,内容,DELTA D4 RESOLVED — jsboige acté view-bug scenario (a): orphan heading resource wired into view at :47; CSV fr "Contenu" matches DB canonical (eid=10340); en/ru/pt/es/ar/fa/zh derived (1:1 content-heading equivalents, gpt-5.5-verified per #490 §4 manifest)
Loading