From aef691a3392d0266f42e077a71c83895cada2422 Mon Sep 17 00:00:00 2001 From: Aleksandr Pasevin Date: Fri, 21 Aug 2026 14:34:14 +0100 Subject: [PATCH 1/3] chore(ci): guard adapter peer versions in CI This repo had no peer guard. Its pins are currently correct -- 15 of 15 adapter/peer pairs satisfied -- but nothing was stopping an adapter bump from leaving the @openzeppelin/ui-* pins behind. The adapters enforce those minimums only at runtime, inside validatePeerVersions, so a stale pin passes build, typecheck, test and lint and then fails in the browser with the network runtime stuck failed. That is how the same mismatch reached rwa-wizard staging. Uses the shared oz-ui-dev check-peers command rather than a local script, so there is no per-repo copy to drift. It resolves scope directories from pnpm-workspace.yaml, which matters here: dependencies land both at the root and under apps/builder. Requires ui-dev-cli >=1.2.0, which is where check-peers lands. The only major change in 1.x is the Node engine floor >=22.13.0, which this repo already declares. The lockfile is intentionally not regenerated: 1.2.0 is unpublished, so pnpm cannot resolve it yet. --- .github/workflows/ci.yml | 6 ++++++ package.json | 5 +++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d3af7cb7..98731eb2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,6 +52,12 @@ jobs: - name: Install dependencies run: pnpm install + - name: Adapter peer version check + # The adapters enforce their @openzeppelin/ui-* minimums at runtime only, so a + # stale pin builds, typechecks and tests clean and then fails in the browser + # with the network runtime stuck failed. Nothing else in this job catches it. + run: pnpm exec oz-ui-dev check-peers --project "$PWD" + - name: Build all packages run: pnpm -r build env: diff --git a/package.json b/package.json index 7882f1e9..515a6e8c 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,8 @@ "export-app": "node apps/builder/src/export/cli/export-app.cjs", "preinstall": "npx only-allow pnpm", "install-pnpm": "npm install -g pnpm", - "check-licenses": "node scripts/check-dependency-licenses.cjs" + "check-licenses": "node scripts/check-dependency-licenses.cjs", + "check-adapter-peers": "oz-ui-dev check-peers --project \"$PWD\"" }, "lint-staged": { "*.{js,jsx,ts,tsx,cjs,mjs}": "pnpm fix-all" @@ -65,7 +66,7 @@ "@commitlint/cz-commitlint": "^19.8.1", "@ianvs/prettier-plugin-sort-imports": "4.5.1", "@openzeppelin/docs-utils": "^0.1.6", - "@openzeppelin/ui-dev-cli": "^0.6.1", + "@openzeppelin/ui-dev-cli": "^1.2.0", "@tailwindcss/postcss": "^4.2.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", From 06a8a66491cef1e23f096bd40b27dd2d25a84770 Mon Sep 17 00:00:00 2001 From: Aleksandr Pasevin Date: Mon, 24 Aug 2026 15:25:58 +0100 Subject: [PATCH 2/3] chore(ci): pin the shared peer guard to the published dev-cli 1.3.0 check-peers shipped in @openzeppelin/ui-dev-cli 1.3.0, so the branch no longer points at an unpublished version. --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 515a6e8c..d15e99bc 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ "@commitlint/cz-commitlint": "^19.8.1", "@ianvs/prettier-plugin-sort-imports": "4.5.1", "@openzeppelin/docs-utils": "^0.1.6", - "@openzeppelin/ui-dev-cli": "^1.2.0", + "@openzeppelin/ui-dev-cli": "^1.3.0", "@tailwindcss/postcss": "^4.2.2", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a276d54a..0f97d40b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -72,8 +72,8 @@ importers: specifier: ^0.1.6 version: 0.1.6 '@openzeppelin/ui-dev-cli': - specifier: ^0.6.1 - version: 0.6.1 + specifier: ^1.3.0 + version: 1.3.0 '@tailwindcss/postcss': specifier: ^4.2.2 version: 4.2.2 @@ -1551,9 +1551,9 @@ packages: react: ^19.0.0 react-dom: ^19.0.0 - '@openzeppelin/ui-dev-cli@0.6.1': - resolution: {integrity: sha512-W5hdgcHuKJSpBUXqL+5l6fE5CMK/6jFnl23saLG/IsmgC9XSdYetl+wkiNjOFoVNQqlvVao5TPyRRXJYxrkA0g==} - engines: {node: '>=20.19.0'} + '@openzeppelin/ui-dev-cli@1.3.0': + resolution: {integrity: sha512-Q1BldxQ7wE6g+oDZ19USnnPfQlx0G7pLlPBHLNCE05Co7qZRbiC3gPQqHfgC1wCPBtAgd6nB3G4/IjFylVN66g==} + engines: {node: '>=22.13.0'} hasBin: true '@openzeppelin/ui-react@3.3.1': @@ -1578,9 +1578,9 @@ packages: '@openzeppelin/ui-styles@1.1.0': resolution: {integrity: sha512-PSGe8k1M3zymLuhs3pus6MlhTgpTj7XFMEICTdTQYPDno/u6XL9AZM6hXlsK5dVlZTVjvmu3//LZ/K+81/Wc+Q==} - '@openzeppelin/ui-tailwind-utils@0.1.1': - resolution: {integrity: sha512-RGsMf4SARvzHJr0VesNss8JVgRGvqEINcK/e2XFXJb6QvkmaPzOoJylJGrMn5IevI0JWsyAXzhSrGRLmlBKpbg==} - engines: {node: '>=20.19.0'} + '@openzeppelin/ui-tailwind-utils@1.0.1': + resolution: {integrity: sha512-AAM64QJ0ihj/DMBE0SLYLnkiVQx6NuDdgb7cewfWVU1ZqrmNvnrfLpDwTQ6NHqtIO7VO3y89SgVPYWBdJpyCBQ==} + engines: {node: '>=22.13.0'} '@openzeppelin/ui-types@3.5.1': resolution: {integrity: sha512-j1baU8ary/qYKqoEs1vjzUdabbPOCRafJIGYaoD87wkr+V7UT3T08KVEMpZldZo0PhbKV8BUR2y/T/13T0nFxQ==} @@ -9767,10 +9767,10 @@ snapshots: - tailwindcss - typescript - '@openzeppelin/ui-dev-cli@0.6.1': + '@openzeppelin/ui-dev-cli@1.3.0': dependencies: '@clack/prompts': 0.10.1 - '@openzeppelin/ui-tailwind-utils': 0.1.1 + '@openzeppelin/ui-tailwind-utils': 1.0.1 commander: 13.1.0 picocolors: 1.1.1 @@ -9828,7 +9828,7 @@ snapshots: '@openzeppelin/ui-styles@1.1.0': {} - '@openzeppelin/ui-tailwind-utils@0.1.1': {} + '@openzeppelin/ui-tailwind-utils@1.0.1': {} '@openzeppelin/ui-types@3.5.1': {} From 383dad4ba713380842ccd299bb67bf4f2564cb77 Mon Sep 17 00:00:00 2001 From: Aleksandr Pasevin Date: Mon, 24 Aug 2026 15:28:33 +0100 Subject: [PATCH 3/3] chore(deps): sync export versions with published npm metadata The pre-push hook syncs versions.ts against the registry and refuses the push otherwise. This branch predates the adapter 5.x release, so its pins were stale. The values match the ones on fix/drop-metamask-sdk exactly, so the two branches merge without conflict. --- .../ExportSnapshotTests.test.ts.snap | 24 +++++++++---------- apps/builder/src/export/versions.ts | 24 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap b/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap index 905219ca..4a60053b 100644 --- a/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap +++ b/apps/builder/src/export/__tests__/__snapshots__/ExportSnapshotTests.test.ts.snap @@ -341,12 +341,12 @@ export default function GeneratedForm({ adapter, isWalletConnected }: GeneratedF exports[`Export Snapshot Tests > evm Export Snapshots > should match snapshot for package.json structure > package-json-evm 1`] = ` { "dependencies": { - "@openzeppelin/adapter-evm": "^4.0.0", - "@openzeppelin/ui-components": "^3.8.2", - "@openzeppelin/ui-react": "^3.3.1", - "@openzeppelin/ui-renderer": "^3.4.1", - "@openzeppelin/ui-types": "^3.5.1", - "@openzeppelin/ui-utils": "^4.0.0", + "@openzeppelin/adapter-evm": "^5.0.0", + "@openzeppelin/ui-components": "^3.8.3", + "@openzeppelin/ui-react": "^3.3.2", + "@openzeppelin/ui-renderer": "^3.4.2", + "@openzeppelin/ui-types": "^3.5.2", + "@openzeppelin/ui-utils": "^4.0.1", "@tanstack/react-query": "^5.0.0", "@wagmi/core": "^2.20.3", "react": "^19.2.1", @@ -708,12 +708,12 @@ export default function GeneratedForm({ adapter, isWalletConnected }: GeneratedF exports[`Export Snapshot Tests > polkadot Export Snapshots > should match snapshot for package.json structure > package-json-polkadot 1`] = ` { "dependencies": { - "@openzeppelin/adapter-polkadot": "^3.0.0", - "@openzeppelin/ui-components": "^3.8.2", - "@openzeppelin/ui-react": "^3.3.1", - "@openzeppelin/ui-renderer": "^3.4.1", - "@openzeppelin/ui-types": "^3.5.1", - "@openzeppelin/ui-utils": "^4.0.0", + "@openzeppelin/adapter-polkadot": "^5.0.0", + "@openzeppelin/ui-components": "^3.8.3", + "@openzeppelin/ui-react": "^3.3.2", + "@openzeppelin/ui-renderer": "^3.4.2", + "@openzeppelin/ui-types": "^3.5.2", + "@openzeppelin/ui-utils": "^4.0.1", "@tanstack/react-query": "^5.0.0", "@wagmi/core": "^2.20.3", "react": "^19.2.1", diff --git a/apps/builder/src/export/versions.ts b/apps/builder/src/export/versions.ts index 10719c36..734e7d9f 100644 --- a/apps/builder/src/export/versions.ts +++ b/apps/builder/src/export/versions.ts @@ -6,16 +6,16 @@ */ export const packageVersions = { - '@openzeppelin/adapter-evm': '4.0.0', - '@openzeppelin/adapter-midnight': '4.0.0', - '@openzeppelin/adapter-polkadot': '3.0.0', - '@openzeppelin/adapter-solana': '4.0.0', - '@openzeppelin/adapter-stellar': '4.0.0', - '@openzeppelin/ui-react': '3.3.1', - '@openzeppelin/ui-renderer': '3.4.1', - '@openzeppelin/ui-storage': '1.2.4', - '@openzeppelin/ui-types': '3.5.1', - '@openzeppelin/ui-components': '3.8.2', - '@openzeppelin/ui-utils': '4.0.0', - '@openzeppelin/ui-styles': '1.1.0', + '@openzeppelin/adapter-evm': '5.0.0', + '@openzeppelin/adapter-midnight': '4.0.1', + '@openzeppelin/adapter-polkadot': '5.0.0', + '@openzeppelin/adapter-solana': '4.0.1', + '@openzeppelin/adapter-stellar': '4.0.1', + '@openzeppelin/ui-react': '3.3.2', + '@openzeppelin/ui-renderer': '3.4.2', + '@openzeppelin/ui-storage': '1.2.5', + '@openzeppelin/ui-types': '3.5.2', + '@openzeppelin/ui-components': '3.8.3', + '@openzeppelin/ui-utils': '4.0.1', + '@openzeppelin/ui-styles': '1.1.1', };