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 |
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.csto 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.csServices/ICalculatorService.cs,Services/CalculatorService.csViews/Partials/calculators/calculatorIcon.cshtmlViews/Partials/calculators/calculatorInputVarRate.cshtmlViews/Partials/calculators/calculatorLarge.cshtmlViews/Partials/blockgrid/Components/grid_element_calculatorsgrideditor.cshtmlwwwroot/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.cshtmlViews/Partials/news/NewsList.cshtmlViews/Partials/news/topStory.cshtmlViews/Partials/news/topStory5Articles.cshtmlViews/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.cshtml→trustpilotWidget.cshtml - RENAME:
videoPopOut.cshtml→videoPopout.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¶
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¶
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
Dropdown Values (v8 string → v17 JSON array)¶
// 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
AllowAtRootchanged fromtruetofalseinGridConfigurationMigrationService.cs. Strict hierarchy enforced: Row Config -> Layout -> Area Wrapper -> Content.
Additional Fix (Lead)¶
- Resolved merge conflict in
BootstrapGrid.cshtmllines 213-225 (alias remapping for embed + CTA)