Retire legacy type forwarder resolver - #3898
Conversation
Remove the parallel path-based resolver after migrating the final compile-back harness consumer to TypeResolutionContext. Add nested and harness forwarder gates, and mark the structured architecture delivered. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Keep the completed design status consistent by describing retired consumers in the past tense and separating TypeRef's local normalization from resolution identity. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Integrate c4db43c before fixed-head review; the NuGet configuration cleanup has no overlap with this change. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
|
Integrated current |
Route the fixture through a forwarded external base interface so the test executes ReturnToSender's migrated TypeResolutionContext path instead of resolving the leaf definition through closure discovery. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Keep #3513 open: direct Callers correspondence resolves the declaring type, while forwarded non-core-library parameter types remain downstream work. Graph correspondence already resolves every named signature type. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Integrate 6a73ea6 because its workspace image-lifetime changes touch the acquisition substrate used by TypeResolutionContext. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
|
Review round 1 at
Before re-review, |
Integrate 0ff89be because its group-scoped query extends the workspace and assembly-session substrate adjacent to TypeResolutionContext. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
|
Integrated current |
Decline external-interface engagement when structured platform tightening selects a different defining assembly than Roslyn's sibling-first compilation closure. Add a signed-platform confusable-sibling gate that fails without the consistency check. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
|
Re-review at
Commit |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: e19e4751-6306-4d3c-b6a9-6ac74523f178
|
Round 7 adversarial review is clean at exact head The first read exposed one substantive gap: direct platform-signed interface references entered the frozen Roslyn closure through a name scan, bypassing the structured platform-vs-sibling convergence check used for forwarded hops. It also exposed that the review base had advanced, so that read did not count as a fixed-head round. Commit GPT-5.6 Sol and Claude Opus independently re-reviewed the full current diff in isolated worktrees and reported CLEAN. They verified the initial reference origin/scope, non-vacuous independent replay, exact scan correspondence, inherited-interface origin, immutable shared snapshot lifetime and budget, retry/cluster/all/authored closure reuse, unsigned compatibility boundary, and positive/negative gate non-vacuity. Current-head Ready to merge |
Summary
The structured type-forwarding architecture is complete: this removes the last parallel path/string-based resolver and migrates its sole consumer, ReturnToSender external-interface planning, to
TypeResolutionContext.Any-then-Platformbinding behavior while carrying an exact resolved assembly descriptor and durable TypeDef addressPlatformAssemblyResolutionScopeto its own contract file and removesTypeLocation, the resolver implementation, and its duplicate testsProduct decompiler behavior is unchanged; it already used the structured engine. The removed public types belong to an internal library with no external API-stability contract.
Evidence
dotnet build dotnet-inspect.slnx -c Release --no-restoreReturnToSenderPrototypeTests,CrossAssemblyMethodFactsTests,TypeRefDecoderCanonicalReferencedTests)markdownlintEnvironment.FailFastatResolveExternalTypeDefinitionterminates the forwarded-base fixtureResolveExternalTypeDefinition_DeclinesWhenPlatformSelectionDiffersFromCompilationClosurefail by returning the TPASystem.Text.Jsondefinition instead of decliningThe nested engine gate resolves #3458 and #3480. Removing the alias/path compatibility layer retires #3479, #3598, and #3605.
Two downstream boundaries remain intentionally open and are not claimed by this retirement: #3513 still tracks forwarded non-core-library parameter types in direct
Callers, while graph correspondence already resolves every named signature type; #3578 still tracks general physical-file identity, an explicit design non-goal.Closes #3458
Closes #3480
Closes #3479
Closes #3598
Closes #3605