Skip to content
Merged
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
121 changes: 121 additions & 0 deletions docs/dnn-localization/131-step1-sandbox-upgrade-runbook.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# #131 — Step 1 Sandbox Upgrade Runbook (DNN 9.11.1.19 → 10.1.2)

**Issue:** [#131 — DNN platform upgrade (sandbox → prod)](https://github.com/ArgumentumGames/Argumentum/issues/131)
**Author:** Claude Code @ myia-po-2023 (worker)
**Date:** 2026-06-17
**Base:** master `87a02c19`
**Status:** **SANDBOX-PREP (research/runbook)** — execution GATED on jsboige's target decision (10.1.2 vs 10.3.2, see #520). **No prod deploy, no live sandbox mutation** until jsboige says go.

**Depends on (all merged):**
- [131-upgrade-sandbox-plan-v2.md](131-upgrade-sandbox-plan-v2.md) (#511) — the 4-step staircase + 2sxc compat matrix.
- [131-step0-runtime-verification.md](131-step0-runtime-verification.md) (#514) — Step 0 result: DNN 10.3.2 runtime **VERIFIED .NET Framework 4.8** (no .NET 8 jump; OpenStore blocker dissolved).
- [131-cve-correction-and-target-refinement.md](131-cve-correction-and-target-refinement.md) (#520) — CVE map correction (9.13.x closes **0** CVEs; target refined to **10.1.2**).

---

## 1. What Step 1 is (scope)

Step 1 of the §7 staircase = the **security upgrade jump**: lift the running sandbox from the installed **DNN 9.11.1.19** to the CVE-closure target, **on the sandbox only**, documenting a per-stage go/no-go.

**The target is NOT yet chosen** (jsboige's gate, #520 §3):

| Option | CVEs closed | 2sxc work | Risk |
|--------|-------------|-----------|------|
| **10.1.2 (recommended)** | both (CVE-2025-64095 patched **10.1.1**; CVE-2025-52488 patched **10.0.1**) | none (before the 2sxc cliff at **10.2.0+**, issue #6902) | lowest |
| 10.3.2 (latest) | both | upgrade 2sxc 15.02 → ≥21 + template audit | higher (Argumentum's 4 bespoke `.cshtml`) |

This runbook covers the **10.1.2** path (lowest disruption, closes both CVEs). A 10.3.2 execution prepends a **2sxc upgrade sub-step** before the DNN jump — out of scope here until jsboige picks it.

**Authoritative version ladder (NuGet `DotNetNuke.Core`, verified 2026-06-17):** the 9.13.x line tops out at **9.13.9** (closes **0** CVEs — ruled out as a security palier). The 10.x line: 10.0.0, 10.0.1, 10.1.0, 10.1.1, 10.1.2, 10.2.0 … 10.3.2. The CVE-closure minimum is **10.0.1** (NTLM) → **10.1.1** (file-upload). **10.1.2** is the first release that has *both* and precedes the 2sxc cliff.

---

## 2. Sandbox baseline (repo-grounded)

| Fact | Value | Source |
|------|-------|--------|
| Installed DNN | **9.11.1.19** | `DNNPlatform/bin/DotNetNuke.dll` FileVersion |
| Runtime | .NET Framework **4.8** | `DNNPlatform/web.config` `targetFramework="4.8"` |
| 2sxc (Argumentum app host) | **15.02** | MEMORY.md (Phase A boot, 2026-06-02) |
| Argumentum custom 2sxc app | 4 bespoke `.cshtml` | `_Album List.cshtml`, `_FallacyExplorer_Root.cshtml`, `_RulesExplorer_RuleDetail.cshtml`, `_RulesExplorer_RuleList.cshtml` (`DNNPlatform/Portals/1/2sxc/Argumentum/`) |
| Glossary3 app | version history → **14.09.00** | `…/Glossary3/App_Data/app.xml` |
| Sandbox host | IIS Express, port **8090** | MEMORY.md Phase A (config outside repo: `.vs` gitignored) |

**Step 0 carried-over fact (the gate this depends on):** installed 9.11.1 (net48) and target 10.1.2 (net48) are the **same runtime** → no .NET jump, no module recompile for runtime reasons. (Module *API* surface is a separate question — see §5.)

---

## 3. Pre-flight (BEFORE any sandbox mutation) — do these now, gate-safe

These are non-destructive and *should* be done regardless of target choice:

1. **Full sandbox backup** (the safety net for every later step):
- File-system copy of `DNNPlatform/` (the whole site root).
- Database backup (`BACKUP DATABASE` on the sandbox DB).
- Export the 2sxc apps (Argumentum + Glossary3) via 2sxc export, so a rollback restores app data even if the DB restore is partial.
2. **Capture the "before" golden state:**
- Screenshot / note the loaded Argumentum pages (FallacyExplorer, RulesExplorer, Album List) on 8090 — the *visual* regression baseline.
- Record `web.config` checksum + `DotNetNuke.dll` version.
3. **Inventory installed modules/extensions** (Host → Extensions) so a post-upgrade diff shows exactly what changed.
4. **Confirm the .NET 4.8 runtime** is what the Windows host serves (matches Step 0). No action if already 4.8.

---

## 4. The upgrade execution (sandbox only) — generic DNN mechanics

> ⚠️ **Honesty boundary:** the *generic* DNN upgrade-wizard mechanics below are the standard community-documented flow, but the **authoritative steps must be confirmed against the official DNN upgrade guide** (`docs.dnncommunity.org` → Upgrading) before execution. The web doc fetch was unavailable while writing this runbook (tooling outage); do not treat the bullet list below as verified procedure — confirm, then execute. Everything in §3 and §5 is repo-grounded and stands on its own.

Standard community flow (to confirm vs. official guide):
1. Take the §3 backups.
2. Download the **Upgrade package** for the target version (10.1.2) from the DNN community release archive — *not* the Install package (Install is for greenfield; Upgrade preserves the DB).
3. Stop the IIS Express sandbox site (free file locks).
4. Copy the Upgrade package's files/bin over the sandbox site root (preserves `web.config`, `App_Data`, `Portals`, `DesktopModules`).
5. Browse to `http://localhost:8090/Install/Upgrade.aspx` to run the DB-migration wizard.
6. Watch the upgrade log; the wizard reports schema/data migration + any skipped extensions.
7. Restart the site; smoke-test the §2 pages.

---

## 5. Argumentum-specific risk register (repo-grounded)

These are the places a 9.11→10.1 jump could bite *this* site specifically:

| Risk | Evidence | Mitigation |
|------|----------|------------|
| **Argumentum bespoke `.cshtml` (4)** use 2sxc v15-era APIs. | v20 "Moment-of-Truth" renamed module path (`/DesktopModules/ToSic_SexyContent/` → `…/ToSic.Sxc/`) + removed `SexyContentWebPage`/`GetBestValue`. | **Audit the 4 templates** against the v15→v20 changelog. But: target 10.1.2 does **not** force a 2sxc bump (we stay ≤ 10.1.x, before the cliff) → 2sxc stays 15.02 → templates likely untouched. This risk activates **only if target = 10.3.2** (forces 2sxc ≥21). |
| **Glossary3 at 14.09.00** (v14-era) | `app.xml` version history. | Same logic: no 2sxc bump on the 10.1.2 path → no action. Bump to typed v3 is a separate, later hardening. |
| **News5 / Blog5** (current-generation apps) | repo structure (`bs3/4/5`, `DnnSearch`, `api`). | LOW. Re-verify they load post-upgrade (smoke-test). |
| **DNN 9.12/9.13/10.0/10.1 breaking changes** (CDF control constructors, #6871 in Dnn.Platform releases) | GitHub release notes. | Confirm via the 9.11→10.1 release-note diff; the empty-ctor fix (#6871) suggests DNN *re-added* compatibility — favorable signal. |
| **Social-auth connectors** (PR #506, open) | existing branch. | Decide #506 fate *as part of* this upgrade or keep separate — don't bundle. |

---

## 6. Go/No-go per stage

| Stage | Pass criterion | Gate |
|-------|----------------|------|
| Pre-flight (§3) | backups exist; before-state captured | **GO** to proceed to execution |
| Upgrade execution (§4) | Upgrade wizard completes on sandbox; log clean | worker documents; **ai-01 + jsboige** review log |
| Post-upgrade smoke | the 4 Argumentum pages render correctly on 8090; modules load | **visual verdict = ai-01** (worker signals, does not declare PASS) |
| Rollback readiness | a tested path to restore 9.11.1.19 from §3 backup | **mandatory before** declaring Step 1 done |

**Hard gate:** Step 1 stays **sandbox-only**. No prod deploy without explicit jsboige go (Step 4 of the v2 plan). The CVE-closure target itself (10.1.2 vs 10.3.2) is jsboige's call (#520).

---

## 7. What this runbook does NOT do

- ❌ Does **not** execute the upgrade — execution is gated on jsboige's target decision.
- ❌ Does **not** verify the generic DNN upgrade-wizard steps against the official guide (tooling outage this session — flagged in §4 for confirmation).
- ❌ Does **not** touch prod, the CSV taxonomy, `dnn-ui-strings.csv`, or any consumer.
- ❌ Does **not** decide #445 (Stripe Native) — that stays jsboige's business call.

---

## Sources

- NuGet `DotNetNuke.Core` registration — 9.13.x (tops 9.13.9) and 10.x (→10.3.2) version lines (verified 2026-06-17).
- #520 (#131 CVE correction) — CVE-2025-64095 patched **10.1.1**; CVE-2025-52488 patched **10.0.1**; 2sxc cliff at **10.2.0+** (issue #6902).
- #514 (Step 0) — DNN 10.3.2 runtime = .NET Framework 4.8 (no .NET 8 jump).
- Repo: `DNNPlatform/bin/DotNetNuke.dll`, `DNNPlatform/web.config`, `DNNPlatform/Portals/1/2sxc/{Argumentum,Glossary3}/`.
- MEMORY.md — Phase A sandbox boot (IIS Express :8090, DNN 9.11.1 + 2sxc 15.02, 2026-06-02).
Loading