|
| 1 | +# Changelog |
| 2 | + |
| 3 | +All notable changes to this project will be documented in this file. |
| 4 | + |
| 5 | +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). |
| 6 | + |
| 7 | +## [2.0.0] - 2026-05-08 |
| 8 | + |
| 9 | +### Added |
| 10 | + |
| 11 | +**Scaffolding Commands (Phase 5 - absorbed from elayne-cli):** |
| 12 | + |
| 13 | +- `pattern:create` command (`src/Commands/Scaffold/PatternCreateCommand.php`) — Scaffold new Elayne block patterns from templates with interactive prompts: |
| 14 | + - Supports 23 pattern templates (see below) |
| 15 | + - Supports 18 pattern categories (header, footer, elayne/hero, elayne/features, etc.) |
| 16 | + - Options: `--title`, `--slug`, `--template`, `--category`, `--keywords`, `--output-dir`, `--with-style`, `--style-dir`, `--shell-only` |
| 17 | + - Automatically generates CSS file when `--with-style` flag is used |
| 18 | + - Shell-only mode for editor-first workflow (generates PHP header + paste marker) |
| 19 | + |
| 20 | +- `layout:create` command (`src/Commands/Scaffold/LayoutCreateCommand.php`) — Scaffold new Elayne block layout patterns: |
| 21 | + - Supports 8 layout skeletons (full-width, two-column, three-column, sidebar-left, sidebar-right, hero-image-left, hero-image-right, landing-page) |
| 22 | + - Options: `--title`, `--slug`, `--layout`, `--category`, `--keywords`, `--output-dir`, `--shell-only` |
| 23 | + |
| 24 | +- `style:create` command (`src/Commands/Scaffold/StyleCreateCommand.php`) — Scaffold WordPress theme style variation JSON: |
| 25 | + - Supports 5 preset color palettes (custom, legal, plumbing, spa, food-beverage) |
| 26 | + - Generates full theme.json with color palette, gradients, and duotone presets |
| 27 | + - Interactive color picker with validation |
| 28 | + - Options: `--name`, `--vertical`, `--output-dir` |
| 29 | + |
| 30 | +- `pattern:list` command (`src/Commands/Scaffold/PatternListCommand.php`) — List all available resources: |
| 31 | + - Lists all 23 templates with descriptions |
| 32 | + - Lists all 13 snippets with descriptions |
| 33 | + - Lists all 5 style variations with descriptions |
| 34 | + - Lists all 18 pattern categories |
| 35 | + - Set as default command (replaces `check` as default) |
| 36 | + |
| 37 | +**Template Files (23 patterns in `templates/` directory):** |
| 38 | + |
| 39 | +- `blank.php` — Empty pattern with header only |
| 40 | +- `hero-cover.php` — Full-bleed wp:cover with bottom-center content |
| 41 | +- `cta-fullwidth.php` — Full-width call-to-action band |
| 42 | +- `feature-grid-3col.php` — Full-width section with 3 feature cards |
| 43 | +- `stats-bar-fullwidth.php` — Dark full-width stats/numbers bar |
| 44 | +- `two-column-text-image.php` — Text left, image right two-column layout |
| 45 | +- `header-standard.php` — Standard header with logo, navigation, social links |
| 46 | +- `footer-standard.php` — Standard footer with brand blurb, nav columns, subnav |
| 47 | +- `testimonials-grid.php` — Responsive testimonial card grid with reviewer info |
| 48 | +- `pricing-comparison.php` — Three-tier pricing table with elevated recommended card |
| 49 | +- `blog-post-columns.php` — wp:query-driven 3-column post grid (portrait images) |
| 50 | +- `team-grid.php` — Team member profile grid with photo, name, title, bio |
| 51 | +- `woo-hero.php` — WooCommerce two-column hero |
| 52 | +- `woo-ticker.php` — WooCommerce server-rendered marquee ticker bar |
| 53 | +- `woo-shop-categories.php` — WooCommerce CSS bento grid layout |
| 54 | +- `woo-featured-products.php` — WooCommerce section header with View All + product-collection grid |
| 55 | +- `woo-our-story.php` — WooCommerce two-column brand story |
| 56 | +- `woo-testimonials.php` — WooCommerce three-column testimonial cards with ratings |
| 57 | +- `woo-newsletter.php` — WooCommerce full-bleed newsletter signup |
| 58 | +- `woo-shop-landing.php` — WooCommerce store homepage shell |
| 59 | +- `woo-cart.php` — WooCommerce cart page wrapper |
| 60 | +- `woo-checkout.php` — WooCommerce checkout page wrapper |
| 61 | +- `woo-filters-sidebar.php` — WooCommerce sticky sidebar with filters |
| 62 | +- `woo-product-grid.php` — WooCommerce filter-aware product-collection grid |
| 63 | + |
| 64 | +**Layout Files (8 layouts in `layouts/` directory):** |
| 65 | + |
| 66 | +- `full-width.php` — Single column, constrained |
| 67 | +- `two-column.php` — 50/50 columns block |
| 68 | +- `three-column.php` — Grid with 3 equal groups |
| 69 | +- `sidebar-left.php` — Narrow left sidebar (33%) + wide content area (66%) |
| 70 | +- `sidebar-right.php` — Wide content area (66%) + narrow right sidebar (33%) |
| 71 | +- `hero-image-left.php` — Cover image left + heading, text, CTA right |
| 72 | +- `hero-image-right.php` — Heading, text, CTA left + cover image right |
| 73 | +- `landing-page.php` — Hero + 3-column features + CTA |
| 74 | + |
| 75 | +**CSS Stubs (8 files in `css/` directory):** |
| 76 | + |
| 77 | +- `cta-fullwidth.css` — Styles for CTA full-width pattern |
| 78 | +- `feature-grid-3col.css` — Styles for 3-column feature grid |
| 79 | +- `generic.css` — Generic fallback CSS stub |
| 80 | +- `hero-cover.css` — Styles for hero cover pattern |
| 81 | +- `stats-bar-fullwidth.css` — Styles for stats bar pattern |
| 82 | +- `team-grid.css` — Styles for team grid pattern |
| 83 | +- `testimonials-grid.css` — Styles for testimonials grid pattern |
| 84 | +- `woo-filters-sidebar.css` — Comprehensive styles for WooCommerce filters sidebar |
| 85 | + |
| 86 | +**Code Snippets (13 files in `snippets/` directory):** |
| 87 | + |
| 88 | +- `eyebrow-heading-body.txt` — Eyebrow label + heading + body paragraph |
| 89 | +- `3col-grid-wrapper.txt` — Responsive 3-column grid wrapper |
| 90 | +- `stat-item.txt` — Number + label stat card (dark background) |
| 91 | +- `testimonial-card.txt` — Testimonial with stars, quote, author |
| 92 | +- `two-button-group.txt` — Primary + outline button pair |
| 93 | +- `overlay-grid-cover-card.txt` — Portrait cover image card + floating badge |
| 94 | +- `valid-cover.txt` — wp:cover with all required attributes |
| 95 | +- `valid-columns-wp66.txt` — wp:columns without inline gap/margin |
| 96 | +- `responsive-grid-min-width.txt` — wp:group grid layout with minimumColumnWidth |
| 97 | +- `valid-button-attr-order.txt` — wp:button with proper attribute order |
| 98 | +- `valid-fullwidth-section.txt` — alignfull outer group + margin reset |
| 99 | +- `valid-heading-with-preset.txt` — wp:heading with fontSize slug and matching utility class |
| 100 | + |
| 101 | +### Changed |
| 102 | + |
| 103 | +- **Application version**: Bumped from `1.0.0` to `2.0.0` in `bin/pt-cli` |
| 104 | +- **Package description**: Updated from "Pattern compliance checker" to "Pattern scaffolding and compliance checker for WordPress FSE block themes" in `composer.json` |
| 105 | +- **Default command**: Changed from `check` to `list` in `bin/pt-cli` |
| 106 | +- **Namespace migration**: All scaffold commands now under `Imagewize\PtCli\Commands\Scaffold\` namespace (previously `Imagewize\ElaynePatternCli\Commands` in elayne-cli) |
| 107 | + |
| 108 | +### Deprecated |
| 109 | + |
| 110 | +- `imagewize/elayne-cli` package — All scaffold functionality has been absorbed into pt-cli v2.0.0 (Phase 6) |
| 111 | + |
| 112 | +--- |
| 113 | + |
| 114 | +## [1.0.0] - 2026-05-08 |
| 115 | + |
| 116 | +Initial release — pattern compliance checker for WordPress FSE block themes. |
| 117 | + |
| 118 | +### Added |
| 119 | + |
| 120 | +- `bin/pt-cli` entry point with Symfony Console application |
| 121 | +- `check` command with `--theme` and `--autofix` flags |
| 122 | +- `src/Commands/CheckCommand.php` — CLI entry point for compliance checking |
| 123 | +- `src/Compliance/ComplianceChecker.php` — orchestrates rule sets per file and directory |
| 124 | +- `src/Compliance/Rules/RuleSetInterface.php` and `AbstractRuleSet.php` — rule set contract |
| 125 | +- `src/Compliance/Rules/BaseRules.php` — 19 compliance checks for any FSE theme: |
| 126 | + - No hardcoded CSS font sizes (px/rem/em) |
| 127 | + - No spacer blocks (use blockGap instead) |
| 128 | + - Margin reset required on alignfull patterns |
| 129 | + - Warn on `wp:columns` for 3+ columns (use responsive grid with `minimumColumnWidth`) |
| 130 | + - No hardcoded media IDs |
| 131 | + - Translated strings required (HTML tags + alt attributes) |
| 132 | + - Proper `patternName` in outermost block metadata |
| 133 | + - No HTML comments between opening tags and block comments |
| 134 | + - No custom-domain emails (use `example@example.com`) |
| 135 | + - No hardcoded external URLs in `src` attributes |
| 136 | + - `wp:button` root `fontSize` must use `style.typography` |
| 137 | + - `wp:button` `className` must come before `style` in JSON |
| 138 | + - Cover block `minHeight` must have root-level units |
| 139 | + - No empty border side objects `{}` in block JSON |
| 140 | + - `wp:buttons` must have `<div class="wp-block-buttons">` wrapper |
| 141 | + - No `overflow:hidden` as inline style on group blocks |
| 142 | + - No `opacity` as inline style on HTML elements |
| 143 | + - Font preset classes must match root-level `fontSize`/`fontFamily` |
| 144 | + - No stale inline `blockGap`/`gap`/`margin` on group/column wrappers |
| 145 | +- `src/Compliance/Rules/WooCommerceRules.php` — 5 WooCommerce-specific checks: |
| 146 | + - `product-title` inside `product-template` must use `post-title` + `__woocommerceNamespace` |
| 147 | + - WC native blocks must not have `__woocommerceNamespace` |
| 148 | + - `product-collection` must have `query` metadata |
| 149 | + - `product-collection` must have `<div class="wp-block-woocommerce-product-collection">` wrapper |
| 150 | + - `product-collection` must not have both `layout` and `displayLayout` |
| 151 | +- `src/Compliance/Config/ConfigLoader.php` — loads and merges JSON config with project-level override support |
| 152 | +- `src/Compliance/Config/ThemeConfig.php` — typed config accessor |
| 153 | +- `config/base.json` — default rules for any FSE theme |
| 154 | +- `config/elayne.json` — Elayne-specific rules (extends base): theme attribute, `elayne/` prefix, emoji check, WooCommerce rules, template exceptions |
| 155 | +- Five autofixable rules applied by `--autofix`: |
| 156 | + - Strip inline `gap:` from group/column wrappers |
| 157 | + - Strip inline `margin:` from flex group/column wrappers |
| 158 | + - Reorder `wp:button` JSON keys (`className` before `style`) |
| 159 | + - Migrate `wp:button` root `fontSize` to `style.typography` |
| 160 | + - Inject `has-{slug}-font-size` class on heading/paragraph elements |
| 161 | +- Project-level config override: `.pt-cli/{theme}.json` in project root |
| 162 | +- `README.md` with full usage, configuration, and rule reference |
| 163 | +- `LICENSE` (MIT) |
0 commit comments