Migration Progress Dashboard¶
Date: 2026-02-27 Project: Progress Credit Union -- Umbraco v8 to v17 Migration Single source of truth for all migration progress. Overall Status: ~95% frontend complete. Only Phase 6 (NuGet RCL) and Phase 7 (Final Docs) remain.
Phase Status¶
| Phase | Description | Status | Commits |
|---|---|---|---|
| 1 | P0 Critical Fixes (data protection, DT 1055, alias verification) | DONE | 30706dd, 599d7f8, ff6173c, 65aace9 |
| 2 | MkDocs + Documentation site | DONE | -- |
| 3A | P1: 12 missing page templates | DONE | 11 created, 1 merged into existing |
| 3B | P1: ~45 missing component views | DONE | 10 blockgrid + 4 blocklist views created (121 blockgrid + 7 blocklist total) |
| 3C | P1: Calculator localization (IDictionaryService) | DONE | 6 calculator partials localized |
| 3D | P1: Orphan audit | DONE | 7 "missing" accounted for (3 settings + 3 child + 1 nested) |
| 3E | P1: Video slides (YouTube/Vimeo/internal) | DONE | 3 new views |
| 4A | Bootstrap 5: package upgrade 4.4.1 to 5.3.3 | DONE | 643174b |
| 4B | Bootstrap 5: page templates + site layouts | DONE | 4cfa267 |
| 4C | Bootstrap 5: blockgrid component views | DONE | 7cd8ee8 |
| 4D | Bootstrap 5: other partials + JS files | DONE | f7f697c, 08e9a5d, 7ae1735 (stickyNav fix), bd117a3 (no-gutters fix) |
| 4E | Bootstrap 5: client CSS (163 files, 1,142 patterns) | DONE | a6a776e (1,142 BS4 patterns replaced across 159 files) |
| 5A | Calculator slider UI (jQuery UI range inputs) | DEFERRED | Deferred to runtime testing |
| 5B | LoanBox ISiteSettingsService injection | DONE | Already properly injected, no changes needed |
| 5C | Move hardcoded API keys to appsettings.json | DONE | Mapbox to ProgressSettings:MapboxAccessToken |
| 5D | Calculator form validation (jQuery Validate) | DEFERRED | Deferred to runtime testing |
| 5E | Investigate 13 orphaned "Element" suffix views | DONE | 4 orphaned views removed |
| 5F | Test DT 2236 cleanup (cross-DB check) | LOW PRIORITY | Post-launch |
| 5G | Content usage audit (Report 04 Section 7) | LOW PRIORITY | Post-launch |
| -- | Migration tool: element type duplication fixes | DONE | 09935d2, 164069f, 76a17cf (3 root causes fixed) |
| -- | Code quality: obsolete API fixes | DONE | 4ea7268 |
| 4F | Grid rendering: per-template breakpoints + generic styles | DONE | c8a9f35, 17d1cbd |
| 6 | NuGet RCL Architecture | NOT STARTED | -- |
| 7 | Final Documentation + Client Handover | NOT STARTED | -- |
Build Status¶
- Errors: 0
- Warnings: 95 (all nullable reference warnings in Forms themes -- cosmetic only)
Migration Tool Fixes -- DONE¶
Element type duplication root cause analysis completed (Report 16). Three overlapping code paths were creating duplicate element types. All three fixed:
| Commit | Fix | Root Cause |
|---|---|---|
8e384d6 |
Prevent Path A/B duplicate element types on future runs | Grid config migration created grid_element_* without checking Path A gridElement* |
5268fa9 |
Folder organization for element types (sub-folders per datatype) | Organization improvement |
09935d2 |
Settings editor exclusion + ps-prefix target lookup + case-insensitive SQL | gridSettingsMarginEditor/gridSettingsPaddingEditor incorrectly treated as content types; alias lookup didn't strip "ps" prefix |
164069f |
DefaultGridEditorConverter uses grid_element_ prefix + settings skip |
Content migration fallback (Path 3) created gridElement* duplicates of existing grid_element_* types |
76a17cf |
ps-prefix stripping in FindSourceElementTypeForGridEditorAsync |
SOURCE DB lookup: psFancyVideo now correctly resolves to fancyVideo. This is the primary fix -- avoids execution order problem (Step 6.5 before Step 6.6) |
Result: ~455 to ~430 element types on fresh migration run. Eliminates: 9 gridElement* duplicates, 4 settings editor types (2 pairs), grid_element_psfancyvideo duplicate of fancyVideo.
Bootstrap 5 Upgrade -- ALL PHASES DONE¶
Bootstrap 4.4.1 to 5.3.3 upgrade across all views, partials, JS files, and CSS files.
| Commit | Phase | Scope |
|---|---|---|
643174b |
4A | Package: Bootstrap 5.3.3 CSS + JS bundle, Popper 2.x |
4cfa267 |
4B | Page templates + site layouts: data-* to data-bs-*, ml-*/mr-* to ms-*/me-*, sr-only to visually-hidden, etc. |
7cd8ee8 |
4C | Blockgrid component views: data attributes + utility class renames |
f7f697c |
4D | Other partials: blocklist, calculators, loanboxes, news, forms, help, social |
08e9a5d |
4D | JS files + remaining partials |
7ae1735 |
4D | Fix: stickyNav.cshtml data-toggle to data-bs-toggle (HTML/JS mismatch bug) |
bd117a3 |
4D | Fix: no-gutters to g-0 class rename |
a6a776e |
4E | CSS: 1,142 BS4 patterns replaced across 159 client CSS files |
CSS Pattern Replacement Summary (Phase 4E)¶
| Pattern | Replacement | Count |
|---|---|---|
.sr-only |
.visually-hidden |
158 |
.form-group |
.mb-3 |
389 |
.badge-primary |
.bg-primary |
397 |
.col-xs-* |
.col-* |
76 |
.text-left/.text-right |
.text-start/.text-end |
35 |
.pl-N/.pr-N |
.ps-N/.pe-N |
67 |
no-gutters |
g-0 |
(in templates) |
| Total | 1,142 |
Component Fix History (Streams 1-7)¶
| Stream | Commit | Scope |
|---|---|---|
| 1 | 30706dd |
LoanBoxes: dispatcher + 4 display modes (Tabs, Boxes, FlipCards, Accordion) + MediaPicker fix |
| 2 | 599d7f8 |
Testimonials: default layout fix (col-lg-4 to col-md-12) + image suppression + read-more link |
| 3 | 599d7f8 |
News: culture/visibility filters for NewsList, topStory, topStory5Articles |
| 4 | ff6173c |
Calculators: API controller, calculatorIcon + calculatorInputVarRate stubs implemented, JS endpoints, service fields |
| 5 | 65aace9 |
Cleanup: remove Path B stubs, rename case-sensitive files, fix comments |
| 6 | 8e384d6 |
Migration tool: prevent Path A/B duplicate element types |
| 7 | 5268fa9 |
Migration tool: folder organization for element types |
Component Readiness¶
| Component | Status | Notes |
|---|---|---|
| News | 100% | Culture/visibility filters, all sub-partials complete |
| Grid Layouts | 100% | Whitelist confirmed complete |
| Testimonials | 100% | Default layout, image suppression, read-more link |
| LoanBoxes | 100% | All 4 modes. ISiteSettingsService already properly injected. |
| Calculators | 90% | Localized, API controller done. P2: slider UI + form validation deferred to runtime testing |
| Data Protection | 100% | All 5 components working, 3 camelCase duplicates removed |
| Video Slides | 100% | YouTube, Vimeo, internal video |
| Announcement/Spotlight | 100% | Scroll + spotlight grid verified |
View Counts¶
| Category | Count |
|---|---|
| Page templates | 45 |
| BlockGrid component views | 121 |
| BlockList component views | 7 |
| SiteLayout partials | 18 |
| Client CSS files (BS5-updated) | 163 |
| JavaScript files (BS5-updated) | 60 |
Grid Rendering Fixes -- Matching V8 HTML Structure¶
Commits: c8a9f35, 17d1cbd
Problem: The v17 grid rendering produced different HTML markup than v8, breaking existing CSS selectors. V8 had 9 different grid renderers, each with specific Bootstrap breakpoints and CSS classes. V17 had incorrectly used col-md-* for all templates.
Root cause analysis: Each v8 page template used a specific grid renderer:
- homePageGrid.cshtml -- col-xl-* with merged area classes
- StandardPageGridBootStrapNew.cshtml -- col-xl-* with merged area classes
- StandardPageGridBootStrap.cshtml -- col-md-* with separate area inner div
- footerGrid.cshtml -- col-lg-* with special footer classes
- bottomGrid.cshtml -- col-lg-* with merged area classes
- ContactUsGrid.cshtml -- sections col-xl-*, areas col-md-*
Fixes applied:
- Per-template breakpoints (
c8a9f35): Set correctColumnBreakpointfor each template to match its v8 grid renderer: - home, homeGrid, homeFullWidthSection --
"xl"(was"md") - Faq, Faq1, standardPageNew, StandardPageNewNoHeaderNoFooter, StandardPageThirdParty, TokenAuthentication, TestimonialsBlock --
"xl"(was"md") - footerDefault --
"lg"(was"md") - homeFullWidthSection bottomGrid --
"lg"withnoPaddingclasses - standardPage, CustomerOnlyPage1, error, testimonials, standardPageWow, standardPageWithImageText -- kept
"md"(correct) -
Added
MergeAreaClasses=truefor all templates whose v8 renderer usedRenderElementAttributesCol -
Generic BuildStyleAttribute (
17d1cbd): Added generic fallback that iterates ALL settings properties as CSS styles (matching v8's fully generic approach). Previously only handled background-color, background-image, padding, and margin. -
Multi-section wrapper div removed (
17d1cbd): Removed extra<div>wrapper inside multi-section columns in_MultiSectionGrid.cshtml. V8 rendered rows as direct children of the section column. -
ContactUs section breakpoint (
17d1cbd): FixedSectionBreakpointfrom"lg"to"xl"to match v8ContactUsGridwhich usedorder-xl-*.
Files changed: 12 page templates + BlockGridExtensions.cs + _MultiSectionGrid.cshtml
Remaining known structural differences (acceptable):
- V17 BootstrapGrid always wraps in <div class="umb-grid"><div class="grid-section"> -- v8 didn't have these wrappers for some renderers (homePageGrid, StandardPageGridBootStrap, etc.). Impact: LOW -- these are outermost wrappers.
- V17 BuildHtmlAttributes uses explicit property mapping for config attributes (class, id, data-aos-*). If v8 had exotic config properties, they'd be lost. Impact: LOW -- common properties all handled.
Remaining Work¶
Deferred to Runtime Testing (P2)¶
- 5A: Calculator slider UI -- jQuery UI range inputs instead of plain number inputs
- 5D: Calculator form validation -- jQuery Validate with localization support
Low Priority (P3, post-launch)¶
- 5F: Test DT 2236 cleanup -- cross-DB validation needed
- 5G: Content usage audit -- Report 04 Section 7 (element-type-per-content breakdown)
- Settings deduplication -- DEFERRED (29 potential savings, GUID remapping risk too high)
Future Phases¶
- Phase 6: NuGet RCL Architecture -- move shared code to Razor Class Library packages
- Phase 7: Final Documentation -- file-by-file migration map, client handover docs
Reports Index¶
| # | Report | Description | Status |
|---|---|---|---|
| 00 | 00-SUMMARY.md |
Master summary with all phase status and action items | Complete |
| 01 | 01-views-migration-audit.md |
V8 to V17 views comparison (~95% complete, 121 blockgrid + 7 blocklist component views) | Complete |
| 02 | 02-duplicate-views-analysis.md |
Data protection views + naming duplicates analysis | Complete |
| 03 | 03-v8-grid-baseline.md |
Immutable v8 reference: 14 datatypes, 78 editor aliases | Complete |
| 04 | 04-v17-element-type-audit.md |
~430 element types (455 before dedup fix): in-use, configured, orphaned | Complete |
| 05 | 05-grid-deduplication-analysis.md |
Per-datatype architecture verification (zero identical layouts) | Complete |
| 06 | 06-view-element-crossref.md |
View-to-element-type matching (121 views, orphan audit) | Complete |
| 07 | 07-deep-dive-analysis.md |
Component deep-dive: LoanBoxes, Calculators, Testimonials, News | Complete |
| 08 | 08-fix-plan-frontend.md |
Fix plan: frontend naming conventions | Complete |
| 09 | 09-fix-plan-doctypes.md |
Fix plan: document types and datatypes | Complete |
| 10 | 10-fix-plan-logic.md |
Fix plan: component rendering logic | Complete |
| 11 | 11-grid-dedup-deep-investigation.md |
Grid dedup verification: zero identical layouts confirmed | Complete |
| 12 | 12-grid-architecture-explained.md |
4-level BlockGrid hierarchy architecture documentation | Complete |
| 13 | 13-grid-migration-visual-plan.md |
BlockGrid content migration visual plan | Complete |
| 14 | 14-element-audit.md |
Element type files audit (4 orphaned removed) | Complete |
| 15 | 15-bootstrap5-upgrade.md |
Bootstrap 4.4.1 to 5.3.3 upgrade -- ALL PHASES DONE | Complete |
| 16 | 16-element-type-duplication-analysis.md |
3 root causes, 3 fix commits, all FIXED | Complete |
| 17 | 17-css-bs4-audit.md |
Client CSS: 1,142 patterns replaced across 159/163 files | Complete |
| 18 | 18-js-bs5-audit.md |
JavaScript BS5 audit: stickyNav fixed, tooltip deferred | Complete |
| 19 | 19-full-migration-validation.md |
Full file-by-file v8 to v17 validation (~95% coverage) | Complete |
Key Architecture¶
4-Level BlockGrid Hierarchy¶
Row Config to Layout to Area Wrapper to Content
AllowAtRoot = false(strict enforcement)- Area Wrappers preserve v8 cell-level styles (background, padding, margins)
- Frontend:
BootstrapGrid.cshtml+_MultiSectionGrid.cshtml
Element Type Duplication (fixed)¶
Three code paths were creating element types:
1. Content Type Migration (Step 6.6) -- copies v8 originals (~150 types)
2. Grid Config Migration (Step 6.5) -- creates grid_element_* (29 types)
3. Content Migration Fallback (Step 7) -- creates gridElement* (9 types)
Root cause: Step 6.5 runs before Step 6.6, so target DB lookups fail. Fixed by source DB lookup (commits 09935d2, 164069f, 76a17cf).
Shared Codebase¶
The v8 codebase is shared across MULTIPLE credit union projects/databases. Always migrate everything. Cleanup only from destination DB after cross-validating all clients.
Environment¶
| Resource | Location |
|---|---|
| V17 Umbraco | https://psv17.double.pt |
| V8 Database | cb-sql.double.pt,7071 / progresscu.ie |
| V17 Project | C:\repos\progress\dbl.Progress |
| V8 Source | C:\repos\progress\psCreditUnion (READ-ONLY) |
| Migration Tool | C:\repos\progress\double-migration-tool |
| Documentation | C:\repos\progress\docs\migration-review\ |
| MkDocs Config | C:\repos\progress\docs\mkdocs.yml |
| MkDocs Site | http://127.0.0.1:8001/ |
Plans Reference¶
| Plan | File | Status |
|---|---|---|
| Revised Master Plan | REVISED_PLAN.md |
Active |
| Migration Orchestrator App | PLAN-MIGRATION-ORCHESTRATOR.md |
Planned |
| Migration Performance (<10min) | PLAN-MIGRATION-PERFORMANCE.md |
Planned |
| BlockPreview + ModelsBuilder | PLAN-BLOCKPREVIEW-MODELSBUILDER.md |
Planned |