Skip to content

fix(ci): plan-0062 package-validation gap fixes - #129

Merged
ncipollina merged 3 commits into
mainfrom
plan-0062-package-validation-gap-fixes
Sep 3, 2026
Merged

fix(ci): plan-0062 package-validation gap fixes#129
ncipollina merged 3 commits into
mainfrom
plan-0062-package-validation-gap-fixes

Conversation

@ncipollina

Copy link
Copy Markdown
Contributor

Summary

PLAN-0062 (package-validation gap fixes) - a follow-up discovered during RESEARCH-0021's post-PLAN-0061 audit, not part of PLAN-0061's own scope. See docs/plans/0062-package-validation-gap-fixes.md for the full plan and docs/research/0021-package-validation-execution-policy-audit.md for the underlying research.

Two real gaps closed:

  1. inspect-packed-nupkgs.sh was missing Compono.Logging entirely (10 of 11 packages checked). Added, with its actual package-specific invariants (own build/+buildTransitive/ props, no analyzer entry; a new assert_dependency_range_per_tfm function for Microsoft.Extensions.Logging.Abstractions, the only third-party dependency whose range is conditioned per-TFM and absent for net11.0) - not merely added to a loop.
  2. CS1591 enforcement moved out of a redundant second full 11-package rebuild in package-validation.yaml, into Directory.Build.targets (scoped $(IsPackable) != 'false') so an ordinary pr-build.yaml build (and dotnet pack itself) already catches it - earlier feedback, less CI cost, no coverage loss.

Also includes docs/research/0020-repository-wide-comment-quality-audit.md - a companion audit that found the repository's comments already conform to its own stated policy; no cleanup warranted there (Tier 3, no code changes).

Explicitly not included: NUnit compatibility-matrix applicability scoping (RESEARCH-0021's other Tier 2 candidate) - deferred, since there's no demonstrated CI-duration problem to justify new change-detection machinery on an already ~3-minute job.

Test plan

  • inspect-packed-nupkgs.tests.sh - all pass, including new assert_dependency_range_per_tfm regression coverage (pass / per-TFM mismatch / unexpected-net11.0-presence)
  • Full local pack + inspect-packed-nupkgs.sh run against all 11 publishable packages - all pass, including Compono.Logging's new assertions
  • dotnet build Compono.slnx -c Release - 0 errors, same 40 pre-existing warnings baseline (no new CS1591 regressions anywhere)
  • dotnet test Compono.slnx -c Release - 3478/3478 passed
  • Positive CS1591 enforcement proof: temporarily added an undocumented public member to Compono.Http (a real packable package) - confirmed both dotnet build and dotnet pack fail with a real CS1591 error; reverted
  • Non-packable boundary proof: temporarily added an undocumented public member to Compono.Samples.AspNetApi (non-packable, non-test, no local NoWarn) - confirmed the build succeeds, CS1591 remains an ordinary warning, never promoted to error; reverted
  • Real package-validation.yaml CI run on this PR - confirming the removed step is gone with no coverage loss, Compono.Logging is now inspected, and everything else stays green

🤖 Generated with Claude Code

https://claude.ai/code/session_01GMQEjFrUVGYkctE3ECfRuA

Closes two real gaps RESEARCH-0021 found in package-validation.yaml and
its scripts:

- inspect-packed-nupkgs.sh's package loop was missing Compono.Logging
  entirely (10 of 11 packages checked) - added, with its actual
  package-specific invariants: build/+buildTransitive/ Compono.Logging.props
  in the file listing (no analyzer, unlike core Compono - generation lives
  in the shared Compono.Generators), and a new
  assert_dependency_range_per_tfm function for
  Microsoft.Extensions.Logging.Abstractions, the only third-party
  dependency in the package set whose Directory.Packages.props range is
  conditioned per TargetFramework (and is absent entirely for net11.0,
  satisfied by that TFM's own shared framework) - the existing
  assert_dependency_range's single-value lookup can't see this shape.
  New regression coverage added for the new function (pass, per-TFM
  mismatch, unexpected-net11.0-presence).

- CS1591 was enforced via a redundant second full rebuild of all 11
  packages in package-validation.yaml, even though
  Directory.Build.props already makes it an ordinary build warning for
  every project (GenerateDocumentationFile=true unconditionally).
  Directory.Build.targets now promotes it to an error scoped to
  $(IsPackable) != 'false' - the same 11 packages, verified against
  every non-packable project in the repo (all set IsPackable=false
  directly). The redundant workflow step is removed; dotnet pack itself
  now also fails on a missing doc comment, so no coverage is lost.

Both changes independently validated: a full local pack+inspect of all
11 packages, a full solution build/test (3478/3478, 0 regressions), a
positive CS1591 enforcement proof (temporarily undocumented member in
Compono.Http failed an ordinary build/pack, reverted), and a
non-packable-boundary proof (same in Compono.Samples.AspNetApi built
clean with CS1591 remaining a warning, reverted).

The NUnit compatibility-matrix applicability scoping RESEARCH-0021 also
flagged is explicitly deferred, not included here - no demonstrated
CI-duration problem justifies adding new change-detection machinery
(package-validation.yaml's job is already ~3 minutes total, and removing
the redundant CS1591 rebuild may shrink that further).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GMQEjFrUVGYkctE3ECfRuA
@github-actions github-actions Bot added the type: fix Bug fix label Sep 3, 2026
package-validation.yaml: 2m58s post-fix vs 3m0s baseline (PR #128's last
run) - the redundant CS1591 rebuild's removal and Compono.Logging's added
pack+inspect roughly offset; no meaningful net change, no regression.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GMQEjFrUVGYkctE3ECfRuA

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: d973a8abf4

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment thread Directory.Build.targets
Addresses Codex P1 finding on PR #129: docs/contributing.md still told
contributors to run `dotnet build -p:WarningsAsErrors=CS1591` separately
and described it as "the same gate that runs in CI" - stale since
PLAN-0062 moved enforcement into Directory.Build.targets. An ordinary
`dotnet build Compono.slnx` now enforces it directly for publishable
packages; no extra flag needed, and the dedicated package-validation
rebuild step no longer exists. Verified no other current-facing doc,
skill, or contributor instruction (root CONTRIBUTING.md, the
engineering-workflow skill's own contributing.md reference) still
describes the old invocation - only historical, already-Done plan
records and the RESEARCH-0021 record itself mention it, correctly, as
past-tense history.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GMQEjFrUVGYkctE3ECfRuA
@ncipollina
ncipollina merged commit 475835b into main Sep 3, 2026
18 of 19 checks passed
@ncipollina
ncipollina deleted the plan-0062-package-validation-gap-fixes branch September 3, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: fix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant