Recent Activities
This page shows what are we working on.
-
head
-
Fixed not working theme editor colors for overlay header 2660ce
-
Do not show overlay header toggles for native layout b000f5
-
WIP. Header layouts: added overlay mode support 8122c9
-
Correct page cleanup when BLB is closed 45b825
-
Improved header/footer preview 07c294
-
Header/Footer management with Header Layouts 7a0a82
-
-
1.2.0
-
head
-
head
-
3.3.3
-
head
-
Fixed extracting clean path from iframe URL when layout builder is used 1a5b3b
-
-
1.0.16
-
Merge pull request #34 from breezefront/fix/default-scope-theme-resolution
fix(theme-resolver): resolve Default scope theme from store views 900bf4 -
test(theme-resolver): cover inactive default store view and all-inactive website
Third review round over c0ae76c found no defects in the fallback ordering
itself, but two branches of it were untested: the scope's default store view
being switched off (the resolver must move on to the first active view, as the
scope selector does) and a website whose store views are all switched off
(nothing to preview, nothing to fall back to). 1b3a31 -
fix(theme-resolver): follow the previewed store view in the theme fallback
Review of the previous commit (mine and Copilot's) landed on the same problem:
the fallback took the first themed store view out of `getStores()`, in store-id
order, including disabled ones. The scope selector previews a specific store —
the default website's default store for Default scope, the website's own default
store for a website scope (StoreDataProvider::getDefaultStoreId()) — so on a
multi-theme setup the editor could load and save settings for one theme while
the iframe rendered another, with no visible effect from a publish.
The candidate list now mirrors that order: the scope's default store view first,
then its other store views, and inactive views are skipped entirely — their
theme is rendered nowhere. Walking past the previewed store view stays as a last
resort, matching StoreDataProvider's own fall back to the first active store; it
is reachable only when the previewed view has no theme in any scope, where
Magento renders its built-in default and there is no assignment to follow.
The blanket `catch (\Exception)` also reported infrastructure faults as
"No theme is assigned … Assign a theme in Content > Design > Configuration",
losing the real cause. A missing website/group/store stays silent (expected
input); anything else is logged as a warning with the exception attached.
Verified on the local stack with the default-scope row deleted: Default scope
resolves to theme 25 when the previewed store view (store 1) has it, instead of
theme 17 from the lower-id store 3 that the previous commit returned; website
scope resolves through its own default store the same way. Tests: PHPUnit 905. c0ae76 -
Version 1.0.16 1bcff1
-
fix(theme-resolver): resolve Default scope theme from store views
The Theme Editor failed with "Unable to determine theme for scope default /
scopeId 0" on installs where design/theme/theme_id was never saved for the
Default Config scope — themes assigned per store view only. Website and store
scopes read that value through ScopeConfig and inherit it; the default scope has
nothing above it, so the lookup came back empty and the resolver threw. The
admin toolbar already fell back to DesignInterface, so the editor loaded and
only the config query failed, which is what the client saw.
getThemeIdByScope now falls back to a store view's theme when the requested
scope has none of its own: the default store view first (then any other one)
for the default scope, and the website's own store views for a website scope.
Store scope keeps no fallback — it inherits from default already, so an empty
value there means nothing is assigned anywhere.
When nothing can be resolved the message now names the cause and the fix
instead of the scope tuple: which scope has no theme, that no store view has
one either, and that a theme has to be assigned in Content > Design >
Configuration followed by a cache flush.
Not a regression from 1.0.15 — that release only touched GraphQL auth headers.
The resolver has behaved this way since multi-scope support was added (5d43943).
Verified against the local stack with the default-scope row deleted: the old
code reproduced the client's exact error, the new code returns a valid config
for both default and website scope. Tests: PHPUnit 904. c085d4
-
-
head
-
feat(content-builder): draw icons and band backgrounds, keep cutting photographs (#106)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 8b208b -
fix(bulk): label the status the grid's arithmetic can actually return (#128)
magento_operation.status is smallint NULL DEFAULT 0, so MAX(status) hands the
grid a 0 or a NULL that JobStatus had no option for — and finish() writes that 0
itself, `(int) $operation->getStatus()` for an operation carrying none, so it is
a state current code reaches rather than a historical one.
Two halves, because a label alone reaches neither shape fully. JobStatus gains
the column's own default as "Unknown" — not "Not Started", since the row is
claimable and the same line offers a Cancel that bites. And the summary reads
every status through COALESCE, which folds NULL onto that value and stops
SUM() collapsing the other five counters to NULL on the same run, where the row
rendered with a Cancel button and nothing saying why.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> b0ab70 -
feat(content-builder): put a full-bleed hero behind its row (#105)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 24358e -
test(bulk): stamp the claim fixtures relative to now (#130)
The two claims were fixed dates in January, months past the twelve hours
Magento's own bulk_mark_incomplete_operations_as_failed allows a claimed
operation — and that cron looks at no topic_name, so it could finalise the
fixtures between seed() and the assertions and move open_count, started_count
and MAX(status) underneath them.
What the fixtures need is one claim newer than the other, not either date, and
the suite already says the age threshold is OrphanRule's rather than the grid's.
Memoised so seed() and the assertions read the same second, and static because
runs() is.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> cb9121 -
test(bulk): pin the status rules the grid and the queue spell twice (#128) (#129) ae647f
-
test(bulk): one case per condition at least, not exactly one (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> bceee3 -
test(bulk): tie the mutation cases to the conditions they remove (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 3101cd -
test(bulk): claim only the conditions the mutation test can speak for (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 00facc -
test(bulk): prove each condition the sweep selects on is defended (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> b74f79 -
test(bulk): resolve a status by the constant, not by how it was spelled (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> c552b5 -
test(bulk): resolve status references by qualifier, count the catches (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> c3a17f -
test(bulk): make the pinned status boundaries fail when they should (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> bb47dc -
test(bulk): pin the status rules the grid and the queue spell twice (#128)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> f041df
-
-
1.7.2
-
chore(release): 1.7.2
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 7b47c8 -
fix(bulk): cancel every operation the queue can still run (#124) (#127)
* fix(bulk): cancel every operation the queue can still run (#124)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(bulk): stop a null-status operation too, refuse from one list (#124)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com> c14e9c -
fix(bulk): stop a null-status operation too, refuse from one list (#124)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 9dd115 -
fix(bulk): cancel every operation the queue can still run (#124)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> a19812 -
test(bulk): integration coverage for the AI Jobs grid collection (#121) (#126)
* test(bulk): pin the AI Jobs grid summary against a real database (#121)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* test(bulk): pin last_started_at, derive the missing admin id (#121)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* test(bulk): isolate fixtures per process, cover a second cancel (#121)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 <noreply@anthropic.com> 8e7977 -
Merge pull request #125 from breezefront/feat/119-protocol-revision
feat(mcp): negotiate revision 2025-06-18, validate version header (#119) ff8ec6 -
test(bulk): isolate fixtures per process, cover a second cancel (#121)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> a98e67 -
fix(mcp): keep the JSON-RPC envelope when the version header is unreadable (#119)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> dc7b79 -
fix(mcp): tighten protocol version refusal, dedicated error code (#119)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 7b8b9c -
test(bulk): pin last_started_at, derive the missing admin id (#121)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 1c2b56 -
test(bulk): pin the AI Jobs grid summary against a real database (#121)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 8f9825 -
feat(mcp): negotiate revision 2025-06-18, validate version header (#119)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 2fe95c
-
-
head
-
Updated dependent fields logic 278125
-
feat(accordion): enable product attribute as body source for FAQ items b26684
-
feat(accordion): add support for per-item icons in FAQ items b7607f
-
Correct page cleanup when BCB is closed a40061
-
Merge pull request #38 from breezefront/feat/108-newsletter-and-missing-components
feat(components): inline newsletter layout (#108) 57dafb -
fix(components): newsletter heading follows an inherited text colour (#108)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> c56d7d -
fix(a11y): real heading elements and decorative icons (#41)
Newsletter rendered its section heading as <div class="...__heading h2">:
invisible to assistive technology and absent from the document outline,
even though it is the heading of a page band. It now emits a real h1-h6
element chosen by a new heading_type prop (default h2), matching what
text_block already does. Same fix for the featured_product name, which
was also a styled div.
Breeze styles the tag and the class off a single selector list -
`h2, .h2 { ... }` in theme-frontend-breeze-blank/web/css/base/
_typography.less - so under a Breeze theme, dropping the class for the
tag is visually neutral. Under a non-Breeze theme .h2 is not styled at
all, so those headings were rendering as plain body text and now pick up
the theme's own h2 size: a fix rather than a regression, but not a no-op.
Either way it changes the markup of existing pages, which is why this is
split out of #38.
text_block borrowed the heading text for its icon alt and wrapped inline
SVG in a plain div, so a screen reader announced the heading twice, or
three times when the SVG carried its own <title>. The icon is decorative
in every design that uses it: alt="" on the image branch, aria-hidden on
the SVG wrapper. A case that needs a real name should get an explicit
icon_alt prop rather than reusing the heading.
The admin H1 guard only fired on banner's headline_type, so raising a
text_block - and now a newsletter - to H1 skipped the warning. It now
watches heading_type too; _countH1 already counted both.
Also corrects the selector these three comments cite: the rule is
`h1, .h1` in the Breeze theme, not `:where(h1), .h1` in the module.
product_grid was checked and already emits a real h2. Accordion item
titles remain divs wrapping an <a> trigger; the heading+button pattern
there is a larger change and stays open.
Refs #41 53edaa -
fix(components): collage layout for flat-colour CTA, decorative icon a11y (#108)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 6e2743 -
feat(components): inline newsletter layout (#108)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 85ed20 -
Changes for header/footer page: publish spinner, layout picker with images 25b2ae
-
-
1.2.2
-
head
-
Add styles for featured product details, SKU, and price row in BCB d65f2d
-
BCB accordion styles at product info main. 1a262b
-
Installer. Add accordion for products. 466a5b
-
Add padding to swatch options in product add form for improved layout f10f77
-
Product main info ... in progress bf5c3f
-
Enhance product quantity input with increment/decrement buttons and update styles for better usability 72192e
-
Update product page medium image dimensions to 590x590 012c72
-
Fix minicart styles: set empty counter opacity to 0 79fcd1
-
Increased h2 bottom margin dff6ea
-
Product page action buttons. d008f0
-
Updated footer content links and section titles for improved clarity and user experience 241039
-
BCB homepage: fixed wrong image name b1a4f4
-
Rating stars styles in product listing f17a0f
-
BCB homepage: updated full width banner and sections spacings 2076c7
-
Fixed sort order of product details inside grid listing 9ad360
-
BCB homepage: updated Videos and full width banner sections 072733
-
Product page title font-size. d0987c
-
Footer. Minor fix for ring reval animation. Restore missing divider in footer. (#3) 54cdc4
-
Footer ring reveal animation added (#3) 4a8be8
-
BCB homepage: added animated badges to top banners grid 197e37
-
BCB homepage: added rotation animation for Full Width Banner 1420f9
-
BCB homepage: top banner updated a53bd5
-
Update favicon color 5ea666
-
Update favicon 18d8dc
-
Slightly update footer background. 5fcbfc
-
Footer content update. Add contact block (#3) dea42e
-
Fixed missing minicart overlay on first open (#2) 54feaa
-
BCB homepage: updated Browse categories block dbfa89
-
Breadcrumbs 196469
-
Done with search (#2) d8e0f3
-
Enhance minisearch functionality with slideout behavior and styling adjustments without Ajaxsearch (#2) 8c4a9d
-
Minisearch styles when ajaxsearch disabled... in progress (#2) 259fac
-
Remove unused styles from viewcart action and update empty subtitle styles in minicart (#2) dba7a5
-
Minicart complete (#2) 56efd2
-
Search on desktop (#2) 9c587e
-
BCB homepage: added videos section 7ee864
-
Minicart inprogress (only buttons to adjust)... (#2) c1be91
-
Minicart update in progress.... c3d18b
-
Minicart update in progress... (#2) 55e7b9
-
INstaller. Create dummy CMS block header_panel_info to allow user add custom content (#2) f70d58
-
Adjust minicart counter (#2) 03e843
-
BCB homepage: Added brand logos section b905f1
-
BCB homepage: Added testimonials section 2ab2cf
-
Update newsletter styles: adjust input border and add consent positioning (#2) 02d37d
-
Header. Update search behaviou and look of the result dropown. 993432
-
BCB homepage: Added FAQ a0bfde
-
Add focused search styles. d80f88
-
BCB homepage: added new sections 875068
-
BCB homepage: added ECI and full-width banner d40cfa
-
Top navigation added. 8fa9a3
-
Remove color from menu links dec081
-
Clone currency and store switchers in header slideout menu for improved functionality de36e3
-
Enhance header and newsletter styles for improved layout and responsiveness in header slideout menu. b63dd0
-
Installer. Update header slideout menu styles. 825795
-
Update footer top content HTML to enhance newsletter section styling.
Don't set font familiy for header in Page Builder ba0b81 -
BCB homepage WIP b228af
-
Basic navpro slideout styles 75ac0e
-
Refactor header slideout menu and newsletter styles for improved layout and consistency 3b42ff
-
Header slideout menu... d4f174
-
Listing styles for the list mode and old price update. cbff61
-
Update README.md to clarify usage of `with-bottom-divider` CSS class and provide detailed instructions 1b9ea5
-
Pagination and make with-bottom-divider general. 37ea17
-
Added list banner 5 config; updated installer, moved it to json a43985
-
Add new layout configuration and remove easybanner references; update footer content and styles 87165b
-
Refactor easybanner configuration and installer for product listing banners 8b1d0d
-
Installer. Listing grid banner added. 914c01
-
Add swatches variables and layout styles d59581
-
Update positioning for filter title and content in layered navigation 8cbd21
-
Add image dimensions for product listings and related widgets in view.xml 6985cd
-
layout and styles for category view, product toolbar, shop by button 08fd27
-
Add layered navigation styles and update imports 944ff1
-
Keep working on prodcut listing and category page. 411088
-
Keep working on product listing toolbar. ebcfac
-
Working on product listing and toolbar look. 1ab39d
-
Add Cooper* font 132906
-
Add listing item styles and variables e725b5
-
Product lisnting in progress - grey bg and border radius. 4e7c35
-
Add new variable files for colors, typography, header, footer, icons, navigation, popover, minisearch, and gradient ba122c
-
Refactor footer and newsletter styles for improved consistency and responsiveness d831e4
-
Footer top newsletter - some updates. 452ca5
-
Add footer top content block and styles for newsletter integration (WIP) 128131
-
Footer bottom. 8d58ea
-
Add footer content block and styles for enhanced footer layout 4d6b1b
-
Header. Hide menu on medium screens. Update search look on monile. e0146d
-
Installer. Add navigation slideout menu a89fd5
-
-
1.6.17
-
Version 1.6.17 e63fa2
-
-
1.6.17
-
1.2.5
-
1.2.4