This page captures the parsing, normalization, and comparison rules enforced by the Version value object, including one possible copy-paste defect flagged during analysis.
BR-001: Non-numeric leading characters in a version segment are coerced to 0¶
Field
Value
Statement
When a version segment string does not start with digits, or otherwise fails numeric conversion, the segment is treated as 0 rather than raising an error.
Trigger
The ToInt extension method is called on a version segment string that does not start with digits, or whose conversion otherwise throws.
A partial version string such as "2.1" is treated as "2.1.0.0".
Source
SAIF.Framework.Version\Version.vb
BR-003: A wildcard token in an Increment format means "auto-increment this segment"¶
Field
Value
Statement
A * character in a segment's format token passed to Increment causes that segment's numeric value to be incremented by 1 relative to the version's prior value.
Trigger
Increment(format) is called with a token containing * (e.g., "1.0.*.0").
BR-005: Increment format supports date template tokens {year}, {month}, {day}¶
Field
Value
Statement
Literal {year}, {month}, {day} tokens present anywhere in the format string passed to Increment are substituted with the current date's year, month, and day (via Now) before the result is re-parsed.
Trigger
The format string passed to Increment(format) contains any of the {year}, {month}, {day} tokens.
The resulting version segment reflects the current date at the time Increment is called.
Source
SAIF.Framework.Version\Version.vb
BR-006: Equality and ordering are defined purely by the four numeric components, not by string equality¶
Field
Value
Statement
The =, <>, <, > operators and CompareTo compare Version instances using the ToInt-normalized numeric value of each segment, not the raw string values.
Trigger
Any use of =, <>, <, >, or CompareTo between two Version instances.
Enforcement
SAIF.Framework.Version\Version.vb — operator overloads and CompareTo.
Outcome
e.g., "1.02.0.0" and "1.2.0.0" compare as equal, since ToInt normalizes the numeric value of each segment.
Source
SAIF.Framework.Version\Version.vb
BR-007: Tautological Major-equality check in the < and > operators¶
Field
Value
Statement
The "majors are equal, now compare minors" ElseIf branch in both the < and > operator overloads compares v2.Major.ToInt = v2.Major.ToInt — both operands reference v2 — instead of the presumably intended v1.Major.ToInt = v2.Major.ToInt.* This is a likely copy-paste defect.*
Trigger
Any comparison using < or > where the preceding Major-based less-than/greater-than branch does not match, so control reaches the tautological ElseIf.
Enforcement
SAIF.Framework.Version\Version.vb — < and > operator overload implementations.
Outcome
Because Major is evaluated first and correctly gates entry into this branch, the tautological condition (always True) does not currently produce incorrect comparison results — the "majors are equal, now compare minors" branch is entered whenever it should be — but the condition itself does not verify what its structure implies and should be corrected for clarity and correctness.*
BR-007 is flagged as a likely copy-paste defect based on code structure and naming symmetry with the correctly-written equivalent branches elsewhere in the same operators; its intended behavior is inferred and has not been confirmed with the original authors.*
Whether this tautology has ever caused an observable defect in a consuming build/version-stamping process is unknown — no consumer of this library was found within this repository's build graph.**
Note: Statements marked with * were inferred from code structure, naming conventions, or
contextual evidence where direct confirmation was not available in source artifacts. Statements
marked with ** could not be confirmed; treat as unknown until verified.