Recent Activities
This page shows what are we working on.
-
head
-
2.32.0
-
Version 2.32.0 62d26e
-
Remove unused `lazyAsync` function 98e9d8
-
Gallery: Fixes slider fallback for mobile devices for `expanded` option eb5ff6
-
Center dots when using expanded layout (on mobile) 88f78f
-
Gallery: Restore proper tabindex in destructor 19bb81
-
Gallery: Use slider fallback for mobile devices for `expanded` option 7847d1
-
Improved slider destructor to cleanup listeners and markup dd8400
-
Remove unused code 6292c3
-
Do not close accordion when multipleCollapsible is used b1b4a7
-
LazyAsync 9e0a37
-
Removed redundant 'contentUpdated' dead1b
-
Faster DOM traversal after contentUpdated event 9c2d61
-
Simplify quotedScope from prev commit 37a7b7
-
Improve scope binding match logic
minicart_content should not match x_minicart_content;
minicart.content should not match minicart_content 5e9bca -
Speculation rules: fixed not working exclude rules c78263
-
Added missing destructor to pagebuilderCarousel 81d228
-
Do not close dropdownDialog when dragging the slider inside eed793
-
Do not include requirejs-config if it's empty b4fbfe
-
Defer requirejs-config as all other scripts are deferred too 861179
-
Preload image from category-view block if main image is not found de4258
-
-
head
-
feat(content-builder): resolve the build's store and honour per-store settings (#176)
Nothing in the build pipeline resolved a store, so every Helper\Config read
inside a build answered from whichever store was ambient — the admin store
during an admin build, which is the global value. Widening content_builder and
image_generation to store scope without this would have given the merchant
controls that save and are then ignored, which is why #174 held them back.
The store is resolved in Model\Skill\BuildPage rather than in the admin
controller the issue proposed. Four entry points reach a build — the Build
controller, the bulk consumer, the console command and the MCP server — and the
page is the only thing all four have. Resolving there also leaves the queue
message unchanged, so builds scheduled before this release still run, and a
batch spanning pages in different store views resolves each page separately
instead of pinning the run to the scheduling admin's switcher.
The rule, in Model\ContentBuilder\PageStore: an explicit options.store_id wins
when the store exists and the page is shown in it; otherwise a page assigned to
exactly one real store view builds under that store; otherwise — All Store
Views, several store views, or an explicit id that failed the first test — the
global value. Deliberately the global value rather than the first assigned
store: a page spanning five stores has no per-store answer, and quietly picking
one of them and spending its image budget would be its own bug.
From there the id is threaded as an optional trailing argument, the shape
options.assets already uses (#164), down to every class that reads
configuration during a build: ImageExtractor, ImageGenerator, GeneratorTarget,
WidgetCatalog, ImagePrice, GenerationNotice, and through PromptBuilder,
BandAudit and ComponentValidator, which read the widget list. Usage\Writer
takes it too, so the ledger prices an image by the same per-store override the
estimate quoted. Every memo those classes keep is now keyed by store as well —
one memo per instance would hand a second store's build the first store's
answer.
Helper\Config's getters take an optional store and pass it as the scope *code*.
SCOPE_STORE alone names only the scope type. getExtractedImageKeepDays() is
left alone: it is read by Model\Image\Prune on cron, which sweeps the whole
media directory in one pass with no store in context — the same reason the
backup group's retention fields stay global.
Two things the issue's inventory has slightly wrong, for the record:
options.store_id is already populated today by assistant.js (the product and
category edit forms' store switcher) and by the MCP server, but only ever
reaches loadEntity(); and the bulk build_page payload carries no store at all,
so the async path was as storeless as the synchronous one. d17cc8
-
-
1.8.12
-
chore(release): 1.8.12 d8c1ee
-
feat(config): allow per-store overrides where they mean something (#174) (#175)
* feat(config): allow per-store overrides where they mean something (#174)
Only the mcp group (enabled, graphql_url) is widened. Every other group
stays showInWebsite=0/showInStore=0.
Why only mcp: Helper\Config's isMcpEnabled()/getMcpGraphqlUrl() omitted the
scope-type argument, which defaults to ScopeConfigInterface::SCOPE_TYPE_DEFAULT
('default'), not store — so before this change a per-store value would have
been silently ignored even if system.xml allowed setting one. Fixed by
passing ScopeInterface::SCOPE_STORE explicitly. This is the one field group
whose consumption path (Magento's own webapi PathProcessor, which calls
StoreManager::setCurrentStore() from a /rest/<store_code>/V1/... URL before
McpServer::handle() runs) already resolves the correct store ambiently —
confirmed live via config:set at store scope + a script driving Helper\Config
directly (default store read the global value, breeze_blank read its own).
Every other group was checked the same way and kept global:
- general (enabled, request_timeout): the enable check is a blanket admin-route
gate (RefuseWhenDisabled) and an async-consumer/CLI gate (AbstractConsumer,
AiRequest) — both read ambient scope with no entity binding at all, and
GenerateService::execute() has a $storeId in hand for entity loading but
never passes it to the isEnabled() check either. Widening would let an admin
set "No" for one store while every actual enforcement path keeps reading one
process-wide value.
- bulk/orphan_timeout: OrphanRule/OrphanSweeper read it with zero scope
argument in a cron sweep over every store's operations at once — there is no
per-operation store lookup to apply a per-store value to.
- backup (enabled, keep_versions, keep_days): Prune's nightly cleanup reads
keep_days/keep_versions once, ambiently, and deletes across every store's
rows in one SQL statement with no per-store WHERE clause. isBackupEnabled()
is checked in RestoreConsumer (async, no store emulation) and the admin
Restore controller (ambient) without a store code, even though
Writer::captureAttributes() already has $storeId in hand and never passes it
either.
- content_builder (extract_images, max_images, image_keep_days, widgets) and
image_generation (all 7 fields): image_keep_days is cron-only (Image\Prune),
same problem as backup. The rest are genuinely plausible per-store dials in
principle, but Controller\Adminhtml\Page\Build -> GenerateService ->
Model\Skill\BuildPage never resolves or threads a store id anywhere in the
build pipeline — every Config read in ImageExtractor/ImageGenerator/
GeneratorTarget/WidgetCatalog/ImagePrice/GenerationNotice reads whichever
store happens to be ambient, not the store the page/product being built
belongs to. Widening now would present fields that look per-store while
every build silently keeps reading one fixed value — worse than the current
state. Threading a real store id through the build pipeline (the same shape
as #164's options.assets override) is a big enough feature for its own issue.
Stale premise in the issue text, confirmed and stated here: no api_key,
backend_model, or obscure field exists anywhere in system.xml any more (#138
moved credentials to AI Models rows) — the encrypted-per-store-value concern
the issue raises does not apply to anything left in this section.
Tests: ConfigTest gets two new cases pinning the scope-type fix (mcp fields
read 'store', not 'default'), plus the two existing mcp assertions updated to
expect the explicit scope argument. 1904 -> 1906 tests, 4138 -> 4140
assertions, 0 failures (memory's prior 1894/4117 baseline for 1.8.11 was
stale — the installed copy at bd79426 already runs 1904/4138 before this
branch).
phpcs --standard=Magento2 and phpstan analyse -l 5: 0 errors on Helper/Config.php
and the touched test file. McpServer.php is untouched (0 diff) and its 3
pre-existing phpstan errors are unrelated.
Verified live: config:set at store scope + a script driving Helper\Config
through real DI confirmed default vs breeze_blank read different mcp values;
Magento\Config\Model\Config\Structure confirmed showInStore=true only on the
mcp group/fields, false everywhere else in the section.
* fix(config): mcp store scope also covers unprefixed /rest/V1/ (#174)
The unprefixed webapi URL never gets its store set by PathProcessor
(the path segment "V1" matches no store code), so it keeps reading
whatever store was already ambient rather than a fixed default scope
as the docs claimed. Corrected the comments/docblocks, and pointed
McpSetup's enabled-check at Helper\Config::isMcpEnabled() so the CLI
checks the same scope the endpoint actually reads.
Also dropped two ConfigTest cases that duplicated coverage already
enforced by the adjacent with(..., 'store') assertions.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> dc2a80 -
fix(config): mcp store scope also covers unprefixed /rest/V1/ (#174)
The unprefixed webapi URL never gets its store set by PathProcessor
(the path segment "V1" matches no store code), so it keeps reading
whatever store was already ambient rather than a fixed default scope
as the docs claimed. Corrected the comments/docblocks, and pointed
McpSetup's enabled-check at Helper\Config::isMcpEnabled() so the CLI
checks the same scope the endpoint actually reads.
Also dropped two ConfigTest cases that duplicated coverage already
enforced by the adjacent with(..., 'store') assertions.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> e514df -
feat(config): allow per-store overrides where they mean something (#174)
Only the mcp group (enabled, graphql_url) is widened. Every other group
stays showInWebsite=0/showInStore=0.
Why only mcp: Helper\Config's isMcpEnabled()/getMcpGraphqlUrl() omitted the
scope-type argument, which defaults to ScopeConfigInterface::SCOPE_TYPE_DEFAULT
('default'), not store — so before this change a per-store value would have
been silently ignored even if system.xml allowed setting one. Fixed by
passing ScopeInterface::SCOPE_STORE explicitly. This is the one field group
whose consumption path (Magento's own webapi PathProcessor, which calls
StoreManager::setCurrentStore() from a /rest/<store_code>/V1/... URL before
McpServer::handle() runs) already resolves the correct store ambiently —
confirmed live via config:set at store scope + a script driving Helper\Config
directly (default store read the global value, breeze_blank read its own).
Every other group was checked the same way and kept global:
- general (enabled, request_timeout): the enable check is a blanket admin-route
gate (RefuseWhenDisabled) and an async-consumer/CLI gate (AbstractConsumer,
AiRequest) — both read ambient scope with no entity binding at all, and
GenerateService::execute() has a $storeId in hand for entity loading but
never passes it to the isEnabled() check either. Widening would let an admin
set "No" for one store while every actual enforcement path keeps reading one
process-wide value.
- bulk/orphan_timeout: OrphanRule/OrphanSweeper read it with zero scope
argument in a cron sweep over every store's operations at once — there is no
per-operation store lookup to apply a per-store value to.
- backup (enabled, keep_versions, keep_days): Prune's nightly cleanup reads
keep_days/keep_versions once, ambiently, and deletes across every store's
rows in one SQL statement with no per-store WHERE clause. isBackupEnabled()
is checked in RestoreConsumer (async, no store emulation) and the admin
Restore controller (ambient) without a store code, even though
Writer::captureAttributes() already has $storeId in hand and never passes it
either.
- content_builder (extract_images, max_images, image_keep_days, widgets) and
image_generation (all 7 fields): image_keep_days is cron-only (Image\Prune),
same problem as backup. The rest are genuinely plausible per-store dials in
principle, but Controller\Adminhtml\Page\Build -> GenerateService ->
Model\Skill\BuildPage never resolves or threads a store id anywhere in the
build pipeline — every Config read in ImageExtractor/ImageGenerator/
GeneratorTarget/WidgetCatalog/ImagePrice/GenerationNotice reads whichever
store happens to be ambient, not the store the page/product being built
belongs to. Widening now would present fields that look per-store while
every build silently keeps reading one fixed value — worse than the current
state. Threading a real store id through the build pipeline (the same shape
as #164's options.assets override) is a big enough feature for its own issue.
Stale premise in the issue text, confirmed and stated here: no api_key,
backend_model, or obscure field exists anywhere in system.xml any more (#138
moved credentials to AI Models rows) — the encrypted-per-store-value concern
the issue raises does not apply to anything left in this section.
Tests: ConfigTest gets two new cases pinning the scope-type fix (mcp fields
read 'store', not 'default'), plus the two existing mcp assertions updated to
expect the explicit scope argument. 1904 -> 1906 tests, 4138 -> 4140
assertions, 0 failures (memory's prior 1894/4117 baseline for 1.8.11 was
stale — the installed copy at bd79426 already runs 1904/4138 before this
branch).
phpcs --standard=Magento2 and phpstan analyse -l 5: 0 errors on Helper/Config.php
and the touched test file. McpServer.php is untouched (0 diff) and its 3
pre-existing phpstan errors are unrelated.
Verified live: config:set at store scope + a script driving Helper\Config
through real DI confirmed default vs breeze_blank read different mcp values;
Magento\Config\Model\Config\Structure confirmed showInStore=true only on the
mcp group/fields, false everywhere else in the section. c1ed6b
-
-
head
-
Add noEscape directive to continue shopping button URL ac4b9c
-
Update listing gap variable to use defined spacing 41f0ca
-
Add CSS class to main title in checkout cart layout dc41f6
-
Shopping cart page is done. c1d6d0
-
Shopping cart page in progress 8ca297
-
Shopping cart page 9fa558
-
Enhance quantity input styling and functionality. Apply border-radius to buttons and ensure step attribute is valid. 1bcebb
-
Add padding variable for navigation link caret. aa8d04
-
Quantity wrapper component. f57c8d
-
Product page. Adjustments for related products layout. aa27ee
-
Product page. Add new layout container. Place BCB marquee content there. a2fe52
-
Product page. Enhance gallery configuration and update layout variables for improved styling and responsiveness. b89117
-
Product page. Add grid area for price information and implement gallery layout for improved product display. 76b0b3
-
Product page. Add focus ring styling for checkboxes in related products block to enhance accessibility. ab2227
-
Product page. Refactor related products layout for improved responsiveness and styling consistency. 5aa789
-
Product page. Update quantity button icons to use mask images for better scalability and styling. 9576ee
-
Product page. Related products block. 7ed6de
-
Product page. Implement review popup for full review text display and enhance accessibility. d38885
-
Product page. Add toggle for "Write Your Own Review" form and adjust styles for review list 9973d8
-
Product page. Revies list is done. Revie form next. 5bf007
-
Theme Editor: added Listing, Animations, and Advanced sections a4451d
-
Theme Editor: added Colors section 390891
-
Product page. Reviews in progress... e13b99
-
Theme Editor: added Layout, Typography, Overlay Header, Border Radius, Color and Font Palettes ff5e62
-
Productpage. Review in progress... 7059e9
-
Productpage. Review in progress. 669824
-
BCB featured product component. 0651cf
-
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
-
-
head
-
Checkout: CVR nummer Firma mandatory for Erhvervskunde 77448f
-
-
1.0.83
-
head
-
CSS fixes for checkbox inside address and address lookup button f5c3e8
-
-
1.36.0
-
Version 1.36.0 c6b511
-
Fix readonly env: deploy jsbuild during static content deployment f29be0
-
Fix "Maximum call stack size exceeded" in jsbuild
mage/requirejs/static.js patches the global require.load and parks the
previous function on require._load. That patch is not idempotent, and its
modules are reachable two ways on a FireCheckout page: as the plain
<script> we inject after require.js, and via the bundles entry below.
requirejs keeps `defined` per context, so with a second context on the
page (e.g. "$" next to "_") the jsbuild factory runs twice: require._load
then holds the first wrapper, whose own fallback is itself, and
require.load recurses forever. Symptoms are the RangeError plus
"Load timeout for modules: mage/requirejs/text".
Pin require._load to the real loader before static.js can install the
wrapper, so any number of jsbuild evaluations stay harmless.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> bed9ef -
Replace curl-powered deployment with Asset\Publisher
This commit should improve speed of jsbuild in development mode a13472 -
Replace curl-powered deployment with Asset\Publisher
This commit should improve speed of jsbuild in development mode 46c4d4
-
-
head
-
3.2.2
-
head
-
Fixed security issues in attachment upload and preview
- Detect the file mime type on the server instead of trusting the browser,
and serve the preview inline only for known-safe types, with nosniff
- Enforce the file size and files count limits on the server
- Require a quote to upload an attachment at checkout
- Do not treat an attachment with no quote_id as editable by a visitor
with no cart
- Escape the error message in the js widget
- Check that the file exists before the preview, and stop exposing
exception messages to the storefront
- Use hash_equals to compare the attachment hash
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> a38b7c
-
-
1.14.0
-
Version 1.14.0 87e44a
-
Add `--clear-static-content` option to require|remove commands 783277
-
Remove unused code fdbe14
-
Cleanup 3a5c60
-
Do not use module code for themes 289912
-
Move Installer clases to Installer folder 94dafa
-
Move Installer clases to Installer folder 299078
-
Migrate installer from marketplace (#27) 3c85de
-
Fixed date attribute creation inside collection command 16207b
-
Address review comments 607252
-
Better actions dropdown f44d35
-
Explain why the installer re-run passes --no-download
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 8d0f80 -
Update Readme 4bd0de
-
Offer to remove duplicate access keys in auth:check
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> ad254b -
Rework auth:show and auth:check output
auth:show prints plain Username/Password lines, auth:check adds
Username column and moves provider into its own column.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 390313 -
Key components by package name instead of module code
A metapackage and the module it requires share one module code, since
convertPackageNameToModuleName strips the "module-" prefix. Both
collapsed into a single item, and the metapackage - which sorts first
in the feed - won every field. The remote loader worked around that by
dropping metapackages altogether.
Key the items by package name, which is unique, and let the consumers
that list components hide the metapackages instead.
This fixes latest_version for the packages whose metapackage lags
behind the module: Swissup_BreezeAi reported 1.2.0 instead of 1.8.8,
so no update was ever offered for it.
The synthetic swissup/subscription entry is dropped as well - it
collided with swissup/module-subscription the same way, and the only
field it contributed that anything still reads is a homepage link.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> f21245 -
swissup:auth:check command 5feae9
-
Fix outdated urls in comments c57ea4
-
Remove swissup_core_module table, model and collection
The table stored nothing but the identity key used by the deprecated
subscription-checker module, and keeping db_schema.xml forced a
setup:upgrade run. Dropped the model, resource model, collection and the
Module\{Installer,LicenseValidator,MessageLogger} classes that only
served it, along with setup_version.
swissup:module now reads dependencies from PackageInfo directly and no
longer prints the identity key.
Core replaces swissup/module-subscription-checker in composer.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 04c1c0 -
WIP d6dc01
-
Cleanup terminal composer output keeping installation info 9015f9
-
Fixed failing ci.swissuplabs tests cc0b30
-
Use psr/log dependency f375c1
-
Update deps 975f93
-
WIP dc009f
-
Keep installer classes in Installer folder 2db105
-
Ready for psr/log 9e58a3
-
Use constructor property promotion in installer classes
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 662344 -
Require and then install in one shot 8d3822
-
Installer command c09401
-
Copy Marketplace Installer engine 42c579
-
WIP d6d017
-
Allow passing package names to swissup:package:update
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 553041 -
WIP 9ffeb4
-
Repo => Channel to match old command 1e3a63
-
Use `swissup.extra` params as primary source 69fcf1
-
Update command descriptions 48a007
-
Remove useless comment e857e3
-
Array offset cannot be null e4017c
-
Add swissup:update command
- Update swissup/* packages only; -w also updates their 3rd party dependencies
- Move ensureRepositoryEnabled into PackageAbstractCommand to share with update
- Drop disabled modules check: setup:upgrade runs with --safe-mode=1 anyway
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 3c3f3b -
WIP 434bf2
-
WIP a8a711
-
Remove unused code 599915
-
Installer => ModuleManager 0f7da5
-
Drop outdated code (Magento < 2.3.3) e5542c
-
Remove outdated code 7c5b9a
-
Open links in new tab 81a541
-
"How to update" added to the grid 4fdc59
-
Add latest version to the grid 21367b
-
Move outdated modules to the top of the grid be87e7
-
Add outdated badge to the Swissup menu aae4b5
-
-
1.13.1
-
head
-
Doc links a7a1ce
-
-
1.4.11