Skip to content

Read Disabled when it is asked for rather than at type initialisation - #825

Merged
SimonCropp merged 1 commit into
mainfrom
fix-disabled-computed-once
Aug 22, 2026
Merged

Read Disabled when it is asked for rather than at type initialisation#825
SimonCropp merged 1 commit into
mainfrom
fix-disabled-computed-once

Conversation

@SimonCropp

Copy link
Copy Markdown
Member

DiffRunner.Disabled captured DisabledChecker.IsDisable() in its initialiser, so
whichever of the detectors reported first won for the life of the process. Setting
BuildServerDetector.Detected or AiCliDetector.Detected after anything had touched
DiffRunner did nothing at all - and a test host sets them after it has loaded,
which is the only moment it can. BuildServerDetector.Detected is an AsyncLocal
override on top of that, and a per-context value could never have reached a static
captured once anyway.

It is computed on read now, and an explicit set still pins it: consumers that
assign Disabled keep the value they assigned, and nothing is read from the
environment after that.

DiffRunner.Disabled captured DisabledChecker.IsDisable() in its initialiser, so
whichever of the detectors reported first won for the life of the process. Setting
BuildServerDetector.Detected or AiCliDetector.Detected after anything had touched
DiffRunner did nothing at all - and a test host sets them after it has loaded,
which is the only moment it can. BuildServerDetector.Detected is an AsyncLocal
override on top of that, and a per-context value could never have reached a static
captured once anyway.

It is computed on read now, and an explicit set still pins it: consumers that
assign Disabled keep the value they assigned, and nothing is read from the
environment after that.
@SimonCropp SimonCropp added this to the 20.0.0 milestone Aug 22, 2026
@SimonCropp
SimonCropp merged commit c2e33e2 into main Aug 22, 2026
10 checks passed
@SimonCropp
SimonCropp deleted the fix-disabled-computed-once branch August 22, 2026 13:22
This was referenced Aug 26, 2026
This was referenced Aug 27, 2026
Tim81 added a commit to Tim81/VellumPDF that referenced this pull request Aug 31, 2026
The dependency floor on xunit.v3.extensibility.core is [3.2.2, ), an
open lower bound already satisfied by the xunit.v3 3.2.2 pin, so this
is independent of the xunit v4 migration tracked separately (#200).

The transitives that actually moved: Verify itself (31.28.0 to
32.0.0, in lockstep with Verify.XunitV3), DiffEngine (19.3.3 to
20.0.0, a major), and Microsoft.Bcl.AsyncInterfaces (10.0.10 to
10.0.11). Argon and SimpleInfoName were already in 31.28.0's closure.

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.
CI sets DiffEngine_Disabled explicitly against that, and the test
projects opt out of the bundled viewer, which also keeps a
username-bearing absolute path out of runtimeconfig.json. Neither
setting reaches a developer's own installed diff tool; only
DiffEngine_Disabled does that.

Adds .github/dependabot.yml, missing until now: nuget, github-actions,
and dotnet-sdk, weekly. Minor/patch bumps group per ecosystem; majors
stay individual so a snapshot-risk major like this one is
attributable to its own PR. The nuget group excludes the one shipped
runtime dependency, whose patches change emitted CMS/PAdES bytes,
from that batch, and ignores xunit.v3* and xunit.runner.visualstudio
majors pending #200's hold. dotnet-sdk does not consider rollForward,
so it will propose SDKs outside the pinned 10.0.4xx band by design:
each such PR is the deliberate band-move signal #379's CONTRIBUTING
rule calls for.
Tim81 added a commit to Tim81/VellumPDF that referenced this pull request Aug 31, 2026
The dependency floor on xunit.v3.extensibility.core is [3.2.2, ), an
open lower bound already satisfied by the xunit.v3 3.2.2 pin, so this
is independent of the xunit v4 migration tracked separately (#200).

The transitives that actually moved: Verify itself (31.28.0 to
32.0.0, in lockstep with Verify.XunitV3), DiffEngine (19.3.3 to
20.0.0, a major), and Microsoft.Bcl.AsyncInterfaces (10.0.10 to
10.0.11). Argon and SimpleInfoName were already in 31.28.0's closure.

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.
CI sets DiffEngine_Disabled explicitly against that, and the test
projects opt out of the bundled viewer, which also keeps a
username-bearing absolute path out of runtimeconfig.json. Neither
setting reaches a developer's own installed diff tool; only
DiffEngine_Disabled does that.

Adds .github/dependabot.yml, missing until now: nuget, github-actions,
and dotnet-sdk, weekly. Minor/patch bumps group per ecosystem; majors
stay individual so a snapshot-risk major like this one is
attributable to its own PR. The nuget group excludes the one shipped
runtime dependency, whose patches change emitted CMS/PAdES bytes,
from that batch, and ignores xunit.v3* and xunit.runner.visualstudio
majors pending #200's hold. dotnet-sdk does not consider rollForward,
so it will propose SDKs outside the pinned 10.0.4xx band by design:
each such PR is the deliberate band-move signal #379's CONTRIBUTING
rule calls for.
Tim81 added a commit to Tim81/VellumPDF that referenced this pull request Aug 31, 2026
The dependency floor on xunit.v3.extensibility.core is [3.2.2, ), an
open lower bound already satisfied by the xunit.v3 3.2.2 pin, so this
is independent of the xunit v4 migration tracked separately (#200).

The transitives that actually moved: Verify itself (31.28.0 to
32.0.0, in lockstep with Verify.XunitV3), DiffEngine (19.3.3 to
20.0.0, a major), and Microsoft.Bcl.AsyncInterfaces (10.0.10 to
10.0.11). Argon and SimpleInfoName were already in 31.28.0's closure.

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.
CI sets DiffEngine_Disabled explicitly against that, and the test
projects opt out of the bundled viewer, which also keeps a
username-bearing absolute path out of runtimeconfig.json. Neither
setting reaches a developer's own installed diff tool; only
DiffEngine_Disabled does that.

Adds .github/dependabot.yml, missing until now: nuget, github-actions,
and dotnet-sdk, weekly. Minor/patch bumps group per ecosystem; majors
stay individual so a snapshot-risk major like this one is
attributable to its own PR. The nuget group excludes the one shipped
runtime dependency, whose patches change emitted CMS/PAdES bytes,
from that batch, and ignores xunit.v3* and xunit.runner.visualstudio
majors pending #200's hold. dotnet-sdk does not consider rollForward,
so it will propose SDKs outside the pinned 10.0.4xx band by design:
each such PR is the deliberate band-move signal #379's CONTRIBUTING
rule calls for.
Tim81 added a commit to Tim81/VellumPDF that referenced this pull request Aug 31, 2026
The dependency floor on xunit.v3.extensibility.core is [3.2.2, ), an
open lower bound already satisfied by the xunit.v3 3.2.2 pin, so this
is independent of the xunit v4 migration tracked separately (#200).

The transitives that actually moved: Verify itself (31.28.0 to
32.0.0, in lockstep with Verify.XunitV3), DiffEngine (19.3.3 to
20.0.0, a major), and Microsoft.Bcl.AsyncInterfaces (10.0.10 to
10.0.11). Argon and SimpleInfoName were already in 31.28.0's closure.

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.
CI sets DiffEngine_Disabled explicitly against that, and the test
projects opt out of the bundled viewer, which also keeps a
username-bearing absolute path out of runtimeconfig.json. Neither
setting reaches a developer's own installed diff tool; only
DiffEngine_Disabled does that.

Adds .github/dependabot.yml, missing until now: nuget, github-actions,
and dotnet-sdk, weekly. Minor/patch bumps group per ecosystem; majors
stay individual so a snapshot-risk major like this one is
attributable to its own PR. The nuget group excludes the one shipped
runtime dependency, whose patches change emitted CMS/PAdES bytes,
from that batch, and ignores xunit.v3* and xunit.runner.visualstudio
majors pending #200's hold. dotnet-sdk does not consider rollForward,
so it will propose SDKs outside the pinned 10.0.4xx band by design:
each such PR is the deliberate band-move signal #379's CONTRIBUTING
rule calls for.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant