Route package integrations through workspaces - #3932
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use acquisition-owned package provenance, isolate malformed assembly names, and surface partial grouped Integrations results as incomplete commands. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Round 3 findings are addressed in f806f3e:
The branch remains based on the current origin/main (1d47eb9). A new fixed-head review will follow after current-head CI is green. |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Round 4 reconciliation for reviewed head
Local validation on |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Round 5 findings on
Local validation on |
Reconcile the shared Integrations runner and output pipeline while preserving the package host's per-TFM streaming workspace and incomplete-result contract. Contain malformed metadata consistently in the direct-library runner. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated
The range included the shared assembly-context Integrations CLI adoption (#3929), empty-section selector changes (#3894), and multi-assembly output rewrite (#3931), overlapping this PR across the query host, acquisition descriptors, package orchestration, and rendering. Conflict resolution keeps main's shared direct-library runner and current output pipeline authoritative while retaining this PR's package-specific per-TFM streaming workspace, exact-presence projection, failure visibility, and bounded-memory behavior. The direct runner was also aligned with package preflight containment for malformed metadata-header overflow. #3934 was non-interacting decompiler work carried by the merge. Per the explicit approval to integrate these interacting changes, round 7 will review this exact head. |
Carry the structured type-forwarding resolver retirement into the review head. The package workspace continues to compose the updated AssemblyDependencyResolver per target-framework group. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Pre-round gate update: The commit has no textual overlap with this PR, but it changes |
Distinguish non-managed or identity-less compatibility skips from malformed managed metadata so grouped package Integrations keeps healthy output but returns its existing incomplete status across every output shape. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Round-7 finding resolution at
|
Adopt the typed extension-method query and exact output line limits while preserving package Integrations per-TFM streaming and command-owned retained-image coherence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Pre-re-review gate update: Integrated at |
Keep unreadable package participants on the typed incomplete path instead of reopening them, and derive grouped OpenTelemetry presence with the same predicate used by legacy Library Info. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Round-7 re-review findings resolved at
Current local evidence: Release solution build, 23 query tests, 3,239 CLI tests with 0 failures and 4 platform skips, focused exclusive-lock and close-negative gates, and Markdown lint. |
Integrate current main's typed custom-attribute query while preserving command-owned retained-image inspection for the grouped package host, and correct the acquisition gate citation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Per explicit post-clean-review approval, integrated The range migrates custom attributes onto the typed query registry and overlaps Current local evidence: Release solution build, 23 query tests, 242 |
Carry decompiler fixture extraction and HTTP client test isolation after clean review under the approved non-interaction exception. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Clean-review carry-forward record:
GPT-5.6 Sol and Claude Opus 5 both returned clean on the reviewed head. The The user approved integrating that non-interacting range and carrying the clean |
Integrate origin/main's progressive call graph workspace resources while preserving per-participant package Integrations streaming and terminal release semantics. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated the interacting progressive call-graph workspace migration from
The overlap is architectural: #3941 makes progressive member call graphs a group-owned Analysis resource and adds failure-preserving deferred disposal. The resolution keeps that lifecycle authoritative while preserving package Integrations’ per-TFM, sequential per-participant streaming and terminal release. Async release now ends the active callback before explicit participant release, so group-owned resources are still disposed before snapshots when disposal races streaming; Local evidence at the current head:
Current-head CI run: https://github.com/richlander/dotnet-inspect/actions/runs/31334851790 |
Integrate origin/main's workspace call graph session rename while preserving the grouped package Integrations architecture and lifecycle gate. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated the follow-on
The range only renames the progressive call-graph workspace API and its gates. Its sole feature-branch overlap was Current-head local evidence: Release solution build completed with no errors (three existing nullable warnings in Metadata tests), Queries/workspace 43 passed, package Integrations workspace 17 passed, and affected Markdown passed lint. |
Integrate origin/main's document-wide projection and row-window behavior while preserving grouped Integrations completion and rendering paths. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated
The range adopts document-wide projection and row-window behavior. Its package overlap only documents the existing final Markdown limiter and updates projection tests; grouped Integrations failure status and output projection are unchanged. Current-head local evidence: Release solution build completed with no errors (three existing Metadata-test nullable warnings), Queries/workspace 43 passed, package Integrations workspace 17 passed, five package grouped/output projection gates passed, and affected Markdown passed lint. |
Resolve the inspection-layer conflict by preserving per-TFM grouped Integrations streaming alongside typed Analysis Diff and catalog direct-caller migrations. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Resolved the post-review merge conflict by integrating
The only textual conflict was Local evidence at the new head: Release solution build completed with no errors (three existing Metadata-test nullable warnings), Queries 48 passed, focused CLI/workspace/call-graph/skill gates 300 passed, all 15 The prior clean reviews do not carry automatically because the merged range changes call-graph/session behavior; a new approved fixed-head round is required after current-head CI. |
Integrate origin/main's non-interacting info option, package concurrency, and checkout line-ending fixes before round eleven review. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated the final pre-round main range through
The range is non-interacting with grouped Integrations: it fixes |
|
Round 11 is clean on exact base
Exact-head CI: https://github.com/richlander/dotnet-inspect/actions/runs/31358473208 ( Ready to merge |
Resolve all-libraries output by preserving grouped incomplete status while adopting LF-only Markdown emission, with a combined malformed-output regression. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Resolved the new product conflict by integrating
The conflict was in the all-libraries Markdown completion path. The resolution adopts main’s LF-only Local evidence: Release solution build completed with no errors (three existing Metadata-test nullable warnings), package workspace 17 passed, and all 16 |
Integrate function-pointer graph identity and current CLI stabilization while preserving grouped package failure and output behavior. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated Interaction analysis: the relevant overlap is function-pointer-aware call-graph cache identity in Local validation at the merged head:
|
Integrate the typed Implementation Diff query and preserve per-TFM grouped Integrations workspace documentation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated the next The range ports Implementation Diff to a typed query. Its only semantic overlap Local validation at the merged head:
|
The latest main range is non-overlapping with grouped Integrations and passes the focused decompiler and package gates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Integrated Interaction analysis: this range contains the Markout co-development guidance Local validation:
|
Arbitrate participant release and callback completion together so disposal-owned teardown preserves resource-before-snapshot ordering. Replace the non-covering race test with a deterministic active-callback interleaving. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Round 12 found one blocking disposal interleaving at GPT-5.6 Sol found that streamed participant release checked I reproduced the finding independently in an exact-head worktree with a Fixed in Validation:
The fixed head still requires a clean two-reviewer re-review. |
|
Round 12 is clean at
Both reviewers independently verified the disposal arbitration, lock ordering, Exact-head After the clean reviews, Ready to merge. |
Integrate workspace-backed search queries and decomposed library body analysis while preserving per-TFM grouped Integrations semantics and session composition. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Evaluated post-review This range is not non-interacting:
The range is integrated in Local validation:
|
|
Integrated the next The range includes #4001, selectable call-graph output formats. It overlaps Local validation:
An initial |
Preserve raw framework asset identity while partitioning grouped Integrations by package asset directory, and suppress dependent opportunity scans when compatibility-skipped participants have no grouped evidence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Document opportunity suppression for compatibility-skipped participants and tighten the package context description. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
Final review at
Ready to merge. |
Summary
package --all-librariesnow routes explicit Integrations demand through theworkspace model:
group per target framework
then executes
AssemblyContextIntegrationsQuerysequentially, retaining oneparticipant image at a time
successful library through the same retained immutable image generation
successful Markdown, tabular, JSON, count, and Integration Opportunities
output remains available without a second Integrations scan; failed
prerequisites do not become false opportunity rows
before later host inspection, so malformed participants emit visible
warnings and return a nonzero incomplete status without hiding healthy rows
inspection and isolates malformed managed metadata before group creation
The package workspace's streaming callback preserves the exact participant
registration and provenance, allowing the existing async library pipeline to
suspend without reopening mutable package paths. Remote package provenance uses
the coordinate selected by acquisition, including tool-wrapper redirects,
rather than package-controlled nuspec fields. Local archives use a valid
normalized NuGet coordinate when available and otherwise carry local-archive
provenance.
Compatibility boundary
Direct
libraryand package--libraryretain their existing controls. Theshared direct-library host now consumes the same grouped query through main's
batch runner, while package
--all-librarieskeeps the per-TFM streaming hostneeded for bounded memory.
Native or descriptor-invalid package files such as blank-name assemblies
continue through the existing per-library path; malformed metadata decoder
failures no longer abort healthy grouped participants.
Execution remains deterministic and sequential; cancellation-aware and
concurrent group executors remain later work.
Validation
dotnet build dotnet-inspect.slnx -c Releasedotnet run --project src/DotnetInspector.Queries.Tests -c Releasedotnet run --project tests/ILInspector.Metadata.Tests -c Releasedotnet run --project src/dotnet-inspect.Tests -c ReleasePackageCommand_AllLibraries_*,PackageIntegrationsWorkspaceTests, acquisition, failure-visibility, andworkspace lifetime gates
npx markdownlint-cliover all four changed architecture documents