Skip to content

Conversation

@github-actions
Copy link
Contributor

@github-actions github-actions bot commented Nov 19, 2025

This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to canary, this PR will be updated.

Releases

@bigcommerce/catalyst-core@1.4.0

Minor Changes

  • #2768 9782209 Thanks @jorgemoya! - Upgrade c15t to 1.8.2, migrate from custom mode to offline mode, refactor consent cookie handling to use c15t's compact format, add script location support for HEAD/BODY rendering, and add privacy policy link support to CookieBanner.

    What Changed

    • Upgraded @c15t/nextjs to version 1.8.2
    • Changed consent manager mode from custom (with endpoint handlers) to offline mode
      • Removed custom handlers.ts implementation
    • Added enabled prop to C15TConsentManagerProvider to control consent manager functionality
    • Removed custom consent cookie encoder/decoder implementations (decoder.ts, encoder.ts)
    • Added parse-compact-format.ts to handle c15t's compact cookie format
      • Compact format: i.t:timestamp,c.necessary:1,c.functionality:1,etc...
    • Updated cookie parsing logic in both client and server to use the new compact format parser
    • Scripts now support location field from BigCommerce API and can be rendered in <head> or <body> based on the target property
    • CookieBanner now supports the privacyPolicyUrl field from BigCommerce API and will be rendered in the banner description if available.

    Migration Path

    Consent Manager Provider Changes

    The ConsentManagerProvider now uses offline mode instead of custom mode with endpoint handlers. The provider configuration has been simplified:

    Before:

    <C15TConsentManagerProvider
      options={{
        mode: 'custom',
        consentCategories: ['necessary', 'functionality', 'marketing', 'measurement'],
        endpointHandlers: {
          showConsentBanner: () => showConsentBanner(isCookieConsentEnabled),
          setConsent,
          verifyConsent,
        },
      }}
    >
      <ClientSideOptionsProvider scripts={scripts}>
        {children}
      </ClientSideOptionsProvider>
    </C15TConsentManagerProvider>

    After:

    <C15TConsentManagerProvider
      options={{
        mode: 'offline',
        storageConfig: {
          storageKey: CONSENT_COOKIE_NAME,
          crossSubdomain: true,
        },
        consentCategories: ['necessary', 'functionality', 'marketing', 'measurement'],
        enabled: isCookieConsentEnabled,
      }}
    >
      <ClientSideOptionsProvider scripts={scripts}>
        {children}
      </ClientSideOptionsProvider>
    </C15TConsentManagerProvider>

    Key changes:

    • mode changed from 'custom' to 'offline'
    • Removed endpointHandlers - no longer needed in offline mode
    • Added enabled prop to control consent manager functionality
    • Added storageConfig for cookie storage configuration

    Cookie Handling

    If you have custom code that directly reads or writes consent cookies, you'll need to update it:

    Before:
    The previous implementation used custom encoding/decoding. If you were directly accessing consent cookie values, you would have needed to use the custom decoder.

    After:
    The consent cookie now uses c15t's compact format. The public API for reading cookies remains the same:

    import { getConsentCookie } from '~/lib/consent-manager/cookies/client'; // client-side
    // or
    import { getConsentCookie } from '~/lib/consent-manager/cookies/server'; // server-side
    
    const consent = getConsentCookie();

    The getConsentCookie() function now internally uses parseCompactFormat() to parse the compact format cookie string. If you were directly parsing cookie values, you should now use the getConsentCookie() helper instead.

    getConsentCookie now returns a compact version of the consent values:

    {
      i.t: 123456789,
      c.necessary: true,
      c.functionality: true,
      c.marketing: false,
      c.measurment: false
    }

    Updated instances where getConsentCookie is used to reflect this new schema.

    Removed setConsentCookie from server and client since this is now handled by the c15t library.

    Script Location Support

    Scripts now support rendering in either <head> or <body> based on the location field from the BigCommerce API:

    // Scripts transformer now includes target based on location
    target: script.location === 'HEAD' ? 'head' : 'body';

    The ScriptsFragment GraphQL query now includes the location field, allowing scripts to be placed in the appropriate DOM location. FOOTER location is still not supported.

    Privacy Policy

    The RootLayoutMetadataQuery GraphQL query now includes the privacyPolicyUrl field, which renders a provicy policy link in the CookieBanner description.

    <CookieBanner
      privacyPolicyUrl="https://example.com/privacy-policy"
      // ... other props
    />

    The privacy policy link:

    • Opens in a new tab (target="_blank")
    • Only renders if privacyPolicyUrl is provided as a non-empty string

    Add translatable privacyPolicy field to Components.ConsentManager.CookieBanner translation namespace for the privacy policy link text.

  • #2754 4cbc124 Thanks @matthewvolk! - Conditionally display product ratings in the storefront based on site.settings.display.showProductRating. The storefront logic when this setting is enabled/disabled matches exactly the logic of Stencil + Cornerstone.

  • #2709 3820a75 Thanks @jordanarldt! - Adds product review submission functionality to the product detail page via a modal form with validation for rating, title, review text, name, and email fields. Integrates with BigCommerce's GraphQL API using Conform and Zod for form validation and real-time feedback.

  • #2690 44f6bc0 Thanks @jfugalde! - Introduce displayName and displayKey fields to facets for improved labeling and filtering

    Facet filters now use the displayName field for more descriptive labels in the UI, replacing the deprecated name field. Product attribute facets now support the filterKey field for consistent parameter naming. The facet transformer has been updated to use displayName with a fallback to filterName when displayName is not available.

  • #2756 0e867a7 Thanks @matthewvolk! - Updated product and brand pages to include the number of reviews in the product data. Fixed visual spacing within product cards. Enhanced the Rating component to display the number of reviews alongside the rating. Introduced a new RatingLink component for smooth scrolling to reviews section on PDP.

  • #2783 052c147 Thanks @jorgemoya! - Make newsletter signup component on homepage render conditionally based on BigCommerce settings.

    What Changed

    • Newsletter signup component (Subscribe) on homepage now conditionally renders based on showNewsletterSignup setting from BigCommerce.
    • Added showNewsletterSignup field to HomePageQuery GraphQL query to fetch newsletter settings.
    • Newsletter signup now uses Stream component with Streamable pattern for progressive loading.

    Migration

    To make newsletter signup component render conditionally based on BigCommerce settings, update your homepage code:

    1. Update GraphQL Query (page-data.ts)

    Add the newsletter field to your HomePageQuery:

    const HomePageQuery = graphql(
      `
        query HomePageQuery($currencyCode: currencyCode) {
          site {
            // ... existing fields
            settings {
              inventory {
                defaultOutOfStockMessage
                showOutOfStockMessage
                showBackorderMessage
              }
              newsletter {
                showNewsletterSignup
              }
            }
          }
        }
      `,
      [FeaturedProductsCarouselFragment, FeaturedProductsListFragment],
    );

    2. Update Homepage Component (page.tsx)

    Import Stream and create a streamable for newsletter settings:

    import { Stream, Streamable } from '@/vibes/soul/lib/streamable';
    
    // Inside your component, create the streamable:
    const streamableShowNewsletterSignup = Streamable.from(async () => {
      const data = await streamablePageData;
      const { showNewsletterSignup } = data.site.settings?.newsletter ?? {};
      return showNewsletterSignup;
    });
    
    // Replace direct rendering with conditional Stream:
    <Stream fallback={null} value={streamableShowNewsletterSignup}>
      {(showNewsletterSignup) => showNewsletterSignup && <Subscribe />}
    </Stream>

    Before:

    <Subscribe />

    After:

    <Stream fallback={null} value={streamableShowNewsletterSignup}>
      {(showNewsletterSignup) => showNewsletterSignup && <Subscribe />}
    </Stream>
  • #2753 7927d26 Thanks @matthewvolk! - Refactor the ReviewForm to accept trigger prop instead of formButtonLabel for flexible rendering.

  • #2708 aa35bec Thanks @jordanarldt! - Adds OpenTelemetry instrumentation for Catalyst, enabling the collection of spans for Catalyst storefronts.

    Migration

    Change is new code only, so just copy over /core/instrumentation.ts and core/lib/otel/tracers.ts.

  • #2784 7c626a7 Thanks @jorgemoya! - Implement functional newsletter subscription feature with BigCommerce GraphQL API integration.

    What Changed

    • Replaced the mock implementation in subscribe.ts with a real BigCommerce GraphQL API call using the SubscribeToNewsletterMutation.
    • Added comprehensive error handling for invalid emails, already-subscribed users, and unexpected errors.
    • Improved form error handling in InlineEmailForm to use form.errors instead of field-level errors for better error display.
    • Added comprehensive E2E tests and test fixtures for subscription functionality.

    Migration Guide

    Replace the subscribe action in core/components/subscribe/_actions/subscribe.ts with the latest changes to include:

    • BigCommerce GraphQL mutation for newsletter subscription
    • Error handling for invalid emails, already-subscribed users, and unexpected errors
    • Proper error messages returned via Conform's submission.reply()

    Update inline-email-form to fix issue of not showing server-side error messages from form actions.

    core/vibes/soul/primitives/inline-email-form/index.tsx

    1. Add import for FieldError component:
    import { FieldError } from '@/vibes/soul/form/field-error';
    1. Remove the field errors extraction:
    // Remove: const { errors = [] } = fields.email;
    1. Update border styling to check both form and field errors:
    // Changed from:
    errors.length ? 'border-error' : 'border-black',
    
    // Changed to:
    form.errors?.length || fields.email.errors?.length
      ? 'border-error focus-within:border-error'
      : 'border-black focus-within:border-primary',
    1. Update error rendering to display both field-level and form-level errors:
    // Changed from:
    {
      errors.map((error, index) => (
        <FormStatus key={index} type="error">
          {error}
        </FormStatus>
      ));
    }
    
    // Changed to:
    {
      fields.email.errors?.map((error) => <FieldError key={error}>{error}</FieldError>);
    }
    {
      form.errors?.map((error, index) => (
        <FormStatus key={index} type="error">
          {error}
        </FormStatus>
      ));
    }

    This change ensures that server-side error messages returned from form actions (like formErrors from Conform's submission.reply()) are now properly displayed to users.

    Add the following translation keys to your locale files (e.g., messages/en.json):

    {
      "Components": {
        "Subscribe": {
          "title": "Sign up for our newsletter",
          "placeholder": "Enter your email",
          "description": "Stay up to date with the latest news and offers from our store.",
          "subscribedToNewsletter": "You have been subscribed to our newsletter!",
          "Errors": {
            "invalidEmail": "Please enter a valid email address.",
            "somethingWentWrong": "Something went wrong. Please try again later."
          }
        }
      }
    }
  • #2711 fcd0836 Thanks @jordanarldt! - Separate first and last name fields on user session object.

  • #2752 4631b88 Thanks @matthewvolk! - Conditionally enable storefront reviews functionality based on site.settings.reviews.enabled. The storefront logic when this setting is enabled/disabled matches exactly the logic of Stencil + Cornerstone.

  • #2739 e155398 Thanks @Tharaae! - Add out-of-stock / backorder message to product cards on PLPs based on store settings:

    • Add out of stock message if the product is out of stock and stock is set to display it.
    • Add the backorder message if the product has no on-hand stock and is available for backorder and the store/product is set to display the backorder message

    Migration

    Option 1: Automatic Migration (Recommended)

    For existing Catalyst stores, the simplest way to get the newly added feature is to rebase the existing code with the new release code. The files that will be updated are listed below.

    Option 2: Manual Migration

    If you prefer not to rebase or have made customizations that prevent rebasing, follow these manual steps:

    Step 1: Update GraphQL Fragment

    Add the inventory fields to your product card fragment in core/components/product-card/fragment.ts under Product:

    inventory {
      hasVariantInventory
      isInStock
      aggregated {
        availableForBackorder
        unlimitedBackorder
        availableOnHand
      }
    }
    variants(first: 1) {
      edges {
        node {
          entityId
          sku
          inventory {
            byLocation {
              edges {
                node {
                  locationEntityId
                  backorderMessage
                }
              }
            }
          }
        }
      }
    }

    Step 2: Update Product interface in Product Card component

    Update the Product interface in core/vibes/soul/primitives/product-card/index.tsx adding the following field to it:

    inventoryMessage?: string;

    Step 3: Update Data Transformer

    Modify core/data-transformers/product-card-transformer.ts to include inventory message in the transformed data. You can simply copy the whole file from this release as it does not have UI breaking changes.

    Step 4: Update Product Card Layout

    Update core/vibes/soul/primitives/product-card/index.tsx layout to display the new inventoryMessage product field.

    Step 5: Update Page Data GraphQL queries

    Add inventory settings queries to the pages data. Add the following query to the main GQL query under site.settings:

    inventory {
      defaultOutOfStockMessage
      showOutOfStockMessage
      showBackorderMessage
    }
    

    to the following page data files:

    • core/app/[locale]/(default)/(faceted)/brand/[slug]/page-data.ts
    • core/app/[locale]/(default)/(faceted)/category/[slug]/page-data.ts
    • core/app/[locale]/(default)/(faceted)/search/page-data.ts
    • core/app/[locale]/(default)/page-data.ts

    Step 6: Update Page Components

    Update the corresponding page components to use the productCardTransformer method (if not already using it) to get the product card, and pass inventory data to those product cards based on the store inventory settings. Use the following code while retrieving the product lists:

        const { defaultOutOfStockMessage, showOutOfStockMessage, showBackorderMessage } =
          data.site.settings?.inventory ?? {};
    
        return productCardTransformer(
          featuredProducts,
          format,
          showOutOfStockMessage ? defaultOutOfStockMessage : undefined,
          showBackorderMessage,
        );
    

    in the following files:

    • core/app/[locale]/(default)/(faceted)/brand/[slug]/page.tsx
    • core/app/[locale]/(default)/(faceted)/category/[slug]/page.tsx
    • core/app/[locale]/(default)/(faceted)/search/page.tsx
    • core/app/[locale]/(default)/page.tsx

    Files Modified in This Change

    • core/app/[locale]/(default)/(faceted)/brand/[slug]/page-data.ts
    • core/app/[locale]/(default)/(faceted)/brand/[slug]/page.tsx
    • core/app/[locale]/(default)/(faceted)/category/[slug]/page-data.ts
    • core/app/[locale]/(default)/(faceted)/category/[slug]/page.tsx
    • core/app/[locale]/(default)/(faceted)/search/page-data.ts
    • core/app/[locale]/(default)/(faceted)/search/page.tsx
    • core/app/[locale]/(default)/page-data.ts
    • core/app/[locale]/(default)/page.tsx
    • core/components/product-card/fragment.ts
    • core/data-transformers/product-card-transformer.ts
    • core/vibes/soul/primitives/product-card/index.tsx
  • #2789 f2f6ad9 Thanks @jorgemoya! - Add newsletter subscription toggle to account settings page, allowing customers to manage their marketing preferences directly from their account.

    What Changed

    • Added NewsletterSubscriptionForm component with a toggle switch for subscribing/unsubscribing to newsletters
    • Created updateNewsletterSubscription server action that handles both subscribe and unsubscribe operations via BigCommerce GraphQL API
    • Updated AccountSettingsSection to conditionally display the newsletter subscription form when enabled
    • Enhanced CustomerSettingsQuery to fetch isSubscribedToNewsletter status and showNewsletterSignup store setting
    • Updated account settings page to pass newsletter subscription props and bind customer info to the action
    • Added translation keys for newsletter subscription UI in Account.Settings.NewsletterSubscription namespace
    • Added E2E tests for subscribing and unsubscribing functionality

    Migration Guide

    To add the newsletter subscription toggle to your account settings page:

    Step 1: Copy the server action

    Copy the new server action file to your account settings directory:

    cp core/app/[locale]/(default)/account/settings/_actions/update-newsletter-subscription.ts \
       your-app/app/[locale]/(default)/account/settings/_actions/update-newsletter-subscription.ts

    Step 2: Update the GraphQL query

    Update core/app/[locale]/(default)/account/settings/page-data.tsx to include newsletter subscription fields:

    // Renamed CustomerSettingsQuery to AccountSettingsQuery
    const AccountSettingsQuery = graphql(`
      query AccountSettingsQuery(...) {
        customer {
          ...
          isSubscribedToNewsletter  # Add this field
        }
        site {
          settings {
            ...
            newsletter {            # Add this section
              showNewsletterSignup
            }
          }
        }
      }
    `);

    Also update the return statement to include newsletterSettings:

    const newsletterSettings = response.data.site.settings?.newsletter;
    
    return {
      ...newsletterSettings, // Add this
    };

    Step 3: Copy the NewsletterSubscriptionForm component

    Copy the new form component:

    cp core/vibes/soul/sections/account-settings/newsletter-subscription-form.tsx \
       your-app/vibes/soul/sections/account-settings/newsletter-subscription-form.tsx

    Step 4: Update AccountSettingsSection

    Update core/vibes/soul/sections/account-settings/index.tsx:

    1. Import the new component:
    import {
      NewsletterSubscriptionForm,
      UpdateNewsletterSubscriptionAction,
    } from './newsletter-subscription-form';
    1. Add props to the interface:
    export interface AccountSettingsSectionProps {
      ...
      newsletterSubscriptionEnabled?: boolean;
      isAccountSubscribed?: boolean;
      newsletterSubscriptionTitle?: string;
      newsletterSubscriptionLabel?: string;
      newsletterSubscriptionCtaLabel?: string;
      updateNewsletterSubscriptionAction?: UpdateNewsletterSubscriptionAction;
    }
    1. Add the form section in the component (after the change password form):
    {
      newsletterSubscriptionEnabled && updateNewsletterSubscriptionAction && (
        <div className="border-t border-[var(--account-settings-section-border,hsl(var(--contrast-100)))] pt-12">
          <h1 className="@xl:text-2xl mb-10 font-[family-name:var(--account-settings-section-font-family,var(--font-family-heading))] text-2xl font-medium leading-none text-[var(--account-settings-section-text,var(--foreground))]">
            {newsletterSubscriptionTitle}
          </h1>
          <NewsletterSubscriptionForm
            action={updateNewsletterSubscriptionAction}
            ctaLabel={newsletterSubscriptionCtaLabel}
            isAccountSubscribed={isAccountSubscribed}
            label={newsletterSubscriptionLabel}
          />
        </div>
      );
    }

    Step 5: Update the account settings page

    Update core/app/[locale]/(default)/account/settings/page.tsx:

    1. Import the action:
    import { updateNewsletterSubscription } from './_actions/update-newsletter-subscription';
    1. Extract newsletter settings from the query:
    const newsletterSubscriptionEnabled = accountSettings.storeSettings?.showNewsletterSignup;
    const isAccountSubscribed = accountSettings.customerInfo.isSubscribedToNewsletter;
    1. Bind customer info to the action:
    const updateNewsletterSubscriptionActionWithCustomerInfo = updateNewsletterSubscription.bind(
      null,
      {
        customerInfo: accountSettings.customerInfo,
      },
    );
    1. Pass props to AccountSettingsSection:
    <AccountSettingsSection
      ...
      isAccountSubscribed={isAccountSubscribed}
      newsletterSubscriptionCtaLabel={t('cta')}
      newsletterSubscriptionEnabled={newsletterSubscriptionEnabled}
      newsletterSubscriptionLabel={t('NewsletterSubscription.label')}
      newsletterSubscriptionTitle={t('NewsletterSubscription.title')}
      updateNewsletterSubscriptionAction={updateNewsletterSubscriptionActionWithCustomerInfo}
    />

    Step 6: Add translation keys

    Add the following keys to your locale files (e.g., messages/en.json):

    {
      "Account": {
        "Settings": {
          ...
          "NewsletterSubscription": {
            "title": "Marketing preferences",
            "label": "Opt-in to receive emails about new products and promotions.",
            "marketingPreferencesUpdated": "Marketing preferences have been updated successfully!",
            "somethingWentWrong": "Something went wrong. Please try again later."
          }
        }
      }
    }

    Step 7: Verify the feature

    1. Ensure your BigCommerce store has newsletter signup enabled in store settings
    2. Navigate to /account/settings as a logged-in customer
    3. Verify the newsletter subscription toggle appears below the change password form
    4. Test subscribing and unsubscribing functionality

    The newsletter subscription form will only display if newsletterSubscriptionEnabled is true (controlled by the showNewsletterSignup store setting).

  • #2733 9f70d2e Thanks @Tharaae! - Add the following backorder messages to PDP based on the store inventory settings and the product backorders data:

    • Backorder availability prompt
    • Quantity on backorder
    • Backorder message

    Migration

    For existing Catalyst stores, to get the newly added feature, simply rebase the existing code with the new release code. The files to be rebased for this change to be applied are:

    • core/messages/en.json
    • core/app/[locale]/(default)/product/[slug]/page-data.ts
    • core/app/[locale]/(default)/product/[slug]/page.tsx
    • core/app/[locale]/(default)/product/[slug]/_components/product-viewed/fragment.ts
    • core/vibes/soul/sections/product-detail/index.tsx
    • core/vibes/soul/sections/product-detail/product-detail-form.tsx

Patch Changes

  • #2757 3f0fbb9 Thanks @matthewvolk! - Passes formButtonLabel from Reviews to ReviewsEmptyState (was missing) and sets a default value for formButtonLabel

  • #2782 abcb16a Thanks @jorgemoya! - Add missing check for optional text field in core/vibes/soul/form/dynamic-form/schema.ts.

    Migration

    Add if (field.required !== true) fieldSchema = fieldSchema.optional(); to text case in core/vibes/soul/form/dynamic-form/schema.ts:

    case 'text':
        fieldSchema = z.string();
    
        if (field.pattern != null) {
        fieldSchema = fieldSchema.regex(new RegExp(field.pattern), {
            message: 'Invalid format.',
        });
        }
    
        if (field.required !== true) fieldSchema = fieldSchema.optional();
    
        break;
  • #2750 c22f0e8 Thanks @jorgemoya! - Improved login error handling to display a custom error message when BigCommerce indicates a password reset is required, instead of showing a generic error message.

    What's Fixed

    When attempting to log in with an account that requires a password reset, users now see an informative error message: "Password reset required. Please check your email for instructions to reset your password."

    Before: Generic "something went wrong" error message
    After: Clear error message explaining the password reset requirement

    Migration

    Step 1: Update Translation Files

    Add this translation key to your locale files (e.g., core/messages/en.json):

    {
      "Auth": {
        "Login": {
          "passwordResetRequired": "Password reset required. Please check your email for instructions to reset your password."
        }
      }
    }

    Repeat for all supported locales if you maintain custom translations.

    Step 2: Update Login Server Action

    In your login server action (e.g., core/app/[locale]/(default)/(auth)/login/_actions/login.ts):

    Add the password reset error handling block:

    if (
      error instanceof AuthError &&
      error.type === 'CallbackRouteError' &&
      error.cause &&
      error.cause.err instanceof BigCommerceGQLError &&
      error.cause.err.message.includes('Reset password"')
    ) {
      return submission.reply({ formErrors: [t('passwordResetRequired')] });
    }

    This should be placed in your error handling, before the generic "Invalid credentials" check.

  • #2780 9cc6786 Thanks @bc-svc-local! - Update translations.

  • #2794 75b0a1a Thanks @bc-svc-local! - Update translations.

@github-actions github-actions bot requested a review from a team as a code owner November 19, 2025 20:03
@vercel
Copy link

vercel bot commented Nov 19, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
catalyst Ready Ready Preview, Comment Dec 26, 2025 4:26pm
catalyst-b2b Ready Ready Preview, Comment Dec 26, 2025 4:26pm
catalyst-canary Ready Ready Preview, Comment Dec 26, 2025 4:26pm
1 Skipped Deployment
Project Deployment Review Updated (UTC)
catalyst-uplift-vertex Ignored Ignored Dec 26, 2025 4:26pm

@github-actions github-actions bot force-pushed the changeset-release/canary branch from bae8d8d to 912e837 Compare November 19, 2025 20:06
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 912e837 to 31b1fa4 Compare November 19, 2025 20:39
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 31b1fa4 to a8e5ad4 Compare November 19, 2025 20:54
@github-actions github-actions bot force-pushed the changeset-release/canary branch from a8e5ad4 to cee5ebf Compare November 19, 2025 22:03
@github-actions github-actions bot force-pushed the changeset-release/canary branch from cee5ebf to 3a65e38 Compare November 19, 2025 22:23
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 3a65e38 to 2c40ee6 Compare November 19, 2025 23:24
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 2c40ee6 to 6a52866 Compare November 20, 2025 18:06
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 6a52866 to 270285f Compare December 4, 2025 21:34
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 270285f to 4f63474 Compare December 4, 2025 21:58
@github-actions github-actions bot force-pushed the changeset-release/canary branch from cb941ff to a2fb4f9 Compare December 12, 2025 21:10
@github-actions github-actions bot force-pushed the changeset-release/canary branch from a2fb4f9 to 08490c8 Compare December 12, 2025 22:38
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 08490c8 to 8213bb1 Compare December 15, 2025 16:47
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 8213bb1 to f994fc6 Compare December 15, 2025 17:04
@github-actions github-actions bot force-pushed the changeset-release/canary branch from f994fc6 to 18f3bef Compare December 15, 2025 18:20
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 18f3bef to c353fb4 Compare December 18, 2025 20:59
@github-actions github-actions bot force-pushed the changeset-release/canary branch from c353fb4 to 317c7ee Compare December 19, 2025 00:32
@github-actions github-actions bot force-pushed the changeset-release/canary branch from 317c7ee to d6136fd Compare December 19, 2025 20:30
@github-actions github-actions bot force-pushed the changeset-release/canary branch from d6136fd to e93cd42 Compare December 23, 2025 15:31
@github-actions github-actions bot force-pushed the changeset-release/canary branch from e93cd42 to c2606c5 Compare December 23, 2025 16:13
@github-actions github-actions bot force-pushed the changeset-release/canary branch from c2606c5 to f201b98 Compare December 23, 2025 18:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant