diff --git a/.cursor/rules/contributor-workflow.mdc b/.cursor/rules/contributor-workflow.mdc index 5fd0598e27d..34bdb462b59 100644 --- a/.cursor/rules/contributor-workflow.mdc +++ b/.cursor/rules/contributor-workflow.mdc @@ -85,6 +85,13 @@ that enforces Microsoft style, Consensys terminology, and spelling. Fix any lint requesting review. If a warning is a false positive, add the term to the Vale vocabulary file rather than rewriting valid technical language. +> **Warning:** Do not wire Vale into the Husky `pre-commit` hook (`lint-staged` in `package.json`). +> Vale is intentionally CI-only. It frequently reports false positives on valid technical content +> (for example, code identifiers like `wagmi-tab`, product names, and intentional ellipses) and lints +> the entire staged file rather than just your diff, so running it on commit blocks unrelated, +> pre-existing content and stalls otherwise-valid commits. Let the PR CI run Vale; contributors can +> still run it on demand with `npm run docs:ci`. + ## Pull requests - Summarize what changed and why in the PR description. Do not just list files. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 339be3dbd1c..7cbf601d865 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -143,6 +143,14 @@ jobs: (cd .github-actions/docs-spelling-check && vale sync) - name: Run Vale if: steps.changed-files.outputs.any_changed == 'true' + # Vale is advisory only and must not block merges: it produces false positives on + # valid technical content (code identifiers like `wagmi-tab`, product names, + # intentional ellipses). `continue-on-error` MUST be at the step (not the job) so + # the job still concludes "success" and the required "Spelling" check passes while + # findings stay visible in the logs. Job-level `continue-on-error` does not work + # here: it only keeps the overall run green, but the job's own check run stays + # "failure" and a required status check keeps blocking the merge. + continue-on-error: true env: ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} run: | diff --git a/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-get-account.mdx b/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-get-account.mdx index 70a12a542b4..45af306aa9f 100644 --- a/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-get-account.mdx +++ b/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-get-account.mdx @@ -14,7 +14,7 @@ Install via **Package Manager** using OpenUpm: - add a new **Scoped Registry** (or edit the existing OpenUPM entry) - Name package.openupm.com - - URL + - URL - `Scope(s)` com.nethereum.unity diff --git a/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-installation.mdx b/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-installation.mdx index 39f445d1fca..4024dddc92c 100644 --- a/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-installation.mdx +++ b/embedded-wallets/connect-blockchain/_unity-connect-blockchain/_evm-installation.mdx @@ -14,7 +14,7 @@ Install via **Package Manager** using OpenUpm: - add a new **Scoped Registry** (or edit the existing OpenUPM entry) - Name package.openupm.com - - URL + - URL - `Scope(s)` com.nethereum.unity diff --git a/embedded-wallets/sdk/vue/README.mdx b/embedded-wallets/sdk/vue/README.mdx index 82f6ce636cd..4048a078650 100644 --- a/embedded-wallets/sdk/vue/README.mdx +++ b/embedded-wallets/sdk/vue/README.mdx @@ -227,7 +227,7 @@ Use composables from `@web3auth/modal/vue/solana`. ### Ethereum integration -Ethereum composables are provided through [`@wagmi/vue`](https://wagmi.sh/vue), which works with Embedded Wallets. This allows you to leverage a wide range of Ethereum composables for account management, transactions, and more. +Ethereum composables are provided through [`@wagmi/vue`](https://wagmi.sh/vue/getting-started), which works with Embedded Wallets. This allows you to leverage a wide range of Ethereum composables for account management, transactions, and more. For implementation details and examples, refer to the [Ethereum Composables](./ethereum-composables.mdx) section. diff --git a/package.json b/package.json index 4422c02560e..9d5497054d6 100644 --- a/package.json +++ b/package.json @@ -29,10 +29,7 @@ "**/*.{js,jsx,ts,tsx}": "eslint --fix --max-warnings=5 --no-warn-ignored", "**/*.{ts,tsx}": "tsc-files --noEmit src/globals.d.ts", "**/*.css": "stylelint --fix", - "**/*.{md,mdx}": [ - "prettier --write", - "bash scripts/vale-staged.sh" - ], + "**/*.{md,mdx}": "prettier --write", "**/*.{ts,js,tsx,jsx,json,css,scss,html,yml,yaml}": "prettier --write" }, "dependencies": { diff --git a/scripts/vale-staged.sh b/scripts/vale-staged.sh index 163343e3acd..c47eb02701e 100755 --- a/scripts/vale-staged.sh +++ b/scripts/vale-staged.sh @@ -1,5 +1,12 @@ #!/usr/bin/env bash # Run Vale (Consensys docs-spelling-check) on files passed by lint-staged. +# +# WARNING: Do NOT re-add this to the Husky pre-commit hook (`lint-staged` in +# package.json). Vale is intentionally CI-only: it produces false positives on +# valid technical content (code identifiers like `wagmi-tab`, product names, +# intentional ellipses) and lints the whole staged file, not just the diff, so +# running it on commit blocks unrelated pre-existing content. Let PR CI run Vale. +# Contributors can still run it on demand with `npm run docs:ci`. set -euo pipefail diff --git a/src/components/CopyableNoFollow/index.tsx b/src/components/CopyableNoFollow/index.tsx index e7610dcacc6..322879e97ce 100644 --- a/src/components/CopyableNoFollow/index.tsx +++ b/src/components/CopyableNoFollow/index.tsx @@ -11,9 +11,16 @@ type CopyableNoFollowProps = { url: string /** Optional link text; defaults to url */ children?: React.ReactNode + /** + * Render the value as plain, non-link text (keeping the copy button) instead + * of a nofollow anchor. Use for registry/endpoint URLs that are not meant to + * be browsed (for example, `package.openupm.com`), so crawlers don't flag + * them as broken links. + */ + plain?: boolean } -export default function CopyableNoFollow({ url, children }: CopyableNoFollowProps) { +export default function CopyableNoFollow({ url, children, plain }: CopyableNoFollowProps) { const [copied, setCopied] = useState(false) const handleCopy = useCallback(async () => { @@ -28,9 +35,13 @@ export default function CopyableNoFollow({ url, children }: CopyableNoFollowProp return ( - - {children ?? url} - + {plain ? ( + {children ?? url} + ) : ( + + {children ?? url} + + )}