Skip to content

Hold back shipped majors in Dependabot, cancel superseded CI runs, and accept two release trains with a targeted CI - #191

Merged
AdCodicem merged 7 commits into
mainfrom
ccr-37c3f752-p5qgt7
Oct 19, 2026
Merged

AdCodicem merged 7 commits into
mainfrom
ccr-37c3f752-p5qgt7

Conversation

@AdCodicem

@AdCodicem AdCodicem commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

What changed

The repository went from 12 to 38 packages in two weeks. This pull request:

  • lands the fixes the measurements already settle;
  • records, as two accepted ADRs, how the packages are versioned and checked from now on.

Nothing in it releases anything: only ci, docs(adr) and docs commits. It is rebased on main, which now carries #192.

ci(deps): Dependabot (.github/dependabot.yml, docs/maintaining.md)

ci: concurrency (ci.yml, lint.yml)

  • A push to a pull request cancels the run it supersedes. That was 13 % of pull-request job-minutes.
  • A push to main is never cancelled.
  • The workflow's name is in the key, so that ci and lint never cancel each other.

docs(adr): ADR 0012, accepted. The packages are versioned in two trains, independently of the frameworks.

  • The core train goes to 1.0 on its own: the generator, Abstractions, Json, Identifiers, Testing.Data and the five Microsoft integrations.
  • The 28 satellites stay 0.x together, reach 1.0 together, then may leave in families.
  • Every dependency on one of our packages is bounded [V, next breaking version), and the core is released first.
  • A framework's major is supported in the same packages, train by train, with no maintenance line and no version aligned with a framework's.
  • The contract kit splits into a framework-free Testing.Contracts in the core and the existing Testing as a thin xunit adapter.
  • It supersedes ADR 0010.

docs(adr): ADR 0013, accepted. A pull-request CI targeted by package family, with the heavy jobs before a release.

  • Eleven CI families, each in one train, are picked by a plan that crosses the diff with dotnet-affected. At every run, the plan checks that each project and each unit-test folder belongs to exactly one family.
  • Phase A filters the one unit-test assembly by family. Phase B splits it into a test project per family, which amends ADR 0006.
  • build and test becomes the one required aggregator.
  • native AOT, native AOT (Marten), the integration suite and compat (.NET 11) move to a reusable heavy.yml. It gates every preview and stable release, and runs after each push to main.
  • Codecov gets one flag per family, with carry-forward.

Statuses and documents

  • ADR 0010 is marked superseded. The statuses of ADRs 0003, 0005, 0006 and 0009 record their amendments.
  • The root CLAUDE.md says that both ADRs are accepted but not built yet, so that agents keep to the current mechanics until the roadmap lands.
  • Every document that planned for compat (.NET 11) or native AOT (Marten) to become a required check now says that neither will:
    • the root, .github and tests/Compat CLAUDE.md files;
    • the runbook;
    • two comments in ci.yml.

Checklist

  • Unit and generator suites: not run locally for this pull request. No code changes, and no test reads the changed files (grep over tests/ finds them only in comments). CI runs both suites.
  • Codecov: no code changes. Codecov reports all modified coverable lines covered.
  • Consumer surface: unchanged.
  • Diagnostics: none added.
  • Benchmarks: no claim touched.
  • 7 commits (git rev-list --count origin/main..HEAD).

Also checked:

  • actionlint 1.7.12, the version lint.yml pins, passes on every workflow.
  • Every commit message passes the pinned conventional-pre-commit.
  • All 44 shipped dependencies match a major ignore.

🤖 Generated with Claude Code

https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L

@codecov

codecov Bot commented Oct 19, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

…'s minors, and group the families pinned together

Dependabot ignored the semver-major updates of the frameworks only, so 23 of the 44 dependencies
.github/shipped-dependencies lists opened their next major as a fix(deps)! pull request: a bump, where the
repository's rule is that a new major is supported by a decision, a floor or a target framework. Every shipped
dependency's major is now ignored, test-only packages of the same families moving with them (xunit.v3*,
protobuf-net*, Microsoft.Azure.Functions.Worker*, ModelContextProtocol*).

Microsoft.CodeAnalysis.CSharp* ignores its minors too: its major.minor is the oldest compiler that loads the
generator, since an analyzer referencing a later Microsoft.CodeAnalysis fails with CS9057, so a minor raises it as a
major does. #190 (4.14.0 -> 5.9.0) contradicts the root CLAUDE.md's "never raise it to follow a dependency" and fails
NU1107 in CodeFixes and NU1608 in GeneratorTests.

xunit.v3*, Microsoft.CodeAnalysis*, HotChocolate* and ModelContextProtocol* require one another at exactly one
version, so a partial bump fails the restore (#189: xunit.v3.assert 4.0.2 against xunit.v3.mtp-v2 4.0.1, NU1608).
Each family now updates in a pull request of its own, ahead of the dotnet group, so that a red family holds back no
other update. A group does not make Dependabot update every member; docs/maintaining.md says what to do when one is
left behind, and to check the shipped dependencies for a new major before each stable release, since Dependabot no
longer proposes them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
14 of 183 pull-request runs of ci.yml were overtaken by a push before they finished: 149 of 1,143 job-minutes, or
13 %. Both workflows now key a concurrency group on the pull request and cancel the superseded run; a push to main is
keyed on its commit and never cancelled, so that every commit of main keeps a complete run. The workflow's name is in
the key because concurrency groups are repository-wide: without it, ci and lint would share a group and cancel each
other's required checks.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
…ly of the frameworks

Proposed, to supersede ADR 0010, written for twelve packages: a core train (the generator, Abstractions, Json,
Identifiers, Testing.Data and the five Microsoft integrations) that goes to 1.0 on its own, and a satellites train
that stays 0.x and goes to 1.0 together, later, then may leave in families. Every dependency on one of our packages is
bounded by its next breaking version, the core is released first, and a framework's major is supported in the same
packages, train by train, with no maintenance line and no version aligned with a framework's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
…fore a release

Proposed: on a pull request, a plan job picks lanes by path (none, documentation, site, .NET, an unknown path falling
into .NET) behind the one required check build and test, turned into an aggregator; native AOT, native AOT (Marten),
the integration suite and compat (.NET 11) move to a reusable heavy.yml that gates every preview and stable release
and runs after each push to main. Targeting by family waits for test projects per family.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
…contract kit's checks as one theory

ADR 0013 now targets families from the start, as the maintainer chose over lanes by path alone: eleven CI families,
each in one release train, picked by a plan that crosses the diff with dotnet-affected 7.0.1 and checks at every run
that each project under src/ and each top-level folder of the unit suite belongs to exactly one family. Phase A
filters the one unit-test assembly by family; phase B splits it into a test project per family, starting with
Orleans, Wolverine.Http and HotChocolate, which amends ADR 0006. Codecov gets a flag per family with carry-forward,
and the ruleset's code_coverage rule, which nothing feeds, goes.

ADR 0012 records the form of the xunit adapter: one theory with a row per check of the framework-free kernel, so that
a check the kernel adds shows up without a new adapter version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
The maintainer accepted both records. ADR 0010 is superseded by ADR 0012, whose two release trains replace its one
version, its ladder, island and floors standing train by train; ADR 0003's stable track, ADR 0005's site lines and
ADR 0009's previews are amended by ADR 0012, ADR 0009 and ADR 0006 by ADR 0013, and each status says so. The root
CLAUDE.md says that both are accepted but not built yet, so that an agent keeps to the mechanics it describes until
the roadmap lands; the Swashbuckle package's CLAUDE.md cites ADR 0012 for a framework's next major.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
@AdCodicem
AdCodicem force-pushed the ccr-37c3f752-p5qgt7 branch from b02e9c1 to c11a24d Compare October 19, 2026 20:01
…required checks

ADR 0013, now accepted, moves both jobs, with native AOT, to the jobs that gate a preview and a stable release, where
ADR 0010 had compat (.NET 11) join the required checks when .NET 11 ships and docs/maintaining.md left native AOT
(Marten) to be added at will. The root and .github CLAUDE.md files, the island's CLAUDE.md, the runbook's settings
table, its .NET 11 checklist and its Marten notes, and the two comments in ci.yml now say so, and list conventional
commits among the required checks, which the Default ruleset requires and the documents omitted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
@AdCodicem AdCodicem changed the title Hold back shipped majors in Dependabot, cancel superseded CI runs, and propose two release trains with a targeted CI Hold back shipped majors in Dependabot, cancel superseded CI runs, and accept two release trains with a targeted CI Oct 19, 2026

Copy link
Copy Markdown
Owner Author

compat (.NET 11) failed on b02e9c1 (run 39314175776, since superseded): the six MongoDbTests could not start their mongo:8.0 container.

MongoDB cannot start: Linux kernel versions 6.19 and newer has a known incompatibility with this version of MongoDB. See https://jira.mongodb.org/browse/SERVER-121912

Not this pull request's. It changes no code, no test and no image. The job landed on the runner image ubuntu-24.04 20261018.339.1, whose kernel is 6.19 or later, and every MongoDB 8.x refuses to start there.

  • build and test passed its MongoDB integration tests on the same commit, on a runner with an older kernel. Which job fails depends on the runner a job lands on.
  • That puts the integration suite in build and test, a required check, at risk on every pull request and on main too, as the new image rolls out.

No fix exists yet.

  • MongoDB's ticket names no fixed version. Reports from 2026-10-14 have 8.0.34 and 8.3.13 still refusing, while 7.0.45 starts.
  • The GLIBC_TUNABLES workarounds are reported not to help.
  • Moving both fixtures (tests/AdCodicem.ValueObjects.IntegrationTests/Fixtures/MongoDbFixture.cs, tests/Compat/MongoDbTests.cs) to mongo:7.0 would start. But MongoDbValidatorTests pins MongoDB 8.0's PCRE2 behaviour, and the README's support table promises MongoDB 8. That choice is the maintainer's, so it is not widened into this pull request.

The run on the current head, bd4d12e, is in progress and is the re-run.


Generated by Claude Code

@AdCodicem
AdCodicem merged commit 3d5a837 into main Oct 19, 2026
16 checks passed
@AdCodicem
AdCodicem deleted the ccr-37c3f752-p5qgt7 branch October 19, 2026 20:50
AdCodicem pushed a commit that referenced this pull request Oct 19, 2026
…rnel 6.19

Every MongoDB 8.x refuses to start on a Linux kernel 6.19 or later (SERVER-121912: "MongoDB cannot start: Linux kernel
versions 6.19 and newer has a known incompatibility with this version of MongoDB"), and GitHub's ubuntu-24.04 image
20261018.339.1 runs one: compat (.NET 11) failed its six MongoDbTests on #191 while build and test, on a runner with
an older kernel, passed its MongoDB integration tests on the same commit. MongoDB names no fixed version; 8.0.34 and
8.3.13 are reported to refuse it still, 7.0.45 to start, and the GLIBC_TUNABLES workarounds not to help.

The integration suite's and the compatibility island's fixtures run mongo:7.0 until an 8.x starts on the runners. The
validator's pattern tests hold either way: the writer lists the characters .NET's own tables give a class, and MongoDB
has read patterns through PCRE2 since 6.1. The suites' CLAUDE.md files, docs/maintaining.md (with the way back to
mongo:8.0), the Functions fixture's remark and ci.yml's description of the island say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
AdCodicem pushed a commit that referenced this pull request Oct 20, 2026
…rnel 6.19

Every MongoDB 8.x refuses to start on a Linux kernel 6.19 or later (SERVER-121912: "MongoDB cannot start: Linux kernel
versions 6.19 and newer has a known incompatibility with this version of MongoDB"), and GitHub's ubuntu-24.04 image
20261018.339.1 runs one: compat (.NET 11) failed its six MongoDbTests on #191 while build and test, on a runner with
an older kernel, passed its MongoDB integration tests on the same commit. MongoDB names no fixed version; 8.0.34 and
8.3.13 are reported to refuse it still, 7.0.45 to start, and the GLIBC_TUNABLES workarounds not to help.

The integration suite's and the compatibility island's fixtures run mongo:7.0 until an 8.x starts on the runners. The
validator's pattern tests hold either way: the writer lists the characters .NET's own tables give a class, and MongoDB
has read patterns through PCRE2 since 6.1. The suites' CLAUDE.md files, docs/maintaining.md (with the way back to
mongo:8.0), the Functions fixture's remark and ci.yml's description of the island say so.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0164hf4jJ3KsP3tyC3Uoa55L
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.

2 participants