Skip to content

chore(release): close the net10 analyzer window, release 2.7.1 - #148

Merged
e128 merged 2 commits into
mainfrom
feature/net11-follow-up
Nov 11, 2026
Merged

e128 merged 2 commits into
mainfrom
feature/net11-follow-up

Conversation

@e128

@e128 e128 commented Nov 11, 2026 •

Copy link
Copy Markdown
Owner

Executive Summary

The repository moved to net11.0 in #147, but three things still claimed net10.0: the analyzer package metadata, the CI reach proof, and the release record. This change closes that window, finishes the union result work at the CLI entry point, and settles two evaluations from the follow-up list.

Two items on the follow-up list are blocked upstream, not by this repository:

  • Microsoft.CodeAnalysis.CSharp has no release newer than 5.9.0 on nuget.org, so the analyzer cannot move to the SDK 11 Roslyn band yet.
  • Microsoft.CodeAnalysis.Analyzer.Testing 1.1.4 exposes ReferenceAssemblies.Net codes up to Net100 only, so the E128062 default stays at 100.

Code Changes

  • Support window. Removed the net10-consumer CI job and the tests/Net10Consumer fixture. The analyzer assemblies stay netstandard2.0 so Roslyn can load them, and the package claims the net11.0 host only.
  • CLI union result. CliApp now calls IGreetingService and switches over GreetingResult. Greeting maps to exit code 0, GreetingError to 1, and the empty case to 2. A failure writes its reason to standard error. The web entry point already mapped the same union.
  • NuGet age guard. nuget.config sets minPublishAgeHours="72" on nuget.org, matching the Renovate three-day delay. The attribute gates automatic version selection only: dotnet package add, dotnet package update, and floating versions. A pinned restore ignores it.
  • Language version. Both analyzer projects keep LangVersion 14.0. Raising it to latest made the formatter rewrite collection initializers into the C# 15 collection expression argument form, which touched 26 analyzer files. The comment now states that reason.
  • Release. E128062 moved to a ## Release 2.7.0 section, the version CI published from build(net11): move the repo to net11 and keep net10 package reach #147. The package version is now 2.7.1 for the narrowed host claim.

Tests and Tooling

  • scripts/check.sh: shell lint, format, build, and the full suite pass.
  • scripts/test.sh --all: 2655 passed, 0 failed, 0 skipped.
  • New test Invoke_WithBlankName_ReturnsExpectedFailureExitCode covers the failure mapping.
  • scripts/internal/analyzer-release-check.sh: 214 source IDs, 0 unshipped, 215 shipped, clean.
  • scripts/readme-table-diff.sh --analyzer: no drift.
  • Proved the SDK 11 NuGet parses the new attribute: the value 1.5 produced The attribute 'nuget.org:minPublishAgeHours' has an unallowed value '1.5'.

Review Guide

  • lode/dotnet/net11-upgrade.md, Analyzer Reach: the new support-window rules and the reason the Roslyn pin can lag the SDK band.
  • lode/dotnet/aspnet-core-performance.md: the Zstandard evaluation and why compression stays off.
  • lode/dependency-policy.md: the limits of minPublishAgeHours.
  • plans/roadmap.md: what remains blocked and why.

Rollback

Revert the commit. Restoring the net10-consumer job needs the fixture directory back, because the job reads it. The minPublishAgeHours attribute is independent and can be removed alone.

Links

🤖 Generated with Claude Code

Follow-Up Commit

docs: refresh the wiki and bound the readme-auditor

  • Regenerated all 16 pages under docs/. The previous generation ran 2026-05-29 and still described .NET 10, 90 diagnostic IDs, and the removed net10 consumer fixture.
  • Added scripts/internal/readme-audit.sh. It checks install-snippet versions, the SDK row, the project table, and both generated table diffs in one call.
  • Rewrote the readme-auditor agent around that script. Two earlier runs spent the full turn cap on hand checks and produced no report. The verified run makes two tool calls and returns the report.

This commit changes no .cs file, so /yeet skipped the build and test gate. Shell lint passed over all 80 scripts, the README audit reported clean, and the opencode agent mirror is in sync.

e128 added 2 commits November 10, 2026 21:23
- Drop the net10-consumer CI job and the tests/Net10Consumer fixture.
  The analyzer support window is now net11.0, and the package metadata
  claims that host only.
- Map the greeting result union to CLI exit codes: 0 success, 1 expected
  failure, 2 unknown result. The failure case gains its own test.
- Set minPublishAgeHours to 72 on nuget.org, matching the Renovate
  three-day delay. The setting gates automatic version selection only.
- Promote E128062 to Release 2.7.0, the version CI published, and bump
  the package to 2.7.1 for the narrowed host claim.
- Keep LangVersion at 14.0. On latest the formatter rewrites collection
  initializers into the C# 15 collection expression argument form.
- Record the Zstandard evaluation and split the ASP.NET Core notes into
  lode/dotnet/aspnet-core-performance.md.

Co-Authored-By: Claude

Co-Authored-By: Claude
- Regenerate all 16 docs pages against the current repo: net11, SDK
  11.0.100, 214 diagnostic IDs across 11 projects, two CI jobs, the
  union result, and the publish age guard.
- Replace the copied rule catalog in integration-patterns with
  representative rows per category, so the analyzer README stays the
  one source of truth.
- Add scripts/internal/readme-audit.sh. It compares install versions,
  the SDK row, the project table, and both generated table diffs.
- Rewrite the readme-auditor agent around that script. Both earlier
  runs hit the turn cap with no report. A live run now takes two tool
  calls and delivers the report.
- Route the new script in the rules table, the scripts README, and the
  help catalog.

Co-Authored-By: Claude

Co-Authored-By: Claude
@e128
e128 merged commit 6d9ec5d into main Nov 11, 2026
2 checks passed
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.

1 participant