Skip to content

Review all docs, diagrams, skill, and comments for the v2.0 release#125

Merged
KaliCZ merged 7 commits into
mainfrom
claude/v2-doc-sweep
Jul 16, 2026
Merged

Review all docs, diagrams, skill, and comments for the v2.0 release#125
KaliCZ merged 7 commits into
mainfrom
claude/v2-doc-sweep

Conversation

@KaliCZ

@KaliCZ KaliCZ commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Full pre-release review after #123 merged: every markdown doc, diagram, and skill file verified against the source, plus a repo-wide comment sweep applying the CLAUDE.md comment rule.

Package-layout diagram

The diagram still drew a WPF card (an "APP SURFACE" group left over from the deleted Kalicz.StrongTypes.Wpf package). There is no WPF package in v2, so a NuGet package-layout diagram must not draw it. The utility group now spans the full bottom row: EfCore, Configuration, FsCheck. Light + dark variants; the dead .cta-text styles went with the CTA.

Doc accuracy (every claim checked against source)

  • readme.md — two non-compiling snippets fixed (CompareTo(...) == "Alice"== 0; assignment to a type name in the MapTrue example); the Interval<T> table row claimed "one endpoint must be present" while the code allows fully unbounded; the "every type ships a TypeConverter / JSON converter" claims are now scoped to reality (TypeConverters sit on the scalar wrappers; Digit and Result have no JSON converter); Email/Digit/intervals added to the Packages-table core row; logger.LogLogError; undeclared range variable now declared.
  • CLAUDE.md — the _Old migration section described a migration that is finished (zero _Old files remain), the folder-layout example cited a nonexistent Try/ slice (now Maybe//ToMaybe), the #nullable enable per-file rule predates <Nullable>enable</Nullable> in the csproj, and the StrongTypes.Api section still said "uses plain string, converters will be wired in later".
  • testing.md — pointed contributors at src/StrongTypes.Tests/Generators.cs, which would make them duplicate the shipped StrongTypes.FsCheck/Generators.cs; the OpenAPI section missed the third suite subclass (MicrosoftOpenApi31DocumentTests) and three partial files. Plus the two new sections from the earlier commit (Configuration + WPF suites).
  • Package readmes — FsCheck omitted the shipped Email, interval, and Result arbitraries; both OpenApi readmes omitted the Email and Digit schemas; Configuration now mentions ST0004 and scopes the TypeConverter claim; the AspNetCore csproj description advertised a Maybe<T> model binder that does not exist.

Skill accuracy

Six snippets would not compile in a consumer project (nonexistent EnumExtensions<TEnum> API, implicit intPositive<int> conversions, wrong PartitionMatch named args, a variable named await, SafeMin misread as MinBy, ordering operators claimed against string). Behavioral fixes: JSON null yields a null reference (it does not throw), ToResult() carries an ArgumentNullException in the error branch, Swashbuckle's OpenAPI-version knob lives on UseSwagger, Distinct has no comparer overload. Email had no catalog row and no reference file — added references/email.md (every line verified against Email.cs and the schema painters).

Comment sweep (194 files, +326 / −1992)

The CLAUDE.md comment rule applied to every project: XML docs keep only caller-facing contract, // keeps only invariant markers / TODOs / workaround pointers; multi-paragraph summaries and mechanism narration cut to their one-sentence kernels; name-restating docs deleted. Mechanically verified comment-lines-only — no code, string literal, attribute, or directive changed anywhere. Two stale claims died in the process (a transformer doc describing required-set normalization no code performs; a binder remark claiming TypeConverter-based parsing where the binder uses IParsable).

Verification

  • dotnet build StrongTypes.slnx — 0 warnings, 0 errors (warnings-as-errors, so XML well-formedness is proven)
  • 1398 tests green locally: unit 1274, Configuration 21, Analyzers 61, OpenApi.Core 2, WPF 40; container integration suites run in CI

Note: merge before drafting the v2.0.0 release — the packed NuGet readme rewrites diagram links to the release tag, and the skill tarball ships from the tag too.

🤖 Generated with Claude Code

KaliCZ and others added 2 commits July 16, 2026 19:51
There is no WPF package in v2 — binding works off the core TypeConverters —
so a NuGet package-layout diagram must not draw it. The utility group now
spans the full bottom row: EfCore, Configuration, FsCheck.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
testing.md is the single source of truth for testing conventions, but the
two suites v2 added — StrongTypes.Configuration.Tests (+ NullableDisabled)
and StrongTypes.Wpf.Tests — were missing. Also generalize the analyzer
"both directions" rule, which was worded for reference-gated analyzers
only and did not fit ST0004.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@KaliCZ KaliCZ self-assigned this Jul 16, 2026
@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown

Coverage

Lines: 4810 / 6297 (76.4%)    Branches: 2514 / 3288 (76.5%)

Files changed in this PR

File Lines Branches
StrongTypes.Analyzers/AddEfCorePackageCodeFixProvider.cs 48 / 52 (92.3%) 18 / 20 (90.0%)
StrongTypes.Analyzers/AddOpenApiPackageCodeFixProvider.cs 52 / 53 (98.1%) 21 / 26 (80.8%)
StrongTypes.Analyzers/MissingEfCorePackageAnalyzer.cs 133 / 146 (91.1%) 53 / 62 (85.5%)
StrongTypes.Analyzers/MissingOpenApiPackageAnalyzer.cs 82 / 82 (100.0%) 40 / 44 (90.9%)
StrongTypes.Analyzers/UseBindStrongTypesCodeFixProvider.cs 45 / 57 (78.9%) 22 / 30 (73.3%)
StrongTypes.Api/Controllers/BindingProbeController.cs 55 / 62 (88.7%) 32 / 34 (94.1%)
StrongTypes.Api/Controllers/CollectionJsonController.cs 4 / 4 (100.0%) 0 / 0 (n/a)
StrongTypes.Api/Controllers/EntityControllerBase.cs 9 / 9 (100.0%) 0 / 0 (n/a)
StrongTypes.Api/Controllers/MailAddressEntityController.cs 44 / 44 (100.0%) 26 / 30 (86.7%)
StrongTypes.Api/Controllers/ReferenceTypeEntityControllerBase.cs 42 / 42 (100.0%) 14 / 18 (77.8%)
StrongTypes.Api/Controllers/StructTypeEntityControllerBase.cs 42 / 42 (100.0%) 16 / 20 (80.0%)
StrongTypes.Api/Data/IntervalEntityConfiguration.cs 20 / 20 (100.0%) 0 / 0 (n/a)
StrongTypes.Api/Entities/EntityBase.cs 12 / 12 (100.0%) 0 / 0 (n/a)
StrongTypes.Api/Entities/IEntity.cs 0 / 4 (0.0%) 0 / 0 (n/a)
StrongTypes.Api/Entities/InternalBackingIntervalEntity.cs 5 / 5 (100.0%) 0 / 0 (n/a)
StrongTypes.Api/Models/CollectionJsonModels.cs 20 / 20 (100.0%) 0 / 0 (n/a)
StrongTypes.AspNetCore/JsonValidationErrorKeyNormalizer.cs 22 / 22 (100.0%) 20 / 20 (100.0%)
StrongTypes.AspNetCore/NonEmptyEnumerableModelBinder.cs 51 / 62 (82.3%) 25 / 30 (83.3%)
StrongTypes.AspNetCore/NonEmptyEnumerableModelBinderProvider.cs 9 / 9 (100.0%) 4 / 4 (100.0%)
StrongTypes.AspNetCore/StringElementParser.cs 16 / 19 (84.2%) 2 / 4 (50.0%)
StrongTypes.AspNetCore/StrongTypesServiceCollectionExtensions.cs 39 / 42 (92.9%) 13 / 16 (81.2%)
StrongTypes.EfCore/IntervalEfCoreExtensions.cs 34 / 34 (100.0%) 5 / 8 (62.5%)
StrongTypes.EfCore/IntervalJsonValueConverter.cs 6 / 6 (100.0%) 0 / 0 (n/a)
StrongTypes.EfCore/MailAddressValueConverter.cs 3 / 3 (100.0%) 0 / 0 (n/a)
StrongTypes.EfCore/NumericStrongTypeValueConverter.cs 17 / 17 (100.0%) 0 / 0 (n/a)
StrongTypes.EfCore/StrongTypesConvention.cs 99 / 105 (94.3%) 50 / 58 (86.2%)
StrongTypes.EfCore/StrongTypesDbContextOptionsExtension.cs 20 / 21 (95.2%) 2 / 2 (100.0%)
StrongTypes.EfCore/UnwrapMethodCallTranslator.cs 30 / 30 (100.0%) 10 / 12 (83.3%)
StrongTypes.FsCheck/Generators.cs 127 / 155 (81.9%) 2 / 2 (100.0%)
StrongTypes.OpenApi.Core/NumericWrapperKinds.cs 11 / 11 (100.0%) 0 / 0 (n/a)
StrongTypes.OpenApi.Core/NumericWrapperPainter.cs 12 / 12 (100.0%) 3 / 4 (75.0%)
StrongTypes.OpenApi.Core/PrimitiveSchemaMap.cs 19 / 19 (100.0%) 0 / 0 (n/a)
StrongTypes.OpenApi.Core/SchemaPaint.cs 84 / 91 (92.3%) 69 / 84 (82.1%)
StrongTypes.OpenApi.Core/Inlining/StrongTypeInliner.cs 185 / 204 (90.7%) 130 / 162 (80.2%)
StrongTypes — lines 92.6% (1942/2098), branches 87.8% (1245/1418)
Booleans — lines 100.0% (14/14), branches 84.6% (22/26)
File Lines Branches
BooleanExtensions.cs 2 / 2 (100.0%) 2 / 2 (100.0%)
BooleanMapExtensions.cs 12 / 12 (100.0%) 20 / 24 (83.3%)
Collections — lines 90.2% (276/306), branches 85.1% (114/134)
File Lines Branches
IEnumerableExtensions.cs 7 / 7 (100.0%) 6 / 6 (100.0%)
IEnumerableExtensions_Concatenating.cs 2 / 2 (100.0%) 2 / 2 (100.0%)
IEnumerableExtensions_Flattening.cs 1 / 1 (100.0%) 2 / 2 (100.0%)
IEnumerableExtensions_Null.cs 5 / 5 (100.0%) 10 / 10 (100.0%)
IEnumerableExtensions_Partition.cs 11 / 11 (100.0%) 6 / 6 (100.0%)
IEnumerableExtensions_Types.cs 0 / 8 (0.0%) 0 / 6 (0.0%)
NonEmptyEnumerable.cs 59 / 65 (90.8%) 30 / 38 (78.9%)
NonEmptyEnumerableDebugView.cs 0 / 2 (0.0%) 0 / 0 (n/a)
NonEmptyEnumerableExtensions.cs 144 / 149 (96.6%) 37 / 38 (97.4%)
NonEmptyEnumerableJsonConverter.cs 47 / 50 (94.0%) 21 / 26 (80.8%)
ReadOnlyList.cs 0 / 6 (0.0%) 0 / 0 (n/a)
ComponentModel — lines 89.5% (17/19), branches 68.8% (11/16)
File Lines Branches
ParsableTypeConverter.cs 7 / 8 (87.5%) 10 / 14 (71.4%)
StrongTypeConverter.cs 10 / 11 (90.9%) 1 / 2 (50.0%)
Digits — lines 97.7% (85/87), branches 93.8% (30/32)
File Lines Branches
Digit.cs 78 / 80 (97.5%) 26 / 28 (92.9%)
DigitExtensions.cs 7 / 7 (100.0%) 4 / 4 (100.0%)
Emails — lines 97.4% (74/76), branches 95.7% (44/46)
File Lines Branches
Email.cs 56 / 57 (98.2%) 34 / 36 (94.4%)
EmailExtensions.cs 10 / 11 (90.9%) 8 / 8 (100.0%)
EmailJsonConverter.cs 8 / 8 (100.0%) 2 / 2 (100.0%)
Enums — lines 100.0% (58/58), branches 95.5% (21/22)
File Lines Branches
EnumExtensions.cs 58 / 58 (100.0%) 21 / 22 (95.5%)
Exceptions — lines 78.9% (15/19), branches 50.0% (7/14)
File Lines Branches
ExceptionEnumerableExtensions.cs 15 / 19 (78.9%) 7 / 14 (50.0%)
Intervals — lines 96.5% (382/396), branches 95.5% (231/242)
File Lines Branches
FiniteInterval.cs 34 / 34 (100.0%) 15 / 16 (93.8%)
Interval.cs 45 / 46 (97.8%) 35 / 36 (97.2%)
IntervalDateExtensions.cs 26 / 26 (100.0%) 18 / 20 (90.0%)
IntervalFrom.cs 33 / 35 (94.3%) 23 / 24 (95.8%)
IntervalHelpers.cs 61 / 61 (100.0%) 56 / 56 (100.0%)
IntervalJsonConverter.cs 4 / 7 (57.1%) 0 / 0 (n/a)
IntervalJsonConverterFactory.cs 129 / 135 (95.6%) 49 / 54 (90.7%)
IntervalTypes.cs 17 / 17 (100.0%) 12 / 12 (100.0%)
IntervalUntil.cs 33 / 35 (94.3%) 23 / 24 (95.8%)
Maybe — lines 92.1% (151/164), branches 83.9% (94/112)
File Lines Branches
Maybe.cs 58 / 59 (98.3%) 40 / 44 (90.9%)
MaybeCollectionExtensions.cs 41 / 45 (91.1%) 28 / 30 (93.3%)
MaybeExtensions.cs 9 / 14 (64.3%) 10 / 18 (55.6%)
MaybeJsonConverter.cs 43 / 46 (93.5%) 16 / 20 (80.0%)
Nullables — lines 100.0% (12/12), branches 83.3% (20/24)
File Lines Branches
NullableMapExtensions.cs 12 / 12 (100.0%) 20 / 24 (83.3%)
Numbers — lines 100.0% (84/84), branches 94.4% (17/18)
File Lines Branches
Negative.cs 7 / 7 (100.0%) 2 / 2 (100.0%)
NonNegative.cs 7 / 7 (100.0%) 2 / 2 (100.0%)
NonPositive.cs 7 / 7 (100.0%) 2 / 2 (100.0%)
NumberExtensions.cs 12 / 12 (100.0%) 4 / 4 (100.0%)
NumericStrongTypeJsonConverterFactory.cs 42 / 42 (100.0%) 5 / 6 (83.3%)
NumericWrapperAttribute.cs 2 / 2 (100.0%) 0 / 0 (n/a)
Positive.cs 7 / 7 (100.0%) 2 / 2 (100.0%)
Result — lines 98.5% (333/338), branches 95.6% (417/436)
File Lines Branches
Result.cs 68 / 70 (97.1%) 55 / 68 (80.9%)
ResultAccessExtensions.cs 4 / 4 (100.0%) 8 / 8 (100.0%)
ResultAggregate.cs 188 / 188 (100.0%) 318 / 318 (100.0%)
ResultCatch.cs 20 / 20 (100.0%) 0 / 0 (n/a)
ResultFlattenExtensions.cs 7 / 7 (100.0%) 8 / 8 (100.0%)
ResultFromNullableExtensions.cs 10 / 10 (100.0%) 15 / 20 (75.0%)
ResultPartitionExtensions.cs 20 / 20 (100.0%) 5 / 6 (83.3%)
ResultThrowIfErrorExtensions.cs 16 / 19 (84.2%) 8 / 8 (100.0%)
Strings — lines 84.7% (133/157), branches 84.4% (54/64)
File Lines Branches
NonEmptyString.cs 87 / 87 (100.0%) 32 / 32 (100.0%)
NonEmptyStringExtensions.cs 13 / 27 (48.1%) 0 / 0 (n/a)
NonEmptyStringJsonConverter.cs 12 / 15 (80.0%) 4 / 6 (66.7%)
StringExtensions.cs 21 / 28 (75.0%) 18 / 26 (69.2%)
generated — lines 83.7% (308/368), branches 70.3% (163/232)
File Lines Branches
Negative<T>.Extensions.g.cs 32 / 32 (100.0%) 20 / 20 (100.0%)
Negative<T>.g.cs 41 / 60 (68.3%) 18 / 38 (47.4%)
NonNegative<T>.Extensions.g.cs 32 / 32 (100.0%) 20 / 20 (100.0%)
NonNegative<T>.g.cs 41 / 60 (68.3%) 18 / 38 (47.4%)
NonPositive<T>.Extensions.g.cs 32 / 32 (100.0%) 20 / 20 (100.0%)
NonPositive<T>.g.cs 41 / 60 (68.3%) 18 / 38 (47.4%)
Positive<T>.Extensions.g.cs 32 / 32 (100.0%) 20 / 20 (100.0%)
Positive<T>.g.cs 57 / 60 (95.0%) 29 / 38 (76.3%)
StrongTypes.Analyzers — lines 92.4% (514/556), branches 83.8% (238/284)
(root) — lines 92.4% (514/556), branches 83.8% (238/284)
File Lines Branches
AddEfCorePackageCodeFixProvider.cs 48 / 52 (92.3%) 18 / 20 (90.0%)
AddOpenApiPackageCodeFixProvider.cs 52 / 53 (98.1%) 21 / 26 (80.8%)
MissingEfCorePackageAnalyzer.cs 133 / 146 (91.1%) 53 / 62 (85.5%)
MissingOpenApiPackageAnalyzer.cs 82 / 82 (100.0%) 40 / 44 (90.9%)
UnvalidatedStrongTypeOptionsAnalyzer.cs 154 / 166 (92.8%) 84 / 102 (82.4%)
UseBindStrongTypesCodeFixProvider.cs 45 / 57 (78.9%) 22 / 30 (73.3%)
StrongTypes.Api — lines 97.3% (391/402), branches 86.3% (88/102)
(root) — lines 100.0% (11/11), branches n/a (0/0)
File Lines Branches
Program.cs 11 / 11 (100.0%) 0 / 0 (n/a)
Controllers — lines 97.0% (226/233), branches 86.3% (88/102)
File Lines Branches
BindingProbeController.cs 55 / 62 (88.7%) 32 / 34 (94.1%)
CollectionJsonController.cs 4 / 4 (100.0%) 0 / 0 (n/a)
EmailEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
EntityControllerBase.cs 9 / 9 (100.0%) 0 / 0 (n/a)
FiniteIntervalEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
IntervalEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
IntervalFromEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
IntervalUntilEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
MailAddressEntityController.cs 44 / 44 (100.0%) 26 / 30 (86.7%)
NegativeDecimalEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NegativeDoubleEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NegativeFloatEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NegativeIntEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NegativeLongEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NegativeShortEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonEmptyStringEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonNegativeDecimalEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonNegativeDoubleEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonNegativeFloatEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonNegativeIntEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonNegativeLongEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonNegativeShortEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonPositiveDecimalEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonPositiveDoubleEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonPositiveFloatEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonPositiveIntEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonPositiveLongEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
NonPositiveShortEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
PositiveDecimalEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
PositiveDoubleEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
PositiveFloatEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
PositiveIntEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
PositiveLongEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
PositiveShortEntityController.cs 1 / 1 (100.0%) 0 / 0 (n/a)
ReferenceTypeEntityControllerBase.cs 42 / 42 (100.0%) 14 / 18 (77.8%)
StructTypeEntityControllerBase.cs 42 / 42 (100.0%) 16 / 20 (80.0%)
Data — lines 100.0% (102/102), branches n/a (0/0)
File Lines Branches
IntervalEntityConfiguration.cs 20 / 20 (100.0%) 0 / 0 (n/a)
PostgreSqlDbContext.cs 41 / 41 (100.0%) 0 / 0 (n/a)
SqlServerDbContext.cs 41 / 41 (100.0%) 0 / 0 (n/a)
Entities — lines 85.2% (23/27), branches n/a (0/0)
File Lines Branches
EntityBase.cs 12 / 12 (100.0%) 0 / 0 (n/a)
IEntity.cs 0 / 4 (0.0%) 0 / 0 (n/a)
InternalBackingEntity.cs 6 / 6 (100.0%) 0 / 0 (n/a)
InternalBackingIntervalEntity.cs 5 / 5 (100.0%) 0 / 0 (n/a)
Models — lines 100.0% (29/29), branches n/a (0/0)
File Lines Branches
CollectionJsonModels.cs 20 / 20 (100.0%) 0 / 0 (n/a)
EntityModels.cs 9 / 9 (100.0%) 0 / 0 (n/a)
StrongTypes.AspNetCore — lines 89.3% (151/169), branches 84.5% (71/84)
(root) — lines 89.3% (151/169), branches 84.5% (71/84)
File Lines Branches
JsonValidationErrorKeyNormalizer.cs 22 / 22 (100.0%) 20 / 20 (100.0%)
ModelMetadataNullability.cs 12 / 13 (92.3%) 7 / 10 (70.0%)
NonEmptyEnumerableModelBinder.cs 51 / 62 (82.3%) 25 / 30 (83.3%)
NonEmptyEnumerableModelBinderProvider.cs 9 / 9 (100.0%) 4 / 4 (100.0%)
StringElementParser.cs 16 / 19 (84.2%) 2 / 4 (50.0%)
StrongTypesAspNetCoreOptions.cs 2 / 2 (100.0%) 0 / 0 (n/a)
StrongTypesServiceCollectionExtensions.cs 39 / 42 (92.9%) 13 / 16 (81.2%)
StrongTypes.AspNetCore.TestApi — lines 90.7% (39/43), branches 92.5% (37/40)
(root) — lines 100.0% (6/6), branches n/a (0/0)
File Lines Branches
Program.cs 6 / 6 (100.0%) 0 / 0 (n/a)
Controllers — lines 89.2% (33/37), branches 92.5% (37/40)
File Lines Branches
BindingProbeController.cs 29 / 29 (100.0%) 37 / 40 (92.5%)
JsonBodyProbeController.cs 4 / 8 (50.0%) 0 / 0 (n/a)
StrongTypes.Configuration — lines 97.5% (79/81), branches 83.3% (40/48)
(root) — lines 97.5% (79/81), branches 83.3% (40/48)
File Lines Branches
NonNullableOptionsValidator.cs 9 / 9 (100.0%) 8 / 12 (66.7%)
NullPropertyWalker.cs 62 / 64 (96.9%) 32 / 36 (88.9%)
OptionsBuilderExtensions.cs 8 / 8 (100.0%) 0 / 0 (n/a)
StrongTypes.Configuration.Tests.NullableDisabled — lines 100.0% (3/3), branches n/a (0/0)
(root) — lines 100.0% (3/3), branches n/a (0/0)
File Lines Branches
UnannotatedOptions.cs 3 / 3 (100.0%) 0 / 0 (n/a)
StrongTypes.EfCore — lines 95.4% (227/238), branches 81.2% (78/96)
(root) — lines 95.4% (227/238), branches 81.2% (78/96)
File Lines Branches
EmailValueConverter.cs 3 / 3 (100.0%) 0 / 0 (n/a)
IntervalEfCoreExtensions.cs 34 / 34 (100.0%) 5 / 8 (62.5%)
IntervalJsonValueConverter.cs 6 / 6 (100.0%) 0 / 0 (n/a)
IntervalMemberTranslator.cs 12 / 16 (75.0%) 11 / 16 (68.8%)
MailAddressValueConverter.cs 3 / 3 (100.0%) 0 / 0 (n/a)
NonEmptyStringValueConverter.cs 3 / 3 (100.0%) 0 / 0 (n/a)
NumericStrongTypeValueConverter.cs 17 / 17 (100.0%) 0 / 0 (n/a)
StrongTypesConvention.cs 99 / 105 (94.3%) 50 / 58 (86.2%)
StrongTypesDbContextOptionsExtension.cs 20 / 21 (95.2%) 2 / 2 (100.0%)
UnwrapMethodCallTranslator.cs 30 / 30 (100.0%) 10 / 12 (83.3%)
StrongTypes.FsCheck — lines 81.9% (127/155), branches 100.0% (2/2)
(root) — lines 81.9% (127/155), branches 100.0% (2/2)
File Lines Branches
Generators.cs 127 / 155 (81.9%) 2 / 2 (100.0%)
StrongTypes.OpenApi.Core — lines 91.4% (447/489), branches 83.4% (297/356)
(root) — lines 91.9% (262/285), branches 86.1% (167/194)
File Lines Branches
NumericWrapperKinds.cs 11 / 11 (100.0%) 0 / 0 (n/a)
NumericWrapperPainter.cs 12 / 12 (100.0%) 3 / 4 (75.0%)
PrimitiveSchemaMap.cs 19 / 19 (100.0%) 0 / 0 (n/a)
SchemaPaint.cs 84 / 91 (92.3%) 69 / 84 (82.1%)
StrongTypeInlineMarker.cs 6 / 6 (100.0%) 6 / 6 (100.0%)
StrongTypeSchemaTypes.cs 48 / 48 (100.0%) 35 / 40 (87.5%)
WrapperAnnotationApplier.cs 82 / 98 (83.7%) 54 / 60 (90.0%)
Inlining — lines 90.7% (185/204), branches 80.2% (130/162)
File Lines Branches
StrongTypeInliner.cs 185 / 204 (90.7%) 130 / 162 (80.2%)
StrongTypes.OpenApi.Microsoft — lines 38.1% (450/1180), branches 41.2% (177/430)
(root) — lines 94.6% (246/260), branches 74.6% (97/130)
File Lines Branches
MicrosoftSchemaNaming.cs 52 / 52 (100.0%) 8 / 8 (100.0%)
PropertyAnnotationSchemaTransformer.cs 77 / 89 (86.5%) 52 / 74 (70.3%)
Startup.cs 15 / 15 (100.0%) 0 / 0 (n/a)
StrongTypesComponentSchemaFiller.cs 102 / 104 (98.1%) 37 / 48 (77.1%)
Binding — lines 98.1% (103/105), branches 78.6% (55/70)
File Lines Branches
NonBodyStrongTypeOperationTransformer.cs 103 / 105 (98.1%) 55 / 70 (78.6%)
Collections — lines 100.0% (19/19), branches 100.0% (8/8)
File Lines Branches
NonEmptyEnumerableSchemaTransformer.cs 10 / 10 (100.0%) 2 / 2 (100.0%)
StrongTypeCollectionShapeTransformer.cs 9 / 9 (100.0%) 6 / 6 (100.0%)
Digits — lines 100.0% (11/11), branches 100.0% (2/2)
File Lines Branches
DigitSchemaTransformer.cs 11 / 11 (100.0%) 2 / 2 (100.0%)
Emails — lines 100.0% (11/11), branches 100.0% (2/2)
File Lines Branches
EmailSchemaTransformer.cs 11 / 11 (100.0%) 2 / 2 (100.0%)
Inlining — lines 100.0% (7/7), branches 50.0% (1/2)
File Lines Branches
StrongTypeInliningDocumentTransformer.cs 7 / 7 (100.0%) 1 / 2 (50.0%)
Intervals — lines 100.0% (24/24), branches 100.0% (6/6)
File Lines Branches
IntervalSchemaTransformer.cs 24 / 24 (100.0%) 6 / 6 (100.0%)
Maybe — lines 100.0% (12/12), branches 100.0% (2/2)
File Lines Branches
MaybeSchemaTransformer.cs 12 / 12 (100.0%) 2 / 2 (100.0%)
Numbers — lines 100.0% (8/8), branches 100.0% (2/2)
File Lines Branches
NumericStrongTypeSchemaTransformer.cs 8 / 8 (100.0%) 2 / 2 (100.0%)
Strings — lines 100.0% (9/9), branches 100.0% (2/2)
File Lines Branches
NonEmptyStringSchemaTransformer.cs 9 / 9 (100.0%) 2 / 2 (100.0%)
obj/Debug/net10.0/Microsoft.AspNetCore.OpenApi.SourceGenerators/Microsoft.AspNetCore.OpenApi.SourceGenerators.XmlCommentGenerator — lines 0.0% (0/714), branches 0.0% (0/204)
File Lines Branches
OpenApiXmlCommentSupport.generated.cs 0 / 714 (0.0%) 0 / 204 (0.0%)
StrongTypes.OpenApi.Swashbuckle — lines 94.7% (266/281), branches 79.1% (174/220)
(root) — lines 98.7% (77/78), branches 93.4% (71/76)
File Lines Branches
PropertyAnnotationSchemaFilter.cs 64 / 65 (98.5%) 71 / 76 (93.4%)
Startup.cs 13 / 13 (100.0%) 0 / 0 (n/a)
Binding — lines 88.3% (106/120), branches 64.3% (72/112)
File Lines Branches
NonBodyStrongTypeOperationFilter.cs 106 / 120 (88.3%) 72 / 112 (64.3%)
Collections — lines 100.0% (6/6), branches 100.0% (4/4)
File Lines Branches
NonEmptyEnumerableSchemaFilter.cs 6 / 6 (100.0%) 4 / 4 (100.0%)
Digits — lines 100.0% (10/10), branches 100.0% (4/4)
File Lines Branches
DigitSchemaFilter.cs 10 / 10 (100.0%) 4 / 4 (100.0%)
Emails — lines 100.0% (10/10), branches 100.0% (4/4)
File Lines Branches
EmailSchemaFilter.cs 10 / 10 (100.0%) 4 / 4 (100.0%)
Inlining — lines 100.0% (2/2), branches n/a (0/0)
File Lines Branches
StrongTypeInliningDocumentFilter.cs 2 / 2 (100.0%) 0 / 0 (n/a)
Intervals — lines 100.0% (26/26), branches 100.0% (8/8)
File Lines Branches
IntervalSchemaFilter.cs 26 / 26 (100.0%) 8 / 8 (100.0%)
Maybe — lines 100.0% (13/13), branches 75.0% (3/4)
File Lines Branches
MaybeSchemaFilter.cs 13 / 13 (100.0%) 3 / 4 (75.0%)
Numbers — lines 100.0% (8/8), branches 100.0% (4/4)
File Lines Branches
NumericStrongTypeSchemaFilter.cs 8 / 8 (100.0%) 4 / 4 (100.0%)
Strings — lines 100.0% (8/8), branches 100.0% (4/4)
File Lines Branches
NonEmptyStringSchemaFilter.cs 8 / 8 (100.0%) 4 / 4 (100.0%)
StrongTypes.OpenApi.TestApi.Microsoft — lines 41.0% (163/398), branches 31.6% (65/206)
(root) — lines 100.0% (14/14), branches 100.0% (2/2)
File Lines Branches
Program.cs 14 / 14 (100.0%) 2 / 2 (100.0%)
obj/Debug/net10.0/Microsoft.AspNetCore.OpenApi.SourceGenerators/Microsoft.AspNetCore.OpenApi.SourceGenerators.XmlCommentGenerator — lines 38.8% (149/384), branches 30.9% (63/204)
File Lines Branches
OpenApiXmlCommentSupport.generated.cs 149 / 384 (38.8%) 63 / 204 (30.9%)
StrongTypes.OpenApi.TestApi.Shared — lines 0.0% (0/193), branches n/a (0/0)
(root) — lines 0.0% (0/193), branches n/a (0/0)
File Lines Branches
AnnotatedRequests.cs 0 / 81 (0.0%) 0 / 0 (n/a)
BasicControllers.cs 0 / 63 (0.0%) 0 / 0 (n/a)
CustomAnnotationsControllers.cs 0 / 4 (0.0%) 0 / 0 (n/a)
Models.cs 0 / 45 (0.0%) 0 / 0 (n/a)
StrongTypes.OpenApi.TestApi.Swashbuckle — lines 100.0% (11/11), branches 100.0% (2/2)
(root) — lines 100.0% (11/11), branches 100.0% (2/2)
File Lines Branches
Program.cs 11 / 11 (100.0%) 2 / 2 (100.0%)

@codecov-commenter

codecov-commenter commented Jul 16, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

@@            Coverage Diff             @@
##             main     #125      +/-   ##
==========================================
+ Coverage   85.33%   85.36%   +0.02%     
==========================================
  Files         171      171              
  Lines        4842     4831      -11     
  Branches      992      992              
==========================================
- Hits         4132     4124       -8     
+ Misses        481      478       -3     
  Partials      229      229              
Components Coverage Δ
StrongTypes 90.80% <100.00%> (ø)
StrongTypes.Analyzers 85.97% <100.00%> (-0.20%) ⬇️
StrongTypes.EfCore 90.33% <ø> (ø)
StrongTypes.Api 94.77% <ø> (ø)
StrongTypes.FsCheck 81.93% <ø> (ø)
Files with missing lines Coverage Δ
...Types.Analyzers/AddEfCorePackageCodeFixProvider.cs 88.46% <ø> (ø)
...ypes.Analyzers/AddOpenApiPackageCodeFixProvider.cs 88.67% <ø> (ø)
...ongTypes.Analyzers/MissingEfCorePackageAnalyzer.cs 85.61% <100.00%> (-0.75%) ⬇️
...ngTypes.Analyzers/MissingOpenApiPackageAnalyzer.cs 96.34% <ø> (ø)
...pes.Analyzers/UseBindStrongTypesCodeFixProvider.cs 68.42% <ø> (ø)
...ongTypes.Api/Controllers/BindingProbeController.cs 87.09% <ø> (ø)
...gTypes.Api/Controllers/CollectionJsonController.cs 100.00% <ø> (ø)
...trongTypes.Api/Controllers/EntityControllerBase.cs 100.00% <ø> (ø)
...pes.Api/Controllers/MailAddressEntityController.cs 93.18% <ø> (ø)
...i/Controllers/ReferenceTypeEntityControllerBase.cs 92.85% <ø> (ø)
... and 90 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

KaliCZ and others added 3 commits July 16, 2026 20:34
Apply the comment rule from CLAUDE.md across every project: XML docs keep
only caller-facing contract, // comments keep only invariant markers,
TODOs, and workaround pointers. Multi-paragraph summaries and mechanism
narration are cut to the one sentence a future reader cannot recover from
the code; name-restating docs are deleted. Comment lines only — no code,
string literals, attributes, or directives changed.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Verified every doc claim against the source. The real errors: two
non-compiling readme snippets (CompareTo == string, assignment to a type
name), an Interval row contradicted by the code (both endpoints may be
null), and 'every type ships a TypeConverter / JSON converter' over-claims
(TypeConverters sit on the scalar wrappers only; Digit and Result have no
JSON converter). Stale content: CLAUDE.md still described the finished
_Old migration, a nonexistent Try/ slice, and a pre-converter
StrongTypes.Api; testing.md pointed at a Generators.cs location that
would make a contributor duplicate the shipped class and missed the third
OpenAPI suite subclass; the FsCheck/OpenApi package readmes omitted
shipped generators and the Email/Digit schemas; the AspNetCore package
description advertised a Maybe<T> binder that does not exist.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Six snippets did not compile in a consumer project (a nonexistent
EnumExtensions<TEnum> pair, implicit int->Positive conversions,
PartitionMatch named args, a variable named 'await', SafeMin misread as
MinBy, ordering operators claimed against string). Behavioral fixes: JSON
null yields a null reference rather than throwing, ToResult carries an
ArgumentNullException instead of throwing, Swashbuckle's OpenAPI version
knob lives on UseSwagger, Distinct has no comparer overload, and the
TypeConverter claim is scoped to the scalar wrappers. Email was a shipped
validated wrapper with no catalog row and no reference file — both added.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@KaliCZ KaliCZ changed the title Ready the docs for the v2.0 release Review all docs, diagrams, skill, and comments for the v2.0 release Jul 16, 2026
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Comment thread Skill/references/collections.md Outdated
Comment on lines +61 to +67
success: ok => Save(ok),
error: bad => Log(bad));

// Projection fold — returns R[]
R[] merged = results.PartitionMatch(
successes: ok => Summarise(ok),
errors: bad => Describe(bad));
success: ok => Summarise(ok),
error: bad => Describe(bad));

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

These should actually be successes and errors. MAke sure the methods does this.

Comment thread Skill/references/nonemptystring.md Outdated
`string` — no `.Value` needed for `==`, `!=`, `<`, `<=`, `>`, `>=`.
- Equality operators against `NonEmptyString` *and* `string` — no `.Value`
needed for `==` / `!=`. The ordering operators (`<`, `<=`, `>`, `>=`) are
wrapper-vs-wrapper only; against a `string` use `CompareTo(string)`.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

You don't need to explain implementation. You just need to make sure we say what is possible, so that the model can use it

Comment thread Skill/references/numeric.md Outdated
Comment on lines +109 to +110
var a = 3.ToPositive();
var b = 5.ToPositive();

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

In these examples, using the types actually helps understand what the value is. Readers cannot just know that the result will be Positive.

…e types

The PartitionMatch callbacks receive whole partitions, so the parameters
are now successes/errors — the skill snippet had the right names and the
method was what needed fixing. Applied the other two review principles
across the skill: examples declare result types a reader cannot infer
(no var over generic-closing factories), and capability bullets say what
is possible instead of narrating limitations.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@KaliCZ
KaliCZ merged commit 274e229 into main Jul 16, 2026
2 checks passed
@KaliCZ
KaliCZ deleted the claude/v2-doc-sweep branch July 16, 2026 21:05
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