Major improvements to WooNooW Page Editor system: Schema & Architecture: - Canonical section schema with unified sectionSchema.ts - Normalized feature-grid to use items (not features) - Standardized default values across all section types - Schema versioning with automatic migration on read Backend (PHP): - Enhanced PlaceholderRenderer with typed output contracts - Added fallback behavior for empty/invalid dynamic sources - Added caching support for post data resolution - New SchemaMigration class for backward compatibility - New Features class for feature flags - Enhanced PageSSR with full style support - Removed controller-level special-casing for related_posts Frontend (Admin SPA): - Updated CanvasRenderer with schema-aware transformation - Enhanced InspectorPanel with canonical schema metadata - Added new section renderers Frontend (Customer SPA): - New section components: BentoCategoryGrid, MarqueeBanner, ProductCarousel, ShoppableImage - Updated FeatureGridSection for items prop contract Testing: - Add PHP tests: SchemaMigrationTest, PlaceholderRendererTest, PageSSRTest - Add TypeScript tests: schema-integration, feature-grid-regression - Add parity tests for React vs SSR content matching - Add CI script: check-schema-drift.mjs - Add VERIFICATION_CHECKLIST.md Documentation: - RELEASE_NOTES-v1.0.md with full release notes - docs/PAGE_EDITOR_SECTION_SCHEMA_V1.md - docs/PAGE_EDITOR_SSR_COVERAGE_AUDIT.md
206 lines
5.7 KiB
Markdown
206 lines
5.7 KiB
Markdown
# WooNooW v1.0 - Breaking Behavior Verification Checklist
|
|
|
|
This checklist should be completed before full rollout to verify no breaking behavior on existing pages and templates.
|
|
|
|
---
|
|
|
|
## Pre-Flight Checks
|
|
|
|
- [ ] **Database backup completed** - Full backup including `wp_options` and `wp_postmeta` tables
|
|
- [ ] **Staging environment verified** - All tests pass on staging
|
|
- [ ] **Error logging enabled** - PHP error logging configured to catch any issues
|
|
|
|
---
|
|
|
|
## Schema Migration Verification
|
|
|
|
### Feature-Grid Items Normalization
|
|
- [ ] **Legacy `features` → `items` migration works**
|
|
- Find a page with `feature-grid` using `features` prop
|
|
- Load the page in admin editor
|
|
- Verify `features` is normalized to `items` in the response
|
|
- Save the page and verify `items` is persisted
|
|
- Frontend still renders correctly
|
|
|
|
### Style Key Normalization
|
|
- [ ] **`container_width` → `contentWidth` migration works**
|
|
- Find pages with old style keys
|
|
- Verify migration normalizes them on load
|
|
- Frontend renders with correct width
|
|
|
|
- [ ] **`height` → `heightPreset` migration works**
|
|
- Find pages with `height: 'screen'`
|
|
- Verify migration converts to `heightPreset: 'fullscreen'`
|
|
- Section renders with correct height
|
|
|
|
- [ ] **`backgroundType` defaults added**
|
|
- Find pages with no `backgroundType`
|
|
- Verify migration adds `backgroundType: 'solid'`
|
|
- No visual changes occur
|
|
|
|
### Element Styles Normalization
|
|
- [ ] **`cta` → `cta_text` alias works**
|
|
- Find pages with `elementStyles.cta`
|
|
- Verify migration normalizes to `elementStyles.cta_text`
|
|
- Buttons still styled correctly
|
|
|
|
---
|
|
|
|
## Section Rendering Verification
|
|
|
|
### Hero Section
|
|
- [ ] **Static title/subtitle/image render correctly**
|
|
- Create a hero section with all static content
|
|
- Verify on frontend (human view)
|
|
- Verify in SSR (bot view)
|
|
- Content matches between both
|
|
|
|
- [ ] **Dynamic placeholders resolve on frontend**
|
|
- Create a template with dynamic `title` source: `post_title`
|
|
- Apply template to a blog post
|
|
- Verify post title appears in hero
|
|
|
|
- [ ] **Background styles render correctly**
|
|
- Hero with gradient background
|
|
- Hero with image background
|
|
- Hero with solid color
|
|
- All styles match between React and SSR
|
|
|
|
### Feature Grid Section
|
|
- [ ] **Static items render correctly**
|
|
- Create feature grid with 3 items
|
|
- Verify all items display
|
|
- Verify icons render
|
|
|
|
- [ ] **Dynamic `related_posts` source works**
|
|
- Create a template with `items` as `dynamic: 'related_posts'`
|
|
- Apply to a blog post with 2+ related posts
|
|
- Verify related posts appear as cards
|
|
|
|
- [ ] **`items` prop used (not `features`)**
|
|
- Verify schema uses `items`
|
|
- Verify SSR reads `items`
|
|
- Backward compat with `features` still works
|
|
|
|
### Image + Text Section
|
|
- [ ] **Image left/right layouts work**
|
|
- Create with `layout: 'image-left'`
|
|
- Create with `layout: 'image-right'`
|
|
- Both render correctly
|
|
|
|
- [ ] **Dynamic image source works**
|
|
- Use `dynamic: 'post_featured_image'`
|
|
- Verify image appears
|
|
|
|
### CTA Banner
|
|
- [ ] **Button styling renders**
|
|
- CTA with custom colors
|
|
- CTA with default styles
|
|
- Both render correctly
|
|
|
|
### Contact Form
|
|
- [ ] **Form structure renders**
|
|
- Form fields present
|
|
- Submit button present
|
|
- No functional submission (acceptable for SSR)
|
|
|
|
### All Other Sections
|
|
- [ ] **Bento Category Grid** - Categories render with images
|
|
- [ ] **Product Carousel** - Products display with prices
|
|
- [ ] **Shoppable Image** - Hotspots position correctly
|
|
- [ ] **Marquee Banner** - Text items separated correctly
|
|
|
|
---
|
|
|
|
## Dynamic Source Resolution
|
|
|
|
### Scalar Sources
|
|
- [ ] `post_title` resolves correctly
|
|
- [ ] `post_content` resolves with formatting
|
|
- [ ] `post_excerpt` resolves
|
|
- [ ] `post_author` resolves
|
|
- [ ] `post_date` resolves
|
|
|
|
### URL Sources
|
|
- [ ] `post_featured_image` resolves to URL
|
|
- [ ] `post_url` / `permalink` resolves
|
|
|
|
### Array Sources
|
|
- [ ] `post_categories` resolves to array
|
|
- [ ] `post_tags` resolves to array
|
|
- [ ] `related_posts` resolves to post objects with `url`, `title`, `featured_image`, `excerpt`
|
|
|
|
### Fallback Behavior
|
|
- [ ] Empty `post_title` shows "(Untitled)"
|
|
- [ ] Empty `post_featured_image` returns empty string (no broken image)
|
|
- [ ] Empty `related_posts` returns empty array
|
|
|
|
---
|
|
|
|
## Caching Behavior
|
|
|
|
- [ ] **Post data caching works**
|
|
- First load fetches fresh data
|
|
- Subsequent loads use cache
|
|
- Cache expires after 5 minutes
|
|
|
|
- [ ] **SSR cache invalidation works**
|
|
- Edit a page
|
|
- Verify SSR cache is invalidated
|
|
- Next bot visit renders fresh content
|
|
|
|
---
|
|
|
|
## Edge Cases
|
|
|
|
### Empty States
|
|
- [ ] Page with no sections renders empty container gracefully
|
|
- [ ] Feature grid with empty items shows empty state or nothing
|
|
|
|
### Invalid Data
|
|
- [ ] Malformed section JSON doesn't crash the site
|
|
- [ ] Invalid dynamic source doesn't break rendering
|
|
|
|
### Legacy Data
|
|
- [ ] Pages created before schema migration still work
|
|
- [ ] Templates created before migration still work
|
|
- [ ] No data loss on migration
|
|
|
|
---
|
|
|
|
## Performance
|
|
|
|
- [ ] **No significant SSR slowdown**
|
|
- SSR render time < 200ms for 10 sections
|
|
- No N+1 queries in placeholder resolution
|
|
|
|
- [ ] **No increased memory usage**
|
|
- Memory usage stable under load
|
|
|
|
---
|
|
|
|
## Rollback Procedure
|
|
|
|
If issues are found:
|
|
|
|
1. **Immediate**: Disable plugin via WP Admin
|
|
2. **Data safe**: Migration is read-time, no destructive changes
|
|
3. **Restore**: Revert to previous plugin version
|
|
4. **Investigation**: Check error logs for specific failures
|
|
|
|
---
|
|
|
|
## Sign-Off
|
|
|
|
- [ ] **QA Sign-Off**: _________________________ Date: ________
|
|
- [ ] **Tech Lead Sign-Off**: _________________________ Date: ________
|
|
- [ ] **Product Sign-Off**: _________________________ Date: ________
|
|
|
|
---
|
|
|
|
## Notes
|
|
|
|
_Use this space to document any issues found and their resolutions._
|
|
|
|
---
|