From dd0d197890da718aae254bcd368951f1e9e2bd44 Mon Sep 17 00:00:00 2001 From: David Anson Date: Sun, 27 Aug 2023 13:21:54 -0700 Subject: [PATCH 01/22] Switch smoke-test.yml from rimraf to del-cli. --- .github/workflows/smoke-test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index b66804d6..611dfd84 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -27,6 +27,6 @@ jobs: - run: npm install - run: npm pack - run: npm exec --yes -- cpy-cli "markdownlint-cli2-*.tgz" . --rename=markdownlint-cli2.tgz - - run: npm exec --yes -- rimraf node_modules .npmrc npm-shrinkwrap.json package.json package-lock.json + - run: npm exec --yes -- del-cli node_modules .npmrc npm-shrinkwrap.json package.json package-lock.json - run: npm install markdownlint-cli2.tgz - run: node_modules/.bin/markdownlint-cli2 README.md From 2c0fde308e4a87bda5dd4ce85555dbc651eea84d Mon Sep 17 00:00:00 2001 From: David Anson Date: Sun, 27 Aug 2023 13:26:25 -0700 Subject: [PATCH 02/22] Add "npm clean-install" to smoke-test.yml. --- .github/workflows/smoke-test.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index 611dfd84..b186ca67 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -30,3 +30,5 @@ jobs: - run: npm exec --yes -- del-cli node_modules .npmrc npm-shrinkwrap.json package.json package-lock.json - run: npm install markdownlint-cli2.tgz - run: node_modules/.bin/markdownlint-cli2 README.md + - run: npm clean-install + - run: node_modules/.bin/markdownlint-cli2 README.md From 6588bc59d6b598cb4b2ea7b9f061567174caf7d2 Mon Sep 17 00:00:00 2001 From: David Anson Date: Sun, 27 Aug 2023 13:39:30 -0700 Subject: [PATCH 03/22] Add midnight-smoker to smoke-test.yml to validate correct behavior of "npm pack" output, sort npm scripts (refs #198). --- .github/workflows/smoke-test.yml | 3 +++ package.json | 10 +++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index b186ca67..a8241875 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -32,3 +32,6 @@ jobs: - run: node_modules/.bin/markdownlint-cli2 README.md - run: npm clean-install - run: node_modules/.bin/markdownlint-cli2 README.md + - run: git clean -dfx && git restore . + - run: npm exec --yes -- midnight-smoker test-invoke-as-cli + if: matrix.os != 'windows-latest' diff --git a/package.json b/package.json index 180c9fea..43f0e5d0 100644 --- a/package.json +++ b/package.json @@ -36,11 +36,12 @@ "lint-watch": "git ls-files | entr npm run lint", "publish-docker-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker buildx build --platform linux/arm64,linux/amd64 -t davidanson/markdownlint-cli2:v$VERSION -t davidanson/markdownlint-cli2:latest -f docker/Dockerfile --push .", "test": "ava --timeout=1m test/append-to-array-test.js test/fs-mock-test.js test/markdownlint-cli2-test.js test/markdownlint-cli2-test-exec.js test/markdownlint-cli2-test-fs.js test/markdownlint-cli2-test-main.js test/merge-options-test.js test/resolve-and-require-test.js", - "test-docker-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:v$VERSION \"*.md\"", - "test-docker-image-rules": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:v$VERSION \"*.md\"", + "test-cover": "c8 --100 npm test -- --concurrency=1", "test-docker-hub-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2:v$VERSION davidanson/markdownlint-cli2:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:latest \"*.md\"", "test-docker-hub-image-rules": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2-rules:v$VERSION davidanson/markdownlint-cli2-rules:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:latest \"*.md\"", - "test-cover": "c8 --100 npm test -- --concurrency=1", + "test-docker-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:v$VERSION \"*.md\"", + "test-docker-image-rules": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2-rules:v$VERSION \"*.md\"", + "test-invoke-as-cli": "markdownlint-cli2 CHANGELOG.md", "test-watch": "git ls-files | entr npm run test", "update-snapshots": "ava --timeout=1m --update-snapshots test/markdownlint-cli2-test-exec.js test/markdownlint-cli2-test-fs.js test/markdownlint-cli2-test-main.js", "upgrade": "npx --yes npm-check-updates --upgrade", @@ -52,12 +53,15 @@ }, "files": [ "append-to-array.js", + "CHANGELOG.md", "export-markdownlint.js", "export-markdownlint-helpers.js", + "LICENSE", "markdownlint-cli2.js", "markdownlint-cli2-config.js", "markdownlint-cli2-fix.js", "merge-options.js", + "README.md", "resolve-and-require.js" ], "dependencies": { From 9cdb5bdce87f046923b4549d2ca4e62b76ea6ee6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 15:17:10 +0000 Subject: [PATCH 04/22] Bump yaml from 2.3.1 to 2.3.2 Bumps [yaml](https://github.com/eemeli/yaml) from 2.3.1 to 2.3.2. - [Release notes](https://github.com/eemeli/yaml/releases) - [Commits](https://github.com/eemeli/yaml/compare/v2.3.1...v2.3.2) --- updated-dependencies: - dependency-name: yaml dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 43f0e5d0..7dc2df66 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "markdownlint-cli2-formatter-default": "0.0.4", "micromatch": "4.0.5", "strip-json-comments": "5.0.1", - "yaml": "2.3.1" + "yaml": "2.3.2" }, "devDependencies": { "@iktakahiro/markdown-it-katex": "4.0.1", From 645e69a9c9a88dbe6b5dd912cdd565b8c40579b6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Aug 2023 15:16:37 +0000 Subject: [PATCH 05/22] Bump eslint from 8.47.0 to 8.48.0 Bumps [eslint](https://github.com/eslint/eslint) from 8.47.0 to 8.48.0. - [Release notes](https://github.com/eslint/eslint/releases) - [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md) - [Commits](https://github.com/eslint/eslint/compare/v8.47.0...v8.48.0) --- updated-dependencies: - dependency-name: eslint dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7dc2df66..e1f7434e 100644 --- a/package.json +++ b/package.json @@ -78,7 +78,7 @@ "c8": "8.0.1", "cpy": "10.1.0", "del": "7.0.0", - "eslint": "8.47.0", + "eslint": "8.48.0", "eslint-plugin-n": "16.0.2", "eslint-plugin-unicorn": "48.0.1", "execa": "8.0.1", From 6bc1ebc613c54c73dbd9dc1df4c514c8e15336ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Aug 2023 15:47:33 +0000 Subject: [PATCH 06/22] Bump del from 7.0.0 to 7.1.0 Bumps [del](https://github.com/sindresorhus/del) from 7.0.0 to 7.1.0. - [Release notes](https://github.com/sindresorhus/del/releases) - [Commits](https://github.com/sindresorhus/del/compare/v7.0.0...v7.1.0) --- updated-dependencies: - dependency-name: del dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e1f7434e..cde23304 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "ava": "5.3.1", "c8": "8.0.1", "cpy": "10.1.0", - "del": "7.0.0", + "del": "7.1.0", "eslint": "8.48.0", "eslint-plugin-n": "16.0.2", "eslint-plugin-unicorn": "48.0.1", From e406fc11327d6fb33aba025464ee1e526061ceae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Sep 2023 15:20:08 +0000 Subject: [PATCH 07/22] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/checkers.yml | 4 ++-- .github/workflows/ci.yml | 6 +++--- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/publish-container-image.yml | 2 +- .github/workflows/sarif.yml | 2 +- .github/workflows/smoke-test.yml | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/checkers.yml b/.github/workflows/checkers.yml index 783dfd22..29296e0a 100644 --- a/.github/workflows/checkers.yml +++ b/.github/workflows/checkers.yml @@ -14,7 +14,7 @@ jobs: linkcheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: JustinBeckwith/linkinator-action@v1.10.4 with: linksToSkip: '^https://github.com/.*/search\?q= ^https://opensource.org/' @@ -23,7 +23,7 @@ jobs: spellcheck: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: tbroadley/spellchecker-cli-action@v1 with: dictionaries: '.github/dictionary.txt' diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 16def3f9..e1eba563 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: node-version: [ 16, 18, 20 ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} uses: actions/setup-node@v3 with: @@ -34,7 +34,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Package markdownlint-cli2 run: npm pack - name: Install markdownlint-cli2 globally @@ -70,6 +70,6 @@ jobs: runs-on: ubuntu-latest container: hadolint/hadolint:latest-alpine steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: hadolint docker/Dockerfile - run: hadolint docker/Dockerfile-rules diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index d3691d40..43920a98 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Initialize CodeQL uses: github/codeql-action/init@v2 diff --git a/.github/workflows/publish-container-image.yml b/.github/workflows/publish-container-image.yml index f01b45c4..c9f5a3fa 100644 --- a/.github/workflows/publish-container-image.yml +++ b/.github/workflows/publish-container-image.yml @@ -15,7 +15,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v2 diff --git a/.github/workflows/sarif.yml b/.github/workflows/sarif.yml index ce476a7c..6b871e93 100644 --- a/.github/workflows/sarif.yml +++ b/.github/workflows/sarif.yml @@ -16,7 +16,7 @@ jobs: permissions: security-events: write steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: npm install --no-package-lock - run: node markdownlint-cli2.js --config .github/sarif.markdownlint-cli2.jsonc '**/README.md' '#node_modules' continue-on-error: true diff --git a/.github/workflows/smoke-test.yml b/.github/workflows/smoke-test.yml index a8241875..bd84eb64 100644 --- a/.github/workflows/smoke-test.yml +++ b/.github/workflows/smoke-test.yml @@ -20,7 +20,7 @@ jobs: node-version: [ 16, 18, 20 ] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} From a97bd2201d79695899b9eded17a3ba533a637bb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Sep 2023 04:29:56 +0000 Subject: [PATCH 08/22] Bump markdownlint from 0.30.0 to 0.31.0 Bumps [markdownlint](https://github.com/DavidAnson/markdownlint) from 0.30.0 to 0.31.0. - [Changelog](https://github.com/DavidAnson/markdownlint/blob/main/CHANGELOG.md) - [Commits](https://github.com/DavidAnson/markdownlint/compare/v0.30.0...v0.31.0) --- updated-dependencies: - dependency-name: markdownlint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cde23304..5b77311c 100644 --- a/package.json +++ b/package.json @@ -66,7 +66,7 @@ ], "dependencies": { "globby": "13.2.2", - "markdownlint": "0.30.0", + "markdownlint": "0.31.0", "markdownlint-cli2-formatter-default": "0.0.4", "micromatch": "4.0.5", "strip-json-comments": "5.0.1", From 623ef35572a981c44b8bbb1f7dce9b77f183fbdd Mon Sep 17 00:00:00 2001 From: David Anson Date: Thu, 7 Sep 2023 21:37:22 -0700 Subject: [PATCH 09/22] Ignore rule no-space-in-code in README.md due to newly-detected issue in example. --- formatter-pretty/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/formatter-pretty/README.md b/formatter-pretty/README.md index b33745b0..c2872e73 100644 --- a/formatter-pretty/README.md +++ b/formatter-pretty/README.md @@ -41,7 +41,7 @@ To append informational links to the output instead (which may be clickable): ## Example - +
 dir/about.md:1:1 MD021/no-multiple-space-closed-atx Multiple spaces inside hashes on closed atx style heading [Context: "#  About  #"]

From 40216aa330e055e1ad59d12b39ccc5c1f52c37c1 Mon Sep 17 00:00:00 2001
From: David Anson 
Date: Fri, 8 Sep 2023 22:00:16 -0700
Subject: [PATCH 10/22] Run "npm pkg fix" on all non-private package.json
 files.

---
 formatter-codequality/package.json | 2 +-
 formatter-default/package.json     | 2 +-
 formatter-json/package.json        | 2 +-
 formatter-junit/package.json       | 2 +-
 formatter-pretty/package.json      | 2 +-
 formatter-sarif/package.json       | 2 +-
 formatter-summarize/package.json   | 2 +-
 package.json                       | 2 +-
 8 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/formatter-codequality/package.json b/formatter-codequality/package.json
index c4540575..71e2271c 100644
--- a/formatter-codequality/package.json
+++ b/formatter-codequality/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/formatter-default/package.json b/formatter-default/package.json
index df692c58..9cf686c1 100644
--- a/formatter-default/package.json
+++ b/formatter-default/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/formatter-json/package.json b/formatter-json/package.json
index c9da723f..4511a8b1 100644
--- a/formatter-json/package.json
+++ b/formatter-json/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/formatter-junit/package.json b/formatter-junit/package.json
index 9995bd48..62b27b13 100644
--- a/formatter-junit/package.json
+++ b/formatter-junit/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/formatter-pretty/package.json b/formatter-pretty/package.json
index c7fd5a5e..d326711e 100644
--- a/formatter-pretty/package.json
+++ b/formatter-pretty/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/formatter-sarif/package.json b/formatter-sarif/package.json
index fe5ade0a..704100b0 100644
--- a/formatter-sarif/package.json
+++ b/formatter-sarif/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/formatter-summarize/package.json b/formatter-summarize/package.json
index 0a30537b..e5395c4e 100644
--- a/formatter-summarize/package.json
+++ b/formatter-summarize/package.json
@@ -11,7 +11,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "files": [
diff --git a/package.json b/package.json
index 5b77311c..77c0e058 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
   "homepage": "https://github.com/DavidAnson/markdownlint-cli2",
   "repository": {
     "type": "git",
-    "url": "https://github.com/DavidAnson/markdownlint-cli2.git"
+    "url": "git+https://github.com/DavidAnson/markdownlint-cli2.git"
   },
   "bugs": "https://github.com/DavidAnson/markdownlint-cli2/issues",
   "scripts": {

From c74fe6bd0ebfab460e1eea2fa168660239eac85a Mon Sep 17 00:00:00 2001
From: David Anson 
Date: Fri, 8 Sep 2023 23:17:44 -0700
Subject: [PATCH 11/22] Add config schema for .markdownlint-cli2.jsonc (from VS
 Code extension), include it and config schema for .markdownlint.jsonc in
 project/package, validate both against corresponding files in the project.

---
 package.json                                |   11 +-
 schema/markdownlint-cli2-config-schema.json |  109 ++
 schema/markdownlint-config-schema.json      | 1108 +++++++++++++++++++
 test/markdownlint-cli2-test.js              |   54 +
 4 files changed, 1279 insertions(+), 3 deletions(-)
 create mode 100644 schema/markdownlint-cli2-config-schema.json
 create mode 100644 schema/markdownlint-config-schema.json

diff --git a/package.json b/package.json
index 77c0e058..5195f723 100644
--- a/package.json
+++ b/package.json
@@ -28,13 +28,14 @@
   "scripts": {
     "build-docker-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker build -t davidanson/markdownlint-cli2:v$VERSION -f docker/Dockerfile --label org.opencontainers.image.version=v$VERSION .",
     "build-docker-image-rules": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker build -t davidanson/markdownlint-cli2-rules:v$VERSION -f docker/Dockerfile-rules --build-arg VERSION=v$VERSION --label org.opencontainers.image.version=v$VERSION .",
-    "ci": "npm-run-all --continue-on-error --parallel test-cover lint",
+    "ci": "npm-run-all --continue-on-error --parallel test-cover lint schema",
     "docker-npm-install": "docker run --rm --tty --name npm-install --volume $PWD:/home/workdir --workdir /home/workdir --user node node:latest npm install",
     "docker-npm-run-upgrade": "docker run --rm --tty --name npm-run-upgrade --volume $PWD:/home/workdir --workdir /home/workdir --user node node:latest npm run upgrade",
     "lint": "eslint --max-warnings 0 --no-eslintrc --config .eslintrc.json .",
     "lint-dockerfile": "docker run --rm -i hadolint/hadolint:latest-alpine < docker/Dockerfile",
     "lint-watch": "git ls-files | entr npm run lint",
     "publish-docker-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker buildx build --platform linux/arm64,linux/amd64 -t davidanson/markdownlint-cli2:v$VERSION -t davidanson/markdownlint-cli2:latest -f docker/Dockerfile --push .",
+    "schema": "cpy ./node_modules/markdownlint/schema/markdownlint-config-schema.json ./schema --flat",
     "test": "ava --timeout=1m test/append-to-array-test.js test/fs-mock-test.js test/markdownlint-cli2-test.js test/markdownlint-cli2-test-exec.js test/markdownlint-cli2-test-fs.js test/markdownlint-cli2-test-main.js test/merge-options-test.js test/resolve-and-require-test.js",
     "test-cover": "c8 --100 npm test -- --concurrency=1",
     "test-docker-hub-image": "VERSION=$(node -e \"process.stdout.write(require('./package.json').version)\") && docker image rm davidanson/markdownlint-cli2:v$VERSION davidanson/markdownlint-cli2:latest || true && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:v$VERSION \"*.md\" && docker run --rm -v $PWD:/workdir davidanson/markdownlint-cli2:latest \"*.md\"",
@@ -62,7 +63,9 @@
     "markdownlint-cli2-fix.js",
     "merge-options.js",
     "README.md",
-    "resolve-and-require.js"
+    "resolve-and-require.js",
+    "schema/markdownlint-cli2-config-schema.json",
+    "schema/markdownlint-config-schema.json"
   ],
   "dependencies": {
     "globby": "13.2.2",
@@ -77,6 +80,7 @@
     "ava": "5.3.1",
     "c8": "8.0.1",
     "cpy": "10.1.0",
+    "cpy-cli": "5.0.0",
     "del": "7.1.0",
     "eslint": "8.48.0",
     "eslint-plugin-n": "16.0.2",
@@ -91,7 +95,8 @@
     "markdownlint-cli2-formatter-sarif": "0.0.1",
     "markdownlint-cli2-formatter-summarize": "0.0.6",
     "markdownlint-rule-titlecase": "0.1.0",
-    "npm-run-all": "4.1.5"
+    "npm-run-all": "4.1.5",
+    "tv4": "1.3.0"
   },
   "keywords": [
     "markdown",
diff --git a/schema/markdownlint-cli2-config-schema.json b/schema/markdownlint-cli2-config-schema.json
new file mode 100644
index 00000000..93bbea49
--- /dev/null
+++ b/schema/markdownlint-cli2-config-schema.json
@@ -0,0 +1,109 @@
+{
+  "$schema": "http://json-schema.org/draft-07/schema#",
+  "title": "markdownlint-cli2 configuration schema",
+  "type": "object",
+  "properties": {
+    "$schema": {
+      "description": "JSON Schema URI (used by some editors)",
+      "type": "string",
+      "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint-cli2/main/schema/markdownlint-cli2-config-schema.json"
+    },
+    "config": {
+      "description": "markdownlint-cli2 configuration schema",
+      "$ref": "./markdownlint-config-schema.json",
+      "default": {}
+    },
+    "customRules": {
+      "description": "Module names or paths of custom rules to load and use when linting",
+      "type": "array",
+      "default": [],
+      "items": {
+        "description": "Module name or path of a custom rule",
+        "type": "string",
+        "minLength": 1
+      }
+    },
+    "fix": {
+      "description": "Whether to enable fixing of linting errors reported by rules that emit fix information",
+      "type": "boolean",
+      "default": false
+    },
+    "frontMatter": {
+      "description": "Regular expression used to match and ignore any front matter at the beginning of a document",
+      "type": "string",
+      "minLength": 1,
+      "default": ""
+    },
+    "globs": {
+      "description": "Glob expressions to include when linting (only valid at the root)",
+      "type": "array",
+      "default": [],
+      "items": {
+        "description": "Glob expression of files to lint",
+        "type": "string",
+        "minLength": 1
+      }
+    },
+    "ignores": {
+      "description": "Glob expressions to ignore when linting",
+      "type": "array",
+      "default": [],
+      "items": {
+        "description": "Glob expression of files to ignore",
+        "type": "string",
+        "minLength": 1
+      }
+    },
+    "markdownItPlugins": {
+      "description": "markdown-it plugins to load and use when linting",
+      "type": "array",
+      "default": [],
+      "items": {
+        "description": "Name or path of a markdown-it plugin followed by parameters",
+        "type": "array",
+        "items": [
+          {
+            "description": "Name or path of a markdown-it plugin",
+            "type": "string",
+            "minLength": 1
+          },
+          {
+            "description": "Parameter(s) to pass to the markdown-it plugin"
+          }
+        ],
+        "minItems": 1
+      }
+    },
+    "noInlineConfig": {
+      "description": "Whether to disable support of HTML comments within Markdown content",
+      "type": "boolean",
+      "default": false
+    },
+    "noProgress": {
+      "description": "Whether to disable the display of progress on stdout (only valid at the root)",
+      "type": "boolean",
+      "default": false
+    },
+    "outputFormatters": {
+      "description": "Output formatters to load and use to customize markdownlint-cli2 output (only valid at the root)",
+      "type": "array",
+      "default": [],
+      "items": {
+        "description": "Name or path of an output formatter followed by parameters",
+        "type": "array",
+        "items": [
+          {
+            "description": "Name or path of an output formatter",
+            "type": "string",
+            "minLength": 1
+          },
+          {
+            "description": "Parameter(s) to pass to the output formatter"
+          }
+        ],
+        "minItems": 1
+      }
+    }
+  },
+  "additionalProperties": false
+}
diff --git a/schema/markdownlint-config-schema.json b/schema/markdownlint-config-schema.json
new file mode 100644
index 00000000..03fa000b
--- /dev/null
+++ b/schema/markdownlint-config-schema.json
@@ -0,0 +1,1108 @@
+{
+  "title": "Markdownlint configuration schema",
+  "type": "object",
+  "properties": {
+    "default": {
+      "description": "Default state for all rules",
+      "type": "boolean",
+      "default": true
+    },
+    "extends": {
+      "description": "Path to configuration file to extend",
+      "type": [
+        "string",
+        "null"
+      ],
+      "default": null
+    },
+    "$schema": {
+      "description": "JSON Schema URI (used by some editors)",
+      "type": "string",
+      "default": "https://raw.githubusercontent.com/DavidAnson/markdownlint/main/schema/markdownlint-config-schema.json"
+    },
+    "MD001": {
+      "description": "MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time",
+      "type": "boolean",
+      "default": true
+    },
+    "heading-increment": {
+      "$ref": "#/properties/MD001"
+    },
+    "header-increment": {
+      "$ref": "#/properties/MD001"
+    },
+    "MD002": {
+      "description": "MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "level": {
+          "description": "Heading level",
+          "type": "integer",
+          "minimum": 1,
+          "maximum": 6,
+          "default": 1
+        }
+      },
+      "additionalProperties": false
+    },
+    "first-heading-h1": {
+      "$ref": "#/properties/MD002"
+    },
+    "first-header-h1": {
+      "$ref": "#/properties/MD002"
+    },
+    "MD003": {
+      "description": "MD003/heading-style/header-style - Heading style",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "Heading style",
+          "type": "string",
+          "enum": [
+            "consistent",
+            "atx",
+            "atx_closed",
+            "setext",
+            "setext_with_atx",
+            "setext_with_atx_closed"
+          ],
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "heading-style": {
+      "$ref": "#/properties/MD003"
+    },
+    "header-style": {
+      "$ref": "#/properties/MD003"
+    },
+    "MD004": {
+      "description": "MD004/ul-style - Unordered list style",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "List style",
+          "type": "string",
+          "enum": [
+            "consistent",
+            "asterisk",
+            "plus",
+            "dash",
+            "sublist"
+          ],
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "ul-style": {
+      "$ref": "#/properties/MD004"
+    },
+    "MD005": {
+      "description": "MD005/list-indent - Inconsistent indentation for list items at the same level",
+      "type": "boolean",
+      "default": true
+    },
+    "list-indent": {
+      "$ref": "#/properties/MD005"
+    },
+    "MD006": {
+      "description": "MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line",
+      "type": "boolean",
+      "default": true
+    },
+    "ul-start-left": {
+      "$ref": "#/properties/MD006"
+    },
+    "MD007": {
+      "description": "MD007/ul-indent - Unordered list indentation",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "indent": {
+          "description": "Spaces for indent",
+          "type": "integer",
+          "minimum": 1,
+          "default": 2
+        },
+        "start_indented": {
+          "description": "Whether to indent the first level of the list",
+          "type": "boolean",
+          "default": false
+        },
+        "start_indent": {
+          "description": "Spaces for first level indent (when start_indented is set)",
+          "type": "integer",
+          "minimum": 1,
+          "default": 2
+        }
+      },
+      "additionalProperties": false
+    },
+    "ul-indent": {
+      "$ref": "#/properties/MD007"
+    },
+    "MD009": {
+      "description": "MD009/no-trailing-spaces - Trailing spaces",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "br_spaces": {
+          "description": "Spaces for line break",
+          "type": "integer",
+          "minimum": 0,
+          "default": 2
+        },
+        "list_item_empty_lines": {
+          "description": "Allow spaces for empty lines in list items",
+          "type": "boolean",
+          "default": false
+        },
+        "strict": {
+          "description": "Include unnecessary breaks",
+          "type": "boolean",
+          "default": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-trailing-spaces": {
+      "$ref": "#/properties/MD009"
+    },
+    "MD010": {
+      "description": "MD010/no-hard-tabs - Hard tabs",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "code_blocks": {
+          "description": "Include code blocks",
+          "type": "boolean",
+          "default": true
+        },
+        "ignore_code_languages": {
+          "description": "Fenced code languages to ignore",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "default": []
+        },
+        "spaces_per_tab": {
+          "description": "Number of spaces for each hard tab",
+          "type": "integer",
+          "minimum": 0,
+          "default": 1
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-hard-tabs": {
+      "$ref": "#/properties/MD010"
+    },
+    "MD011": {
+      "description": "MD011/no-reversed-links - Reversed link syntax",
+      "type": "boolean",
+      "default": true
+    },
+    "no-reversed-links": {
+      "$ref": "#/properties/MD011"
+    },
+    "MD012": {
+      "description": "MD012/no-multiple-blanks - Multiple consecutive blank lines",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "maximum": {
+          "description": "Consecutive blank lines",
+          "type": "integer",
+          "minimum": 1,
+          "default": 1
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-multiple-blanks": {
+      "$ref": "#/properties/MD012"
+    },
+    "MD013": {
+      "description": "MD013/line-length - Line length",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "line_length": {
+          "description": "Number of characters",
+          "type": "integer",
+          "minimum": 1,
+          "default": 80
+        },
+        "heading_line_length": {
+          "description": "Number of characters for headings",
+          "type": "integer",
+          "minimum": 1,
+          "default": 80
+        },
+        "code_block_line_length": {
+          "description": "Number of characters for code blocks",
+          "type": "integer",
+          "minimum": 1,
+          "default": 80
+        },
+        "code_blocks": {
+          "description": "Include code blocks",
+          "type": "boolean",
+          "default": true
+        },
+        "tables": {
+          "description": "Include tables",
+          "type": "boolean",
+          "default": true
+        },
+        "headings": {
+          "description": "Include headings",
+          "type": "boolean",
+          "default": true
+        },
+        "headers": {
+          "description": "Include headings",
+          "type": "boolean",
+          "default": true
+        },
+        "strict": {
+          "description": "Strict length checking",
+          "type": "boolean",
+          "default": false
+        },
+        "stern": {
+          "description": "Stern length checking",
+          "type": "boolean",
+          "default": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "line-length": {
+      "$ref": "#/properties/MD013"
+    },
+    "MD014": {
+      "description": "MD014/commands-show-output - Dollar signs used before commands without showing output",
+      "type": "boolean",
+      "default": true
+    },
+    "commands-show-output": {
+      "$ref": "#/properties/MD014"
+    },
+    "MD018": {
+      "description": "MD018/no-missing-space-atx - No space after hash on atx style heading",
+      "type": "boolean",
+      "default": true
+    },
+    "no-missing-space-atx": {
+      "$ref": "#/properties/MD018"
+    },
+    "MD019": {
+      "description": "MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading",
+      "type": "boolean",
+      "default": true
+    },
+    "no-multiple-space-atx": {
+      "$ref": "#/properties/MD019"
+    },
+    "MD020": {
+      "description": "MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading",
+      "type": "boolean",
+      "default": true
+    },
+    "no-missing-space-closed-atx": {
+      "$ref": "#/properties/MD020"
+    },
+    "MD021": {
+      "description": "MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading",
+      "type": "boolean",
+      "default": true
+    },
+    "no-multiple-space-closed-atx": {
+      "$ref": "#/properties/MD021"
+    },
+    "MD022": {
+      "description": "MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "lines_above": {
+          "description": "Blank lines above heading",
+          "type": [
+            "integer",
+            "array"
+          ],
+          "items": {
+            "type": "integer"
+          },
+          "minimum": -1,
+          "default": 1
+        },
+        "lines_below": {
+          "description": "Blank lines below heading",
+          "type": [
+            "integer",
+            "array"
+          ],
+          "items": {
+            "type": "integer"
+          },
+          "minimum": -1,
+          "default": 1
+        }
+      },
+      "additionalProperties": false
+    },
+    "blanks-around-headings": {
+      "$ref": "#/properties/MD022"
+    },
+    "blanks-around-headers": {
+      "$ref": "#/properties/MD022"
+    },
+    "MD023": {
+      "description": "MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line",
+      "type": "boolean",
+      "default": true
+    },
+    "heading-start-left": {
+      "$ref": "#/properties/MD023"
+    },
+    "header-start-left": {
+      "$ref": "#/properties/MD023"
+    },
+    "MD024": {
+      "description": "MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "allow_different_nesting": {
+          "description": "Only check sibling headings",
+          "type": "boolean",
+          "default": false
+        },
+        "siblings_only": {
+          "description": "Only check sibling headings",
+          "type": "boolean",
+          "default": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-duplicate-heading": {
+      "$ref": "#/properties/MD024"
+    },
+    "no-duplicate-header": {
+      "$ref": "#/properties/MD024"
+    },
+    "MD025": {
+      "description": "MD025/single-title/single-h1 - Multiple top-level headings in the same document",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "level": {
+          "description": "Heading level",
+          "type": "integer",
+          "minimum": 1,
+          "maximum": 6,
+          "default": 1
+        },
+        "front_matter_title": {
+          "description": "RegExp for matching title in front matter",
+          "type": "string",
+          "default": "^\\s*title\\s*[:=]"
+        }
+      },
+      "additionalProperties": false
+    },
+    "single-title": {
+      "$ref": "#/properties/MD025"
+    },
+    "single-h1": {
+      "$ref": "#/properties/MD025"
+    },
+    "MD026": {
+      "description": "MD026/no-trailing-punctuation - Trailing punctuation in heading",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "punctuation": {
+          "description": "Punctuation characters",
+          "type": "string",
+          "default": ".,;:!。,;:!"
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-trailing-punctuation": {
+      "$ref": "#/properties/MD026"
+    },
+    "MD027": {
+      "description": "MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol",
+      "type": "boolean",
+      "default": true
+    },
+    "no-multiple-space-blockquote": {
+      "$ref": "#/properties/MD027"
+    },
+    "MD028": {
+      "description": "MD028/no-blanks-blockquote - Blank line inside blockquote",
+      "type": "boolean",
+      "default": true
+    },
+    "no-blanks-blockquote": {
+      "$ref": "#/properties/MD028"
+    },
+    "MD029": {
+      "description": "MD029/ol-prefix - Ordered list item prefix",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "List style",
+          "type": "string",
+          "enum": [
+            "one",
+            "ordered",
+            "one_or_ordered",
+            "zero"
+          ],
+          "default": "one_or_ordered"
+        }
+      },
+      "additionalProperties": false
+    },
+    "ol-prefix": {
+      "$ref": "#/properties/MD029"
+    },
+    "MD030": {
+      "description": "MD030/list-marker-space - Spaces after list markers",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "ul_single": {
+          "description": "Spaces for single-line unordered list items",
+          "type": "integer",
+          "minimum": 1,
+          "default": 1
+        },
+        "ol_single": {
+          "description": "Spaces for single-line ordered list items",
+          "type": "integer",
+          "minimum": 1,
+          "default": 1
+        },
+        "ul_multi": {
+          "description": "Spaces for multi-line unordered list items",
+          "type": "integer",
+          "minimum": 1,
+          "default": 1
+        },
+        "ol_multi": {
+          "description": "Spaces for multi-line ordered list items",
+          "type": "integer",
+          "minimum": 1,
+          "default": 1
+        }
+      },
+      "additionalProperties": false
+    },
+    "list-marker-space": {
+      "$ref": "#/properties/MD030"
+    },
+    "MD031": {
+      "description": "MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "list_items": {
+          "description": "Include list items",
+          "type": "boolean",
+          "default": true
+        }
+      },
+      "additionalProperties": false
+    },
+    "blanks-around-fences": {
+      "$ref": "#/properties/MD031"
+    },
+    "MD032": {
+      "description": "MD032/blanks-around-lists - Lists should be surrounded by blank lines",
+      "type": "boolean",
+      "default": true
+    },
+    "blanks-around-lists": {
+      "$ref": "#/properties/MD032"
+    },
+    "MD033": {
+      "description": "MD033/no-inline-html - Inline HTML",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "allowed_elements": {
+          "description": "Allowed elements",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "default": []
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-inline-html": {
+      "$ref": "#/properties/MD033"
+    },
+    "MD034": {
+      "description": "MD034/no-bare-urls - Bare URL used",
+      "type": "boolean",
+      "default": true
+    },
+    "no-bare-urls": {
+      "$ref": "#/properties/MD034"
+    },
+    "MD035": {
+      "description": "MD035/hr-style - Horizontal rule style",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "Horizontal rule style",
+          "type": "string",
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "hr-style": {
+      "$ref": "#/properties/MD035"
+    },
+    "MD036": {
+      "description": "MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "punctuation": {
+          "description": "Punctuation characters",
+          "type": "string",
+          "default": ".,;:!?。,;:!?"
+        }
+      },
+      "additionalProperties": false
+    },
+    "no-emphasis-as-heading": {
+      "$ref": "#/properties/MD036"
+    },
+    "no-emphasis-as-header": {
+      "$ref": "#/properties/MD036"
+    },
+    "MD037": {
+      "description": "MD037/no-space-in-emphasis - Spaces inside emphasis markers",
+      "type": "boolean",
+      "default": true
+    },
+    "no-space-in-emphasis": {
+      "$ref": "#/properties/MD037"
+    },
+    "MD038": {
+      "description": "MD038/no-space-in-code - Spaces inside code span elements",
+      "type": "boolean",
+      "default": true
+    },
+    "no-space-in-code": {
+      "$ref": "#/properties/MD038"
+    },
+    "MD039": {
+      "description": "MD039/no-space-in-links - Spaces inside link text",
+      "type": "boolean",
+      "default": true
+    },
+    "no-space-in-links": {
+      "$ref": "#/properties/MD039"
+    },
+    "MD040": {
+      "description": "MD040/fenced-code-language - Fenced code blocks should have a language specified",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "allowed_languages": {
+          "description": "List of languages",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "default": []
+        },
+        "language_only": {
+          "description": "Require language only",
+          "type": "boolean",
+          "default": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "fenced-code-language": {
+      "$ref": "#/properties/MD040"
+    },
+    "MD041": {
+      "description": "MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "level": {
+          "description": "Heading level",
+          "type": "integer",
+          "minimum": 1,
+          "maximum": 6,
+          "default": 1
+        },
+        "front_matter_title": {
+          "description": "RegExp for matching title in front matter",
+          "type": "string",
+          "default": "^\\s*title\\s*[:=]"
+        }
+      },
+      "additionalProperties": false
+    },
+    "first-line-heading": {
+      "$ref": "#/properties/MD041"
+    },
+    "first-line-h1": {
+      "$ref": "#/properties/MD041"
+    },
+    "MD042": {
+      "description": "MD042/no-empty-links - No empty links",
+      "type": "boolean",
+      "default": true
+    },
+    "no-empty-links": {
+      "$ref": "#/properties/MD042"
+    },
+    "MD043": {
+      "description": "MD043/required-headings/required-headers - Required heading structure",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "headings": {
+          "description": "List of headings",
+          "type": "array",
+          "items": {
+            "type": "string",
+            "pattern": "^(\\*|\\+|#{1,6} .*)$"
+          },
+          "default": []
+        },
+        "headers": {
+          "description": "List of headings",
+          "type": "array",
+          "items": {
+            "type": "string",
+            "pattern": "^(\\*|\\+|#{1,6} .*)$"
+          },
+          "default": []
+        },
+        "match_case": {
+          "description": "Match case of headings",
+          "type": "boolean",
+          "default": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "required-headings": {
+      "$ref": "#/properties/MD043"
+    },
+    "required-headers": {
+      "$ref": "#/properties/MD043"
+    },
+    "MD044": {
+      "description": "MD044/proper-names - Proper names should have the correct capitalization",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "names": {
+          "description": "List of proper names",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "default": []
+        },
+        "code_blocks": {
+          "description": "Include code blocks",
+          "type": "boolean",
+          "default": true
+        },
+        "html_elements": {
+          "description": "Include HTML elements",
+          "type": "boolean",
+          "default": true
+        }
+      },
+      "additionalProperties": false
+    },
+    "proper-names": {
+      "$ref": "#/properties/MD044"
+    },
+    "MD045": {
+      "description": "MD045/no-alt-text - Images should have alternate text (alt text)",
+      "type": "boolean",
+      "default": true
+    },
+    "no-alt-text": {
+      "$ref": "#/properties/MD045"
+    },
+    "MD046": {
+      "description": "MD046/code-block-style - Code block style",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "Block style",
+          "type": "string",
+          "enum": [
+            "consistent",
+            "fenced",
+            "indented"
+          ],
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "code-block-style": {
+      "$ref": "#/properties/MD046"
+    },
+    "MD047": {
+      "description": "MD047/single-trailing-newline - Files should end with a single newline character",
+      "type": "boolean",
+      "default": true
+    },
+    "single-trailing-newline": {
+      "$ref": "#/properties/MD047"
+    },
+    "MD048": {
+      "description": "MD048/code-fence-style - Code fence style",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "Code fence style",
+          "type": "string",
+          "enum": [
+            "consistent",
+            "backtick",
+            "tilde"
+          ],
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "code-fence-style": {
+      "$ref": "#/properties/MD048"
+    },
+    "MD049": {
+      "description": "MD049/emphasis-style - Emphasis style should be consistent",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "Emphasis style",
+          "type": "string",
+          "enum": [
+            "consistent",
+            "asterisk",
+            "underscore"
+          ],
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "emphasis-style": {
+      "$ref": "#/properties/MD049"
+    },
+    "MD050": {
+      "description": "MD050/strong-style - Strong style should be consistent",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "style": {
+          "description": "Strong style",
+          "type": "string",
+          "enum": [
+            "consistent",
+            "asterisk",
+            "underscore"
+          ],
+          "default": "consistent"
+        }
+      },
+      "additionalProperties": false
+    },
+    "strong-style": {
+      "$ref": "#/properties/MD050"
+    },
+    "MD051": {
+      "description": "MD051/link-fragments - Link fragments should be valid",
+      "type": "boolean",
+      "default": true
+    },
+    "link-fragments": {
+      "$ref": "#/properties/MD051"
+    },
+    "MD052": {
+      "description": "MD052/reference-links-images - Reference links and images should use a label that is defined",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "shortcut_syntax": {
+          "description": "Include shortcut syntax",
+          "type": "boolean",
+          "default": false
+        }
+      },
+      "additionalProperties": false
+    },
+    "reference-links-images": {
+      "$ref": "#/properties/MD052"
+    },
+    "MD053": {
+      "description": "MD053/link-image-reference-definitions - Link and image reference definitions should be needed",
+      "type": [
+        "boolean",
+        "object"
+      ],
+      "default": true,
+      "properties": {
+        "ignored_definitions": {
+          "description": "Ignored definitions",
+          "type": "array",
+          "items": {
+            "type": "string"
+          },
+          "default": [
+            "//"
+          ]
+        }
+      },
+      "additionalProperties": false
+    },
+    "link-image-reference-definitions": {
+      "$ref": "#/properties/MD053"
+    },
+    "headings": {
+      "description": "headings - MD001, MD002, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043",
+      "type": "boolean",
+      "default": true
+    },
+    "headers": {
+      "description": "headers - MD001, MD002, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043",
+      "type": "boolean",
+      "default": true
+    },
+    "bullet": {
+      "description": "bullet - MD004, MD005, MD006, MD007, MD032",
+      "type": "boolean",
+      "default": true
+    },
+    "ul": {
+      "description": "ul - MD004, MD005, MD006, MD007, MD030, MD032",
+      "type": "boolean",
+      "default": true
+    },
+    "indentation": {
+      "description": "indentation - MD005, MD006, MD007, MD027",
+      "type": "boolean",
+      "default": true
+    },
+    "whitespace": {
+      "description": "whitespace - MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039",
+      "type": "boolean",
+      "default": true
+    },
+    "hard_tab": {
+      "description": "hard_tab - MD010",
+      "type": "boolean",
+      "default": true
+    },
+    "links": {
+      "description": "links - MD011, MD034, MD039, MD042, MD051, MD052, MD053",
+      "type": "boolean",
+      "default": true
+    },
+    "blank_lines": {
+      "description": "blank_lines - MD012, MD022, MD031, MD032, MD047",
+      "type": "boolean",
+      "default": true
+    },
+    "line_length": {
+      "description": "line_length - MD013",
+      "type": "boolean",
+      "default": true
+    },
+    "code": {
+      "description": "code - MD014, MD031, MD038, MD040, MD046, MD048",
+      "type": "boolean",
+      "default": true
+    },
+    "atx": {
+      "description": "atx - MD018, MD019",
+      "type": "boolean",
+      "default": true
+    },
+    "spaces": {
+      "description": "spaces - MD018, MD019, MD020, MD021, MD023",
+      "type": "boolean",
+      "default": true
+    },
+    "atx_closed": {
+      "description": "atx_closed - MD020, MD021",
+      "type": "boolean",
+      "default": true
+    },
+    "blockquote": {
+      "description": "blockquote - MD027, MD028",
+      "type": "boolean",
+      "default": true
+    },
+    "ol": {
+      "description": "ol - MD029, MD030, MD032",
+      "type": "boolean",
+      "default": true
+    },
+    "html": {
+      "description": "html - MD033",
+      "type": "boolean",
+      "default": true
+    },
+    "url": {
+      "description": "url - MD034",
+      "type": "boolean",
+      "default": true
+    },
+    "hr": {
+      "description": "hr - MD035",
+      "type": "boolean",
+      "default": true
+    },
+    "emphasis": {
+      "description": "emphasis - MD036, MD037, MD049, MD050",
+      "type": "boolean",
+      "default": true
+    },
+    "language": {
+      "description": "language - MD040",
+      "type": "boolean",
+      "default": true
+    },
+    "spelling": {
+      "description": "spelling - MD044",
+      "type": "boolean",
+      "default": true
+    },
+    "accessibility": {
+      "description": "accessibility - MD045",
+      "type": "boolean",
+      "default": true
+    },
+    "images": {
+      "description": "images - MD045, MD052, MD053",
+      "type": "boolean",
+      "default": true
+    }
+  },
+  "additionalProperties": {
+    "type": [
+      "boolean",
+      "object"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/test/markdownlint-cli2-test.js b/test/markdownlint-cli2-test.js
index c3e5a68a..b82d1a44 100644
--- a/test/markdownlint-cli2-test.js
+++ b/test/markdownlint-cli2-test.js
@@ -2,8 +2,10 @@
 
 "use strict";
 
+const fs = require("node:fs/promises");
 const path = require("node:path");
 const test = require("ava").default;
+const tv4 = require("tv4");
 const { "main": markdownlintCli2 } = require("../markdownlint-cli2.js");
 const FsMock = require("./fs-mock");
 
@@ -54,6 +56,58 @@ test("README files", (t) => {
     then((exitCode) => t.is(exitCode, 0));
 });
 
+test("validateMarkdownlintConfigSchema", async (t) => {
+  t.plan(25);
+  const schema = require("../schema/markdownlint-config-schema.json");
+  const { "default": stripJsonComments } = await import("strip-json-comments");
+  const { globby } = await import("globby");
+  const files = await globby(
+    [
+      "**/*.markdownlint.(json|jsonc)",
+      "!**/*invalid*/**",
+      "!**/invalid*"
+    ],
+    {
+      "dot": true
+    }
+  );
+  return Promise.all(files.map(async (file) => {
+    const content = await fs.readFile(file, "utf8");
+    const json = JSON.parse(stripJsonComments(content));
+    t.true(
+      // @ts-ignore
+      tv4.validate(json, schema),
+      `${file}\n${JSON.stringify(tv4.error, null, 2)}`
+    );
+  }));
+});
+
+test("validateMarkdownlintCli2ConfigSchema", async (t) => {
+  t.plan(78);
+  const schema = require("../schema/markdownlint-cli2-config-schema.json");
+  const { "default": stripJsonComments } = await import("strip-json-comments");
+  const { globby } = await import("globby");
+  const files = await globby(
+    [
+      "**/*.markdownlint-cli2.(json|jsonc)",
+      "!**/*invalid*/**",
+      "!**/invalid*",
+      "!test/customRules/dir/subdir2/.markdownlint-cli2.jsonc"
+    ],
+    {
+      "dot": true
+    }
+  );
+  return Promise.all(files.map(async (file) => {
+    const content = await fs.readFile(file, "utf8");
+    const json = JSON.parse(stripJsonComments(content));
+    t.true(
+      tv4.validate(json, schema),
+      `${file}\n${JSON.stringify(tv4.error, null, 2)}`
+    );
+  }));
+});
+
 test("absolute path to directory glob", async (t) => {
   t.plan(1);
   const argv = [ path.resolve("./test/no-config") ];

From 354ffc52fb0fa608ee083a140416d6a983e54d5d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Sep 2023 15:32:15 +0000
Subject: [PATCH 12/22] Bump eslint-plugin-n from 16.0.2 to 16.1.0

Bumps [eslint-plugin-n](https://github.com/eslint-community/eslint-plugin-n) from 16.0.2 to 16.1.0.
- [Release notes](https://github.com/eslint-community/eslint-plugin-n/releases)
- [Commits](https://github.com/eslint-community/eslint-plugin-n/compare/16.0.2...16.1.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-n
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] 
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 5195f723..e199254b 100644
--- a/package.json
+++ b/package.json
@@ -83,7 +83,7 @@
     "cpy-cli": "5.0.0",
     "del": "7.1.0",
     "eslint": "8.48.0",
-    "eslint-plugin-n": "16.0.2",
+    "eslint-plugin-n": "16.1.0",
     "eslint-plugin-unicorn": "48.0.1",
     "execa": "8.0.1",
     "markdown-it-emoji": "2.0.2",

From 6e878e05c7c5a228272e4a279bc9d676139062e6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Mon, 11 Sep 2023 16:28:19 +0000
Subject: [PATCH 13/22] Bump eslint from 8.48.0 to 8.49.0

Bumps [eslint](https://github.com/eslint/eslint) from 8.48.0 to 8.49.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.48.0...v8.49.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] 
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index e199254b..42b65e50 100644
--- a/package.json
+++ b/package.json
@@ -82,7 +82,7 @@
     "cpy": "10.1.0",
     "cpy-cli": "5.0.0",
     "del": "7.1.0",
-    "eslint": "8.48.0",
+    "eslint": "8.49.0",
     "eslint-plugin-n": "16.1.0",
     "eslint-plugin-unicorn": "48.0.1",
     "execa": "8.0.1",

From 157f30fd9511b2f5358d232277b992da9de20c44 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 15:32:14 +0000
Subject: [PATCH 14/22] Bump docker/metadata-action from 4 to 5

Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 4 to 5.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Upgrade guide](https://github.com/docker/metadata-action/blob/master/UPGRADE.md)
- [Commits](https://github.com/docker/metadata-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] 
---
 .github/workflows/publish-container-image.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/publish-container-image.yml b/.github/workflows/publish-container-image.yml
index c9f5a3fa..8e266aec 100644
--- a/.github/workflows/publish-container-image.yml
+++ b/.github/workflows/publish-container-image.yml
@@ -31,7 +31,7 @@ jobs:
 
       - name: Extract tags and labels
         id: meta
-        uses: docker/metadata-action@v4
+        uses: docker/metadata-action@v5
         with:
           images: ${{ github.repository }}
 
@@ -59,7 +59,7 @@ jobs:
 
       - name: Extract tags and labels for -rules
         id: meta-rules
-        uses: docker/metadata-action@v4
+        uses: docker/metadata-action@v5
         with:
           images: ${{ github.repository }}-rules
 

From f4bb53803515bc8bbd4d495bf6ad4bcb05dbc598 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 15:32:23 +0000
Subject: [PATCH 15/22] Bump docker/setup-buildx-action from 2 to 3

Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] 
---
 .github/workflows/publish-container-image.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/publish-container-image.yml b/.github/workflows/publish-container-image.yml
index 8e266aec..f1013707 100644
--- a/.github/workflows/publish-container-image.yml
+++ b/.github/workflows/publish-container-image.yml
@@ -21,7 +21,7 @@ jobs:
         uses: docker/setup-qemu-action@v2
 
       - name: Set up Docker Buildx
-        uses: docker/setup-buildx-action@v2
+        uses: docker/setup-buildx-action@v3
 
       - name: Log in to registry
         uses: docker/login-action@v2

From a9eb2ffd4a44e1ecc6f119b084ee6bbedd7d3ea3 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 15:32:44 +0000
Subject: [PATCH 16/22] Bump docker/build-push-action from 4 to 5

Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 4 to 5.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v4...v5)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] 
---
 .github/workflows/publish-container-image.yml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/publish-container-image.yml b/.github/workflows/publish-container-image.yml
index f1013707..d3aa2f0c 100644
--- a/.github/workflows/publish-container-image.yml
+++ b/.github/workflows/publish-container-image.yml
@@ -36,7 +36,7 @@ jobs:
           images: ${{ github.repository }}
 
       - name: Build container image
-        uses: docker/build-push-action@v4
+        uses: docker/build-push-action@v5
         with:
           context: .
           file: docker/Dockerfile
@@ -48,7 +48,7 @@ jobs:
         run: docker run --rm -v $PWD:/workdir local:test "*.md"
 
       - name: Push container image
-        uses: docker/build-push-action@v4
+        uses: docker/build-push-action@v5
         with:
           context: .
           file: docker/Dockerfile
@@ -64,7 +64,7 @@ jobs:
           images: ${{ github.repository }}-rules
 
       - name: Build and push container image for -rules
-        uses: docker/build-push-action@v4
+        uses: docker/build-push-action@v5
         with:
           context: .
           file: docker/Dockerfile-rules

From e4d273d84560f4137e215dc8362b5379caa2875a Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 16:23:32 +0000
Subject: [PATCH 17/22] Bump docker/login-action from 2 to 3

Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] 
---
 .github/workflows/publish-container-image.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/publish-container-image.yml b/.github/workflows/publish-container-image.yml
index d3aa2f0c..1fc67921 100644
--- a/.github/workflows/publish-container-image.yml
+++ b/.github/workflows/publish-container-image.yml
@@ -24,7 +24,7 @@ jobs:
         uses: docker/setup-buildx-action@v3
 
       - name: Log in to registry
-        uses: docker/login-action@v2
+        uses: docker/login-action@v3
         with:
           username: ${{ secrets.DOCKERHUB_USERNAME }}
           password: ${{ secrets.DOCKERHUB_TOKEN }}

From 8a660ce1a3c7d1cec53c9bdfd672982e755fa629 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 16:23:17 +0000
Subject: [PATCH 18/22] Bump docker/setup-qemu-action from 2 to 3

Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] 
---
 .github/workflows/publish-container-image.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/publish-container-image.yml b/.github/workflows/publish-container-image.yml
index 1fc67921..9002f84f 100644
--- a/.github/workflows/publish-container-image.yml
+++ b/.github/workflows/publish-container-image.yml
@@ -18,7 +18,7 @@ jobs:
         uses: actions/checkout@v4
 
       - name: Set up QEMU
-        uses: docker/setup-qemu-action@v2
+        uses: docker/setup-qemu-action@v3
 
       - name: Set up Docker Buildx
         uses: docker/setup-buildx-action@v3

From 7dd9a60e68fba6229156b767a6aa2eba1796e2cb Mon Sep 17 00:00:00 2001
From: David Anson 
Date: Tue, 12 Sep 2023 20:24:35 -0700
Subject: [PATCH 19/22] Add "showFound" configuration file option to show the
 list of found files before linting (fixes #205).

---
 README.md                                     |   3 ++
 markdownlint-cli2.js                          |  12 ++++++--
 schema/markdownlint-cli2-config-schema.json   |   5 +++
 .../.markdownlint-cli2.jsonc                  |   5 ++-
 test/markdownlint-cli2-test-cases.js          |   6 ++++
 test/markdownlint-cli2-test.js                |   2 +-
 .../.markdownlint-cli2.yaml                   |   3 ++
 test/showFound/.markdownlint-cli2.jsonc       |   8 +++++
 test/showFound/dir/about.md                   |   8 +++++
 .../dir/subdir/.markdownlint-cli2.jsonc       |   5 +++
 test/showFound/dir/subdir/info.md             |   4 +++
 .../dir/subdir2/.markdownlint-cli2.jsonc      |   6 ++++
 test/showFound/dir/subdir2/info.md            |   4 +++
 test/showFound/viewme.md                      |  16 ++++++++++
 .../markdownlint-cli2-test-exec.js.md         |  29 ++++++++++++++++++
 .../markdownlint-cli2-test-exec.js.snap       | Bin 13974 -> 14039 bytes
 .../snapshots/markdownlint-cli2-test-fs.js.md |  29 ++++++++++++++++++
 .../markdownlint-cli2-test-fs.js.snap         | Bin 5510 -> 5571 bytes
 .../markdownlint-cli2-test-main.js.md         |  29 ++++++++++++++++++
 .../markdownlint-cli2-test-main.js.snap       | Bin 12163 -> 12229 bytes
 20 files changed, 169 insertions(+), 5 deletions(-)
 create mode 100644 test/showFound/.markdownlint-cli2.jsonc
 create mode 100644 test/showFound/dir/about.md
 create mode 100644 test/showFound/dir/subdir/.markdownlint-cli2.jsonc
 create mode 100644 test/showFound/dir/subdir/info.md
 create mode 100644 test/showFound/dir/subdir2/.markdownlint-cli2.jsonc
 create mode 100644 test/showFound/dir/subdir2/info.md
 create mode 100644 test/showFound/viewme.md

diff --git a/README.md b/README.md
index 3cdeb90c..99b89448 100644
--- a/README.md
+++ b/README.md
@@ -320,6 +320,9 @@ of the rules within.
     - This top-level setting is valid **only** in the directory from which
       `markdownlint-cli2` is run
     - Search [`markdownlint-cli2-formatter` on npm][markdownlint-cli2-formatter]
+  - `showFound`: `Boolean` value to display the list of found files on `stdout`
+    - This top-level setting is valid **only** in the directory from which
+      `markdownlint-cli2` is run and **only** when `noProgress` has not been set
 - When referencing a module via the `customRules`, `markdownItPlugins`, or
   `outputFormatters` properties, each `String` identifier is passed to Node's
   [`require` function][nodejs-require] then (if that failed) its
diff --git a/markdownlint-cli2.js b/markdownlint-cli2.js
index b5f680a9..c8a9d82f 100755
--- a/markdownlint-cli2.js
+++ b/markdownlint-cli2.js
@@ -950,9 +950,15 @@ const main = async (params) => {
     );
   // Output linting status
   if (showProgress) {
-    let fileCount = 0;
-    for (const dirInfo of dirInfos) {
-      fileCount += dirInfo.files.length;
+    const fileNames = dirInfos.flatMap((dirInfo) => {
+      const { files } = dirInfo;
+      return files.map((file) => pathPosix.relative(baseDir, file));
+    });
+    const fileCount = fileNames.length;
+    if (baseMarkdownlintOptions.showFound) {
+      fileNames.push("");
+      fileNames.sort();
+      logMessage(`Found:${fileNames.join("\n ")}`);
     }
     logMessage(`Linting: ${fileCount} file(s)`);
   }
diff --git a/schema/markdownlint-cli2-config-schema.json b/schema/markdownlint-cli2-config-schema.json
index 93bbea49..48e7afb4 100644
--- a/schema/markdownlint-cli2-config-schema.json
+++ b/schema/markdownlint-cli2-config-schema.json
@@ -103,6 +103,11 @@
         ],
         "minItems": 1
       }
+    },
+    "showFound": {
+      "description": "Whether to show the list of found files on stdout (only valid at the root)",
+      "type": "boolean",
+      "default": false
     }
   },
   "additionalProperties": false
diff --git a/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc b/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc
index af879ee8..350631b8 100644
--- a/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc
+++ b/test/markdownlint-cli2-jsonc-example/.markdownlint-cli2.jsonc
@@ -43,5 +43,8 @@
   // Use a specific formatter (only valid at root)
   "outputFormatters": [
     [ "markdownlint-cli2-formatter-default" ]
-  ]
+  ],
+
+  // Show found files on stdout (only valid at root)
+  "showFound": true
 }
diff --git a/test/markdownlint-cli2-test-cases.js b/test/markdownlint-cli2-test-cases.js
index 35cb8fd7..0be2ebd2 100644
--- a/test/markdownlint-cli2-test-cases.js
+++ b/test/markdownlint-cli2-test-cases.js
@@ -506,6 +506,12 @@ const testCases = ({
     "exitCode": 1
   });
 
+  testCase({
+    "name": "showFound",
+    "args": [ "**/*.md" ],
+    "exitCode": 1
+  });
+
   testCase({
     "name": "frontMatter",
     "args": [ "**/*.md" ],
diff --git a/test/markdownlint-cli2-test.js b/test/markdownlint-cli2-test.js
index b82d1a44..b5371ab1 100644
--- a/test/markdownlint-cli2-test.js
+++ b/test/markdownlint-cli2-test.js
@@ -83,7 +83,7 @@ test("validateMarkdownlintConfigSchema", async (t) => {
 });
 
 test("validateMarkdownlintCli2ConfigSchema", async (t) => {
-  t.plan(78);
+  t.plan(81);
   const schema = require("../schema/markdownlint-cli2-config-schema.json");
   const { "default": stripJsonComments } = await import("strip-json-comments");
   const { globby } = await import("globby");
diff --git a/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml b/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml
index be27908d..adb4ee29 100644
--- a/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml
+++ b/test/markdownlint-cli2-yaml-example/.markdownlint-cli2.yaml
@@ -40,3 +40,6 @@ noProgress: true
 outputFormatters:
   -
     - markdownlint-cli2-formatter-default
+
+# Show found files on stdout (only valid at root)
+showFound: true
diff --git a/test/showFound/.markdownlint-cli2.jsonc b/test/showFound/.markdownlint-cli2.jsonc
new file mode 100644
index 00000000..8011086f
--- /dev/null
+++ b/test/showFound/.markdownlint-cli2.jsonc
@@ -0,0 +1,8 @@
+{
+  // Comment
+  "config": {
+    "MD032": false,
+    "no-multiple-blanks": false
+  },
+  "showFound": true
+}
diff --git a/test/showFound/dir/about.md b/test/showFound/dir/about.md
new file mode 100644
index 00000000..a3cbb13a
--- /dev/null
+++ b/test/showFound/dir/about.md
@@ -0,0 +1,8 @@
+#  About  #
+
+
+
+Text text text
+1. List
+3. List
+3. List
diff --git a/test/showFound/dir/subdir/.markdownlint-cli2.jsonc b/test/showFound/dir/subdir/.markdownlint-cli2.jsonc
new file mode 100644
index 00000000..11eee665
--- /dev/null
+++ b/test/showFound/dir/subdir/.markdownlint-cli2.jsonc
@@ -0,0 +1,5 @@
+{
+  "config": {
+    "first-line-heading": false
+  }
+}
diff --git a/test/showFound/dir/subdir/info.md b/test/showFound/dir/subdir/info.md
new file mode 100644
index 00000000..99e35de3
--- /dev/null
+++ b/test/showFound/dir/subdir/info.md
@@ -0,0 +1,4 @@
+## Information
+Text ` code1` text `code2 ` text
+
+
diff --git a/test/showFound/dir/subdir2/.markdownlint-cli2.jsonc b/test/showFound/dir/subdir2/.markdownlint-cli2.jsonc
new file mode 100644
index 00000000..26bd1cf4
--- /dev/null
+++ b/test/showFound/dir/subdir2/.markdownlint-cli2.jsonc
@@ -0,0 +1,6 @@
+{
+  "config": {
+    "first-line-heading": false
+  },
+  "showFound": false
+}
diff --git a/test/showFound/dir/subdir2/info.md b/test/showFound/dir/subdir2/info.md
new file mode 100644
index 00000000..99e35de3
--- /dev/null
+++ b/test/showFound/dir/subdir2/info.md
@@ -0,0 +1,4 @@
+## Information
+Text ` code1` text `code2 ` text
+
+
diff --git a/test/showFound/viewme.md b/test/showFound/viewme.md
new file mode 100644
index 00000000..85316a2f
--- /dev/null
+++ b/test/showFound/viewme.md
@@ -0,0 +1,16 @@
+# Title
+
+> Tagline 
+
+
+# Description
+
+Text text text
+Text text text
+Text text text
+
+##  Summary
+
+
+
+Text text text
\ No newline at end of file
diff --git a/test/snapshots/markdownlint-cli2-test-exec.js.md b/test/snapshots/markdownlint-cli2-test-exec.js.md
index 40202deb..d1708093 100644
--- a/test/snapshots/markdownlint-cli2-test-exec.js.md
+++ b/test/snapshots/markdownlint-cli2-test-exec.js.md
@@ -1473,6 +1473,35 @@ Generated by [AVA](https://avajs.dev).
       `,
     }
 
+## showFound (exec)
+
+> Snapshot 1
+
+    {
+      exitCode: 1,
+      formatterCodeQuality: '',
+      formatterJson: '',
+      formatterJunit: '',
+      formatterSarif: '',
+      stderr: `dir/about.md:1:1 MD021/no-multiple-space-closed-atx Multiple spaces inside hashes on closed atx style heading [Context: "#  About  #"]␊
+      dir/subdir/info.md:1 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊
+      dir/subdir2/info.md:1 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊
+      viewme.md:3:10 MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 1]␊
+      viewme.md:6 MD025/single-title/single-h1 Multiple top-level headings in the same document [Context: "# Description"]␊
+      viewme.md:12:1 MD019/no-multiple-space-atx Multiple spaces after hash on atx style heading [Context: "##  Summary"]␊
+      `,
+      stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊
+      Finding: **/*.md␊
+      Found:␊
+       dir/about.md␊
+       dir/subdir/info.md␊
+       dir/subdir2/info.md␊
+       viewme.md␊
+      Linting: 4 file(s)␊
+      Summary: 6 error(s)␊
+      `,
+    }
+
 ## frontMatter (exec)
 
 > Snapshot 1
diff --git a/test/snapshots/markdownlint-cli2-test-exec.js.snap b/test/snapshots/markdownlint-cli2-test-exec.js.snap
index e7b10fe2321be864ae33eb200f416c8a4b1b7ba5..209b5415e9d2c9af7389ae0d78530cd9ac624a34 100644
GIT binary patch
literal 14039
zcmaKy1CVA-v*)KVZQHhObK16T+tapf+qP{@+qUiPdEf8e-MbsH&o81XpZaHIR-F^)
zoQRC#SLVl4u-3D6Ftu^Sb7q79`cVqkYZk?qo8PN8kfOoZ2DQfua5P~%^yGx|(`+e#
zVHGzV?8iSppbIariv2~WEf1USf}7y;Wiuvm*vZs=*ujhd>2;jP&*wf>mdoC2h!fcE{V-rnAgm*(_qm&UT=_}=Rns35}0PaZU$4vkVz@Jqytoj)^@4ka?b
z`9XqsNETy_d8>T{MEbk%F-cY26De9DHq^&rjS<}J1xV`cbQnW;@Wx^-MHy
zP*RUkO8MVtsn!r3*x0em#*03aRNQd5GsyB&A*O46Zl~IXa3b#w;(uW00;#swYBD#H
zzxT{3qP3XKlAfOpb-9FH&zpd~?-ImPd*pdt*s`V03=3GKN?IkQ#DqG7P1kBH3;J(8
z^zovX;i>fZ&SVi@R~nBHdc>YML{TIrJC>Kph>$+o&oOsE^EL-_$c=iZgn_>8t7bM&in|S->EV(#bD>bpb#}QjVsN4I^ek%RYAeYl~R-n
zwART?Ng^q)2|=-9Nh(%QC6tK9=wI-689HTtdToE3nl}TAuVQ!GXf=wSFocPmQkG$j
zwYc**e`s}g$|k!7CgU?Enb2j+Rw=w4`U7~{x2y0P%{)f$*oqnmBN<=rVu&(@dM)D)k
zb@VMpf8JCVcyk*an8re{p!BQ&Py}|6;yaH`qkXAnUY+lV43_(h6BW(xBf2
z%dn2~JRc6ryZOkHJ+0W}$e~h1S4|D&<%(5GI{=y~!mO8L_{})5pqSE6BG6|}IbIGW
zn~ysSy@6+cI0HXA92_R`Ec$Vmyza*dN9CaATw*Pi-OKevCDUr%a9yCK=>#9vcdhwp
zZgwNgj=r}p!uN#RJeOII*RrQeJN4V+i8FwMIW6zzob$okahwEDRIP25=!t8CDVcgUyd*!!^XhR^RsF+
zU}1rX!&?33NrFyHA#_D*)od5YVT2%}amr2Rf!k{RO4^9#s(0j|`H7Jw%MQ@$JE}s_
z5M2wieOU)w=vRqiC6)91GNjh7eNYe2;qZ03u)5%1+a~i!>#kzoy{jrStbI0$;#TzY
zfxaP!p(f{($dZ3$JW3f!UCvZE7dh}>!zu;&;aV&k{XiFdKJHb+RLn?M?BfkgVoc4A
zsc0rezyKnW{9nU-FM`}FkGkSNfB$>@A7c((Av-EWauza$JTO(>R4kV`FbPThKZar)
zaU(CtO&~IKP|-}9fCWS)dBgu{?1o7QTi*VUDgT)}s3&%U*vWxvnRL+b1}c{{@Ad47
z%X8Ix~oYN9@y+
z)a~n46nsx0DRvtPQ;m5J-yqTL2sxm87&eBa$C*=KBjFLq1|0#K%dN`ipxGS%m;rSk
zBALr{rIi^I#71#$m-r6jFWeHTPQB}NNn5lNtK%vkfpZ<%Erg++6A88&AJp^W6UkgwhS{DN{yW0(!**9jJphMrTfT7EL)1n28c-pWMe)GI0$Ten<
zD?rv@jlDB;l@u3!*p*jteA-1@=k&7aI$7eu|nhVQ)abP-;>>)~+f;HIK>
z&0d{wnPIUTG@i6ew(@l8{^3L226i(`&|x^X-CfqE|F-Du=_baAY{2G}VzE++H^r`b
zEYhQi)HMpkr-Zp_3CoPK@M95ccvgtBN%+`kE#Gkfl*`PX3pm*g
zp3o_sT0c9{mAJB^svsFd4Z^~ZAEI=BFHpP+29~s~m!)|69j4mY`*A|q;;?&DcvfWA
zIOK8XG*2oEAhRLC2A^tcvS#>ww9peMdsyQ6MWO@Y6Z5D^y-(C+R#`{`-bz@J>`aC1
zkQ^C8?euyd1%jbA
z5T{*S;m0(h=l6-kkZzzqxFx({e{km$u@QXK-PHqg{rf^>4&Lv(_ZKjdc{>->_iVCw
za?;*%fKP~gefLvj5st~D6XM)ZqqH1r(7m-MQkHVk^F`x3ql_QoTdSfj$xt&d&dh;Q
zs}(y`;LeZ--Ch{A)f~n2%7}cV>U_fr6x|E(nB@~t$fZLqvtY>MA;?AikqY=AW^rGH
zFk$RrSg|UIH*IU8e)scF!3Wp5<_EIpzr5vP9)~53AySXPQ;)$?PeE^R(Kbj*o6_@`
z^3#~=;h2hH&4}Juu7jLJF_cE>Gl}wt<yZd`1AY%5<`f1QHT&00=bCWdPzvBx?N&&HUIfAiE%%qhH(~jp
zkO=UiKfR>$3{Z{3;ha>f0{Pb8)7K>#bip
zdQ?3iP>hf%uED-{u4Zr=Xd
z4Mg3!QrUI@&i?+Oh+e;tdrn=Di0`}rldrEak>AhMCdEa~-sgmb+^dpu^B_j#;Ioej
zM$yL^bnZVp9=m|6aUOYRFNM9WJBxxm(lPvw^^KJI6q3+%ZJF2P__-CMg<(f8>z@F8X07Kqlg4~)}v
z?7hZ7mwoq#grU_@k9RyY@TOBki0os=2+W31AZDoxX2D+#Fh$Ih3Srq9S_$Aqg?=za
z$P;TJiH{kKHHEL5CGg~sOlZ+mWCEMT6Y__H7GMHnox+RYdurXP8)7^JGB!`^&5qSl~rnd{`kw
zulkSPuH9gHzI*zfS(A7t4ZtXnSaW|}CjJ{}72;bz9fN5iAuQoF_W`f-ua)W^uImk)~f`VnNwk>tiYZXF{5vuZR5I2KP=AA1#N
z9MlkC{Rc+OJ53*7QH)m6<#4r9gb?twjx51mYahNk{ZvkS0a{|N$xAjfQ#OrT*XynR
zKwsWJA}bcf^Wfu#lR!NgJvPYdBV15cfXIEOQ~N1wmRf&X8Xmm}%_6o@(CH@9#qI9C
zi2;%GWISG$sWaPCP%bq>m`x6#-MfXVczn)ZOc`6fmP3jEQNydaN-~
zqjSD$HW&y*yO|CeCAX3nl+c7J3CR(XDFO(?|`nhxmft?%won`A@2aoEjYZ_d8wwP
zmbOioM{llQN-j{Eh!;e&C~DyiS^pdwx@vphG;`6SV99%+7@&-~v+-`d)<#T5C9G>A
z*ls`;P%zN#3D9Zw_0Oz*RIk|
za7-W5GTxWCYD8h7QWrcIGJF&Vi8(9dyNo^SVTXsa;D&>bU7YQyXnnlnW3B9`!
z>C;u$K6@9DaSw=PrE}f8wHqdCG~|w^uP8;FO{|{yR>YI0cD{6-nSGm9;M1|O2L82Q
zQ7R{Iny)_9WTwg6nj@we{4-Btoi0o;eOYebmuC~kfl)CfbAL+qj6o~KKoyqqz-D5=
zqPDxe4W<1q5!Jfeo>c%R#KliSirC(YdOaUAV?ruWXJYLrhrBryvdQt~GbW<}-CTS-r9&yw}2u9mGhEafvu0n@ydi#lM)!iVT9LeE0Czvjjv9NV7
z4RY1c4WW6ZO$kcA^ROnj_$kPbgRL14qHXp*zP_TjKw;$JNhBlvwsZkQ+Tfn)5ITm<
zS{~Qb9IjSeKOM}#YAk4SsCOAum2@0wV$nASK;UY&Ic7oWV!(cBG$ctqu`t))*Cx%n
zGvF*tc?qLqb26&-=T*V`_F)zeBl#*?;Q=E_Gg9~rK?>L?Hem#0d39)lXrTwy
z@rxLdSBz#%j&xiMXF!X#2TP6DQ%pjV=MBXnCL_lYX)Z&O7fkB0ltO8e9E@wrPk9m}
z_sA0a1|Yca=3l3KnHgFMYqVg)vqidIuz;)ghc^>3Oztvv4_lz{wr_O3=v*Dfi{6KH
z+uLz&R{QWOm_@tJ8Zc6w%LE2!u`CAzQTl{k(zbOUf9Ab~|7#?rt;~D~Ke^OzY@J6D
zI<$3V8?|-S8sDUjFgpF~cEvF^e$(2ul!1YFC;8|vdj;xDP1rQkJxzJ9vtgav-2{3n
zMYbK0UeknVz3cAojig75Lr4NojDK`hKX&=-1gzN5l9NXf&Bs7uKVgRk4E;^y#g9l5
zQd1)AT)_#xZH0gGE2{rM)u{@4N=gBxObo>QJ|Cc6o`nHn}cwne+BCJ3n
zrilTDLb-7CW&rU4@$;zQ8VWBLbIn~h=pIA@LJ5Hjfm?&G`4wRYD7)PR
zCIIqH5D+>7s^NAO7y-y%gd>1x26|F{`u+41cI(M=q?gX7^mFz7rgqYGR(db^?@qq=
z!l+4P9U5UL0SpfapT`9zw@4jJZykzf_?K&&e-$8jAb5Wd3Bw2t0x%RXlmo!nk&zkXn-8CTbX
z;shZ`AxH;;VR?H<^t4xl1pmYbL(x1*SLFq+1^h&#rq{;3h
zXy4Cogzdq9fYR7L0nGw_L$IUR=8uAw&zHlOLk26GK%Eupfg6JS7x1H*k1kMwpWh6!
z2nw$+f+|aiI`TP^A#xlb|n*AIRLSONbUNI>#SFA~G^&pc2Dnhr3ZZoq89XHQrjUcYIX9S3Vxc$z8Fp25wc
z?>g2%<-)r}vc8ULpnff1w+Cct(yvB!@m|N#g##kgNnySl^=?-$9_~)rmN6Pl1Ei`*
zgerQ7rPsjn)L#{DslSja9w3z&;9gAw1(fu2>vZ^{1RCK54hoSW7TN;JVkOBOtHN-3h_^sJ}6xot+aW}jO<46WN-(zv)5
zWXTq%b3M>(2-ZQlfkFDHG8fn7rS3P~WwLE?Ylt}IVG3zpVuD+&vZ^~%gmCw6!koP}
z^`Gae7@h6ZX_&Cw{#cB}8a;%cB@Jkzt3+(Mh!|Wt6Bfw$An?hCevWotHKipvtJ)Fb
zEW)(fHyT?8R&`>L4`q=Xy_w-4U`TBywPrl{#bT(cL8wQ0{%Ll1?YX8W;L2G6|DC8X
zVfGpNo;E)tFN5dSzO1UlsMGKF5OQiWp=Jq>9F-i^QUMR<`dnxjBC+Edaf9q&>V2E^
zpLDWBvP6rybg`>?fyPk4Fu*pL#uxNxLuC_0L52JN(Q6G1YqtuA@&3ZF+(^T;OITi<
z=m)V03HL{7*V>y8!!fS0<>&m&KwHGnk@$FXp90FKZuWWV%H7VvK1mtE$6RO`LjH(;
zDw}@b46)yl!Nq^h#(jG}-gwC1TcgxHDMlI$v@#=?X?^&Tgp;&r$9Zhol1?pVe#5SC
zTn)=rxa0C{1y6fiyW#Rg1ElkKm@7jw^n=)$`^is4t@n@e$q=}3N64b84Z)B=S5TU5
z6O7M=5|3v2mKn4w4YR5^#YtNoav@qB;&l^rC&lSxL!q(Xv|Yl^&aijp#sk!<)Z3En
zZGKlcDK;Vu5nk4>?($}jrmUDTE;5yZMWil)%q~>7x!%bj;B|8&9OGAG;pIkl2C&M~
zu!90@_>$e$0$hpkX=l8_TiJXB2kp_MOwcycc*>-qBRObn(CDlq^#jaea|8skUSq>8p~dEOyKy=L2V%J7e6Sky>0YK3d8Hvm1ZiQW6xL~_reuusbHg@M
z$3&{vpS2^lGDsauJWUJN-k&D#*Dy$QlI7-%KeY6>y;cZP5a}g$Q6$Y)8Oe#K5KoAuH@!a=8;hIeH6lQ5G^r%R^{xPelIv3RzkuO)Cd+rMu!D8{wh
zdzPYt?+*>M%}|9J4;8-2NTAji#~kjH4^>sA2na0HS9M*HDpEGO-f!trzHW~QLu_-fq;$mJ5z<+8e3yw|^cR#9xCm@bAQRI$|!qD&|xL83&)9oz^T
z{gvK>^YR?AW9)@q2hg#2fJ)p!=O
zRmB!2ho7~CQNCO{#;YP@8Db1TyyxJjz@ZKn4M!ZVX;TVWn_f>Eyl@r_b;?ciKKnA2
z@crUhb=TuyVM>|--pht~%bT%GjQ#QF0qfTD>ZFQ|w;8)1!1f;SGp#wC08I-MYD0$y
zxwv_{=9Mx&eyQ+VE79W}J(o2{y|%N5$==C+wW{lDfArNkmz|Z#(HeG-GF~h*Ig-p1
zjpw^`V2sPQ;7FGf!@?uK7@*H&!-vIP_*iVw`WHwbv^ypH?8ryv>FlK@?|Efb-u|Q6
zoG!sclrtNSv}1oK{cn*p`kx9@c~7Thi?eC=^*qO5<`y%j%@`NP^$Vp>!cy^=R{Yj1
zJGfSb)DU$f;H3wp{_XRumed4X`$k(eqiKe)`eH?3$+*
zcnh{-wltj@c3)qYjSUT3H=kFjH3oaeitiUHGmtNEoqlG
z3s4&8D~1dYa|1oAYhN*8u
zseb)zsf1PQ%3OkTc@@M**GybM*NkP@54Q`E_KnLX4S)B}d!n$Bj}STLouSSF$=C+S
z%~Hq@kP0f(i_e@~GXLJ3wR2dGOyllN6!oxm1a&JVi>3k*)PMr=66n$`v){Y3>XTJO
zM=jgCgss~-wMwPf2~D1XZ{E6s($u&Oa>|8Oo}Q&zv_yR^U-zGTrTBYJHAL4hr1
z<(r4*$obG#(8yc^ZYT^_V6B5OA|Lfex)Os=1&^NO<|BGYC{kem{wyY
zjF4=DRw<=#;u$uVCz8)DJY`@(txqVu`Rh8%I~NnhW&64eLM;C
zPzVHkk{{A7?HcT59kbUX?U|-ZH(r3&Xq`^Bpm$3$?ENoi7*DA5dKV
zPJg`f^bphe@Z~xd@)u`uL#wNS0UAgUh@hZ#gNbq?IMdG|@L4kT+}nUvS{H9vF13rd
z19fG{t0-B`0GIvJQY-4pS&eOvn^_=2=ju&b$8t=22%6ie9q5JF9=LYvvnLXYvXNh>rn`@wB2zYUov3L26m??b3~NWiDu4A;gyi1iSttTVtL#C
zymnT&eO7CFUK=9jt$|+XRnjJoo9k|*uE@ArnG<+1`drWKdX?8NG}2qSf_
zSuE5mi|ovssnSo;FsyI@PU7`9@U4)$8o6E~xmZ;#s!R5ecsy7d31Av-?8{EcyZZ!`7WX4a7aGM>Cx9;=k(4&eFlC(eX()ul5qB!+zKo0SFqjc^?-{
zN$UJy_LGZidSBi+*?xjoX@+T{t`=Vk7Z-FBHL?Hny1>l7Vgw>~fJ~0Yc2};|6$?=c
zY8kkQm_{h)AancnLNmJW&p?}vb-0S(0bTR4Vi6NZ@Bw0wUUKYI!)iqm%a%REEVvz3
zJa`Z}ph0p{i^h{QVFqsUh9(4|Wc`o68i&R?$&jT)XvvxbRwK{h3dRCdN@Vk&Z`7mI
zPy(GJbZZ^K?e*zql4J16#u6uFKS|eArJG`z%3oO5?m??_4(%XYrX(*vsxclc9(gS&
zL|0WGIZPU6hI`-Z%ua%wb1;LM<3F1yaDMC9^IvbdX9c
ziN19)5ik6BVfI`yeeS*S+~Y#`V1k@p{7f|=b3)7C?&j1?1Jhv+I?Xu{d*T
zJo4GR@yhQkd+XGlQZUV`p6|#_Z=)n@GVj#mWTvI6gXZQ1dSsyL4#qi8rfJ%XsJi6&
zne}3AiU(v{F-{jnXvHKYrQrOiOkBju;!8}Q)D!odSGliU1O2tcMas;5F)x?2B{q>1
zhyIw3esIXHS}r#gzuwStf;@SNnP2UCm&7$W2On_)ZX%Jr&^{_1(^iZp+JP6!!*8E?
zw%vFzDl@GxCr6pMl|}ut{(^(EEK6Vn`$2mD_55mY)7FhI&DIOUwDRvYsO{z?BPmpzz=&@2MiW
z_$3U5bX;_Lv_`YFePV2pd-OgFbDZZ8a~K0;3d
zqdW{xcM+)OV
zt=eE3B#OPSk3-Ww)GO{gqRBvM2ioFUv1h1ZNx8;^uv{dE)e8jBY3Nr^VC?BewkCFE
z4A_}}RU8;f&`LrrSr9sRb9B>zJYqu5nFSn28>TEWcq2+!DICXh8f>}Usv*w;7Qhw1
zf=3>4OxTuw+PJZgf;fWhwNJgaB4Qd}x!DJTxxU5g|rN9K-VJ-6JLz1f0wF2855#>nwI}
z7Eb7(OG@!GmHo*MP)|n2wrxUL$hyEJE&TEWkeI6y;aBSe;yuF#(`jWvdyFA714aR~
zA@T^XFE?Wr-{9$+)LI{jmbUogC!ZM
zxe!XCk2%>!vFL_dr;#Bn3$Vl3s%6pbbm?p7e4EP;%*KwT2i!?Isiv4k9_B`x<4BWm
z2XFJc09{2>kr@*D0-=7AYmQ!*>b7>A8gdvXO}rHryGa~+?O;=-1{2@?dX8jQWq_49
z)Eng*S~VEu`e(Gp5GQG(KhEtRWsqq&&MmqNO?R}TAY1ppJ+dS~{$JnkDE}GMX8Hak
z4t<9hq8u{r`x}au7`fJPlVk+rKcS;Tqy8)N{~M^*B#`)yfdJ|s-%{f+;=BJ^Q^e*n
z@ZY!$w0b)=hMTuCQ0)IDi2?Qe6{hckr3k4~lmB4Ym3VG^g-%0*hW3K#=IJ6SEVfHIprPB
zg_&Aru=~H%_p;t(?5GAbiDfoU7KddvE;PHdddbruN89=@Py0Hq5*I?aO^ax1ai>~Y
zA}v*Vd1CE-OFKH^j}{GbM`;q&(n47v_57;FfpH>FGnph>IUM%qYJAn+_?u$X+JvM_
z=Q<%{McRW=NGrp1-oltQZMSR4JIWI_JHQD0OP2&9I#$Qf*f?lx1Ek=t!idxeb6;qo
zvnz~g7Fmr>AuXsr{xB{=`az<{CMgz38=@)M>EgMQw$X7D9FYo#dkqy-w!h-dkvvFq
z>ShHQqc_R57O#2^h^5jath_v-?pEB6u-juC!zZOriyvh*!a+-;Q_}Pr=_ZxKnM{$m
zLd%tzpKx5$3K3q~J5zLAl-U-2?JljWDSvIg-AKzFbYG}2t@bzjnDQN97@v<{3h41g?6=lwzvh
zIx1n;2$AwfeH3`4UL1h5br(s3Fi}6%q()?sFehP`TIAYix~dwDe_kUzr&WL)(9?~<
zfadwu@VoEgVoy&d{kk2tN(`ozq1inceYS2u=)i>DB24+CMZQTGQeD%pvh3#l`=5S?
z@_g|Yf|F|k+tM$%^@i>#4;$z35RVb(@R5of=WwWhJ-6L8#lss2)?rWYa!~Iwa~W%O
zqklr)G|(2p$|05ijHF##pQv5=pbOl>$Sma{Os)F=-U=?=;#SljILnWOceii~74{h}N)RJWS?jZM)BKe=VwZK(~(XG`wdQXf|%|
zQSmi<@OAL+oB=C@McmPFzR?vxggS+=gz>N{2Oyb(X!tq@9c&lha
ztLA4)K3`cey$1C&IZ}@OZ(Z`F1m>IlQU&8X7}5c~S$}=TG4kVdzL121oV=Z>2}*)l
zM14q*s|bTY|8Td~OKYDB2
z5)j<9G?RJisOEAskzbuC-laNvyON%&2Wqi%nC>wn+GM!X*J5vDjvzCegy){F)LO*bEvSuBH(^C$ZH{(}(7J~8r+-(@!S61zg%Y&1rIo)A
zUS?S5O$wy+Q1hM#YF`y>(f#(-3vy&0nVB0JFhiuGzF3J!s*2Z0c-}_;GmzFGV0T|(
za)Q8KsC`c}KzaE|%nKxR39$5EC3xACmG<2FPh^Xh?VjAmccs*wpiVHyY?UT2;pwo^
z9q64Bf`wwu@Z-J>bQSvKzi;_T;H$9pTYTb9iCzbRhFB4ou72H{rj1{&ob9RM4^pWd
zR)lehMOn4laGE0__ap>P1cVPnFi=9D6zB2{%O;YmZRM~8neru@3u^lc6>1o}zE9Ce%Xy3PWKMw&*DbdBdso;G+!RZ+y4gY#)3K
zyX1O>9V?YUMsC6GL+RwOxEfkVMa7<#4drFnwsIvmj!YB$Efe=D8P9+vhmWb?=2Zu;
zH$hKniMpe)9oxf8bAkAw6vJ(v;+rFkPhs8X^i=mWwTXG>nE46D6&vWb^c9Y@RJdl$
zEJtxt%bzw5Qr^ZSkSM*xC#Vs_D-#Qo6Z+&B@I5i1^JBIx3^xpn{9)2Th)*vSD^u%N
zhE;Zl0FiJPS%wEGhV(M{cn9Fl)_EgqNtlx{6?2a5FOh4P%naSeG80|Dta}!4TKA{o
zG&5McL_m5e$c0L
zOOe=2W7#MlJ2l?u4ZU65R1@tkFH^!8&o{sDTo#Z$#gk_bAr0+<=rcmx_=025D(XlR
z(z#5u+(5!OuO4;UJ}bcy74MxL~py!;mW@M|ub3DqOh1}#v|n6ab|CJc#)JROhFA~}lSMAjLj!s=tZgU&)Np^oNP
zY_Sn!_mDWw@he*;8I4B(n)3q~7MTQ7U!6#B>)ddkMl}j6)h0qMRR>)k|PBUM8cx@^k
zz@A$3Z^X{Zl+guhHZOVO6)S51tGncS(vo7{D1axE^XX+Dtd
z>+SE{-dv*{5@4Py5TJ^5SiYeiHK$o^af(iIJv~@+=MF108$GBz&~MEhm6I~ElH_eA
z4}X<)j5P1RyqP@;G@7JT7w&lyY6%gi#jT}R095x5MWBg40<4cnGeob5+{cB7MwoEk
zSRScs<0E+!Ue)elOyLtqb7yz=mS=6PT`qxrys9Zqmt@It^8%i}%*qv<{o&ZjSqBn5
zi!fB=C~=fM$(iFX^cN>JDZINTuU<@DK?^AZRe~+UQRFUhmwnhTai@awj)Gf5zZ6i}
z+PI9=a9axQtpucZg^odqnPvc!b*?6fg3GZ@SS`4XN2B7q;r}KSF57^D2Qn~
z`2Za6xUm?hsYFDfkode#p8-nY@6$x`_q;AmVquFTGrMuQU%cTP9C+6qz(4*MpJbIG

literal 13974
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
I1pV@V0M05S5&!@I

diff --git a/test/snapshots/markdownlint-cli2-test-fs.js.md b/test/snapshots/markdownlint-cli2-test-fs.js.md
index f0c06299..af3daf56 100644
--- a/test/snapshots/markdownlint-cli2-test-fs.js.md
+++ b/test/snapshots/markdownlint-cli2-test-fs.js.md
@@ -1085,6 +1085,35 @@ Generated by [AVA](https://avajs.dev).
       `,
     }
 
+## showFound (fs)
+
+> Snapshot 1
+
+    {
+      exitCode: 1,
+      formatterCodeQuality: '',
+      formatterJson: '',
+      formatterJunit: '',
+      formatterSarif: '',
+      stderr: `dir/about.md:1:1 MD021/no-multiple-space-closed-atx Multiple spaces inside hashes on closed atx style heading [Context: "#  About  #"]␊
+      dir/subdir/info.md:1 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊
+      dir/subdir2/info.md:1 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊
+      viewme.md:3:10 MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 1]␊
+      viewme.md:6 MD025/single-title/single-h1 Multiple top-level headings in the same document [Context: "# Description"]␊
+      viewme.md:12:1 MD019/no-multiple-space-atx Multiple spaces after hash on atx style heading [Context: "##  Summary"]␊
+      `,
+      stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊
+      Finding: **/*.md␊
+      Found:␊
+       dir/about.md␊
+       dir/subdir/info.md␊
+       dir/subdir2/info.md␊
+       viewme.md␊
+      Linting: 4 file(s)␊
+      Summary: 6 error(s)␊
+      `,
+    }
+
 ## frontMatter (fs)
 
 > Snapshot 1
diff --git a/test/snapshots/markdownlint-cli2-test-fs.js.snap b/test/snapshots/markdownlint-cli2-test-fs.js.snap
index e76dbd557fcb2f377d45c9ead6b5c0ba8d3bc979..36ce68621cfaa10d7419e0780731159223d41cfc 100644
GIT binary patch
literal 5571
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

literal 5510
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
hcXLjL`|g(~5-&fY^d$2AGPW Snapshot 1
+
+    {
+      exitCode: 1,
+      formatterCodeQuality: '',
+      formatterJson: '',
+      formatterJunit: '',
+      formatterSarif: '',
+      stderr: `dir/about.md:1:1 MD021/no-multiple-space-closed-atx Multiple spaces inside hashes on closed atx style heading [Context: "#  About  #"]␊
+      dir/subdir/info.md:1 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊
+      dir/subdir2/info.md:1 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Below] [Context: "## Information"]␊
+      viewme.md:3:10 MD009/no-trailing-spaces Trailing spaces [Expected: 0 or 2; Actual: 1]␊
+      viewme.md:6 MD025/single-title/single-h1 Multiple top-level headings in the same document [Context: "# Description"]␊
+      viewme.md:12:1 MD019/no-multiple-space-atx Multiple spaces after hash on atx style heading [Context: "##  Summary"]␊
+      `,
+      stdout: `markdownlint-cli2 vX.Y.Z (markdownlint vX.Y.Z)␊
+      Finding: **/*.md␊
+      Found:␊
+       dir/about.md␊
+       dir/subdir/info.md␊
+       dir/subdir2/info.md␊
+       viewme.md␊
+      Linting: 4 file(s)␊
+      Summary: 6 error(s)␊
+      `,
+    }
+
 ## frontMatter (main)
 
 > Snapshot 1
diff --git a/test/snapshots/markdownlint-cli2-test-main.js.snap b/test/snapshots/markdownlint-cli2-test-main.js.snap
index 28623d7dfe9ea6fdf4efee68304d1d8bcf8975e1..5d978a453ef112dd625b6a9d83a2915cb2ba8de3 100644
GIT binary patch
literal 12229
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
b8JlI3kk7`<+Wqt78-evYPQN`E6zG2dn2nS&


From db7471587939c0ccaa3644e5cf2afa73f0b7891b Mon Sep 17 00:00:00 2001
From: David Anson 
Date: Tue, 12 Sep 2023 20:56:36 -0700
Subject: [PATCH 20/22] Add missing documentation for "directory" property of
 options object passed to output formatters.

---
 .github/dictionary.txt  | 1 +
 doc/OutputFormatters.md | 2 ++
 2 files changed, 3 insertions(+)

diff --git a/.github/dictionary.txt b/.github/dictionary.txt
index c81bc318..465ba1f4 100644
--- a/.github/dictionary.txt
+++ b/.github/dictionary.txt
@@ -26,6 +26,7 @@ markdownlint-cli2-formatter-pretty
 markdownlint-cli2-formatter-sarif
 markdownlint-cli2-formatter-summarize
 npm
+POSIX
 pre-commit
 SARIF
 subdirectories
diff --git a/doc/OutputFormatters.md b/doc/OutputFormatters.md
index 761e5d0b..586d1c97 100644
--- a/doc/OutputFormatters.md
+++ b/doc/OutputFormatters.md
@@ -20,6 +20,8 @@ module.exports = (options, params) => { ... }
 
 Where `options` is an object that looks like:
 
+- `directory`: `String` that identifies the base directory for relative paths
+  (using POSIX syntax)
 - `results`: `Array` of [`markdownlint` `LintError` objects][markdownlint-d-ts],
   each with an added `String` property `fileName` containing a relative path
 - `logMessage`: `Function` that takes a single `String` argument and logs it to

From 2fe503d5c345c42535b670aba67538dc31cd077d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sat, 16 Sep 2023 23:30:01 +0000
Subject: [PATCH 21/22] Bump markdownlint from 0.31.0 to 0.31.1

Bumps [markdownlint](https://github.com/DavidAnson/markdownlint) from 0.31.0 to 0.31.1.
- [Changelog](https://github.com/DavidAnson/markdownlint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/DavidAnson/markdownlint/compare/v0.31.0...v0.31.1)

---
updated-dependencies:
- dependency-name: markdownlint
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] 
---
 package.json | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/package.json b/package.json
index 42b65e50..2886fbd0 100644
--- a/package.json
+++ b/package.json
@@ -69,7 +69,7 @@
   ],
   "dependencies": {
     "globby": "13.2.2",
-    "markdownlint": "0.31.0",
+    "markdownlint": "0.31.1",
     "markdownlint-cli2-formatter-default": "0.0.4",
     "micromatch": "4.0.5",
     "strip-json-comments": "5.0.1",

From ef974bde8375da10f3aa38a1b6ce646a34a23446 Mon Sep 17 00:00:00 2001
From: David Anson 
Date: Sat, 16 Sep 2023 17:05:04 -0700
Subject: [PATCH 22/22] Update to version 0.10.0.

---
 CHANGELOG.md         | 6 ++++++
 README.md            | 8 ++++----
 markdownlint-cli2.js | 2 +-
 package.json         | 2 +-
 4 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1fa76349..29a7e28c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Changelog
 
+## 0.10.0
+
+- Add `showFound` configuration option
+- Add `.markdownlint-cli2.jsonc` config schema
+- Update dependencies (including `markdownlint`)
+
 ## 0.9.2
 
 - Remove `npm-shrinkwrap.json` entirely to avoid `npm` failures
diff --git a/README.md b/README.md
index 99b89448..56988974 100644
--- a/README.md
+++ b/README.md
@@ -167,7 +167,7 @@ A container image [`davidanson/markdownlint-cli2`][docker-hub-markdownlint-cli2]
 can also be used (e.g., as part of a CI pipeline):
 
 ```bash
-docker run -v $PWD:/workdir davidanson/markdownlint-cli2:v0.9.2 "**/*.md" "#node_modules"
+docker run -v $PWD:/workdir davidanson/markdownlint-cli2:v0.10.0 "**/*.md" "#node_modules"
 ```
 
 Notes:
@@ -184,7 +184,7 @@ Notes:
   - A custom working directory can be specified with Docker's `-w` flag:
 
     ```bash
-    docker run -w /myfolder -v $PWD:/myfolder davidanson/markdownlint-cli2:v0.9.2 "**/*.md" "#node_modules"
+    docker run -w /myfolder -v $PWD:/myfolder davidanson/markdownlint-cli2:v0.10.0 "**/*.md" "#node_modules"
     ```
 
 > **Deprecated**
@@ -193,7 +193,7 @@ Notes:
 > instead, use Docker's `--entrypoint` flag:
 >
 > ```bash
-> docker run -v $PWD:/workdir --entrypoint="markdownlint-cli2-fix" davidanson/markdownlint-cli2:v0.9.2 "**/*.md" "#node_modules"
+> docker run -v $PWD:/workdir --entrypoint="markdownlint-cli2-fix" davidanson/markdownlint-cli2:v0.10.0 "**/*.md" "#node_modules"
 > ```
 
 For convenience, the container image
@@ -415,7 +415,7 @@ reference to the `repos` list in that project's `.pre-commit-config.yaml` like:
 
 ```yaml
 - repo: https://github.com/DavidAnson/markdownlint-cli2
-  rev: v0.9.2
+  rev: v0.10.0
   hooks:
   - id: markdownlint-cli2
 ```
diff --git a/markdownlint-cli2.js b/markdownlint-cli2.js
index c8a9d82f..eaa10927 100755
--- a/markdownlint-cli2.js
+++ b/markdownlint-cli2.js
@@ -26,7 +26,7 @@ const resolveAndRequire = require("./resolve-and-require");
 
 // Variables
 const packageName = "markdownlint-cli2";
-const packageVersion = "0.9.2";
+const packageVersion = "0.10.0";
 const libraryName = "markdownlint";
 const libraryVersion = markdownlintLibrary.getVersion();
 const dotOnlySubstitute = "*.{md,markdown}";
diff --git a/package.json b/package.json
index 2886fbd0..1ac4bdf7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "markdownlint-cli2",
-  "version": "0.9.2",
+  "version": "0.10.0",
   "description": "A fast, flexible, configuration-based command-line interface for linting Markdown/CommonMark files with the `markdownlint` library",
   "author": {
     "name": "David Anson",