Skip to main content

Wisej.NET 4 Modernization & Migration Strategy

This example builds a migration dossier for the Intermediate TicketOps Console and extend it into the Advanced EnterpriseOps baseline — current-state inventory, target-state inventory, compatibility/risk matrix, a screen regression plan for ten key flows, and a rollback strategy. Then prove it by running the path, hitting the failure, rolling back, mapping the theme and re-running.

Run it

cd "Module 2/EnterpriseOps"
dotnet run -f net10.0 --urls http://localhost:5202

Then open http://localhost:5202. In-memory only: no database, no network, no cloud account, nothing deployed. The Windows target (net10.0-windows) is what the Wisej.NET Designer opens; both frameworks build.

The two screens

ScreenWhat it is
UI/MigrationDossierPage (MainPage, 1048×600)the dossier: toolbar Build dossier · ▶ Run migration path · Cancel · ↶ Roll back failed step · Map theme mixin · Work orders →, six tabs (Dossier · Inventory · Compatibility / risk · Incremental path · Regression plan (10 flows) · Decision memo), the banner and the dark footer with the harness verdict
UI/WorkOrdersPage (908×600)the migrated TicketOps screen from the video — Open / In progress / Done, + New work order, dgvWorkOrders (Id · Title · Priority · State), lblStatus, the dark footer, and ← Migration dossier in the app bar. It paints itself from ThemeService.Current, so the visual diff is on the screen rather than in a document

What to click

Do it in this order the first time — it is the walkthrough.

#Button (screen)What you should see
1Build dossier (Dossier)7 dossier areas with the risk computed (H×3 M×3 L×1), 14 inventory items, 9 compatibility entries (3 blocked, 3 mitigated). Footer: Dossier: 7 areas · risk H×3 M×3 L×1 · 3 blocked combinations mitigated. The Decision memo tab is written
2Work orders →the broken build, visible: grey app bar, square tabs, monochrome priority column, red banner Visual diff — 3 failure(s): accent color lost … · corner radius 0 … · priority colors dropped …. It compiles, it runs, it is wrong
3In progress / Done tabs, + New work order, then ← Migration dossierthe server-side filter, a created work order, and navigation back with the same session and services
4▶ Run migration pathsteps 1–3 turn , the flows tab fills in live, then step 4 Check themes turns . Footer: Regression harness: FAIL — 7/10 flows, 3 theme flows broken (…). Steps 5–7 are never started
5Map theme mixinrefused: Step 4 is in the Failed state — roll back to "theme folder copy" first. Fix on the fallback point, never on the broken build.
6↶ Roll back failed stepstep 4 → ↶ rolled back to "theme folder copy" — fix, then re-run; steps 1–3 keep ; the dossier row Themes / resources reopens
7Map theme mixinTheme mixin mapped — 3/3 tokens match the 3.5 baseline.
8▶ Run migration path againresumes at step 4, Regression harness: PASS — 10/10 flows, then 5, 6, 7 → Migration path complete — 7/7 steps passed, 7/7 dossier rows proven
9Work orders →the fix, visible: blue app bar #1565D8, rounded tabs, High red / Normal amber / Low green. Footer: N open work orders — Wisej.NET 4, mapped theme mixin; on In progress: N in progress — filter ran on the server, same as 3.5. Critical rows stay grey on purpose: the 3.5 theme only defined three priority colours and Critical is new in the Advanced baseline — inventory item #9
10Decision memo tabregenerated after every action from the evidence the run produced — steps, harness verdict, theme diff
Cancel (during a run)the run stops at the next check; passed steps keep their state

The failure path, in one paragraph

The package upgrade succeeds. dotnet build reports 0 errors. The session starts, the screens open, the grid binds. And the 4.x theme engine has quietly ignored Themes/Blue-2019/*.json, because that is a 3.x format, so every screen renders with engine defaults: accent #6B7C8F instead of #1565D8, corner radius 0 instead of 7, and no priority colours at all. Nothing throws. The only thing that notices is the harness, whose flows 6–8 diff the theme token map against the 3.5 baseline — which is why the plan protects behavior, not compilation. The workflow then refuses to start step 5, refuses to let you fix forward, and names the fallback point (theme folder copy) that gets you back.

File tree

Module 2/
README.md ← this file
EnterpriseOps.slnx .gitignore
EnterpriseOps/
Program.cs session entry point: one SessionContext + one ServiceRegistry
Startup.cs Default.html Default.json Web.config
Properties/launchSettings.json port 5202
UI/
MigrationDossierPage.cs / .Designer.cs the dossier screen (MainPage)
WorkOrdersPage.cs / .Designer.cs the migrated TicketOps screen, painted from the theme map
Domain/
DossierRow.cs + RiskLevel, DossierRowState
InventoryItem.cs + InventoryCategory (10 categories)
CompatibilityEntry.cs one cell of the compatibility matrix
MigrationStep.cs + StepState — a step, its check, its fallback point
RegressionFlow.cs + FlowCategory, FlowOutcome
ThemeMap.cs the three tokens + the visual diff
WorkOrder.cs + WorkOrderStatus, Priority, Tenant
Services/
MigrationAssessmentService.cs risk rule · matrix check · decision memo
MigrationWorkflow.cs the seven steps, the refusals, the rollback
RegressionHarnessService.cs the ten flows
ThemeService.cs unmapped → folder copy → mapped mixin
WorkOrderService.cs the behaviour that must not change
ActivityTrace.cs server-side log (System.Diagnostics.Trace)
CommandContext.cs CommandResult.cs ServiceRegistry.cs
Data/
MigrationInventoryStore.cs dossier rows · inventory · matrix · steps · flows
FakeWorkOrderStore.cs 45 in-memory work orders, ids 2002–2005 as in the video
ThemeStore.cs the three theme states
Security/
SessionContext.cs per session, zero static fields (flow 9 asserts it)
PermissionService.cs server-side rules
docs/
MigrationDossier.md the dossier table (the file the video opens)
MigrationInventory.md deliverable 1
RiskMatrix.md deliverable 2
RegressionPlan.md deliverable 3
RollbackPlan.md deliverable 4
ModernizationDecisionMemo.md deliverable 5
MigrationPath.svg the seven steps and their fallback points

The Solution Explorer shows these under docs/migration/; this sample keeps docs/ flat.

Not yet exercised at runtime

ItemWhere
Wisej.Web.TabControl + TabPage with a Dock = Fill grid per page, SelectedIndex set from codeMigrationDossierPage
DataGridViewCell.Style read-modify-write to colour one cellMigrationDossierPage.PaintCell, WorkOrdersPage.PaintPriorityColumn
Control.CssStyle = "border-radius: 7px !important;" for the theme's corner radius on the tab buttonsWorkOrdersPage.ApplyTheme
TextBox with Multiline = true + ScrollBars.Both for the memoMigrationDossierPage.Designer.cs
Navigation by assigning Application.MainPage = new <OtherPage>(services) mid-sessionbtnWorkOrders_Click, btnBackToDossier_Click