ESAI MCP
Sample output

CMS Upgrade Audit Output.

The cms-upgrade-audit skill emits a schema-validated audit.json covering every breaking change, package incompatibility, and migration path it detects, with a human-readable audit.md deterministically rendered from it. What follows is a representative sample of that rendered output.

View the workflowStep 1 of the upgrade workflow

Sample output. The real primary deliverable is a schema-validated audit.json, committed to the project repo — every field is machine-checked before anything downstream trusts it. audit.md, shown below, is deterministically rendered from that JSON for human readability, and the cms-upgrade-estimate skill reads the JSON directly to produce the effort estimate. All company names, solution names, file paths, and figures here are fictional and anonymized.

CMS 12 → CMS 13 Upgrade Audit

Solution: Harborview.CMS (harborview-cms)

Audited by: AI (ESAI MCP — cms-upgrade-audit skill v1.11.0, optimizely-cms-12to13 module v1.8.27)

Cross-module: optimizely-graph (Find→Graph detected) · optimizely-opti-id (Opti ID path detected)

Executive Summary

This is a large, DXP-hosted Optimizely CMS 12 solution (95 content types, 68 NuGet packages, 9 scheduled jobs, Find integration in 12 files, Optimizely Identity active) requiring a three-path upgrade to CMS 13 (.NET 10.0): CMS 12→13, Find→Graph, and Opti ID completion. Complexity is large-tier, driven by:

Five items Require Human Input (RHI) and must be resolved before the upgrade can be fully scoped.

SeverityCountMeaning
P0 Fatal1Blocks startup on CMS 13 — must fix first.
P1 Build error8Prevents compilation — must fix to build.
P2 Behavioral5Compiles, but runtime behavior changes.
Migration paths3CMS 12→13, Find→Graph, Opti ID completion.
5 items Require Human Input

A human decision is required before scope can be confirmed for: Find best-bets data migration; Find autocomplete/analytics (Graph has autocomplete, but on a different data source — no like-for-like migration); Opti ID role mapping / SSO scope; the unresolved vendor package set; and a startup-ordering risk after Find removal.

Breaking Changes Detected (excerpt)

SeverityIssueFix
P0Tab names with spaces — FATAL startup crashRename to PascalCase; add [Display(Name = "...")] to preserve the UI label.
P1ContentArea.FilteredItems obsoleted-as-errorPrefer HTML/Tag Helper rendering (filters applied automatically); .Items is unfiltered, so apply rendering filters explicitly where items are enumerated in C#.
P2SiteDefinition.Current static access deprecatedReplace with injected IApplicationResolver.
P3EPiServer.Logging.ILogger no longer DI-registered (type still compiles)Tech debt in project code: migrate to Microsoft.Extensions.Logging.ILogger.

Find → Graph Coverage & Hole Map

Every detected Find call site is classified into one of four migration classes, so gaps are resolved at scoping rather than discovered mid-execution. This is a read-only forecast.

ClassCount%Meaning
direct-swap2238%1:1 mechanical replacement.
pattern-rewrite2645%Query shape changes — automatable with review.
manual-rhi610%A human decision is needed.
no-equivalent47%No Graph capability exists.

Recommended Execution Order

1

Resolve RHI items first

Confirm vendor CMS 13 support and get stakeholder decisions on the Find autocomplete/analytics replacement and Opti ID scope.

2

Phase 0 — Pre-Startup Blockers

Fix the 11 tab names. Must be done before the app can start on CMS 13.

3

Phase 1–4 — Packages, Framework, API fixes, Behavioral changes

Work through the full breaking-change list in dependency order.

4

Phase 5 — Runtime Verification

Start the application, validate content save/publish, re-index content URLs, verify CMS UI login.

5

Opti ID and Graph (separate workstreams)

Run after the CMS platform upgrade compiles — never in parallel.