Skip to content

Agent Coordination Context — Migration Review Fixes

Created: 2026-02-26 Updated: 2026-02-27 Lead: Claude (Senior .NET Architect / Tech Lead) Status: FRONTEND WORK COMPLETE — Documentation overhaul in progress


Repository Branches

Repo Branch Base Purpose
C:\repos\progress\dbl.Progress feature/migration-review-fixes main All Razor/frontend fixes
C:\repos\progress\double-migration-tool feature/fix-path-ab-duplicates main Migration tool Path A/B fix

Reference Locations

Resource Path
V8 Source (read-only reference) C:\repos\progress\psCreditUnion\Progress.Web\
V17 Target (editable) C:\repos\progress\dbl.Progress\src\www\
Migration Tool (editable) C:\repos\progress\double-migration-tool\src\UmbracoMigrator\
Fix Plans C:\repos\progress\docs\migration-review\08-*.md, 09-*.md, 10-*.md
Deep-Dive Analysis C:\repos\progress\docs\migration-review\07-deep-dive-analysis.md
Element Type Status C:\repos\progress\docs\migration-review\_element-type-status.json
Content Usage C:\repos\progress\docs\migration-review\_content-usage.json

Key V8 Reference Paths

Component V8 Path
Calculators psCreditUnion\Progress.Web\Views\Partials\Grid\Editors\calculators\
Calculator Controllers psCreditUnion\Progress.Web\Controllers\CalculatorsSurfaceController.cs
Calculator Views psCreditUnion\Progress.Web\Views\CalculatorsSurface\
LoanBoxes psCreditUnion\Progress.Web\Views\Partials\Grid\Editors\LoanBoxes\
Testimonials psCreditUnion\Progress.Web\Views\Partials\Grid\Editors\Testimonials\
News psCreditUnion\Progress.Web\Views\Partials\Grid\Editors\News\
Grid Layouts psCreditUnion\Progress.Web\Views\Partials\Grid\

Key V17 Target Paths

Component V17 Path
BlockGrid Components dbl.Progress\src\www\Views\Partials\blockgrid\Components\
Calculator Partials dbl.Progress\src\www\Views\Partials\calculators\
Calculator JS dbl.Progress\src\www\wwwroot\Scripts\calculator*.js
Calculator Controller dbl.Progress\src\www\Controllers\CalculatorApiController.cs
Calculator Service dbl.Progress\src\www\Services\CalculatorService.cs + ICalculatorService.cs
News Partials dbl.Progress\src\www\Views\Partials\news\
BlockGrid Extensions dbl.Progress\src\www\Extensions\BlockGridExtensions.cs
BootstrapGrid dbl.Progress\src\www\Views\Partials\blockgrid\BootstrapGrid.cshtml

Existing V17 Services

Service Interface Implementation
Calculator ICalculatorService.cs CalculatorService.cs
Article IArticleService.cs ArticleService.cs
Dictionary IDictionaryService.cs DictionaryService.cs
Cookies IGlobalCookiesService.cs GlobalCookiesService.cs
Headless Content IHeadlessContentService.cs HeadlessContentService.cs
Twitter ITwitterService.cs TwitterService.cs

NOTE: No ISiteSettingsService exists yet.


Work Streams & Agent Assignments

Stream 1: Migration Tool — Path A/B Fix

  • Agent: migration-tool-dev
  • Repo/Branch: double-migration-tool / feature/fix-path-ab-duplicates
  • Scope: Fix GridConfigurationMigrationService.cs to prevent duplicate element type creation
  • Files: src/UmbracoMigrator/Services/GridMigration/GridConfigurationMigrationService.cs
  • Reference: Report 09 (09-fix-plan-doctypes.md)
  • Conflicts with: Nothing (separate repo)

Stream 2: Calculators System Overhaul

  • Agent: calc-dev
  • Repo/Branch: dbl.Progress / feature/migration-review-fixes
  • Scope: Fix API controller, implement stubs, update JS, restore localization
  • Files touched:
  • Controllers/CalculatorApiController.cs
  • Services/ICalculatorService.cs, Services/CalculatorService.cs
  • Views/Partials/calculators/calculatorIcon.cshtml
  • Views/Partials/calculators/calculatorInputVarRate.cshtml
  • Views/Partials/calculators/calculatorLarge.cshtml
  • Views/Partials/blockgrid/Components/grid_element_calculatorsgrideditor.cshtml
  • wwwroot/Scripts/calculator*.js (all 7 JS files)
  • Reference: Report 07 Section 4, Report 10 Fix 1
  • Conflicts with: Nothing (unique files)

Stream 3: LoanBoxes Modes Restoration

  • Agent: loanbox-dev
  • Repo/Branch: dbl.Progress / feature/migration-review-fixes
  • Scope: Add dispatcher + 3 missing display modes + fix bugs
  • Files touched:
  • Views/Partials/blockgrid/Components/gridelementloanboxescompletegrideditor.cshtml
  • NEW: Views/Partials/loanboxes/ directory + 4 new files
  • Views/Partials/blockgrid/Components/mainLoanBoxWidget.cshtml (if exists)
  • Reference: Report 07 Section 1, Report 10 Fix 2
  • Conflicts with: Nothing (unique files)

Stream 4: Testimonials + News Fixes

  • Agent: testimonial-news-dev
  • Repo/Branch: dbl.Progress / feature/migration-review-fixes
  • Scope: Fix testimonial slider, image suppression, read-more; fix news casing and filters
  • Files touched:
  • Views/Partials/blockgrid/Components/grid_element_testimonialcompletegrideditor.cshtml
  • Views/Partials/news/NewsList.cshtml
  • Views/Partials/news/topStory.cshtml
  • Views/Partials/news/topStory5Articles.cshtml
  • Views/Partials/news/4AcrossNews.cshtml
  • Reference: Report 07 Sections 2+3, Report 10 Fixes 3+4
  • Conflicts with: Nothing (unique files)

Stream 5: Frontend Cleanup (AFTER streams 2-4 complete)

  • Agent: cleanup-dev
  • Repo/Branch: dbl.Progress / feature/migration-review-fixes
  • Scope: Remove stubs, rename files, fix case sensitivity
  • Files touched:
  • DELETE: grid_element_psdataprotectiondpo.cshtml (and 3 more stubs)
  • RENAME: TrustpilotWidget.cshtmltrustpilotWidget.cshtml
  • RENAME: videoPopOut.cshtmlvideoPopout.cshtml
  • DELETE: gridelementsubmenu.cshtml (duplicate of grid_builtin_submenu)
  • Reference: Report 08 Phase 1
  • Conflicts with: Must run AFTER streams 2-4

Stream 6: Grid Layout Audit

  • Agent: grid-audit-dev
  • Repo/Branch: dbl.Progress / feature/migration-review-fixes
  • Scope: Audit property whitelist in BlockGridExtensions.cs against v8 configs
  • Files touched:
  • Extensions/BlockGridExtensions.cs (potentially)
  • Reference: Report 07 Section 5, Report 10 Fix 5
  • Conflicts with: Nothing (unique file)

V8→V17 Migration Patterns (for agents)

All agents should use these v17 patterns when porting v8 code:

Model Access

// V8: Model.Value<T>("alias")
// V17 (BlockGrid component): Model.Content.Value<T>("alias")

MediaPicker3 (single pick)

// V8: Model.Value<IPublishedContent>("image")?.Url
// V17: Model.Content.Value<MediaWithCrops>("image")?.MediaUrl()

Dictionary/Localization

// V8: Umbraco.GetDictionaryValue("key")
// V17: @inject IDictionaryService DictionaryService
//      DictionaryService.GetValue("key")
// OR if IDictionaryService doesn't exist, use ILocalizationService

SurfaceController → API Controller

// V8: Html.RenderAction("Action", "Controller")
// V17: Use ViewComponent or API controller + AJAX

Partial Rendering

// V8: Html.RenderPartial("name", Model)
// V17: await Html.RenderPartialAsync("~/Views/Partials/path/file.cshtml", Model)

Content Tree Queries

// V8: Umbraco.ContentSingleAtXPath("//siteSettings")
// V17: Model.Content.Root().DescendantsOrSelf<SiteSettings>().FirstOrDefault()
// BETTER: Use a cached service if ISiteSettingsService exists
// Always wrap dropdown reads in try-catch for backward compatibility
try { var val = Model.Content.Value<string[]>("alias")?.FirstOrDefault(); }
catch { var val = Model.Content.Value<string>("alias"); }

ColorPicker Values

// V8 stored WITHOUT # prefix: "e47d51"
// V17 EyeDropper stores WITH # prefix: "#e47d51"
// V8 templates had #@color producing ##e47d51 in v17
// FIX: Always TrimStart('#') when reading from CMS, re-add # in template
var color = (Model.Value<string>("colour") ?? "f1f1f1").TrimStart('#');

MediaPicker3 Single-Pick

// When "multiple": false, use MediaWithCrops (NOT IEnumerable<MediaWithCrops>)
var image = Model.Content.Value<MediaWithCrops>("image");
var url = image?.MediaUrl();

Bootstrap 5 (upgraded from 4)

<!-- V17 now uses Bootstrap 5.3.3 (upgraded from 4.4.1) -->
data-bs-toggle="collapse"   <!-- NOT data-toggle -->
data-bs-target="#id"         <!-- NOT data-target -->
<!-- CSS: ms-*/me-* (not ml-*/mr-*), visually-hidden (not sr-only), g-0 (not no-gutters) -->

Progress Tracking

Stream Agent Status Started Completed Notes
1. Migration Tool migration-tool-dev COMPLETE 2026-02-26 18:50 18:57 Commit 8e384d6 — searches all folders before creating Path B types
2. Calculators calc-dev COMPLETE 2026-02-26 18:50 19:06 Commit ff6173c — API controller, 2 stubs implemented, 5 JS files updated, service fields added
3. LoanBoxes loanbox-dev COMPLETE 2026-02-26 18:50 18:58 Commit 30706dd — 4 modes + dispatcher + 4 new partials + bug fixes
4. Testimonials+News testimonial-news-dev COMPLETE 2026-02-26 18:50 18:58 Commit 599d7f8 — default layout fix + culture/visibility filters in 3 news files
5. Frontend Cleanup cleanup-dev COMPLETE 2026-02-26 19:07 19:10 Commit 65aace9 — 5 deleted, 3 renamed, 8 comments fixed
6. Grid Layout Audit grid-audit-dev COMPLETE 2026-02-26 18:50 18:55 No changes needed — whitelist covers all v8 properties
7. Dedup Investigation dedup-investigator COMPLETE 2026-02-26 19:00 19:09 Report 11 — zero layouts identical, per-DT architecture correct

BlockGrid Hierarchy Requirements (from user)

The v17 BlockGrid must enforce this nesting: 1. Root: Only Row Configs (page templates) and Layouts 2. Inside Layouts: Area Wrappers (one per area in the layout) 3. Inside Area Wrappers: Content Element Types only

specifiedAllowance must be correctly set at each level: - Row Config areas → allow only Layout element types for that datatype - Layout areas → allow only the correct Area Wrapper for that specific area - Area Wrapper areas → allow only the content element types permitted for that datatype+area combination

The backoffice must make sense to the editor — they should see a logical hierarchy, not 297 items in a flat list.

Documentation

Report File Purpose Created By
Report 11 11-grid-dedup-deep-investigation.md Programmatic comparison confirming zero layouts are truly identical across all 13 BlockGrid datatypes. Per-DT architecture validated as correct. dedup-investigator
Report 12 12-grid-architecture-explained.md Full grid architecture documentation with ASCII tree diagrams and backoffice preview. Documents per-datatype design as intentional. Satisfies action item #30. dedup-investigator

ALL STREAMS COMPLETE

Final Branch State

dbl.Progress (feature/migration-review-fixes): Multiple commits, all frontend work complete double-migration-tool (feature/fix-path-ab-duplicates): 2 commits (8e384d6 + 5268fa9)

Completed Since Initial Streams (Feb 27)

  • Phase 4E DONE: 1,142 BS4→BS5 CSS replacements across 159 client CSS files (commit a6a776e)
  • Phase 5E DONE: 4 orphaned Element-suffix views removed (commit 81d4ca6); ~9 remaining are alias-remapped or active
  • Code quality: Obsolete API calls fixed (commit 4ea7268)
  • Component views: All 121 blockgrid + 7 blocklist component views complete
  • Report 19: Full v8→v17 validation report created
  • Bootstrap 5: Fully upgraded — package, templates, components, partials, JS, client CSS all done
  • Phase 5A/5D: Deferred to runtime testing (calculator slider UI + form validation)
  • Phase 4F: Regression testing still pending after all BS5 changes

Previously Completed (Feb 26)

  • P0: Data protection views, DT 1055, alias verification — all resolved
  • P1: 12 page templates created, ~45 component views created, calculator localization done
  • Migration tool: Path A/B duplication fix, 5 commits
  • Grid architecture: AllowAtRoot=false, strict hierarchy enforced

Remaining Work

  • Phase 4F: Visual regression testing of all BS5 changes
  • Phase 5A (DEFERRED): Calculator slider UI — needs runtime testing
  • Phase 5D (DEFERRED): Calculator form validation — needs runtime testing
  • Phase 5F: Test DT 2236 cross-DB validation
  • Phase 5G: Content usage audit
  • Phase 6: NuGet RCL architecture (not started)
  • Phase 7: Final documentation (not started)

Hierarchy Fix Applied: Layout AllowAtRoot changed from true to false in GridConfigurationMigrationService.cs. Strict hierarchy enforced: Row Config -> Layout -> Area Wrapper -> Content.

Additional Fix (Lead)

  • Resolved merge conflict in BootstrapGrid.cshtml lines 213-225 (alias remapping for embed + CTA)
Migration documentation by Double for Progress Credit Union