sync: TRAC-1236 sync integrations/b2b-makeswift with integrations/makeswift@1.7.0 - #3147
Merged
chanceaclark merged 55 commits intoJul 29, 2026
Merged
Conversation
…elect (#2934) The dropdown menu used `ring` (3px default) while the Select component used `ring-1` (1px). This caused a visually thick border on dropdown menus, most noticeably on the wishlist page. Fixes CATALYST-1570 Co-authored-by: Claude <noreply@anthropic.com>
Updated the required Node.js versions to only allow version 24.
#2940) * Initial plan * fix: align Node.js v24 engine requirements across create-catalyst and core - Update packages/create-catalyst/package.json engines from ^20.0.0 || ^22.0.0 || ^24.0.0 to ^24.0.0 to match the runtime check in bin/index.cjs and core/package.json (>=24.0.0) - Fix core/README.md which referenced Node.js version 20 or 22 instead of 24 - Extract supported Node.js versions into bin/supported-node-versions.cjs as the single source of truth - Add src/utils/node-version.spec.ts to test the version gating logic Closes #2939 Co-authored-by: chanceaclark <10539418+chanceaclark@users.noreply.github.com> * fix: resolve lint errors in node-version.spec.ts - Use named import { satisfies } from 'semver' instead of default import (fixes import/no-named-as-default-member warning) - Remove require() of .cjs file to avoid import/extensions and @typescript-eslint/consistent-type-assertions errors - Simplify bin/index.cjs to remove unused intermediate variable Co-authored-by: chanceaclark <10539418+chanceaclark@users.noreply.github.com> * chore: add changeset for Node.js v24 engine alignment in create-catalyst Co-authored-by: chanceaclark <10539418+chanceaclark@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: chanceaclark <10539418+chanceaclark@users.noreply.github.com>
npm's sigstore provenance verification requires package.json to have a repository.url matching the GitHub repository. Without this field, changeset publish fails with E422 for all published packages. Co-authored-by: Claude <noreply@anthropic.com>
chore: sync integrations/makeswift with canary
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* feat(other): LOCAL-1444 delivery translation * chore(core): create translations patch --------- Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
…akeswift # Conflicts: # core/CHANGELOG.md # core/app/[locale]/layout.tsx
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Use tilde range to allow patch updates but block minor bumps to 16.2, which introduces deployment issues on Cloudflare Workers.
…akeswift # Conflicts: # pnpm-lock.yaml
* fix: split regression-tests workflow into two separate flows * fix: merge back to a single file * use deployments.ref for PRs
* feat(other): LOCAL-1444 delivery translation * chore(core): create translations patch --------- Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
* chore: add deployment for native hosting * chore: fix native hosting workflow for alpha CLI - Remove pull_request trigger (no preview deployments) - Add concurrency group to prevent parallel deploys - Remove jq package.json mutation, use pnpm exec directly - Add separate generate step for GraphQL types - Fix env vars to CATALYST_* namespace for CLI commands - Remove --framework flag (removed in alpha) - Add --prebuilt to deploy (skip redundant build) - Add BIGCOMMERCE_API_HOST for integration API --------- Co-authored-by: Matthew Volk <matt.volk@bigcommerce.com>
…ityId (#2963) The DynamicFormField switch statement had no case for 'hidden' field types, causing hidden inputs (pageId, pagePath) to never render in the DOM. On form submission, these missing values produced undefined, which Number() converted to NaN, failing Zod validation. Refs: TRAC-292 Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
* feat(core): add X-Correlation-ID header to all GraphQL requests Each page render gets a stable UUID (via React.cache) that persists across all fetches within the same render, enabling easier request tracing in server logs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix(core): wrap correlation-id import in try/catch for config resolution The dynamic import of correlation-id.ts fails during next.config.ts resolution because React.cache is unavailable in that context. Wrap in try/catch to match the existing pattern for next-intl/server. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * chore: change correlation-id changeset to patch Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… config (#2983) Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The spec files for the `build`, `dev`, and `start` CLI commands asserted that execa was called with `'node_modules/.bin/next'` (and `'.bigcommerce/wrangler.jsonc'` in the OpenNext case) using POSIX separators. Production code builds these paths via Node's `path.join`, which returns `\`-separated paths on Windows, so the assertions fail on `CLI Tests (windows-latest)`. Import `join` in each spec and build the expected path the same way the production code does, so the assertions match regardless of OS. Fixes LTRAC-594 Co-authored-by: Claude <noreply@anthropic.com>
The root <html> tag was hardcoded to lang="en" for all locales because
a new root app/layout.tsx to enable the branded /404 page. That fix
solved the 404 but regressed the lang attribute.
Adopt next-intl's documented pattern:
- app/layout.tsx is now a passthrough (returns children) — required by
Next.js but owns no markup.
- app/[locale]/layout.tsx owns <html lang={locale}> and <body> again,
so localized pages get the correct language.
- app/not-found.tsx owns its own <html>/<body>, fonts, and global CSS
so the branded 404 still renders for non-localized requests.
Verified parity with canary on runtime 404 behavior (both serve the
Next.js error-fallback shell for dynamic 404s) and clean output in the
prerendered _not-found.html static file.
Fixes LTRAC-578
LTRAC-578: chore - Bump changeset to minor
Restructures <html>/<body> ownership across root layout, [locale]
layout, and not-found — customers who customized these files will need
to migrate, so a minor bump is more appropriate than patch.
Refs LTRAC-578
LTRAC-578: docs - Add TODO for rootParams migration
Note that the passthrough root layout is a workaround — once
Next.js `rootParams` (16.2+) is available on Native Hosting, we
should move <html>/<body> back here and derive `lang` from rootParams.
Refs LTRAC-578
Co-authored-by: Claude <noreply@anthropic.com>
* feat(other): LOCAL-1444 delivery translation * chore(core): create translations patch --------- Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
…3000) Document the workflow for shipping a single Catalyst package patch ahead of the normal release cadence, without bundling it with other queued changesets in the open Version Packages PR. Quarantines other changesets, runs `changeset version` for the target, hands the publish + canary push back to the user, and creates the GitHub release manually since the bot's release flow only fires when CI itself publishes. Co-authored-by: Claude <noreply@anthropic.com>
…checkbox-group (#3005) * fix(core): align formField.required with field.required for checkbox-group * chore: fix prettier formatting * refactor: use if/else for checkbox-group schema per review
* feat(other): LOCAL-1444 delivery translation * chore(core): create translations patch --------- Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
…r security patches (#3007) Addresses multiple CVEs disclosed May 2026: - next: ~16.1.6 → ~16.2.6 (middleware bypass, SSRF, XSS, cache poisoning) - react/react-dom: 19.1.5 → 19.1.7 (GHSA-rv78-f8rc-xrxh DoS via OOM/CPU on server function endpoints) - @opennextjs/cloudflare: 1.17.3 → 1.19.9 in native-hosting workflow eslint-config-next intentionally left at 15.5.10 — @16.x requires ESLint 9+/flat config migration. Fixes TRAC-668 Co-authored-by: Claude <noreply@anthropic.com>
…akeswift # Conflicts: # core/CHANGELOG.md # pnpm-lock.yaml
…3013) Customer-only webpages were inaccessible and missing from navigation when logged in. The with-routes proxy and the normal/contact webpage page-data queries resolved routes anonymously, so the Storefront API hid customer-restricted content from authenticated users. - Wrap the with-routes proxy handler in auth() and thread the customer access token into getRoute and getRawWebPageContent - Bypass the KV route cache when a customer access token is present; the cache key isn't namespaced by customer identity, so reading or writing it for authenticated requests could leak customer-specific route resolutions across users - Pass the customer access token into normal and contact webpage page-data queries, switching to a no-store fetch when authenticated so cached anonymous responses are not served to logged-in customers - Leave getStoreStatus unchanged (does not depend on customer identity) Refs TRAC-293 Co-authored-by: Claude <noreply@anthropic.com>
…laky E2E tests (#2964) Fix the underlying TRAC-281 breadcrumb mutation bug and stabilize the specific E2E tests that block CI around it. Core fixes: - `breadcrumbs-transformer.ts`: stop calling `.reverse()` on the array returned from React's `cache()`, which mutated the shared reference and caused parent breadcrumbs to disappear when `generateMetadata` raced `getWebPageBreadcrumbs`. Fix off-by-one in `truncateBreadcrumbs` where arrays exactly at the target length were incorrectly truncated. - `product-review-schema.tsx`: defer DOMPurify-using markup to the client via a mounted-state check; DOMPurify needs a browser DOM and crashed during SSR. E2E test stabilization: - `webpages.spec.ts`: drop the truncated-breadcrumb assertion from the nested-webpages test; the Storefront API caches PageTree and the assertion is unreliable in CI even after the upstream PHP fix. - `cart.spec.ts`, `coupon.spec.ts`, `shipping.spec.ts` (helper): stop asserting on the add-to-cart Sonner toast, which auto-dismisses after ~4s and made the assertion racy. Wait for `networkidle` and verify state on the /cart page instead. - `coupon.spec.ts`: replace the catch/reload pattern with a `toPass` retry that re-applies the coupon from a clean reloaded state when the optimistic update reverts (CATALYST-1685). The previous pattern only recovered when the server had already applied the coupon; reload alone couldn't recover a silently-failed action. - `account/orders.spec.ts`: add `.first()` to the empty-state title and order-id assertions to match the pattern already used by the rest of the file; Next.js 16.2 PPR/Suspense leaves a hidden stale shell alongside the streamed content, leaving two matches in the DOM. CI workflow: - `e2e.yml`: hoist `TESTS_LOCALE` and `TRAILING_SLASH` to job-level env so every step (Build, Start server, Run E2E tests) receives them. Previously they were only set on Start server, so: 1. The Build step ran without `TRAILING_SLASH`, baking `trailingSlash: true` into `next.config.ts` for the TRAILING_SLASH=false matrix. Next's own routing then added the trailing slash before the proxy could intercept, causing the trailing-slash redirect-loop regression tests to fail when they finally ran. 2. The Run E2E tests step ran without `TESTS_LOCALE` or `TRAILING_SLASH`, so `testEnv` fell back to schema defaults and every tagged test in the alternate-locale and TRAILING_SLASH=false matrices self-skipped, silently making those matrix jobs no-ops since they were added in the Next.js 16 proxy migration (#2912). Fixes TRAC-281 Refs CATALYST-1685 Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Parth Shah <parth.shah@bigcommerce.com>
Brand PLPs were defaulting to relevance, which is intended for search results. Pin the default to featured so unranked brand pages match the rest of the catalog.
* feat(other): LOCAL-1444 delivery translation * chore(core): create translations patch --------- Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
…akeswift # Conflicts: # core/CHANGELOG.md # core/app/[locale]/(default)/webpages/[id]/contact/page.tsx # core/app/[locale]/(default)/webpages/[id]/normal/page.tsx # core/package.json
* Version Packages (`integrations/makeswift`) * chore: trigger CI --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Parth Shah <parth.shah@bigcommerce.com>
…ons-b2b-makeswift @bigcommerce/catalyst-makeswift@1.7.0 # Conflicts: # README.md # core/proxy.ts
🦋 Changeset detectedLatest commit: 6e71497 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
Bundle Size ReportComparing against baseline from
Per-Route First Load JS
|
parthshahp
approved these changes
Jul 29, 2026
chanceaclark
merged commit Jul 29, 2026
6e71497
into
integrations/b2b-makeswift
16 of 18 checks passed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Jira: TRAC-1236
What/Why?
Rung 6 of 9 in the makeswift catch-up climb (LTRAC-1297):
1.6.0 → 1.7.0(54 commits).No register-page conflict this time — the first rung where upstream didn't touch those files, so nothing to resolve there.
README.md: kept b2b's own README wholesale. It's a fully custom, short template README (# Catalyst + B2B + Makeswift, alpha caution banner, B2B-specific setup requirements), deliberately distinct from upstream's generic marketing-style README, not something meant to absorb makeswift's badges/demo-links content. Did fix one real staleness while in there: it still said "Node.js version 22," bumped to 24 to match theenginesrequirement from rung 4.core/proxy.ts: additive, upstream added a newwithGraphqlProxy(proxies/graphqlPOST requests fromcheckout-sdk-jsthrough the existing GraphQL client with the customer's access token). Confirmed no overlap with b2b's ownwithB2B(different path patterns —/graphqlvs/account/*//login), so kept both in the composition chain.Same
package.json/CHANGELOG.mdsilent auto-merge, caught again (5th rung in a row): top-levelversionclobbered to raw1.7.0(reverted to b2b's actual1.6.0);CHANGELOG.mdhad makeswift's own historical entries pasted in (reverted to ours).Release-wiring guardrail: confirmed makeswift@1.7.0 still doesn't carry b2b-awareness in
changesets-release.yml(checked directly), so the "keep ours" rule still applies here even though the file wasn't actually touched/conflicted by this specific merge.Per the deferred-issues plan, not touching the rung-4
e2e.yml/bundle-size.ymlfindings here.Added
.changeset/sync-makeswift-1-7-0.mdfor this rung's own bump.Rollout/Rollback
Internal upgrade branch, no runtime/customer impact until eventually released and adopted. Rollback = revert the merge commit.
Do not squash or rebase-and-merge this PR. Use a true merge commit to preserve the merge base between
integrations/makeswiftandintegrations/b2b-makeswift.Testing
pnpm install --no-frozen-lockfileclean (Node 24).pnpm --filter @bigcommerce/catalyst-b2b-makeswift typecheck— clean (0 errors).pnpm --filter @bigcommerce/catalyst-b2b-makeswift lint— clean (0 errors, 0 warnings).CLI Tests (windows-latest)green (fix commit225c4ef4confirmed present from1.7.0onward).