Skip to content

sync: TRAC-1236 sync integrations/b2b-makeswift with integrations/makeswift@1.5.0 - #3143

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

sync: TRAC-1236 sync integrations/b2b-makeswift with integrations/makeswift@1.5.0#3143
chanceaclark merged 80 commits into
integrations/b2b-makeswiftfrom
sync-integrations-b2b-makeswift

Conversation

@chanceaclark

@chanceaclark chanceaclark commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Jira: TRAC-1236

What/Why?

Rung 4 of 9 in the makeswift catch-up climb (LTRAC-1297): 1.4.0 → 1.5.0 (79 commits).

Structural change: upstream renamed core/middlewares/*core/proxies/* (middleware.tsproxy.ts, composeMiddlewarescomposeProxies, MiddlewareFactoryProxyFactory). b2b's own middlewares/with-b2b.ts moved along with it (git relocated the file automatically); updated its stale imports (./compose-middlewares./compose-proxies, MiddlewareFactoryProxyFactory) and re-wired the withB2B import into the new core/proxy.ts. The actual composeProxies(...) call already had withB2B correctly positioned (auto-merged), only the import block needed fixing. Confirmed no other stale middlewares//compose-middlewares references remain anywhere.

core/data-transformers/product-options-transformer.ts — not actually a b2b customization, adopted upstream wholesale: b2b's persist: option.isVariantOption + id: option.entityId on every option type turned out to just be b2b running makeswift's older (1.4.0-era) convention, not a deliberate B2B override — confirmed makeswift@1.4.0 had the exact same code. Upstream's 1.5.0 changed this to a static per-field-type persist (true for selectable types, false for free-text types) and dropped the id field. Checked that nothing downstream (especially B2B code) reads field.id from product options (only the unrelated address-form transformer uses field.id), so took upstream's version wholesale — confirmed via diff that only these exact fields differed, nothing else was lost.

Register page: same pattern as rungs 2–3, makeswift's edit to the old page.tsx is moot since b2b's register/route.ts redirect is untouched and still live. Kept the deletion.

Same package.json/CHANGELOG.md silent auto-merges, caught again: top-level version clobbered to raw 1.5.0 (reverted to b2b's actual 1.4.0); CHANGELOG.md had makeswift's own historical entries pasted in (reverted to ours). Kept newer eslint-config-next 15.5.10. Picked up upstream's new engines: { node: ">=24.0.0" } in core/package.json cleanly.

Root package.json: additive conflict, kept b2b's changeset:version script alongside upstream's new test:scripts.

Release-wiring guardrail: not conflicted this rung (nothing upstream touched those files this time), confirmed unchanged and correct.

Switched local verification to the repo's actual pinned Node version (24.18.0 via mise/.nvmrc, which this rung bumped engines to require) instead of the Node 20 I'd been using — no engine warnings, typecheck/lint both clean.

Added .changeset/sync-makeswift-1-5-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.

chanceaclark and others added 30 commits January 6, 2026 20:28
When the sort option is changed in the product filter, the before/after
pagination query params are now removed. This prevents stale pagination
cursors from being used with the new sort order, which could lead to
incorrect results or empty pages.

Changes:
- Updated Sorting component to use useQueryStates instead of useQueryState
- Now manages sort, before, and after params together
- Clears before and after params when sort value changes

Co-authored-by: Claude <noreply@anthropic.com>
* fix(core): delete duplicate select component

* fix: remove console.log
* fix(core): persist checkbox modifier in PDP

* fix: handle default value for checkbox

* fix: revert form changes but keep track of options in params

* fix: update changset
* feat(core): add required prop to Label component and update form elements

- Introduced a `required` prop to the Label component to indicate mandatory fields.
- Updated Input, Textarea, NumberInput, Select, Checkbox, RadioGroup, and other form components to utilize the new `required` prop for better accessibility and user experience.

* refactor(core): format required indicator in Label component for improved readability

* display optional text for form fields instead of required asterisk

* fix linting

* add internationalization and translated messages for optional text

* remove formatting from da.json file

* removed formatting from language files

* removed formatting from language files

* added changeset

* remove 'optional' field from multiple language files

* ensure required prop is passed down in form input components

* pass required prop to RadioGroupPrimitive.Root

* fix linting

* removed optional text from checkbox

* Pass field.required to CheckboxGroup and Checkbox so that optional text can be displayed
* Add preventDefault to login form to prevent resetting of form on failed login attempt

* added changeset

* remove passing of action to form since actions is called manually in onSubmit handler
* chore(ci): BIGCOMMERCE_STORE_HASH secret is now var

* chore(ci): BIGCOMMERCE_CHANNEL_ID secret is now var
* refactor: decouple fields from state in DynamicForms

* fix: remove options from fields

* fix: pass passwordComplexity as an arg

* fix: remove fields from return state in contact form

* chore: add changeset
* feat(other): LOCAL-1444 delivery translation

* chore(core): create translations patch

---------

Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
* fix(core): remove decorative price element from accessibility tree

* fix: update to include accessibility best practices

* fix: update changeset

* fix: add price label component
* Updated gift certificate balance placeholder

* remove placeholders from gift certificates form

* add placeholders for coupon code and gift certificate on cart page

* added changelog

* remove placeholder for coupon code
* chore(catalyst): CATALYST-1297 Run E2E tests on PRs

* fix(catalyst): Fix required prop missing on cart shipping form

* chore(catalyst): CATALYST-1297 Use test matrix
* chore(ci): pass channel-specific env vars to vercel deploy

* chore(ci): harden deploy workflow security

replace eval with bash arrays, add timeouts, improve secret handling

* chore(ci): add b2b env vars to deploy workflow
* 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>
jorgemoya and others added 21 commits February 18, 2026 18:25
* fix(core): preview deployments now use correct metadataBase

* fix: lint issue

* fix: use URL.canParse

* chore: update changeset
* feat(ci): enable unlighthouse performance audits for vercel

Re-enable the performance category in Unlighthouse with mitigations for
hardware throttling: maxConcurrency=1 and samples=5 (median smoothing
absorbs cold start outliers across all discovered pages without needing
an explicit warm-up step). Rename artifacts with a "vercel" label for
future cross-platform comparison.

CATALYST-1768

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

* chore: revert samples to 3

* chore: add concurrency to speed tests

* fix: target specific PLP and PDP pages to prevent wasted runtime

* fix: change PLP category to bath

* fix: expand report

* chore: test concurrency and all routes

* fix: fixed paths, multiple samples, with concurrency

* fix: run all pages, concurrency enabled, 1 sample size

* fix: add sample size of 3

* feat: add dynamic sampling

* fix: split brands and categories

* fix: update excluded routes

* fix: excluded paths

* fix: exclude other sites

* fix: disable throttling

* chore: update dynamic sampling

* fix: remove brands from custom sampling since it should be picked up automatically

* chore: limit concurrency

* chore: remove concurrency limit, no visible change

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* fix(core): conditionally include optional SEO metadata

* fix: remove new line in product meta description
* feat(other): LOCAL-1444 delivery translation

* chore(core): create translations patch

---------

Co-authored-by: bc-svc-local <bc-svc-local@users.noreply.github.com>
* feat: report bundle size delta

* fix: add missing env vars

* fix: update reporting to hide no changes and visibly show updates

* feat: update bundle baseline when merged to canary

* fix: include integrations/makeswift

* chore: add comments

* fix: use parseArgs, split script from workflow

* chore: remove indicators

* feat: compare reports of live canary/makeswift branch instead of baseline

* fix: add --dir arg to use the script file in the PR to generate reports

* fix: split workflows to run in parallel

* fix: filter out 0% delta changes

* fix: use .at(0) and update resolve

* fix: add tests for scripts

* fix: use typescript and change PR comment report
…amount_display (#2901)

The form change handler only checked for inputs named 'amount', but the
select element for predefined gift certificate amounts uses the name
'amount_display'. This caused the GiftCertificateCard preview to not
update when selecting a new amount from the dropdown.
…age poisoning (#2905)

Replace static imports of next/headers, next/navigation, and next-intl/server
with dynamic import() calls inside the hooks that use them. Static imports
cause these modules to be evaluated during module graph resolution when
next.config.ts imports this file, poisoning the process-wide AsyncLocalStorage
context. Dynamic imports defer module loading to call time, after Next.js has
fully initialized.
* chore(core): bump next.js to 16 and align peer deps

Upgrade next, @next/bundle-analyzer, eslint-config-next to ^16.1.0 and
@next/eslint-plugin-next to ^16.1.0. React 19.1.5 is already compatible.

* refactor(core): replace unstable_expireTag with revalidateTag

* refactor(core): replace unstable_expirePath with revalidatePath

* chore(core): update tsconfig for next.js 16

Change jsx from "preserve" to "react-jsx" and add .next/dev/types to
the include array for generated dev types.

* fix(core): resolve Next.js 16 deprecation lint errors

Replace `NextMiddleware` with `NextProxy` and `priority` with `preload`
on Image components per Next.js 16 API changes.

* chore(core): add changeset for Next.js 16 upgrade
* chore: compare unlighthouse reports preview vs production

* fix: update labels and show scores from 0 to 100

* chore: add tests
Resolve inflated visitor counts caused by three issues:

- Visit cookie used a fixed TTL instead of a sliding window, creating
  new visits for users browsing longer than 30 minutes. Now refreshes
  the cookie TTL on every request.
- Prefetch and RSC requests triggered new visit and product view events.
  Now guards against Next-Router-Prefetch and RSC headers so only real
  navigations fire analytics mutations.
- Locale redirects from withIntl bypassed analytics entirely. Reorder
  middleware so withAnalyticsCookies runs before withIntl, ensuring
  cookies survive redirect responses.

Fixes CATALYST-1532

Co-authored-by: Claude <noreply@anthropic.com>
Next.js 16 deprecates middleware.ts in favor of proxy.ts. This renames
the entry point, export, composition utilities, and directory to align
with the new convention.

Also enforces Node 24 via engines field in package.json, since proxy
runs on the Node.js runtime (not Edge).
# Conflicts:
#	core/proxies/with-intl.ts
#	core/proxies/with-makeswift.ts
#	core/proxy.ts
#	pnpm-lock.yaml
fix(core): fix layout shift on makeswift page navigation
* Version Packages (`canary`)

* chore: trigger CI

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matthew Volk <matt.volk@bigcommerce.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…ons-b2b-makeswift

@bigcommerce/catalyst-makeswift@1.5.0

# Conflicts:
#	core/app/[locale]/(default)/(auth)/register/_actions/register-customer.ts
#	core/app/[locale]/(default)/(auth)/register/page-data.ts
#	core/app/[locale]/(default)/(auth)/register/page.tsx
#	core/data-transformers/product-options-transformer.ts
#	core/package.json
#	core/proxies/with-b2b.ts
#	core/proxy.ts
#	package.json
#	pnpm-lock.yaml
@changeset-bot

changeset-bot Bot commented Jul 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: ce07ea7

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 28, 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 28, 2026 9:39pm

Request Review

@github-actions

github-actions Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Bundle Size Report

Comparing against baseline from 52ac029 (2026-07-28).

Metric Baseline Current Delta
First Load JS 128.8 kB 118.6 kB -10.2 kB (-7.9%)
Total JS 448.2 kB 586.2 kB +138 kB (+30.8%) ⚠️

Per-Route First Load JS

Route Baseline Current Delta
/(default)/(auth)/change-password/page 332.5 kB 596.7 kB +264.2 kB (+79.5%) ⚠️
/(default)/(auth)/login/forgot-password/page 331.6 kB 595.8 kB +264.2 kB (+79.7%) ⚠️
/(default)/(auth)/login/page 332 kB 596.4 kB +264.4 kB (+79.6%) ⚠️
/(default)/(auth)/register/page 368.4 kB -- REMOVED
/(default)/(faceted)/brand/[slug]/page 344.1 kB 602.7 kB +258.6 kB (+75.2%) ⚠️
/(default)/(faceted)/category/[slug]/page 352.6 kB 610.8 kB +258.2 kB (+73.2%) ⚠️
/(default)/(faceted)/search/page 344.1 kB 602.7 kB +258.6 kB (+75.2%) ⚠️
/(default)/[...rest]/page 327.1 kB 597.8 kB +270.7 kB (+82.8%) ⚠️
/(default)/account/addresses/page 371.8 kB 600.3 kB +228.5 kB (+61.5%) ⚠️
/(default)/account/orders/[id]/page 335.2 kB 595.4 kB +260.2 kB (+77.6%) ⚠️
/(default)/account/orders/page 336.2 kB 596.4 kB +260.2 kB (+77.4%) ⚠️
/(default)/account/settings/page 373.3 kB 599.8 kB +226.5 kB (+60.7%) ⚠️
/(default)/account/wishlists/[id]/page 350 kB 605.1 kB +255.1 kB (+72.9%) ⚠️
/(default)/account/wishlists/page 345.1 kB 599.8 kB +254.7 kB (+73.8%) ⚠️
/(default)/blog/[blogId]/page 327.1 kB 597.8 kB +270.7 kB (+82.8%) ⚠️
/(default)/blog/page 328.1 kB 598.5 kB +270.4 kB (+82.4%) ⚠️
/(default)/cart/page 348.9 kB 604.6 kB +255.7 kB (+73.3%) ⚠️
/(default)/compare/page 339.3 kB 599.1 kB +259.8 kB (+76.6%) ⚠️
/(default)/gift-certificates/balance/page 331.1 kB 599.6 kB +268.5 kB (+81.1%) ⚠️
/(default)/gift-certificates/page 327.1 kB 597.8 kB +270.7 kB (+82.8%) ⚠️
/(default)/gift-certificates/purchase/page 370.9 kB 599.5 kB +228.6 kB (+61.6%) ⚠️
/(default)/page 344.3 kB 597.8 kB +253.5 kB (+73.6%) ⚠️
/(default)/product/[slug]/page 400.2 kB 610.9 kB +210.7 kB (+52.6%) ⚠️
/(default)/webpages/[id]/contact/page 369.3 kB 600.9 kB +231.6 kB (+62.7%) ⚠️
/(default)/webpages/[id]/normal/page 335.2 kB 598.3 kB +263.1 kB (+78.5%) ⚠️
/(default)/wishlist/[token]/page 339.9 kB 601.8 kB +261.9 kB (+77.1%) ⚠️
/maintenance/page 316.4 kB 594.3 kB +277.9 kB (+87.8%) ⚠️
/_global-error/page 142.8 kB 126.2 kB -16.6 kB (-11.6%)
/_not-found/page 142.8 kB 126.2 kB -16.6 kB (-11.6%)

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

@chanceaclark
chanceaclark merged commit ce07ea7 into integrations/b2b-makeswift Jul 29, 2026
23 of 29 checks passed
@chanceaclark
chanceaclark deleted the sync-integrations-b2b-makeswift branch July 29, 2026 15:43
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