Recent Activities

This page shows what are we working on.

swissup / theme-stigefabrikken-breeze

6 hours ago error

swissup / module-pagespeed

6 hours ago success
  • 1.19.3
    • Version 1.19.3 6cb7ea

    • fix(webp): stop gating WebP markup by User-Agent (#123) (#124)

      * fix(webp): stop gating WebP markup by User-Agent (#123)

      isWebPSupport() decided per request from the User-Agent whether to emit
      WebP markup, but FPC/Varnish store one copy of the page. The first
      visitor after a purge chose the variant for everyone: a bot, curl or
      Safari left all visitors on JPEG, Chrome served .webp to every browser.

      WebP markup now depends only on the config flag. <img> inside <picture>
      keeps the .webp src on purpose (9a0d35b, Breeze gallery matches img src
      against the WebP-replaced gallery JSON), so browsers without WebP
      (Safari/iOS < 14, IE) are no longer served a JPEG variant.

      Fixes #123

      Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

      * docs(webp): note missing fallback for browsers without WebP (#123)

      WebP markup no longer depends on the User-Agent, so the WebP and picture
      tag options now state that browsers without WebP (Safari/iOS < 14) get no
      fallback: the <img> inside <picture> keeps the WebP URL for Breeze.

      Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

      ---------

      Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> bde5e8

    • docs(webp): note missing fallback for browsers without WebP (#123)

      WebP markup no longer depends on the User-Agent, so the WebP and picture
      tag options now state that browsers without WebP (Safari/iOS < 14) get no
      fallback: the <img> inside <picture> keeps the WebP URL for Breeze.

      Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> 4d0e4d

    • fix(webp): stop gating WebP markup by User-Agent (#123)

      isWebPSupport() decided per request from the User-Agent whether to emit
      WebP markup, but FPC/Varnish store one copy of the page. The first
      visitor after a purge chose the variant for everyone: a bot, curl or
      Safari left all visitors on JPEG, Chrome served .webp to every browser.

      WebP markup now depends only on the config flag. <img> inside <picture>
      keeps the .webp src on purpose (9a0d35b, Breeze gallery matches img src
      against the WebP-replaced gallery JSON), so browsers without WebP
      (Safari/iOS < 14, IE) are no longer served a JPEG variant.

      Fixes #123

      Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> bcb62f

  • 1.19.2
    • Version 1.19.2 90e18b

    • fix(webp): resolve webp variant for uppercase image extensions (#120) (#121)

      UrlResolver lowercased the extension before building the webp
      candidate filename, but generated webp files preserve the original
      extension case (HandGuard.JPG.webp). The lookup for
      HandGuard.jpg.webp never matched, so the webp version was silently
      skipped for images with uppercase extensions.

      Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> 5640a2

    • fix(webp): resolve webp variant for uppercase image extensions (#120)

      UrlResolver lowercased the extension before building the webp
      candidate filename, but generated webp files preserve the original
      extension case (HandGuard.JPG.webp). The lookup for
      HandGuard.jpg.webp never matched, so the webp version was silently
      skipped for images with uppercase extensions.

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> a58d1f

breezefront / module-breeze-ai

7 hours ago success
  • 1.8.14
    • chore(release): 1.8.14 0c3714

    • feat(content-builder): plan the sections before the build (#178) (#181)

      * feat(content-builder): plan the sections before the build (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * refactor(content-builder): extract plan skeleton into a testable module

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * docs(content-builder): note PlanNotice's cross-model accuracy limit

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * fix(content-builder): disable both panel buttons while a request is in flight

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * fix(content-builder): resolve plan_model_id from the page's own store (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * fix(content-builder): guard the plan panel against stale screenshots and plans (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * refactor(content-builder): stop publishing the unused planModelId to the client (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      ---------

      Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> b1616d

    • refactor(content-builder): stop publishing the unused planModelId to the client (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> d59488

    • fix(content-builder): guard the plan panel against stale screenshots and plans (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 8b485d

    • fix(content-builder): resolve plan_model_id from the page's own store (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 5c4ebc

    • fix(content-builder): disable both panel buttons while a request is in flight

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 9c7643

    • docs(content-builder): note PlanNotice's cross-model accuracy limit

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 182cb1

    • refactor(content-builder): extract plan skeleton into a testable module

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 2c10a6

    • feat(content-builder): plan the sections before the build (#178)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 3c2cb8

  • 1.8.13
    • chore(release): 1.8.13 1ef265

    • feat(content-builder): resolve the build's store and honour per-store settings (#176) (#177)

      * 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.

      * fix(content-builder): address build-store review findings (#176)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

      * fix(content-builder): green the store resolver, and refuse a scalar store_id (#176)

      The review round left the branch red: PageStoreTest stubbed hasData() with
      ->with('store_id'), but assignedStoresOf() asks hasData('stores') first, so the
      first call failed the parameter rule. Stubbed by key instead, which is also
      what the test claims to be describing.

      assignedStoresOf() now reads the raw data and acts on it only when it is a
      list. hasData('store_id') alone was true for two things that are not the
      page's assignment: a scalar store_id — an ambient store somebody set, which
      PageRepository::save() does for a page that had none — and, for 'stores', any
      value at all, where a scalar would have reached array_map() and thrown. Both
      now fall through to the query, which is authoritative.

      Confirmed on the stand that the fast path is real: PageRepository::getById()
      comes back with store_id = ["3"] for a page assigned to store 3, so a build
      started from the repository costs no lookup.

      Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

      ---------

      Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> eb9f0b

    • fix(content-builder): green the store resolver, and refuse a scalar store_id (#176)

      The review round left the branch red: PageStoreTest stubbed hasData() with
      ->with('store_id'), but assignedStoresOf() asks hasData('stores') first, so the
      first call failed the parameter rule. Stubbed by key instead, which is also
      what the test claims to be describing.

      assignedStoresOf() now reads the raw data and acts on it only when it is a
      list. hasData('store_id') alone was true for two things that are not the
      page's assignment: a scalar store_id — an ambient store somebody set, which
      PageRepository::save() does for a page that had none — and, for 'stores', any
      value at all, where a scalar would have reached array_map() and thrown. Both
      now fall through to the query, which is authoritative.

      Confirmed on the stand that the fast path is real: PageRepository::getById()
      comes back with store_id = ["3"] for a page assigned to store 3, so a build
      started from the repository costs no lookup.

      Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> 6aa943

    • fix(content-builder): address build-store review findings (#176)

      Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> 36edbd

    • 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

swissup / module-ajaxsearch

12 hours ago success

breezefront / module-breeze

3 days ago success
  • head
    • Fixed incorrectly marked lazyload when main image is not the first one d5cd6b

    • Do not add dom duplicates to $.registry 84beb6

  • 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

breezefront / theme-frontend-breeze-enterprise-eir

3 days ago success
  • 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

swissup / module-firecheckout

5 days ago success
  • 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

breezefront / theme-frontend-breeze-blank

5 days ago success
  • head
    • Revert "Explicitly set navigation item paddings"

      This reverts commit cb77b10eaf9af978e1548035c957edae74e6da2e. 0b7288

    • Explicitly set navigation item paddings cb77b1

    • Added labels for footer containers 780d47

  • 3.2.2
    • Version 3.2.2 330f6d

    • Allow to remove `displaY:block` from complex prices markup 389332

swissup / module-orderattachment

6 days ago success
  • 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

swissup / core

6 days ago success