Repository navigation
Bug: dependabot-repair-borrowed-packages-and-transitive-redirects #985
Description
- Work Mode: full-bug
Summary
Grouped NuGet Dependabot pull requests (PR #984) still fail CI after the dependabot-repair workflow (issue #911) runs successfully, because two classes of manifest inconsistency are invisible to both Dependabot and the repair script: (1) test projects that hint-path a package they do not declare in their own packages.config (borrowed from a sibling production project), and (2) app.config binding redirects for assemblies that a project receives only transitively (no packages.config entry and no direct <Reference>). All failures must be remediated automatically, with no manual step on any future Dependabot PR.
Environment
- OS/version: GitHub Actions
windows-latest(CI) and Windows 11 (local) - Python version: n/a (PowerShell 7 repair scripts, .NET Framework 4.8.1 / packages.config projects)
- Command/flags used: CI workflow
ci.ymlon branchdependabot/nuget/QuickFiler.Test/all-nuget-updates-2542c001c9; repair workflow.github/workflows/dependabot-repair.yml(workflow_run trigger) invokingscripts/dependencies/Repair-PackageManifestConsistency.ps1without-CandidateUpgrade - Data source or fixture: PR Bump the all-nuget-updates group with 16 updates #984 (AngleSharp, log4net 3.4.0 -> 3.5.0, Microsoft.Web.WebView2 1.0.4191.47 -> 1.0.4258.31, analyzer bumps); CI run #1059 (id 37959420911) on repair commit fff92fe
Steps to Reproduce
- Let Dependabot open a grouped NuGet update that bumps Microsoft.Web.WebView2 and log4net (PR Bump the all-nuget-updates group with 16 updates #984).
- Let
dependabot-repairrun after CI; it repairs<Analyzer Include>paths and pushes commit fff92fe astaskmaster-dependabot-repair[bot]. - Observe CI run #1059 on that commit.
Expected Behavior
After the repair workflow runs, every required CI check (build-analyzers, build-nullable, mstest-coverage, pester, format-check, actionlint, hygiene) passes on the Dependabot branch with no human edit. Every project that compiles against a package declares that package in its own packages.config, and every bindingRedirect newVersion equals an assembly version actually referenced in the solution.
Actual Behavior
- build-analyzers, build-nullable, mstest-coverage fail:
UtilitiesCS.TestandQuickFiler.Testhint-pathpackages\Microsoft.Web.WebView2.1.0.4191.47\...without declaring WebView2 in their ownpackages.config; after the production projects move to 1.0.4258.31 nothing restores 4191.47, producingCS0012/CS0234/CS0246(for exampleUtilitiesCS.Test\HelperClasses\ThemeHelpers\ThemeTests.cs(284,29): error CS0012: The type 'WebView2' is defined in an assembly that is not referenced). - The same latent pattern exists on main for
ObjectListView.Official 2.9.1inQuickFiler.TestandTaskTree.Test. - pester fails:
BindingRedirectVerification.Tests.ps1reportslog4net|3.4.0.0because Tags.Test, TaskTree.Test, TaskVisualization.Test, ToDoModel.Test and VBFunctions.Test keepnewVersion="3.4.0.0"while every other project moved to 3.5.0.0; those five projects have no log4netpackages.configentry or<Reference>, so neither Dependabot nor the repair script edits them, and the repair's redirect pass does not run from the workflow_run trigger because-CandidateUpgradeis not supplied (seedependabot-repair.ymllines 87-94).
Logs / Screenshots
- Attached minimal logs or screenshot
- Snippet:
Expected 0, because every bindingRedirect newVersion must equal a csproj Reference version (issue 973 emptied the recorded known-debt set; a new stale pair is fixed, not recorded); observed: log4net|3.4.0.0, but got 1.
Impact / Severity
- Blocker
- High
- Medium
- Low
Source
From: docs/features/potential/2026-10-09-dependabot-repair-borrowed-packages-and-transitive-redirects.md
Activity
drmoisan commentedon Oct 9, 2026
Sections omitted by the promotion tool, reposted from the feature folder issue.md:
Suspected Cause / Notes
Dependabot's packages.config updater and
Repair-PackageManifestConsistency.ps1both act only on packages a project declares in its ownpackages.config. Borrowed hint paths and transitive binding redirects fall outside that set. The verifier (ConsistencyVerifier.psm1Find-OrphanedHintPath) already detects borrowed hint paths but is not a failing gate on main.Proposed Fix / Validation Ideas
packages.config, and ObjectListView.Official in QuickFiler.Test and TaskTree.Testpackages.config, at the versions their production siblings declare.bindingRedirect newVersion(and the upper bound ofoldVersion) to the assembly version referenced elsewhere in the solution, covering transitive redirects; run it from the workflow_run trigger.@dependabot recreateon PR Bump the all-nuget-updates group with 16 updates #984 and confirm all required checks pass with no human edit.Next Step
Merge pull request #987 from drmoisan/bug/dependabot-repair-borrowed-…
drmoisan commentedon Oct 9, 2026
Delivered by PR #987 (merge commit 564a43b).
AC7 verified. After
@dependabot recreateon #984, Dependabot superseded it with #988. On #988, thedependabot-repairworkflow (run 37984377202) pusheda538fa6f6astaskmaster-dependabot-repair[bot]. CI run 37984842203 on that head then passed all 7 required checks: build-analyzers, build-nullable, mstest-coverage, pester, format-check, actionlint and hygiene. The repair workflow's next run (37985385207) wrote nothing. No human edits were made. #988 was merged as d81af9d.