Skip to content

sync: TRAC-1236 sync integrations/b2b-makeswift with integrations/makeswift@1.7.0 - #3147

Merged
chanceaclark merged 55 commits into
integrations/b2b-makeswiftfrom
sync-integrations-b2b-makeswift
Jul 29, 2026
Merged

sync: TRAC-1236 sync integrations/b2b-makeswift with integrations/makeswift@1.7.0#3147
chanceaclark merged 55 commits into
integrations/b2b-makeswiftfrom
sync-integrations-b2b-makeswift

Conversation

@chanceaclark

@chanceaclark chanceaclark commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

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 the engines requirement from rung 4.

core/proxy.ts: additive, upstream added a new withGraphqlProxy (proxies /graphql POST requests from checkout-sdk-js through the existing GraphQL client with the customer's access token). Confirmed no overlap with b2b's own withB2B (different path patterns — /graphql vs /account/*//login), so kept both in the composition chain.

Same package.json/CHANGELOG.md silent auto-merge, caught again (5th rung in a row): top-level version clobbered to raw 1.7.0 (reverted to b2b's actual 1.6.0); CHANGELOG.md had 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.yml findings here.

Added .changeset/sync-makeswift-1-7-0.md for 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/makeswift and integrations/b2b-makeswift.

Testing

  • pnpm install --no-frozen-lockfile clean (Node 24).
  • pnpm --filter @bigcommerce/catalyst-b2b-makeswift typecheck — clean (0 errors).
  • pnpm --filter @bigcommerce/catalyst-b2b-makeswift lint — clean (0 errors, 0 warnings).
  • No conflict markers remain anywhere in the tree.
  • This is the rung that should finally turn CLI Tests (windows-latest) green (fix commit 225c4ef4 confirmed present from 1.7.0 onward).

jorgemoya and others added 30 commits March 17, 2026 16:31
…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>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@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>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@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.
* 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>
parthshahp and others added 22 commits April 28, 2026 20:35
…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>
* Version Packages (`canary`)

* 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>
…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
@chanceaclark
chanceaclark requested a review from a team as a code owner July 29, 2026 17:22
@changeset-bot

changeset-bot Bot commented Jul 29, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 6e71497

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@bigcommerce/catalyst-b2b-makeswift Minor

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

@vercel

vercel Bot commented Jul 29, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
catalyst Ready Ready Preview, Comment Jul 29, 2026 5:23pm

Request Review

@github-actions

Copy link
Copy Markdown
Contributor

Bundle Size Report

Comparing against baseline from 7a0cdc1 (2026-07-29).

Metric Baseline Current Delta
First Load JS 128.8 kB 129.6 kB +0.8 kB (+0.6%)
Total JS 448.2 kB 713.7 kB +265.5 kB (+59.2%) ⚠️

Per-Route First Load JS

Route Baseline Current Delta
/(default)/(auth)/change-password/page 332.5 kB 612.4 kB +279.9 kB (+84.2%) ⚠️
/(default)/(auth)/login/forgot-password/page 331.6 kB 611.6 kB +280 kB (+84.4%) ⚠️
/(default)/(auth)/login/page 332 kB 612.1 kB +280.1 kB (+84.4%) ⚠️
/(default)/(auth)/register/page 368.4 kB -- REMOVED
/(default)/(faceted)/brand/[slug]/page 344.1 kB 618.4 kB +274.3 kB (+79.7%) ⚠️
/(default)/(faceted)/category/[slug]/page 352.6 kB 626.6 kB +274 kB (+77.7%) ⚠️
/(default)/(faceted)/search/page 344.1 kB 618.4 kB +274.3 kB (+79.7%) ⚠️
/(default)/[...rest]/page 327.1 kB 613.6 kB +286.5 kB (+87.6%) ⚠️
/(default)/account/addresses/page 371.8 kB 616.1 kB +244.3 kB (+65.7%) ⚠️
/(default)/account/orders/[id]/page 335.2 kB 611.2 kB +276 kB (+82.3%) ⚠️
/(default)/account/orders/page 336.2 kB 612.1 kB +275.9 kB (+82.1%) ⚠️
/(default)/account/settings/page 373.3 kB 615.5 kB +242.2 kB (+64.9%) ⚠️
/(default)/account/wishlists/[id]/page 350 kB 620.8 kB +270.8 kB (+77.4%) ⚠️
/(default)/account/wishlists/page 345.1 kB 615.5 kB +270.4 kB (+78.4%) ⚠️
/(default)/blog/[blogId]/page 327.1 kB 613.6 kB +286.5 kB (+87.6%) ⚠️
/(default)/blog/page 328.1 kB 614.3 kB +286.2 kB (+87.2%) ⚠️
/(default)/cart/page 348.9 kB 620.4 kB +271.5 kB (+77.8%) ⚠️
/(default)/compare/page 339.3 kB 614.8 kB +275.5 kB (+81.2%) ⚠️
/(default)/gift-certificates/balance/page 331.1 kB 615.4 kB +284.3 kB (+85.9%) ⚠️
/(default)/gift-certificates/page 327.1 kB 613.6 kB +286.5 kB (+87.6%) ⚠️
/(default)/gift-certificates/purchase/page 370.9 kB 615.3 kB +244.4 kB (+65.9%) ⚠️
/(default)/page 344.3 kB 613.6 kB +269.3 kB (+78.2%) ⚠️
/(default)/product/[slug]/page 400.2 kB 626.7 kB +226.5 kB (+56.6%) ⚠️
/(default)/webpages/[id]/contact/page 369.3 kB 616.7 kB +247.4 kB (+67%) ⚠️
/(default)/webpages/[id]/normal/page 335.2 kB 614.1 kB +278.9 kB (+83.2%) ⚠️
/(default)/wishlist/[token]/page 339.9 kB 617.5 kB +277.6 kB (+81.7%) ⚠️
/maintenance/page 316.4 kB 610.1 kB +293.7 kB (+92.8%) ⚠️
/_global-error/page 142.8 kB 143.8 kB +1 kB (+0.7%)
/_not-found/page 142.8 kB 562.6 kB +419.8 kB (+294%) ⚠️

Threshold: 5% increase. Routes with ⚠️ exceed the threshold.

@chanceaclark
chanceaclark merged commit 6e71497 into integrations/b2b-makeswift Jul 29, 2026
16 of 18 checks passed
@chanceaclark
chanceaclark deleted the sync-integrations-b2b-makeswift branch July 29, 2026 17:57
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.

10 participants