andrebaltieri/Flunt
41.6
Weak · 21 September 2026
7.5k
lines of production code
C#
primary language
4
measurements over time
What this system is
Flunt is a .NET validation library that provides a comprehensive set of tools for data validation and error handling. It enables developers to enforce business rules through a fluent API, covering common data types like emails, dates, and credit cards. The system also includes a notification mechanism to track and manage validation failures, supported by localized error messages and extensive unit tests.
Features
Added localization error messages and regex patterns for validation
The Flunt library now includes a new localization layer to provide user-friendly error messages for validation failures. This change introduces three new files: \FluntErrorMessages.cs\ defines the text for various validation states (e.g., email, URL, passport, credit card), \FluntFormats.cs\ sets default date/time formats, and \FluntRegexPatterns.cs\ contains the regular expressions used for validation, including a corrected URL pattern that now supports localhost addresses.
Flunt/Localization · high confidence
Expanded validation contract for multiple data types
The Flunt validation library now includes new validation contracts for boolean, credit card, date/time, decimal, double, email, float, GUID, integer, list, and passport values. Users can now enforce rules such as checking if a boolean is true or false, validating credit card numbers, ensuring dates fall within a specific range, verifying email formats, and checking if lists are null or empty. These additions provide a more comprehensive set of built-in validation methods for common data types.
Flunt/Validations · high confidence
Flunt v2 release with updated project structure and documentation
The Flunt library has been updated to version 2, introducing a new solution structure that includes the main Flunt library, a Flunt.Tests project for unit testing, and a Flunt.Samples project. The release includes a comprehensive README.md file detailing the library's purpose, installation instructions, and usage examples for .NET Standard 2.0. Additionally, the repository now features an MIT License and an updated .gitignore file that reflects the new project structure and excludes node\_modules and other build artifacts.
(repo-wide) · high confidence
New notification system for tracking validation errors
A new notification system has been introduced to the library, allowing objects to track and manage a collection of notifications (typically validation errors). The \Notifiable\<T\>\ base class provides methods to add single or multiple notifications, access the full list via the \Notifications\ property, and check validity via \IsValid\. A new \INotifiable\ interface and \Notification\ class are also included to support this pattern.
Flunt/Notifications · high confidence
Behavioural changes
Added customer and email validation contracts
Added new validation contracts for creating and updating customers, including a CreateCustomerContract that enforces a non-empty name, and an UpdateCustomerBirthDateContract that ensures the birth date is at least 18 years in the past. The Customer entity now uses these contracts to validate creation and updates, while the CreateCustomerRequest and Email value objects also incorporate validation contracts to ensure the name and email address are valid before processing.
Flunt.Samples, Flunt.Samples/Handlers/Requests · high confidence
Test coverage
Added unit tests for the SampleEnum enumeration; Added unit tests for validation methods.
Dependencies
Flunt library updated to v2 with .NET Standard 2.0 and new project structure
The Flunt library has been updated to version 2.0.5, targeting .NET Standard 2.0, which may require migration from previous versions due to breaking changes. The solution now includes a new sample project (Flunt.Samples) targeting .NET 5.0 and a test project (Flunt.Tests) targeting .NET 6.0 with updated test SDKs and frameworks. This reflects a structural shift in the repository, separating the core library, samples, and tests into distinct project files.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 42 → 42 (-0.0)
- Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 76 → 76 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 45 → 45 (+0.0)
- Readiness 48 → 48 (-0.0)
- Security 27 → 27 (-0.1)
- Performance 70 → 70 (+0.0)
Resolved (11)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Inconsistent naming for less-than comparisons. Some methods use 'IsLowerThan' while others use 'IsLessThan' (if present) or 'IsLowerOrEqualsThan' vs 'IsGreaterOrEqualsThan'. The term 'Lower' is used instead of 'Less', which is less common in C# for numeric comparisons (typically 'Less' or 'Greater').
- Inconsistent naming for null checks. Some methods use 'IsNull'/'IsNotNull' while others use 'IsNotBetween' or 'IsNotMinValue'. The null checks are consistent, but the non-null checks are 'IsNotNull' while other validations use 'IsNot...'. This is a minor inconsistency in prefix usage (IsNotNull vs IsNot...).
- Inconsistent use of 'Are' vs 'Require'/'Is' for equality checks. Some methods use 'AreEquals' (plural, present tense) while others use 'RequireTwo...AreNotEquals' or 'Requires...AreEquals' in tests, and 'IsNotBetween'/'IsGreaterOrEqualsThan' (singular, state-based) for other comparisons. The test suite mixes 'Are/Not' with 'Require/Is' prefixes.
- Inconsistent use of 'Between' vs 'NotBetween'. While this is technically correct (negation), the test methods use 'Requires...IsNotBetween' or 'Requires...IsBetween'. The inconsistency is in the test layer: some tests use 'Requires...IsNotBetween' while others use 'Requires...IsBetween'.
- Inconsistent use of 'Greater' vs 'Lower' vs 'Less'. The codebase uses 'Greater' for > and 'Lower' for <. However, 'Lower' is non-standard for numeric comparisons (usually 'Less'). Additionally, 'IsLowerOrEqualsThan' is used, but 'IsGreaterOrEqualsThan' is used, showing a mix of 'Greater' and 'Lower' which are antonyms but 'Lower' is an unusual choice for '<' in this context compared to 'Less'.
- No ADRs found
- No exposed public API
- XML-doc coverage: Flunt.Samples (Flunt.Samples/Flunt.Samples.csproj)
- dormant codebase — no living knowledge left to concentrate
New (17)
- Documentation: no architecture or design documentation (README.md)
- End-of-life runtime: .NET net5.0
- End-of-life runtime: .NET net6.0
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Inconsistent naming convention for test methods checking equality/inequality of two values. Some tests use 'RequireTwo[Type]AreNotEquals' (e.g., Float, Decimal, Double), while others use 'RequiresDatesAreEquals' or 'RequiresDatesAreNotEquals'. The prefix varies between 'Require' and 'Requires', and the object reference varies between 'Two[Type]' and 'Dates'. Additionally, 'AreNotEquals' is grammatically incorrect (should be 'AreNotEqual').
- Inconsistent ordering of 'Null' and 'Empty' in method names. Some methods use 'IsNullOrWhiteSpace', 'IsNullOrEmpty', 'IsNullOrWhiteSpace', while others use 'IsNotNullOrEmpty'. The standard .NET convention is 'IsNullOrEmpty' and 'IsNullOrWhiteSpace'. The test 'IsNullOrEmpty' matches the helper, but 'IsNotNullOrEmpty' is the inverse. However, 'IsNotEmpty' is also present. The inconsistency lies in the mix of 'IsNullOrEmpty' vs 'IsNotNullOrEmpty' (order of words) and the presence of 'IsNotEmpty' which might be redundant or distinct. More critically, 'IsNullOrWhiteSpace' is used in both tests and helpers, but 'IsNullOrEmpty' is used in tests while 'IsNotNullOrEmpty' is used in helpers. The helper 'IsNotNullOrEmpty' should likely be 'IsNotEmpty' or 'IsNotNullOrEmpty' consistently. The main issue is the lack of a single canonical name for the 'not null and not empty' check across tests and helpers if they are meant to be mirrors.
- Inconsistent verb usage for equality checks. The codebase uses 'AreEquals' and 'AreNotEquals' for comparing two values, which is grammatically incorrect (should be 'AreEqual' or 'Equals'). However, for inequality checks involving ranges, it uses 'IsNotBetween', and for null checks, it uses 'IsNull'/'IsNotNull'. The mix of 'Are' (plural/state) for equality and 'Is' (singular/state) for other conditions is inconsistent. Furthermore, 'AreEquals' is a non-standard pluralization of the verb 'to be' combined with a past participle, whereas standard C# convention is 'Equals' or 'AreEqual'.
- Low XML-doc coverage: Flunt.Samples (Flunt.Samples/Flunt.Samples.csproj)
- Low coverage: Flunt/Notifications/Notifiable.cs (Flunt/Notifications/Notifiable.cs)
- Low coverage: Flunt/Validations/Contract.cs (Flunt/Validations/Contract.cs)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No dependency advisory monitoring
- No test project references Flunt.Samples (Flunt.Samples/Flunt.Samples.csproj)
- Release publish has no approval gate
Architecture
- Unchanged — 1 containers · 1 contexts · 0 edges
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
andrebaltieri/Flunt was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 38f159b1fd48e5fab68d19b2f5f5eb2af7eafabf — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-28e75b8e3254.