You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Analyzers README promises an Error never reports more within a major; 2.3.0's CMTK0003 does, with no decision record #153
Found by a pre-release sweep of release/2.3.0 @ 99c6032 (weaving-review §8, "Analyzer Errors freeze"); read from the source and the analyzer's own tests.
Problem
The Analyzers README promises consumers that an Error rule never widens inside a major version:
Within a major version, an Error never reports more than it did. A new Error rule, or an Error that reports more, waits for the next major version.
(src/CodoMetis.TypeKit.Analyzers/README.md:759-760, and decision 34.)
2.3.0 widens CMTK0003, which is an Error since 2.0.0. It now also reports an assertion of CodoMetis.TypeKit.Testing on a Task or ValueTask that is left without await (IgnoredOutcomeAnalyzer.cs:157-159, IsPendingAssertion). The changelog announces it ("an assertion left without await is reported (CMTK0003)"), and IgnoredOutcomeAnalyzerTests.cs:120-123 holds it:
{|#1:service.FindAsync().ShouldBeNone()|};// CMTK0003, Error, new in 2.3.0
Nothing records the exception:
No decision after 0034 allows it.
The CMTK0003 row in design/analyzers.md:36 doesn't list the form.
The README sentence stays as it is, so the shipped 2.3.0 README contradicts the shipped 2.3.0 analyzer.
The exception is sound in substance. Every such assertion is new in 2.3, so no build that worked on 2.2.0 breaks, as the code comment says. What's missing is the written decision. #152 widens the same form further before the tag, and the same decision covers it.
Change
A decision record: an Error may report, in a minor version, a form that only an API new in that version can write, because it breaks no build that worked before. Add its row to design/adr/README.md.
The README's "What a new version may change" sentence states that exception.
The CMTK0003 row of design/analyzers.md lists the dropped pending assertion.
The README sentence becomes a claim in test/oracles/claims.json, quoted verbatim, so OracleCatalogueTests notices when it is reworded. It is held by the test that pins CMTK0003's severity, or waived with a reason.
PR #156 (into release/2.3.0): decision 118 (design/adr/0118-an-error-may-learn-a-form-only-new-api-can-write.md) refines decision 34: in a minor version an Error may report a form only that version's new API can write, and the forms freeze at the tag; it covers #152. The Analyzers README's "What a new version may change" states it, claim T01-an-error-learns-only-new-api-forms quotes it (held by IgnoredOutcomeAnalyzerTests, seeded by rewording the sentence), and the CMTK0003 row of design/analyzers.md lists the pending-assertion forms.
Done in #156, merged into release/2.3.0 (5ee8068): decision 118 lets an Error learn, in a minor version, a form only that version's new API can write, with #159 as 2.3.0's one exception (approved by the maintainer); the Analyzers README and design/analyzers.md say so.
Activity
CaffeinatedCoder commentedon Oct 29, 2026
PR #156 (into
release/2.3.0): decision 118 (design/adr/0118-an-error-may-learn-a-form-only-new-api-can-write.md) refines decision 34: in a minor version an Error may report a form only that version's new API can write, and the forms freeze at the tag; it covers #152. The Analyzers README's "What a new version may change" states it, claimT01-an-error-learns-only-new-api-formsquotes it (held byIgnoredOutcomeAnalyzerTests, seeded by rewording the sentence), and the CMTK0003 row ofdesign/analyzers.mdlists the pending-assertion forms.CaffeinatedCoder commentedon Oct 29, 2026
Done in #156, merged into
release/2.3.0(5ee8068): decision 118 lets an Error learn, in a minor version, a form only that version's new API can write, with #159 as 2.3.0's one exception (approved by the maintainer); the Analyzers README anddesign/analyzers.mdsay so.