Skip to content

Check exact-empty sections across all libraries - #3899

Closed
richlander wants to merge 5 commits into
mainfrom
fix/3884-multi-assembly-empty
Closed

Check exact-empty sections across all libraries#3899
richlander wants to merge 5 commits into
mainfrom
fix/3884-multi-assembly-empty

Conversation

@richlander

@richlander richlander commented Aug 8, 2026

Copy link
Copy Markdown
Owner

Exact-empty validation now evaluates the whole multi-assembly document instead of only its first inspection. A selected section renders when any assembly has rows, and fails only when every assembly is empty.

Markdown output now composes each assembly with its own effective section filter under the package's Libraries heading. This preserves the report hierarchy while ensuring a populated later assembly renders without leaking unrequested sections. Row-oriented formats retain their existing per-assembly rendering.

The same document-level decision governs empty-section notes: a populated later assembly no longer appears alongside a false note that the selected section has no data. Inspection failures remain correlated per assembly, so a failure in one assembly is still visible even when another assembly renders the requested section. Duplicate identical failures are reported once.

A deterministic local package fixture puts an empty assembly first and the test assembly with async methods second. It pins both sides:

  • -S "Async Methods" --tsv and --markdown exit 0 and emit the later assembly's rows.
  • Markdown retains the package/library hierarchy and does not leak Library Info or Symbols.
  • -S Resources --tsv still exits 1 with empty stdout when every assembly is empty.
  • The first assembly's zero count is asserted to keep the regression fixture non-vacuous.
  • A synthetic mixed-inspection test pins failure visibility when a later assembly has data.

Compatibility boundary: single-assembly behavior is unchanged. Singleton --count, wildcard provenance (#3886), and multi-assembly reference trees (#3885) are separate paths and remain out of scope.

Validation:

  • Release solution build succeeds.
  • Full CLI and inspection-workspace query suites pass.
  • Real package canary: Microsoft.NETCore.App.Runtime.linux-x64@10.0.0 --tfm all -S "Async Methods" --tsv exits 0 with 269 lines and no stderr (regressed head exited 1 with empty stdout).

Closes #3884.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 69d084f3-8160-4685-8876-53ca246b77f9
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 69d084f3-8160-4685-8876-53ca246b77f9
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 69d084f3-8160-4685-8876-53ca246b77f9
@richlander

Copy link
Copy Markdown
Owner Author

Closing as superseded. #3901 merged the document-wide exact-empty fix for #3884, and #3945 subsequently added the multi-inspection Markdown framing, aggregate count behavior, wildcard boundary, and per-assembly failure diagnostics while defining the current output-shape contract. This branch no longer carries a unique behavioral change worth resolving against current main.

@richlander richlander closed this Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

library --tfm all rejects a section when only the first assembly is empty

1 participant