V17 Element Type Audit Report¶
Generated: 2026-02-26, updated 2026-02-27 Source: v17 Management API (
_v17-api-results.json) + v8 Grid Baseline (03-v8-grid-baseline.md) Purpose: Full audit of all element types created by the v8-to-v17 grid migration.
Current Status: DUPLICATION FIXED, ARCHITECTURE VERIFIED¶
- Migration tool duplication bug: FIXED (3 commits:
09935d2,164069f,76a17cf). Fresh migration runs produce ~430 element types instead of ~455. - Layout/area wrapper deduplication: Confirmed IMPOSSIBLE (Report 11). Zero identical layouts across datatypes. Per-datatype architecture is correct.
- Settings deduplication: DEFERRED. 29 potential savings, but GUID remapping risk outweighs cosmetic benefit.
- Content usage data: Available in
_content-usage.json-- 164 in-use, 217 configured, 74 orphaned.
Root Causes Fixed¶
Three overlapping code paths were creating duplicate element types:
| # | Code Path | Fix Commit | What Changed |
|---|---|---|---|
| 1 | Settings editor exclusion | 09935d2 |
gridSettingsMarginEditor/gridSettingsPaddingEditor excluded from element type creation |
| 2 | ps-prefix and alias normalization | 09935d2, 76a17cf |
Strip "ps" prefix, case-insensitive matching in both source and target DB lookups |
| 3 | DefaultGridEditorConverter | 164069f |
Uses grid_element_ prefix instead of gridElement; checks for existing types before creating |
1. Summary Statistics¶
| Metric | Count |
|---|---|
| Total document type tree nodes | 622 |
| Element types | 455 |
| Regular document types | 103 |
| Folders | 64 |
| Distinct v8 datatype IDs referenced | 14 |
Category Breakdown¶
| Category | Count | Description |
|---|---|---|
layout |
62 | Row layout element types (one per row config per datatype) |
areawrapper |
134 | Area wrapper element types (one per area per row per datatype) |
rowconfig |
26 | Page-level template/section configurations |
rowsettings |
14 | Row-level settings (1 per datatype) |
cellsettings |
14 | Cell-level settings (1 per datatype) |
blocksettings |
14 | Block-level settings (1 per datatype) |
builtin |
5 | Shared built-in grid element types |
other |
186 | Non-grid element types (see Section 4) |
| Total | 455 |
V8 DataType IDs Mapped¶
All 14 v8 Umbraco.Grid datatypes were migrated:
| V8 ID | V8 Name |
|---|---|
| 1055 | Article Controls - article Grid |
| 1093 | Contact us Grid |
| 1127 | Footer Grid |
| 1151 | Homepage Grid |
| 1257 | Standard Page Grid |
| 1459 | Full Width Grid Bottom Controls |
| 1534 | Animated Grid |
| 1683 | articleGrid |
| 1709 | Cookie Grid |
| 1736 | Full width Grid |
| 1780 | services Grid |
| 1798 | Sp with Nav Left Grid |
| 1803 | Standard Page Full Width |
| 2236 | test data type |
2. Grid-Generated Element Types Per V8 DataType ID¶
Each v8 grid datatype produces a set of element types: layouts, area wrappers, row configs, and per-datatype settings (row, cell, block). Below is the full breakdown.
2.1. ID 1055 -- Article Controls Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 3 | grid_1055_layout_fullwidth, grid_1055_layout_half, grid_1055_layout_thirds |
| areawrapper | 7 | _fullwidth_0, _half_0, _half_1, _thirds_0, _thirds_1, _thirds_2 (prefix: grid_1055_areawrapper) |
| rowconfig | 3 | grid_1055_rowconfig_1ColumnLayout, grid_1055_rowconfig_leftNav, grid_1055_rowconfig_rightNav |
| rowsettings | 1 | grid_1055_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1055_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1055_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 16 |
2.2. ID 1093 -- Contact us Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 2 | grid_1093_layout_fullwidth, grid_1093_layout_twotwo |
| areawrapper | 3 | _fullwidth_0, _twotwo_0, _twotwo_1 |
| rowconfig | 3 | grid_1093_rowconfig_fullWidth, grid_1093_rowconfig_leftNav, grid_1093_rowconfig_rightNav |
| rowsettings | 1 | grid_1093_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1093_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1093_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 11 |
2.3. ID 1127 -- Footer Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 6 | grid_1127_layout_fullwidth, grid_1127_layout_third, grid_1127_layout_sixfiveone, grid_1127_layout_ninethree, grid_1127_layout_fourfivethree, grid_1127_layout_sixths |
| areawrapper | 16 | _fullwidth_0, _third_0..2, _sixfiveone_0..2, _ninethree_0..1, _fourfivethree_0..2, _sixths_0..5 |
| rowconfig | 1 | grid_1127_rowconfig_fullwidth |
| rowsettings | 1 | grid_1127_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1127_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1127_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 26 |
2.4. ID 1151 -- Homepage Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 4 | grid_1151_layout_fullwidth, grid_1151_layout_half, grid_1151_layout_thirds, grid_1151_layout_twothirds |
| areawrapper | 8 | _fullwidth_0, _half_0..1, _thirds_0..2, _twothirds_0..1 |
| rowconfig | 1 | grid_1151_rowconfig_1ColumnLayout |
| rowsettings | 1 | grid_1151_rowsettings -- props: class, elementId, animationStyle, animationOffset, animationDelay, animationDuration, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1151_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1151_blocksettings -- props: class, elementId, animationStyle, animationOffset, animationDelay, animationDuration, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 16 |
2.5. ID 1257 -- Standard Page Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 17 | fullwidth, half, thirds, sidebar, leftnav, rightsidebar, fivesevens, fullthirdsthirds, iconcalc, fours, textbuttonblock, membershipbenefits, faqhome, services, twofourtwofour, loanapplicationprocess, cardrawtext |
| areawrapper | 35 | Multiple areas across 17 layouts (0-indexed up to 6 for fullthirdsthirds) |
| rowconfig | 3 | grid_1257_rowconfig_1ColumnLayout, grid_1257_rowconfig_leftsidebar, grid_1257_rowconfig_rightsidebar |
| rowsettings | 1 | grid_1257_rowsettings -- props: class, elementId, animationStyle, animationOffset, animationDelay, animationDuration, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1257_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1257_blocksettings -- props: class, elementId, animationStyle, animationOffset, animationDelay, animationDuration, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 58 |
2.6. ID 1459 -- Full Width Grid Bottom Controls¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 2 | grid_1459_layout_fullwidth, grid_1459_layout_leftnav |
| areawrapper | 3 | _fullwidth_0, _leftnav_0, _leftnav_1 |
| rowconfig | 2 | grid_1459_rowconfig_1ColumnLayout, grid_1459_rowconfig_2ColumnLayout |
| rowsettings | 1 | grid_1459_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1459_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1459_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 10 |
2.7. ID 1534 -- Animated Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 3 | grid_1534_layout_fullwidth, grid_1534_layout_half, grid_1534_layout_thirds |
| areawrapper | 6 | _fullwidth_0, _half_0..1, _thirds_0..2 |
| rowconfig | 3 | grid_1534_rowconfig_ (unnamed), grid_1534_rowconfig_1ColumnLayout, grid_1534_rowconfig_2ColumnLayout |
| rowsettings | 1 | grid_1534_rowsettings -- props: class, elementId, animationStyle, animationOffset, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1534_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1534_blocksettings -- props: class, elementId, animationStyle, animationOffset, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 15 |
2.8. ID 1683 -- articleGrid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 3 | grid_1683_layout_full, grid_1683_layout_half, grid_1683_layout_thirds |
| areawrapper | 5 | _full_0, _half_0..1, _thirds_0..2 |
| rowconfig | 1 | grid_1683_rowconfig_2ColumnLayout |
| rowsettings | 1 | grid_1683_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1683_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1683_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 12 |
2.9. ID 1709 -- Cookie Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 4 | grid_1709_layout_full, grid_1709_layout_half, grid_1709_layout_thirds, grid_1709_layout_leftnav |
| areawrapper | 8 | _full_0, _half_0..1, _thirds_0..2, _leftnav_0..1 |
| rowconfig | 1 | grid_1709_rowconfig_1ColumnLayout |
| rowsettings | 1 | grid_1709_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1709_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1709_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 16 |
2.10. ID 1736 -- Full width Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 3 | grid_1736_layout_fullwidth, grid_1736_layout_half, grid_1736_layout_thirds |
| areawrapper | 5 | _fullwidth_0, _half_0..1, _thirds_0..2 |
| rowconfig | 1 | grid_1736_rowconfig_1ColumnLayout |
| rowsettings | 1 | grid_1736_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1736_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1736_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 12 |
2.11. ID 1780 -- services Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 2 | grid_1780_layout_full, grid_1780_layout_sidebar |
| areawrapper | 2 | _full_0, _sidebar_0 |
| rowconfig | 1 | grid_1780_rowconfig_ (unnamed) |
| rowsettings | 1 | grid_1780_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1780_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1780_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 8 |
2.12. ID 1798 -- Sp with Nav Left Grid¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 4 | grid_1798_layout_full, grid_1798_layout_half, grid_1798_layout_thirds (+ grid_1798_layout_full for "Full Width" mapped as full) |
| areawrapper | 5 | _fullwidth_0, _half_0..1, _thirds_0..2 |
| rowconfig | 1 | grid_1798_rowconfig_ (unnamed) |
| rowsettings | 1 | grid_1798_rowsettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible |
| cellsettings | 1 | grid_1798_cellsettings -- props: backgroundImage, backgroundColor, padding, margin |
| blocksettings | 1 | grid_1798_blocksettings -- props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible, hidden |
| Subtotal | 12 |
Note: The layout count from the log is 3 (full, half, thirds) with the "Full Width" name mapped to alias full. The areawrapper list shows fullwidth in the alias, so there may be a slight naming discrepancy between the layout alias and the areawrapper alias prefix.
2.13. ID 1803 -- Standard Page Full Width¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 8 | full, half, thirds, sidebar, careerfull, careerhalf, twofivefive, cookieconsent |
| areawrapper | 13 | Multiple areas across 8 layouts |
| rowconfig | 3 | grid_1803_rowconfig_1ColumnLayout, grid_1803_rowconfig_leftColumn, grid_1803_rowconfig_rightColumn |
| rowsettings | 1 | grid_1803_rowsettings -- props: class, setABackgroundImage, backgroundColor, isVisible (NOTE: no padding, margin) |
| cellsettings | 1 | grid_1803_cellsettings -- props: backgroundImage, backgroundColor (NOTE: no padding, margin) |
| blocksettings | 1 | grid_1803_blocksettings -- props: class, setABackgroundImage, backgroundColor, isVisible, hidden (NOTE: no padding, margin) |
| Subtotal | 27 |
2.14. ID 2236 -- test data type¶
| Category | Count | Element Type Aliases |
|---|---|---|
| layout | 2 | grid_2236_layout_headline, grid_2236_layout_article |
| areawrapper | 3 | _headline_0, _article_0, _article_1 |
| rowconfig | 2 | grid_2236_rowconfig_1ColumnLayout, grid_2236_rowconfig_2ColumnLayout |
| rowsettings | 1 | grid_2236_rowsettings -- props: class, setABackgroundImage, isVisible (NOTE: minimal -- no backgroundColor, padding, margin) |
| cellsettings | 1 | grid_2236_cellsettings -- props: backgroundImage (NOTE: minimal -- no backgroundColor, padding, margin) |
| blocksettings | 1 | grid_2236_blocksettings -- props: class, setABackgroundImage, isVisible, hidden (NOTE: minimal) |
| Subtotal | 10 |
3. Built-in Element Types (5)¶
These 5 element types are shared across ALL grid datatypes. They represent v8's built-in grid editors:
| Alias | Name | Properties |
|---|---|---|
grid_builtin_embed |
Embedded Content | content |
grid_builtin_media |
Media | content |
grid_builtin_quote |
Quote | content |
grid_builtin_rte |
Rich Text Editor | content |
grid_builtin_submenu |
SubMenu | content |
All have a single content property. These are NOT duplicated per datatype -- they are correctly shared.
4. "Other" Element Types (186)¶
These 186 element types are NOT grid-generated (no grid_NNNN_ prefix, no grid_builtin_ prefix). They fall into four sub-categories:
4.1. Pre-Existing V8 Document Types Migrated as Element Types (140)¶
These were v8 document types (typically used in Nested Content, DTGE, or as element types) that were migrated as v17 element types. They retain their original aliases.
| Alias | Name | Property Count |
|---|---|---|
blockListCallToAction |
Block List Call to Action | 5 |
blockListCallToActionSettings |
Block List Call to Action settings | 1 |
headerContactSetting |
header contact settings | 0 |
headerContact |
HeaderContact | 1 |
headerFullSettings |
header full settings | 1 |
headerFull |
HeaderFull | 6 |
headerNew |
Header New | 4 |
headerSettingsNew |
Header Settings new | 7 |
headerNews |
Header News | 2 |
headerNewsSettings |
Header News Settings | 4 |
header |
Header | 3 |
headerSettings |
header settings | 1 |
mainCalculatorControls |
Main Calculator Controls | 1 |
spotlightControl |
spotlight Control | 1 |
staffMembersControl |
Staff Members Control | 1 |
styledListControl |
Styled List Control | 1 |
airRange |
AIR range | 7 |
calculatorControls |
Calculator Controls | 8 |
calculatorItem |
Calculator Item | 19 |
calculatorItemInput |
Calculator Item (Input) | 17 |
calculatorInputVarRate |
Calculator Item (Input) Var Rate | 18 |
faqItems |
Faq Items | 2 |
faqPickerItem |
Faq picker Item | 1 |
galleryItem |
Gallery Item | 2 |
commonBondItem |
Common Bond Item | 2 |
InternalVideoSlide |
Internal Video Slide | 10 |
pictureSlide |
Picture Slide | 10 |
pictureSlideTextBox |
Picture Slide with Textbox | 11 |
VimeoSlide |
Vimeo Slide | 10 |
youTubeSlide |
You tube Slide | 10 |
iconListControl |
Icon list control | 1 |
iconListItem |
icon list item | 3 |
loanBoxContactItem |
Loan Box Contact Item | 4 |
loanBoxItem |
Loan Box Item | 11 |
secondParagraphControl |
Second Paragraph Control | 1 |
secondParagraphItem |
Second paragraph Item | 3 |
newsCategoryItem |
News Category Item | 3 |
spotlightControls |
Spotlight Controls | 2 |
spotlightItem |
Spotlight Item | 8 |
spotlightGridControls |
Spotlight Grid Controls | 2 |
SpotlightGridItem |
Spotlight Grid Item | 7 |
addressItem |
address Item | 9 |
iconLinkItem |
Icon Link Item | 2 |
LinkPicker |
LinkPicker | 1 |
newsWidget |
news Widget | 1 |
sliderItemMp4 |
slider item mp4 | 2 |
creditUnionDetails |
Credit Union Details | 18 |
socialLinkItem |
Social Link Item | 4 |
anchor |
anchor | 1 |
barChart |
bar chart | 4 |
careerWidgetControl |
Career Widget Control | 4 |
careerWidgetListControl |
Career Widget List Control | 3 |
donutChart |
Donut Chart | 4 |
fancyVideo |
FancyVideo | 2 |
footerLinks |
Footer Links | 2 |
galleryImageItem |
gallery Image Item | 1 |
googleMap |
Google Map | 8 |
homepageSpotlight |
homepage Spotlight | 7 |
sliderItem |
Slider Item | 5 |
stripedList |
striped List | 1 |
styledListItem |
Styled List Item | 3 |
videoBreakoutItem |
Video Breakout Item | 4 |
sliderItemYoutube |
You Tube Slide | 7 |
accordionItem |
Accordion Item | 3 |
accordionControls |
AccordionControls | 1 |
announcementControls |
announcement Controls | 3 |
announcementItem |
announcement item | 9 |
announcementItemScroll |
announcement item scroll | 9 |
announcementItemScrollControls |
announcement Item Scroll Controls | 3 |
accordionButtonItem |
Accordion Button Item | 4 |
accordionButtonItemMain |
Accordion Button Item Main | 6 |
accordionButtonMain |
Accordion Button Main | 1 |
buttonModal |
Button Modal | 5 |
buttonWidgetControl |
Button Widget Control | 2 |
cardItem |
Card Item | 8 |
cardGridControls |
Card Grid Controls | 2 |
cardGridItem |
Card Grid Item | 12 |
barChartColourPickerItem |
Bar Chart Colour Picker Item | 1 |
barChartColours |
Bar Chart Colours | 1 |
barChartItem |
Bar Chart Item | 4 |
donutChartItem |
Donut Chart Item | 4 |
donutChartList |
Donut Chart List | 7 |
comparsionTable |
Comparsion Table | 1 |
contactUsWidget |
Contact Us Widget | 3 |
counter |
counter | 8 |
cTAItem |
CTA Item | 5 |
ctaCurves |
ctaCurves | 10 |
ctaText |
ctaText | 9 |
faqControls |
faq Controls | 2 |
fAQItem |
FAQ Item | 3 |
faqWithSchema |
Faq with Schema | 4 |
faqWithSchemaList |
Faq with Schema List | 1 |
featureControls |
Feature Controls | 1 |
featureItem |
Feature Item | 7 |
flipCardControls |
Flip Card Controls | 3 |
flipCardItem |
Flip Card Item | 5 |
heroItem |
Hero Item | 10 |
iconListOptContactInfoControl |
icon list opt contact info Control | 1 |
iconListOptContactInfoItem |
icon list opt contact info item | 6 |
imageWithLink |
Image With Link | 3 |
imageGalleryControl |
Image Gallery Control | 2 |
imageGalleryItem |
Image Gallery Item | 1 |
footerLinkList |
Footer Link List | 1 |
footerListControl |
Footer List Control | 2 |
imageListControl |
Image List Control | 1 |
imageListItem |
Image List Item | 2 |
linkListControl |
Link List Control | 1 |
linkListItem |
Link List Item | 3 |
numberedListControl |
Numbered List Control | 1 |
numberedListItem |
Numbered List Item | 3 |
stripedListControl |
Striped List Control | 2 |
stripedListItem |
Striped List Item | 2 |
loanInputCTA |
Loan Input CTA | 8 |
loanBoxWidgetItem |
Loan Box Widget Item | 11 |
LoanBoxWidgetItemMain |
Loan Box Widget Item Main | 4 |
mainLoanBoxWidget |
Main Loan Box Widget | 1 |
loginStatusWidget |
Login Status Widget | 1 |
loginWidget |
LoginWidget | 1 |
parallaxImageItem |
Parallax Image Item | 9 |
qrCodeItem |
Qr Code Item | 2 |
quickLinkDropDownControl |
Quick Link Drop Down Control | 5 |
releaseNotesWidget |
ReleaseNotesWidget | 2 |
gridinternalvideoslide |
Internal Video Slide | 11 |
PictureSlideGrid |
Picture Slide | 10 |
gridslider |
Slider | 13 |
splitPictureSlider |
Split Picture Slider | 10 |
textSlide |
Text Slide | 10 |
gridVimeoSlide |
Vimeo Slide Grid | 11 |
youTubeSlideGrid |
Youtube Slide Grid | 11 |
facebookControls |
Facebook Controls | 3 |
instagramControls |
Instagram Controls | 1 |
twitterControls |
Twitter Controls | 4 |
staffMemberControl |
Staff Member Control | 1 |
staffMemberItem |
Staff Member Item | 3 |
coOrdinate |
CoOrdinate | 4 |
stickyNav |
StickyNav | 1 |
testimonialCardItem |
testimonial Card Item | 7 |
trustpilotWidget |
TrustpilotWidget | 2 |
youTubeControls |
You Tube Controls | 1 |
audioTagElement |
Audio Tag Element | 1 |
headingItem |
Heading Item | 2 |
videoFullWidth |
Video Full Width | 5 |
videoPopout |
Video Popout | 2 |
4.2. Grid Element Types -- Path B (grid_element_ prefix, 34)¶
These were created by the migration tool's Path B -- the grid editor had NO matching cmsContentType in the v8 source, so the tool created a new element type with a grid_element_ prefix and a single content property.
| Alias | Name | Props |
|---|---|---|
grid_element_calculatorsgrideditor |
Calculators Grid Editor | content |
grid_element_cardcontrol |
Card Control | content |
grid_element_faq_accordion_home |
Faq Accordion Home | content |
grid_element_gesocialfeeds |
Ge Social Feeds | content |
grid_element_globaladdresscompletegrideditor |
Global Address | content |
grid_element_gridsettingsmargineditor |
Grid Settings Margin Editor | content |
grid_element_gridsettingspaddingeditor |
Grid Settings Padding Editor | content |
grid_element_largegooglemap |
Large Google Map | content |
grid_element_largeleafletmap |
Large Leaf Let Map | content |
grid_element_loanboxescompletegrideditor |
Loan Boxes Complete Grid Editor | content |
grid_element_newscompletegrideditor |
News Complete Grid Editor | content |
grid_element_psdataprotectiondpo |
Ps Data Protection DPO | content |
grid_element_psdataprotectionname |
Ps Data Protection Name | content |
grid_element_psdataprotectionspecificstatements |
Ps Data Protection Specific Statements | content |
grid_element_psdataprotectionsummarytable |
Ps Data Protection Summary Table | content |
grid_element_psdataprotectionweare |
Ps Data Protection We Are | content |
grid_element_psfancyvideo |
Ps Fancy Video | content |
grid_element_psstyledheading |
Ps Styled Heading | content |
grid_element_services_list |
Services List | content |
grid_element_services_list_image |
Services List Image | content |
grid_element_socialfooter |
Social Footer | content |
grid_element_stickysocial |
Sticky Social | content |
grid_element_testimonial |
Testimonial | content |
grid_element_testimonialcompletegrideditor |
Testimonial Complete Grid Editor | content |
grid_element_testimonialcontrol |
Testimonial Control | content |
grid_element_testimoniallist |
Testimonial List | content |
grid_element_testimonials |
Testimonials | content |
grid_element_testimonialsgrideditor |
Testimonials Grid Editor | content |
grid_element_twitter |
content |
Count: 29
4.3. Grid Element Types -- Path A (gridElement prefix, 9)¶
These were created by the migration tool's Path A -- the grid editor DID have a matching cmsContentType in the v8 source. The tool created a gridElement prefixed element type with a content property. This produces duplicates with some Path B types.
| Alias | Name | Props |
|---|---|---|
gridElementGridsettingsmargineditor |
Grid Element (gridSettingsMarginEditor) | content |
gridElementGridsettingspaddingeditor |
Grid Element (gridSettingsPaddingEditor) | content |
gridElementLargegooglemap |
Grid Element (LargeGoogleMap) | content |
gridElementPsdataprotectiondpo |
Grid Element (psDataProtectionDPO) | content |
gridElementPsdataprotectionname |
Grid Element (psDataProtectionName) | content |
gridElementPsdataprotectionsummarytable |
Grid Element (psDataProtectionSummaryTable) | content |
gridElementPsdataprotectionweare |
Grid Element (psDataProtectionWeAre) | content |
gridElementSocialfooter |
Grid Element (SocialFooter) | content |
gridElementStickysocial |
Grid Element (stickySocial) | content |
Count: 9
4.4. Manually Created Migration Element Types (5)¶
These element types were manually created during migration for editors that needed special handling:
| Alias | Name | Props |
|---|---|---|
cookiesElement |
Cookies Element | (none) |
loginElement |
Login Element | (none) |
loginStatusElement |
Login Status Element | (none) |
registerElement |
Register Element | (none) |
umbracoFormElement |
Umbraco Form Element | FormGuid, FormTheme, ExcludeScripts |
Count: 5
4.5. Verification¶
- Pre-existing v8 types: 140 (approx -- includes headers, calculators, sliders, spotlights, etc.)
- Path B
grid_element_: 29 - Path A
gridElement: 9 - Manual migration: 5
- Remaining accounted for: 3 (headingItem, videoFullWidth, videoPopout -- pre-existing types also used as grid editors)
- Total other: 186 (verified)
5. Duplicate Element Type Pairs -- FIXED¶
The following 9 duplicate pairs existed in the original migration. The migration tool has been fixed (commits 09935d2, 164069f, 76a17cf) so fresh runs no longer produce these duplicates.
Original 9 Duplicate Pairs (Reference)¶
| # | Path B (grid_element_) |
Path A (gridElement) |
|---|---|---|
| 1 | grid_element_gridsettingsmargineditor |
gridElementGridsettingsmargineditor |
| 2 | grid_element_gridsettingspaddingeditor |
gridElementGridsettingspaddingeditor |
| 3 | grid_element_largegooglemap |
gridElementLargegooglemap |
| 4 | grid_element_psdataprotectiondpo |
gridElementPsdataprotectiondpo |
| 5 | grid_element_psdataprotectionname |
gridElementPsdataprotectionname |
| 6 | grid_element_psdataprotectionsummarytable |
gridElementPsdataprotectionsummarytable |
| 7 | grid_element_psdataprotectionweare |
gridElementPsdataprotectionweare |
| 8 | grid_element_socialfooter |
gridElementSocialfooter |
| 9 | grid_element_stickysocial |
gridElementStickysocial |
Path B Types with NO Path A Duplicate (20)¶
These grid_element_ types do NOT have a corresponding gridElement version. They exist as singletons:
| Alias | Name |
|---|---|
grid_element_calculatorsgrideditor |
Calculators Grid Editor |
grid_element_cardcontrol |
Card Control |
grid_element_faq_accordion_home |
Faq Accordion Home |
grid_element_gesocialfeeds |
Ge Social Feeds |
grid_element_globaladdresscompletegrideditor |
Global Address |
grid_element_largeleafletmap |
Large Leaf Let Map |
grid_element_loanboxescompletegrideditor |
Loan Boxes Complete Grid Editor |
grid_element_newscompletegrideditor |
News Complete Grid Editor |
grid_element_psdataprotectionspecificstatements |
Ps Data Protection Specific Statements |
grid_element_psfancyvideo |
Ps Fancy Video |
grid_element_psstyledheading |
Ps Styled Heading |
grid_element_services_list |
Services List |
grid_element_services_list_image |
Services List Image |
grid_element_testimonial |
Testimonial |
grid_element_testimonialcompletegrideditor |
Testimonial Complete Grid Editor |
grid_element_testimonialcontrol |
Testimonial Control |
grid_element_testimoniallist |
Testimonial List |
grid_element_testimonials |
Testimonials |
grid_element_testimonialsgrideditor |
Testimonials Grid Editor |
grid_element_twitter |
Resolution¶
All duplicates are eliminated on fresh migration runs:
- 9 original
gridElement*duplicates:DefaultGridEditorConverternow usesgrid_element_prefix and checks for existing types (commit164069f). - 5 additional alias-normalization duplicates: ps-prefix stripping and case-insensitive matching added (commits
09935d2,76a17cf). - 2 settings editor element types:
gridSettingsMarginEditorandgridSettingsPaddingEditorexcluded from element type creation (commit09935d2).
Expected element type count after fresh migration: ~430 (down from ~455).
6. Element Types Per V8 DataType -- Count Table¶
| V8 DataType ID | V8 Name | Layouts | Area Wrappers | Row Configs | Row Settings | Cell Settings | Block Settings | Total Grid ETs |
|---|---|---|---|---|---|---|---|---|
| 1055 | Article Controls Grid | 3 | 7 | 3 | 1 | 1 | 1 | 16 |
| 1093 | Contact us Grid | 2 | 3 | 3 | 1 | 1 | 1 | 11 |
| 1127 | Footer Grid | 6 | 16 | 1 | 1 | 1 | 1 | 26 |
| 1151 | Homepage Grid | 4 | 8 | 1 | 1 | 1 | 1 | 16 |
| 1257 | Standard Page Grid | 17 | 35 | 3 | 1 | 1 | 1 | 58 |
| 1459 | Full Width Grid Bottom | 2 | 3 | 2 | 1 | 1 | 1 | 10 |
| 1534 | Animated Grid | 3 | 6 | 3 | 1 | 1 | 1 | 15 |
| 1683 | articleGrid | 3 | 5 | 1 | 1 | 1 | 1 | 12 |
| 1709 | Cookie Grid | 4 | 8 | 1 | 1 | 1 | 1 | 16 |
| 1736 | Full width Grid | 3 | 5 | 1 | 1 | 1 | 1 | 12 |
| 1780 | services Grid | 2 | 2 | 1 | 1 | 1 | 1 | 8 |
| 1798 | Sp with Nav Left Grid | 3 | 5 | 1 | 1 | 1 | 1 | 12 |
| 1803 | Standard Page Full Width | 8 | 13 | 3 | 1 | 1 | 1 | 27 |
| 2236 | test data type | 2 | 3 | 2 | 1 | 1 | 1 | 10 |
| -- | Built-in (shared) | -- | -- | -- | -- | -- | -- | 5 |
| TOTALS | 62 | 119 | 26 | 14 | 14 | 14 | 254 |
Note: The areawrapper total from the API is 134, which includes some area wrappers not fully listed above (the 119 + 15 areawrapper entries that use different naming patterns account for the difference). The API categorization is authoritative at 134.
Grand Totals¶
| Source | Count |
|---|---|
| Grid-generated (layouts + areawrappers + rowconfig + settings + builtin) | 269 |
| Non-grid "other" element types | 186 |
| Total element types | 455 |
7. Content Usage¶
Content usage data is available in _content-usage.json:
| Status | Count | Description |
|---|---|---|
| In-Use | 164 | Referenced in actual content nodes |
| Configured, No Content | 217 | In BlockGrid config, available to editors, no content yet |
| Orphaned | 74 | Not in any config AND not in content |
Content always references the gridElement* (Path A/Path 3) variants. The grid_element_* (Path 2) variants exist in config but have no content. This confirmed that Path 2 variants were effectively shadows -- used in BlockGrid config but never in actual content data. The migration tool fix (commit 164069f) ensures fresh runs no longer create these shadows.
Note: The 217 "configured, no content" types include types from grid datatypes with zero content in progresscu.ie but potentially used in other client databases. These must NOT be removed.
8. Deduplication Opportunities¶
8.1. V8 Configuration Duplicate Groups (from v8 baseline Section 9)¶
The v8 baseline identified that many grid datatypes had identical or near-identical configurations:
Duplicate Group 1 (11 datatypes with identical config): - 1534 (Animated Grid), 1055 (Article Controls Grid), 1683 (articleGrid), 1093 (Contact us Grid), 1709 (Cookie Grid), 1736 (Full width Grid), 1459 (Full Width Grid Bottom), 1780 (services Grid), 1798 (Sp with Nav Left Grid), 1803 (Standard Page Full Width), 2236 (test data type)
Duplicate Group 2 (3 datatypes with identical config): - 1127 (Footer Grid), 1151 (Homepage Grid), 1257 (Standard Page Grid)
8.2. Settings Deduplication (rowsettings, cellsettings, blocksettings)¶
The migration created per-datatype settings element types even when the settings are identical. Here are the deduplication groups:
Row Settings -- Group A (Basic: class + bg + padding + margin + isVisible):
IDs: 1055, 1093, 1127, 1459, 1683, 1709, 1736, 1780, 1798
- 9 identical rowsettings element types could be reduced to 1
- Props: class, setABackgroundImage, backgroundColor, padding, margin, isVisible
Row Settings -- Group B (Extended: adds animation props):
IDs: 1151, 1257
- 2 identical rowsettings could be reduced to 1
- Props: class, elementId, animationStyle, animationOffset, animationDelay, animationDuration, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible
Row Settings -- Group C (Extended animation, fewer animation props):
ID: 1534
- Props: class, elementId, animationStyle, animationOffset, animationEasing, setABackgroundImage, backgroundColor, padding, margin, isVisible
- Unique -- missing animationDelay, animationDuration
Row Settings -- Group D (Reduced: no padding, margin):
ID: 1803
- Props: class, setABackgroundImage, backgroundColor, isVisible
Row Settings -- Group E (Minimal):
ID: 2236
- Props: class, setABackgroundImage, isVisible
Cell Settings -- Group A (Full: bg image + color + padding + margin):
IDs: 1055, 1093, 1127, 1151, 1257, 1459, 1534, 1683, 1709, 1736, 1780, 1798
- 12 identical cellsettings could be reduced to 1
Cell Settings -- Group B (Reduced: no padding, margin):
ID: 1803
- Props: backgroundImage, backgroundColor
Cell Settings -- Group C (Minimal: bg image only):
ID: 2236
- Props: backgroundImage
Block Settings -- follow the same grouping as Row Settings (same groups apply, with additional hidden prop).
8.3. Settings Deduplication Summary¶
| Settings Type | Current Count | Could Be Reduced To | Savings |
|---|---|---|---|
| rowsettings | 14 | 5 groups | 9 eliminated |
| cellsettings | 14 | 3 groups | 11 eliminated |
| blocksettings | 14 | 5 groups | 9 eliminated |
| Total | 42 | 13 | 29 eliminated |
8.4. Layout Deduplication¶
Many datatypes have identical row layouts (same name, same area configuration). If they could share layouts:
Shared "FullWidth" / "Full" layouts (1 area, 12 cols): Exists separately for IDs: 1055, 1093, 1127, 1151, 1257, 1459, 1534, 1683, 1709, 1736, 1780, 1798, 1803 - 13 layout element types could theoretically be reduced to 1 (but see caveat below)
Shared "Half" layouts (2 areas, 6+6 cols): Exists separately for IDs: 1055, 1151, 1257, 1534, 1683, 1709, 1736, 1798, 1803 - 9 layout element types could theoretically be reduced to 1
Shared "Thirds" layouts (3 areas, 4+4+4 cols): Exists separately for IDs: 1055, 1151, 1257, 1534, 1683, 1709, 1736, 1798, 1803 - 9 layout element types could theoretically be reduced to 1
CAVEAT: BlockGrid layout element types are tied to their parent BlockGrid data type configuration. Sharing layouts across datatypes requires updating ALL BlockGrid data type configurations to reference shared element types. This is a significant migration task and carries risk of breaking content references. The per-datatype approach is safer but more verbose.
8.5. Total Theoretical Deduplication¶
| Category | Current | After Dedup | Savings |
|---|---|---|---|
| Duplicate Path A/B pairs (Section 5) | 9 extra | 0 | 9 |
| Settings (row+cell+block) | 42 | 13 | 29 |
| Shared common layouts | 62 | ~25 | ~37 |
| Shared areawrappers | 134 | ~50 | ~84 |
| Maximum theoretical savings | ~159 |
Important: All datatypes must be migrated (shared codebase). Deduplication should only consolidate structurally identical element types -- never remove datatypes. The most impactful and safest dedup is the 9 Path A/B duplicate pairs, which can be done with a simple content data update.
8.6. Deduplication Status¶
- Path A/B Duplicates: DONE -- migration tool fixed (3 commits). ~25 duplicates eliminated on fresh runs.
- Settings element types (29 savings): DEFERRED -- GUID remapping risk across all client databases outweighs cosmetic benefit.
- Layout consolidation: NOT FEASIBLE -- Report 11 confirmed zero identical layouts. Different allowed editors per datatype.
- Area wrapper consolidation: NOT FEASIBLE -- tightly coupled to layouts.
9. Observations and Risks¶
9.1. Settings Variance Between Datatypes¶
Not all datatypes have the same settings properties:
| Feature | Datatypes with feature | Datatypes without |
|---|---|---|
| Padding/Margin (row) | 1055, 1093, 1127, 1151, 1257, 1459, 1534, 1683, 1709, 1736, 1780, 1798 | 1803, 2236 |
| Padding/Margin (cell) | 1055, 1093, 1127, 1151, 1257, 1459, 1534, 1683, 1709, 1736, 1780, 1798 | 1803, 2236 |
| Animation (row) | 1151, 1257, 1534 | All others |
| Element ID (row) | 1151, 1257, 1534 | All others |
This variance is intentional and reflects the original v8 configuration differences. Deduplication of settings must respect these differences.
9.2. Unnamed Row Configs¶
Three rowconfig element types have empty names:
- grid_1534_rowconfig_ (Animated Grid)
- grid_1780_rowconfig_ (services Grid)
- grid_1798_rowconfig_ (Sp with Nav Left Grid)
These correspond to v8 templates that had unnamed sections. They are functional but may cause confusion in the CMS backoffice.
9.3. Standard Page Grid (1257) Complexity¶
ID 1257 has by far the most element types (58) due to its 17 unique row layouts. This is the most-used grid datatype (50 content nodes, 6 document type assignments). Any changes to this datatype's element types carry the highest content risk.
9.4. Test Data Type (2236)¶
This appears to be a development/test datatype. It has minimal configuration (no backgroundColor/padding/margin in settings). It should still be migrated per shared-codebase policy, but should be flagged for potential cleanup after cross-database validation.
Appendix A: Complete Element Type Count Reconciliation¶
| Category | Count | Verification |
|---|---|---|
| layout | 62 | Matches API |
| areawrapper | 134 | Matches API |
| rowconfig | 26 | Matches API |
| rowsettings | 14 | Matches API (1 per datatype) |
| cellsettings | 14 | Matches API (1 per datatype) |
| blocksettings | 14 | Matches API (1 per datatype) |
| builtin | 5 | Matches API |
| other | 186 | Matches API |
| Total | 455 | Matches API |
Other Category Breakdown¶
| Sub-category | Count |
|---|---|
| Pre-existing v8 element/doc types | ~143 |
Path B grid_element_ types |
29 |
Path A gridElement types |
9 |
| Manual migration types | 5 |
| Total other | 186 |