From c52948073413f1c11bc3fb33b2b2080792bca936 Mon Sep 17 00:00:00 2001 From: Dan Barr <6922515+danbarr@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:32:52 -0500 Subject: [PATCH 1/4] Refine linter scopes for LLM vs documentation content - Move proper-names rule from root to docs-specific config so it only applies to user-facing documentation, not prompts/skills - Add proseWrap: never for LLM-consumed files (AGENTS.md, .claude/, .github/prompts/) to avoid hard-wrapping prompt content - Remove .claude/ from prettierignore so basic formatting still applies - Update markdownlint schema version to match installed version Co-Authored-By: Claude Opus 4.5 --- .markdownlint-cli2.jsonc | 3 +-- .markdownlint.json | 7 ++----- .prettierignore | 3 --- .prettierrc | 6 ++++++ docs/toolhive/.markdownlint.json | 4 ++++ 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc index 5325dcf3..fe76ae51 100644 --- a/.markdownlint-cli2.jsonc +++ b/.markdownlint-cli2.jsonc @@ -2,9 +2,8 @@ "gitignore": true, "globs": ["**/*.md"], "ignores": [ - ".claude/", "docs/toolhive/reference/cli/", - "static/api-specs/*.md", "docs/toolhive/reference/crd-spec.md", + "static/api-specs/*.md", ], } diff --git a/.markdownlint.json b/.markdownlint.json index 7ecb7743..0dc182f6 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -1,5 +1,5 @@ { - "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.35.0/schema/.markdownlint.jsonc", + "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.40.0/schema/.markdownlint.jsonc", "code-block-style": { "style": "fenced" }, @@ -21,10 +21,7 @@ "no-inline-html": { "allowed_elements": ["details", "summary"] }, - "proper-names": { - "code_blocks": false, - "names": ["Copilot", "GitHub", "ToolHive", "Datadog"] - }, + "proper-names": false, "strong-style": { "style": "asterisk" }, diff --git a/.prettierignore b/.prettierignore index a9b79311..f845854b 100644 --- a/.prettierignore +++ b/.prettierignore @@ -3,8 +3,5 @@ docs/toolhive/reference/cli/**/*.md static/api-specs/ docs/toolhive/reference/crd-spec.md -# Ignore Claude Code skills (prompts, not documentation) -.claude/ - # Ignore templates .github/pull_request_template.md diff --git a/.prettierrc b/.prettierrc index 20036a9a..5a6ed0ba 100644 --- a/.prettierrc +++ b/.prettierrc @@ -20,6 +20,12 @@ "options": { "proseWrap": "always" } + }, + { + "files": ["AGENTS.md", ".claude/**/*.md", ".github/prompts/**/*.md"], + "options": { + "proseWrap": "never" + } } ] } diff --git a/docs/toolhive/.markdownlint.json b/docs/toolhive/.markdownlint.json index de0fedc0..fba67f88 100644 --- a/docs/toolhive/.markdownlint.json +++ b/docs/toolhive/.markdownlint.json @@ -6,5 +6,9 @@ "code_blocks": false, "line_length": 80, "tables": false + }, + "proper-names": { + "code_blocks": false, + "names": ["Copilot", "GitHub", "ToolHive", "Datadog"] } } From f4201b2c81ed3697f6f5054f46eccf535aa6cc41 Mon Sep 17 00:00:00 2001 From: Dan Barr <6922515+danbarr@users.noreply.github.com> Date: Wed, 4 Feb 2026 14:34:30 -0500 Subject: [PATCH 2/4] Apply proseWrap: never to test-docs skill Co-Authored-By: Claude Opus 4.5 --- .claude/skills/test-docs/SKILL.md | 131 ++++++++---------------------- 1 file changed, 33 insertions(+), 98 deletions(-) diff --git a/.claude/skills/test-docs/SKILL.md b/.claude/skills/test-docs/SKILL.md index 35a87c28..65b7936a 100644 --- a/.claude/skills/test-docs/SKILL.md +++ b/.claude/skills/test-docs/SKILL.md @@ -1,31 +1,19 @@ --- name: test-docs description: > - Test ToolHive documentation by executing the steps in tutorials and guides - against a real environment, verifying that examples are correct and ToolHive - has not regressed. Use when the user asks to test, validate, or verify - documentation such as: "test the vault integration tutorial", - "verify the K8s quickstart", "check the CLI install docs", - "test toolhive vault integration in kubernetes", or any request to run - through a doc's instructions to confirm they work. Supports both - Kubernetes-based docs (tutorials, K8s guides) and CLI-based docs. + Test ToolHive documentation by executing the steps in tutorials and guides against a real environment, verifying that examples are correct and ToolHive has not regressed. Use when the user asks to test, validate, or verify documentation such as: "test the vault integration tutorial", "verify the K8s quickstart", "check the CLI install docs", "test toolhive vault integration in kubernetes", or any request to run through a doc's instructions to confirm they work. Supports both Kubernetes-based docs (tutorials, K8s guides) and CLI-based docs. --- # Test Docs -Test ToolHive documentation by running each step against a live environment, -reporting pass/fail with evidence, and recommending fixes for failures. +Test ToolHive documentation by running each step against a live environment, reporting pass/fail with evidence, and recommending fixes for failures. ## Workflow -1. **Find the documentation** - launch an Explore agent to locate the - relevant doc file -2. **Read and parse** - extract testable steps (bash code blocks, YAML - manifests, expected outputs) -3. **Check prerequisites** - run `scripts/check-prereqs.sh`; confirm the - `thv` version with the user -4. **Prepare the environment** - create a dedicated test namespace unless - the doc specifies otherwise +1. **Find the documentation** - launch an Explore agent to locate the relevant doc file +2. **Read and parse** - extract testable steps (bash code blocks, YAML manifests, expected outputs) +3. **Check prerequisites** - run `scripts/check-prereqs.sh`; confirm the `thv` version with the user +4. **Prepare the environment** - create a dedicated test namespace unless the doc specifies otherwise 5. **Execute steps** - run each step sequentially, capture output 6. **Report results** - pass/fail per step with evidence 7. **Clean up** - delete all resources created during testing @@ -33,12 +21,9 @@ reporting pass/fail with evidence, and recommending fixes for failures. ## Step 1: Find the documentation -If the user provides a **file path** to the doc, use it directly. Assume -you are running in the repository that contains the file. +If the user provides a **file path** to the doc, use it directly. Assume you are running in the repository that contains the file. -Otherwise, use the Task tool with `subagent_type=Explore` to search the -docs directory for the page matching the user's request. Documentation -lives under: +Otherwise, use the Task tool with `subagent_type=Explore` to search the docs directory for the page matching the user's request. Documentation lives under: - `docs/toolhive/tutorials/` - step-by-step tutorials - `docs/toolhive/guides-cli/` - CLI how-to guides @@ -47,18 +32,15 @@ lives under: - `docs/toolhive/guides-vmcp/` - Virtual MCP Server guides - `docs/toolhive/guides-registry/` - registry guides -All doc files use the `.mdx` extension. Search by keywords from the user's -request. If multiple docs match, ask the user which one to test. +All doc files use the `.mdx` extension. Search by keywords from the user's request. If multiple docs match, ask the user which one to test. ## Step 2: Read and parse the doc Read the full doc file. Extract an ordered list of **testable steps**: - **Bash code blocks** (`\`\`\`bash`) - commands to execute -- **YAML code blocks** with `title="*.yaml"` - manifests to apply with - `kubectl apply` -- **Expected outputs** - text code blocks (`\`\`\`text`) that follow a - command, or prose describing expected behavior ("You should see...") +- **YAML code blocks** with `title="*.yaml"` - manifests to apply with `kubectl apply` +- **Expected outputs** - text code blocks (`\`\`\`text`) that follow a command, or prose describing expected behavior ("You should see...") Build a test plan: a numbered list of steps, each with: @@ -70,11 +52,7 @@ Present the test plan to the user for approval before executing. ### Handling placeholders -Docs often contain placeholder values like `ghp_your_github_token_here` or -`your-org`. Before executing, scan for obvious placeholders (ALL_CAPS -patterns, "your-\*", "example-\*", "replace-\*") and ask the user for real -values. If a step requires a secret that the user cannot provide, mark it -as **skipped** with a note explaining why. +Docs often contain placeholder values like `ghp_your_github_token_here` or `your-org`. Before executing, scan for obvious placeholders (ALL_CAPS patterns, "your-\*", "example-\*", "replace-\*") and ask the user for real values. If a step requires a secret that the user cannot provide, mark it as **skipped** with a note explaining why. ## Step 3: Check prerequisites @@ -86,36 +64,21 @@ bash /scripts/check-prereqs.sh Where `` is the absolute path to this skill's directory. -If the script reports errors, inform the user and stop. For K8s docs, the -script checks for a kind cluster named "toolhive". For CLI docs, confirm -with the user that the installed `thv` version matches what the doc expects. +If the script reports errors, inform the user and stop. For K8s docs, the script checks for a kind cluster named "toolhive". For CLI docs, confirm with the user that the installed `thv` version matches what the doc expects. ## Step 4: Prepare the environment -For Kubernetes docs, ask the user about existing infrastructure before -deploying anything: +For Kubernetes docs, ask the user about existing infrastructure before deploying anything: -- **Operator CRDs and operator**: if the doc includes steps to install - CRDs or the ToolHive operator, ask the user whether these are already - installed. If so, skip those installation steps and proceed to the - doc-specific content. Use `AskUserQuestion` with options like - "Already installed", "Install fresh", "Reinstall (upgrade)". -- **Namespaces**: create a dedicated namespace `test-docs-` - (e.g., `test-docs-1706886400`) unless the doc explicitly uses a - specific namespace (like `toolhive-system`). If the doc requires - `toolhive-system`, use it but track all resources created for cleanup. +- **Operator CRDs and operator**: if the doc includes steps to install CRDs or the ToolHive operator, ask the user whether these are already installed. If so, skip those installation steps and proceed to the doc-specific content. Use `AskUserQuestion` with options like "Already installed", "Install fresh", "Reinstall (upgrade)". +- **Namespaces**: create a dedicated namespace `test-docs-` (e.g., `test-docs-1706886400`) unless the doc explicitly uses a specific namespace (like `toolhive-system`). If the doc requires `toolhive-system`, use it but track all resources created for cleanup. For CLI docs: - Use a temporary directory for any files created - Note the state of running MCP servers before testing (`thv list`) -- **Use unique server names**: when running `thv run `, always use - `--name -test` to avoid conflicts with existing servers. The - default name is derived from the registry entry, which may already be - running. Example: `thv run --name osv-test osv` -- **Verify registry configuration**: if a registry server isn't found, - confirm with the user that they're using the default registry (not a - custom registry configuration) +- **Use unique server names**: when running `thv run `, always use `--name -test` to avoid conflicts with existing servers. The default name is derived from the registry entry, which may already be running. Example: `thv run --name osv-test osv` +- **Verify registry configuration**: if a registry server isn't found, confirm with the user that they're using the default registry (not a custom registry configuration) ## Step 5: Execute steps @@ -129,37 +92,17 @@ Run each step sequentially. For each step: ### Execution rules -- **Wait for readiness**: when a step deploys resources, wait for them - (e.g., `kubectl wait --for=condition=ready`) before proceeding. If the - doc includes a wait command, use it. Otherwise add a reasonable wait - (up to 120s for pods). -- **Variable propagation**: some steps set shell variables used by later - steps (e.g., `VAULT_POD=$(kubectl get pods ...)`). Maintain these - across steps by running in the same shell session. -- **Skip non-testable steps**: informational code blocks (showing file - contents, expected output) are not commands to run. Use them as - verification targets instead. -- **Timeout**: if any command hangs for more than 5 minutes, kill it and - mark the step as failed with a timeout note. +- **Wait for readiness**: when a step deploys resources, wait for them (e.g., `kubectl wait --for=condition=ready`) before proceeding. If the doc includes a wait command, use it. Otherwise add a reasonable wait (up to 120s for pods). +- **Variable propagation**: some steps set shell variables used by later steps (e.g., `VAULT_POD=$(kubectl get pods ...)`). Maintain these across steps by running in the same shell session. +- **Skip non-testable steps**: informational code blocks (showing file contents, expected output) are not commands to run. Use them as verification targets instead. +- **Timeout**: if any command hangs for more than 5 minutes, kill it and mark the step as failed with a timeout note. ### Known pitfalls -- **Server name conflicts**: `thv run ` uses the registry entry - name by default, which may already exist. Always use - `thv run --name -test ` to create a uniquely-named - instance. This avoids "workload with name already exists" errors. -- **Port-forward needs time**: when testing via `kubectl port-forward`, - wait at least 5 seconds before issuing `curl`. Start the port-forward - in the background, sleep 5, then curl. Kill the port-forward PID - after the check. -- **MCPServer status field**: the MCPServer CRD uses `.status.phase` - (not `.status.state`) for the running state. When polling for - readiness, use: - `kubectl get mcpservers -n -o jsonpath='{.status.phase}'` - or simply poll `kubectl get mcpservers` and check the STATUS column. -- **MCPServer readiness polling**: after `kubectl apply` for an - MCPServer, it may take 30-60 seconds to reach `Running`. Poll with - 5-second intervals up to 120 seconds before declaring a timeout. +- **Server name conflicts**: `thv run ` uses the registry entry name by default, which may already exist. Always use `thv run --name -test ` to create a uniquely-named instance. This avoids "workload with name already exists" errors. +- **Port-forward needs time**: when testing via `kubectl port-forward`, wait at least 5 seconds before issuing `curl`. Start the port-forward in the background, sleep 5, then curl. Kill the port-forward PID after the check. +- **MCPServer status field**: the MCPServer CRD uses `.status.phase` (not `.status.state`) for the running state. When polling for readiness, use: `kubectl get mcpservers -n -o jsonpath='{.status.phase}'` or simply poll `kubectl get mcpservers` and check the STATUS column. +- **MCPServer readiness polling**: after `kubectl apply` for an MCPServer, it may take 30-60 seconds to reach `Running`. Poll with 5-second intervals up to 120 seconds before declaring a timeout. ## Step 6: Report results @@ -182,15 +125,10 @@ For each **FAIL**, include: - The command that failed - Actual output vs expected output - A classification: - - **Doc issue**: the command or example in the doc is wrong or outdated - (e.g., wrong image tag, deprecated flag, missing step) - - **ToolHive bug**: the doc appears correct but ToolHive behaves - unexpectedly (e.g., crash, wrong output from a correct command) - - **Environment issue**: missing prerequisite, network problem, or - transient error -- A specific recommendation (e.g., "Update image tag from `v0.7.0` to - `v0.8.2`" or "File a bug: MCPServer pods fail to start when Vault - annotations are present") + - **Doc issue**: the command or example in the doc is wrong or outdated (e.g., wrong image tag, deprecated flag, missing step) + - **ToolHive bug**: the doc appears correct but ToolHive behaves unexpectedly (e.g., crash, wrong output from a correct command) + - **Environment issue**: missing prerequisite, network problem, or transient error +- A specific recommendation (e.g., "Update image tag from `v0.7.0` to `v0.8.2`" or "File a bug: MCPServer pods fail to start when Vault annotations are present") ## Step 7: Clean up @@ -199,11 +137,9 @@ Always clean up after testing: - Delete test namespaces: `kubectl delete namespace ` - Remove Helm releases installed during testing - Delete any temporary files or directories -- If resources were created in `toolhive-system`, delete them individually - by name +- If resources were created in `toolhive-system`, delete them individually by name -If cleanup fails, report what could not be cleaned up so the user can -handle it manually. +If cleanup fails, report what could not be cleaned up so the user can handle it manually. ## Example session @@ -212,8 +148,7 @@ User: "test the vault integration tutorial" 1. Explore agent finds `docs/toolhive/tutorials/vault-integration.mdx` 2. Parse the doc: 5 major steps with 12 bash commands and 1 YAML manifest 3. Run `check-prereqs.sh` - kind cluster "toolhive" exists, thv v0.8.2 -4. Ask user: "The doc uses a placeholder GitHub token - `ghp_your_github_token_here`. Provide a real token or skip step 2?" +4. Ask user: "The doc uses a placeholder GitHub token `ghp_your_github_token_here`. Provide a real token or skip step 2?" 5. Present test plan, user approves 6. Execute steps 1-5, report results 7. Clean up: delete vault namespace, remove MCPServer resource From 8affa9feefb7ad10c76cc6b339a2381aa1786a3a Mon Sep 17 00:00:00 2001 From: Dan Barr <6922515+danbarr@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:32:53 -0500 Subject: [PATCH 3/4] Add includeIgnoreFile to eslint config --- eslint.config.mjs | 9 ++++++++- package-lock.json | 35 +++++++++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/eslint.config.mjs b/eslint.config.mjs index 397edde0..a7e1a248 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -1,3 +1,5 @@ +import { includeIgnoreFile } from '@eslint/compat'; +import { fileURLToPath } from 'node:url'; import globals from 'globals'; import pluginJs from '@eslint/js'; import tseslint from 'typescript-eslint'; @@ -5,9 +7,13 @@ import pluginReact from 'eslint-plugin-react'; import eslintConfigPrettier from 'eslint-config-prettier'; import * as mdx from 'eslint-plugin-mdx'; +const gitignorePath = fileURLToPath(new URL('.gitignore', import.meta.url)); + /** @type {import('eslint').Linter.Config[]} */ export default [ - { ignores: ['.docusaurus/', 'build/', 'node_modules/'] }, + includeIgnoreFile(gitignorePath), + // Auto-generated CLI docs (tracked in git but generated upstream) + { ignores: ['docs/toolhive/reference/cli/'] }, { files: ['**/*.{js,mjs,cjs,ts,jsx,tsx}'] }, { languageOptions: { globals: globals.node } }, @@ -27,6 +33,7 @@ export default [ ...mdx.flat.rules, 'react/no-unescaped-entities': 'off', 'react/jsx-no-undef': ['error', { allowGlobals: true }], + 'mdx/remark': 'off', // remark-lint's auto-fix clobbers MDX formatting }, languageOptions: { ...mdx.flat.languageOptions, diff --git a/package-lock.json b/package-lock.json index 8922f5bd..a8b2de4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "@docusaurus/module-type-aliases": "3.9.2", "@docusaurus/tsconfig": "3.9.2", "@docusaurus/types": "3.9.2", + "@eslint/compat": "^2.0.2", "@eslint/js": "^9.39.2", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", @@ -4287,6 +4288,40 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.2.tgz", + "integrity": "sha512-pR1DoD0h3HfF675QZx0xsyrsU8q70Z/plx7880NOhS02NuWLgBCOMDL787nUeQ7EWLkxv3bPQJaarjcPQb2Dwg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.1.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "peerDependencies": { + "eslint": "^8.40 || 9 || 10" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/compat/node_modules/@eslint/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.0.tgz", + "integrity": "sha512-/nr9K9wkr3P1EzFTdFdMoLuo1PmIxjmwvPozwoSodjNBdefGujXQUF93u1DDZpEaTuDvMsIQddsd35BwtrW9Xw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, "node_modules/@eslint/config-array": { "version": "0.21.1", "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", diff --git a/package.json b/package.json index 384ef746..655ddd72 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "@docusaurus/module-type-aliases": "3.9.2", "@docusaurus/tsconfig": "3.9.2", "@docusaurus/types": "3.9.2", + "@eslint/compat": "^2.0.2", "@eslint/js": "^9.39.2", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", From 3d4870af95f2fcc0706c253f181502f6fb76809a Mon Sep 17 00:00:00 2001 From: Dan Barr <6922515+danbarr@users.noreply.github.com> Date: Wed, 4 Feb 2026 18:37:54 -0500 Subject: [PATCH 4/4] Remove markdownlint Markdownlint doesn't support MDX files so it effectively does nothing anymore. Attempted to replace it with remark-lint but that caused more problems than it solved. --- .devcontainer/devcontainer.json | 1 - .github/prompts/doc-review.prompt.md | 3 +- .github/workflows/_static-checks.yaml | 3 - .lintstagedrc | 2 +- .markdownlint-cli2.jsonc | 9 - .markdownlint.json | 34 -- .vscode/extensions.json | 6 +- AGENTS.md | 13 +- README.md | 6 +- STYLE-GUIDE.md | 5 +- docs/toolhive/.markdownlint.json | 14 - docs/toolhive/_partials/.markdownlint.json | 5 - .../toolhive/reference/cli/.markdownlint.json | 3 - package-lock.json | 387 ------------------ package.json | 3 - renovate.json | 2 +- src/components/ProductCard/README.md | 2 - 17 files changed, 13 insertions(+), 485 deletions(-) delete mode 100644 .markdownlint-cli2.jsonc delete mode 100644 .markdownlint.json delete mode 100644 docs/toolhive/.markdownlint.json delete mode 100644 docs/toolhive/_partials/.markdownlint.json delete mode 100644 docs/toolhive/reference/cli/.markdownlint.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 8df1c23e..0ef1bfc8 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -21,7 +21,6 @@ "extensions": [ "unifiedjs.vscode-mdx", "esbenp.prettier-vscode", - "davidanson.vscode-markdownlint", "redhat.vscode-yaml", "yzhang.markdown-all-in-one", "bpruitt-goddard.mermaid-markdown-syntax-highlighting" diff --git a/.github/prompts/doc-review.prompt.md b/.github/prompts/doc-review.prompt.md index 68f2b153..8d835831 100644 --- a/.github/prompts/doc-review.prompt.md +++ b/.github/prompts/doc-review.prompt.md @@ -24,5 +24,4 @@ You can run `editFiles` to make changes based on your review. You can also run ` - `npm run build` to build the documentation site. - `npm run start` to start the local development server. - `npm run prettier` to check formatting. -- `npm run markdownlint` to check for linting errors. -- `npm run eslint` to check for JavaScript/TypeScript linting errors. +- `npm run eslint` to check for JavaScript/TypeScript/MDX linting errors. diff --git a/.github/workflows/_static-checks.yaml b/.github/workflows/_static-checks.yaml index beb3da98..e98a671e 100644 --- a/.github/workflows/_static-checks.yaml +++ b/.github/workflows/_static-checks.yaml @@ -20,8 +20,5 @@ jobs: - name: Run ESLint run: npm run eslint - - name: Run markdownlint - run: npm run markdownlint - - name: Run Prettier run: npm run prettier diff --git a/.lintstagedrc b/.lintstagedrc index d32a2432..bde7fd6c 100644 --- a/.lintstagedrc +++ b/.lintstagedrc @@ -1,5 +1,5 @@ { "*.{js,jsx,ts,tsx,mjs,cjs,mdx}": ["npx prettier --write", "npx eslint --fix"], - "*.md": ["npx prettier --write", "npx markdownlint-cli2 --fix"], + "*.md": ["npx prettier --write"], "*.{css,json,jsonc,yaml,yml}": ["npx prettier --write"] } diff --git a/.markdownlint-cli2.jsonc b/.markdownlint-cli2.jsonc deleted file mode 100644 index fe76ae51..00000000 --- a/.markdownlint-cli2.jsonc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "gitignore": true, - "globs": ["**/*.md"], - "ignores": [ - "docs/toolhive/reference/cli/", - "docs/toolhive/reference/crd-spec.md", - "static/api-specs/*.md", - ], -} diff --git a/.markdownlint.json b/.markdownlint.json deleted file mode 100644 index 0dc182f6..00000000 --- a/.markdownlint.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/DavidAnson/markdownlint/v0.40.0/schema/.markdownlint.jsonc", - "code-block-style": { - "style": "fenced" - }, - "code-fence-style": { - "style": "backtick" - }, - "emphasis-style": { - "style": "underscore" - }, - "first-line-h1": false, - "heading-style": { - "style": "atx" - }, - "hr-style": { - "style": "---" - }, - "line-length": false, - "no-bare-urls": false, - "no-inline-html": { - "allowed_elements": ["details", "summary"] - }, - "proper-names": false, - "strong-style": { - "style": "asterisk" - }, - "table-pipe-style": { - "style": "leading_and_trailing" - }, - "ul-style": { - "style": "dash" - } -} diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 1650a592..7ec1e159 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,7 +1,3 @@ { - "recommendations": [ - "unifiedjs.vscode-mdx", - "esbenp.prettier-vscode", - "davidanson.vscode-markdownlint" - ] + "recommendations": ["unifiedjs.vscode-mdx", "esbenp.prettier-vscode"] } diff --git a/AGENTS.md b/AGENTS.md index e7434087..e47f8bff 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -39,8 +39,7 @@ Development commands: Code quality commands (note: pre-commit hooks run these automatically on staged files): - `npm run prettier` and `npm run prettier:fix`: check and fix code formatting issues (all file types). -- `npm run eslint` and `npm run eslint:fix`: check and fix code quality issues (`.js`, `.jsx`, `.ts`, `.tsx`, `.mdx` files only). -- `npm run markdownlint` and `npm run markdownlint:fix`: check and fix Markdown style issues (`.md` files only - DO NOT use with `.mdx` files). +- `npm run eslint` and `npm run eslint:fix`: check and fix code quality and Markdown style issues (`.js`, `.jsx`, `.ts`, `.tsx`, `.mdx` files). ## Contribution guidelines @@ -54,14 +53,14 @@ Code quality commands (note: pre-commit hooks run these automatically on staged The project uses automated tooling to enforce code quality and formatting standards: -- **Pre-commit hooks**: lint-staged runs automatically on `git commit`, applying prettier and appropriate linters to staged files. -- **GitHub Actions**: All PRs trigger automated checks (ESLint, markdownlint, Prettier). +- **Pre-commit hooks**: lint-staged runs automatically on `git commit`, applying Prettier and appropriate linters to staged files. +- **GitHub Actions**: All PRs trigger automated checks (ESLint, Prettier). - **No manual formatting needed**: The pre-commit hook handles formatting automatically - you do not need to run formatters manually. File type to linter mapping (handled automatically by pre-commit hooks): -- `.md` files: Prettier + markdownlint -- `.mdx` files: Prettier + ESLint (NOT markdownlint) +- `.md` files: Prettier only +- `.mdx` files: Prettier + ESLint - `.js`, `.jsx`, `.ts`, `.tsx` files: Prettier + ESLint - `.css`, `.json`, `.jsonc`, `.yaml`, `.yml` files: Prettier only @@ -180,7 +179,7 @@ If you encounter a term not listed here that appears frequently in the documenta ## Markdown style -Prettier and markdownlint are used to enforce the following Markdown style conventions. +Prettier is used to enforce the following Markdown style conventions. - Headings: use "ATX-style" headings - Use unique headings within a document diff --git a/README.md b/README.md index 9a4cafd4..d9adebe5 100644 --- a/README.md +++ b/README.md @@ -55,12 +55,11 @@ having to restart the server. ## Formatting -We use a combination of Prettier, markdownlint, and ESLint to normalize -formatting and syntax. Before you submit a PR, please check for issues: +We use Prettier and ESLint to normalize formatting and syntax. Before you submit +a PR, please check for issues: ```bash npm run prettier -npm run markdownlint npm run eslint ``` @@ -68,7 +67,6 @@ To automatically fix issues: ```bash npm run prettier:fix -npm run markdownlint:fix npm run eslint:fix ``` diff --git a/STYLE-GUIDE.md b/STYLE-GUIDE.md index 663ff48e..c6e6da0f 100644 --- a/STYLE-GUIDE.md +++ b/STYLE-GUIDE.md @@ -163,8 +163,7 @@ Markdown-based documentation. We generally adopt the [Google Markdown style guide](https://google.github.io/styleguide/docguide/style.html), -which is well-aligned with default settings in formatting tools like Prettier -and `markdownlint`. +which is well-aligned with default settings in formatting tools like Prettier. Our preferred style elements include: @@ -316,5 +315,3 @@ from Microsoft. Per Microsoft's "Visual Studio Code" name the first time you reference it. "VS Code" is an acceptable short form after the first reference. It's written as two words and there are no other abbreviations/acronyms (not "VSCode", "VSC", or just "Code"). - - diff --git a/docs/toolhive/.markdownlint.json b/docs/toolhive/.markdownlint.json deleted file mode 100644 index fba67f88..00000000 --- a/docs/toolhive/.markdownlint.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "extends": "../../.markdownlint.json", - - "first-line-h1": true, - "line-length": { - "code_blocks": false, - "line_length": 80, - "tables": false - }, - "proper-names": { - "code_blocks": false, - "names": ["Copilot", "GitHub", "ToolHive", "Datadog"] - } -} diff --git a/docs/toolhive/_partials/.markdownlint.json b/docs/toolhive/_partials/.markdownlint.json deleted file mode 100644 index 3e2b9516..00000000 --- a/docs/toolhive/_partials/.markdownlint.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "../.markdownlint.json", - - "first-line-h1": false -} diff --git a/docs/toolhive/reference/cli/.markdownlint.json b/docs/toolhive/reference/cli/.markdownlint.json deleted file mode 100644 index 282e131e..00000000 --- a/docs/toolhive/reference/cli/.markdownlint.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "default": false -} diff --git a/package-lock.json b/package-lock.json index a8b2de4d..d552589e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,6 @@ "globals": "^17.2.0", "husky": "^9.1.7", "lint-staged": "^16.2.7", - "markdownlint-cli2": "^0.20.0", "prettier": "^3.8.1", "typescript": "~5.9.3", "typescript-eslint": "^8.54.0" @@ -5884,19 +5883,6 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@sindresorhus/merge-streams": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", - "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@slorber/remark-comment": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@slorber/remark-comment/-/remark-comment-1.0.0.tgz", @@ -6715,13 +6701,6 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "license": "MIT" }, - "node_modules/@types/katex": { - "version": "0.16.8", - "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.8.tgz", - "integrity": "sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", @@ -14835,16 +14814,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, - "node_modules/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "uc.micro": "^2.0.0" - } - }, "node_modules/lint-staged": { "version": "16.2.7", "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz", @@ -15208,24 +15177,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/markdown-it": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1", - "entities": "^4.4.0", - "linkify-it": "^5.0.0", - "mdurl": "^2.0.0", - "punycode.js": "^2.3.1", - "uc.micro": "^2.1.0" - }, - "bin": { - "markdown-it": "bin/markdown-it.mjs" - } - }, "node_modules/markdown-table": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", @@ -15236,149 +15187,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/markdownlint": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.40.0.tgz", - "integrity": "sha512-UKybllYNheWac61Ia7T6fzuQNDZimFIpCg2w6hHjgV1Qu0w1TV0LlSgryUGzM0bkKQCBhy2FDhEELB73Kb0kAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "micromark": "4.0.2", - "micromark-core-commonmark": "2.0.3", - "micromark-extension-directive": "4.0.0", - "micromark-extension-gfm-autolink-literal": "2.1.0", - "micromark-extension-gfm-footnote": "2.1.0", - "micromark-extension-gfm-table": "2.1.1", - "micromark-extension-math": "3.1.0", - "micromark-util-types": "2.0.2", - "string-width": "8.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli2": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.20.0.tgz", - "integrity": "sha512-esPk+8Qvx/f0bzI7YelUeZp+jCtFOk3KjZ7s9iBQZ6HlymSXoTtWGiIRZP05/9Oy2ehIoIjenVwndxGtxOIJYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "globby": "15.0.0", - "js-yaml": "4.1.1", - "jsonc-parser": "3.3.1", - "markdown-it": "14.1.0", - "markdownlint": "0.40.0", - "markdownlint-cli2-formatter-default": "0.0.6", - "micromatch": "4.0.8" - }, - "bin": { - "markdownlint-cli2": "markdownlint-cli2-bin.mjs" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - } - }, - "node_modules/markdownlint-cli2-formatter-default": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.6.tgz", - "integrity": "sha512-VVDGKsq9sgzu378swJ0fcHfSicUnMxnL8gnLm/Q4J/xsNJ4e5bA6lvAz7PCzIl0/No0lHyaWdqVD2jotxOSFMQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/DavidAnson" - }, - "peerDependencies": { - "markdownlint-cli2": ">=0.0.4" - } - }, - "node_modules/markdownlint-cli2/node_modules/globby": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-15.0.0.tgz", - "integrity": "sha512-oB4vkQGqlMl682wL1IlWd02tXCbquGWM4voPEI85QmNKCaw8zGTm1f1rubFgkg3Eli2PtKlFgrnmUqasbQWlkw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^4.0.0", - "fast-glob": "^3.3.3", - "ignore": "^7.0.5", - "path-type": "^6.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.3.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdownlint-cli2/node_modules/ignore": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", - "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/markdownlint-cli2/node_modules/jsonc-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", - "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/markdownlint-cli2/node_modules/path-type": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", - "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdownlint-cli2/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdownlint/node_modules/string-width": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz", - "integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.3.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/marked": { "version": "16.4.2", "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", @@ -15808,13 +15616,6 @@ "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "license": "CC0-1.0" }, - "node_modules/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, - "license": "MIT" - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -16039,85 +15840,6 @@ ], "license": "MIT" }, - "node_modules/micromark-extension-directive": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-4.0.0.tgz", - "integrity": "sha512-/C2nqVmXXmiseSSuCdItCMho7ybwwop6RrrRPk0KbOHW21JKoCldC+8rFOaundDoRBUWBnJJcxeA/Kvi34WQXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "devlop": "^1.0.0", - "micromark-factory-space": "^2.0.0", - "micromark-factory-whitespace": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0", - "parse-entities": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-directive/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, "node_modules/micromark-extension-frontmatter": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/micromark-extension-frontmatter/-/micromark-extension-frontmatter-2.0.0.tgz", @@ -16511,85 +16233,6 @@ ], "license": "MIT" }, - "node_modules/micromark-extension-math": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", - "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/katex": "^0.16.0", - "devlop": "^1.0.0", - "katex": "^0.16.0", - "micromark-factory-space": "^2.0.0", - "micromark-util-character": "^2.0.0", - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/micromark-extension-math/node_modules/micromark-factory-space": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", - "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-math/node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-extension-math/node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, "node_modules/micromark-extension-mdx-expression": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", @@ -20893,16 +20536,6 @@ "node": ">=6" } }, - "node_modules/punycode.js": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/pupa": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", @@ -24228,13 +23861,6 @@ "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/uc.micro": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, - "license": "MIT" - }, "node_modules/ufo": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", @@ -24315,19 +23941,6 @@ "node": ">=4" } }, - "node_modules/unicorn-magic": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", - "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/unified": { "version": "11.0.5", "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", diff --git a/package.json b/package.json index 655ddd72..ee01b145 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,6 @@ "docusaurus": "docusaurus", "eslint": "eslint .", "eslint:fix": "eslint . --fix", - "markdownlint": "markdownlint-cli2", - "markdownlint:fix": "markdownlint-cli2 --fix", "prepare": "husky", "prettier": "prettier . --check", "prettier:fix": "prettier . --write", @@ -51,7 +49,6 @@ "globals": "^17.2.0", "husky": "^9.1.7", "lint-staged": "^16.2.7", - "markdownlint-cli2": "^0.20.0", "prettier": "^3.8.1", "typescript": "~5.9.3", "typescript-eslint": "^8.54.0" diff --git a/renovate.json b/renovate.json index 858ac6ee..3ba57eb1 100644 --- a/renovate.json +++ b/renovate.json @@ -37,7 +37,7 @@ "packageRules": [ { "extends": ["packages:linters"], - "matchPackageNames": ["husky", "lint-staged", "markdownlint*", "globals"], + "matchPackageNames": ["husky", "lint-staged", "globals", "remark-*"], "groupName": "linters", "automerge": true }, diff --git a/src/components/ProductCard/README.md b/src/components/ProductCard/README.md index b6fa56b9..f1288f52 100644 --- a/src/components/ProductCard/README.md +++ b/src/components/ProductCard/README.md @@ -209,5 +209,3 @@ If migrating from a version that used shared utilities: The component now includes all necessary types and utilities internally, making it more portable and easier to maintain. - -