diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 00000000..5981dfef
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,49 @@
+version: 2
+updates:
+ - package-ecosystem: "nuget"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ commit-message:
+ prefix: "chore(deps)"
+ groups:
+ # Minor/patch bumps land together; a major stays its own PR so a snapshot-risk bump like
+ # #221 is attributable to one dependency, not buried in a batch. The one shipped runtime
+ # dependency is excluded even from this group: its patches change emitted CMS/PAdES bytes,
+ # so it does not belong next to routine test-tooling churn.
+ minor-and-patch:
+ update-types:
+ - "minor"
+ - "patch"
+ exclude-patterns:
+ - "System.Security.Cryptography.Pkcs"
+ ignore:
+ # #200 holds the xunit.v3 family and xunit.runner.visualstudio on 3.x deliberately until
+ # the Microsoft.Testing.Platform migration lands; a weekly major bump proposal here would
+ # target a known-red build. "xunit.v3*" matches both xunit.v3 and xunit.v3.assert.
+ - dependency-name: "xunit.v3*"
+ update-types: ["version-update:semver-major"]
+ - dependency-name: "xunit.runner.visualstudio"
+ update-types: ["version-update:semver-major"]
+
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ commit-message:
+ prefix: "ci"
+ # No group: every action here is currently pinned to a floating major tag (e.g.
+ # actions/checkout@v7), so only major bumps ever surface. A group block would read as doing
+ # something it cannot.
+
+ - package-ecosystem: "dotnet-sdk"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ commit-message:
+ prefix: "chore(deps)"
+ # This updater parses global.json but does not act on rollForward, so it proposes SDKs
+ # outside the pinned 10.0.4xx feature band (a later 10.0.5xx, eventually 11.x) as readily as
+ # ones inside it. That is intended, not a bug in this config: #379 pins the band deliberately
+ # and its CONTRIBUTING rule requires a human to merge a band move on purpose and CI-validate
+ # it before the next tag, so each such PR is that signal, not noise to dismiss.
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index acecf674..c8d1dd73 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -215,6 +215,11 @@ jobs:
env:
REQUIRE_VERAPDF: '1'
REQUIRE_BARCODE_ORACLE: '1'
+ # DiffEngine 20.0.0 reads its disable flag lazily instead of capturing it once at
+ # type-init (VerifyTests/DiffEngine#825) and now installs a bundled viewer as an
+ # always-available last-resort tool, so a detection miss that was a harmless no-op in
+ # 19.x could launch a GUI here instead. Setting this explicitly closes that gap.
+ DiffEngine_Disabled: 'true'
run: dotnet test VellumPdf.slnx -c Release --no-build --collect:"XPlat Code Coverage" --results-directory ${{ runner.temp }}/coverage
- name: Enforce coverage threshold
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 90e06f08..0c6c86f9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -248,6 +248,35 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
`latestPatch`, and all five `setup-dotnet` steps (`ci.yml` build and AOT smoke jobs, `release.yml`
library and tool jobs, `docs.yml`) point at `global-json-file: global.json` rather than repeating
the version inline, so the two can no longer drift apart. (#231)
+- **`Verify.XunitV3` moves to 32.0.0.** The dependency floor on `xunit.v3.extensibility.core` is
+ `[3.2.2, )`, open-ended and already satisfied by the xunit.v3 3.2.2 pin in
+ `Directory.Packages.props`, from which `extensibility.core` comes transitively, so the bump is
+ independent of #200's xunit v4 migration. The measured transitive delta against the base
+ commit's restore: `Verify` 31.28.0 → 32.0.0, moving in lockstep with `Verify.XunitV3` itself,
+ `DiffEngine` 19.3.3 → 20.0.0 (a major), and `Microsoft.Bcl.AsyncInterfaces` 10.0.10 → 10.0.11;
+ `Argon` and `SimpleInfoName` were already in 31.28.0's closure and did not move. DiffEngine
+ 20.0.0 reads its own disable flag lazily rather than capturing it once at type-init
+ (VerifyTests/DiffEngine#825) and adds a bundled viewer as an always-available last-resort tool,
+ so a detection miss that was a harmless no-op in 19.x could now launch a GUI. `ci.yml`'s test
+ step sets `DiffEngine_Disabled: true` against that, and `tests/Directory.Build.props` sets
+ `false`, which drops the bundled viewer
+ binaries and the `DiffEngine.ViewerDirectory` path DiffEngine's build targets otherwise stamp
+ into each test project's `runtimeconfig.json` — a username-bearing absolute path this keeps out
+ of build artifacts. Neither setting reaches a developer's own installed diff tool (VS, Rider, VS
+ Code, WinMerge); only `DiffEngine_Disabled` does that. None of the five packages above appear in
+ `dotnet list package --vulnerable`. No `.verified.*` file under `tests/` changed. (#221)
+- Added `.github/dependabot.yml`: weekly `nuget`, `github-actions`, and `dotnet-sdk` checks. The
+ `nuget` group batches minor/patch bumps into one PR and excludes
+ `System.Security.Cryptography.Pkcs` — the one third-party runtime dependency this repository
+ ships, whose patches change emitted CMS/PAdES bytes — from that batch; majors stay individual, so
+ a snapshot-risk major like this one stays attributable to a single PR. `xunit.v3*` (matching
+ `xunit.v3` and `xunit.v3.assert`) and `xunit.runner.visualstudio` majors are ignored pending
+ #200's deliberate hold on the v3-to-v4 migration. `dotnet-sdk` covers the `global.json`
+ feature-band pin from #379: that updater does not read `rollForward`, so it proposes SDKs
+ outside the pinned 10.0.4xx band as readily as ones inside it — by design, since each such PR is
+ the deliberate band-move signal #379's CONTRIBUTING rule calls for, not noise. `github-actions`
+ carries no group: every action here is currently pinned to a floating major tag, so only major
+ bumps ever surface. (#221)
### Fixed
diff --git a/Directory.Packages.props b/Directory.Packages.props
index 8589a9be..15901d8d 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -25,7 +25,7 @@
test host (OutputType=Exe), which a shared helper library is not. -->
-
+
diff --git a/tests/Directory.Build.props b/tests/Directory.Build.props
index c9a2c709..7f2d8454 100644
--- a/tests/Directory.Build.props
+++ b/tests/Directory.Build.props
@@ -7,6 +7,13 @@
true
Exe
+
+ false