A superset of Semantic Versioning 2.0.0
Given a version number MAJOR.MINOR.PATCH
, and building on
all rules of Semantic Versioning (SemVer) 2.0.0:
Skill Based Versioning (SBVer) introduces a
Perfection Sentinel at 1.3.37
. Once a
project reaches 1.3.37
, the version SHOULD be considered
final. Any release after 1.3.37
is
DISHONORABLE and MUST encode the number of
postsentinel releases:
3
immediately before the trailing 7
in
PATCH. Examples: 1.3.337
,
1.3.3337
, …
3
to MINOR and set PATCH to
7
. Examples: 1.33.7
, 1.333.7
,
…
1.3.37
, but such releases MUST be noted as
DISHONORABLE.
SBVer addresses the pressure to keep iterating after a project reaches
its projected perfection point. It preserves full SemVer compatibility
while adding a clear, auditable signal for postsentinel releases. By
standardizing these signals, consumers can reason about stability
while maintainers communicate how often the project has surpassed its
“final” state at 1.3.37
.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.
This document also uses the word “DISHONORABLE”:
1.3.37
).
DISHONORABLE releases are permitted but discouraged; they MUST be
encoded in the version number as specified, and SHOULD be minimized
in order to avoid Shame, see §10.
X.Y.Z
where
X
, Y
, and Z
are non-negative
integers with no leading zeroes. Each element MUST increase
numerically.
1.3.37
.
1.3.37
, the project SHOULD be considered
final. No further releases SHOULD be necessary.
1.3.37
MUST be noted as
DISHONORABLE and MUST use the encoding rules below.
3
immediately before the trailing
7
for each additional hotfix after
1.3.37
.
37
(sentinel baseline) →
337
→ 3337
→ 33337
→ …
1.3.337
, 1.3.3337
.3
for each postsentinel MINOR release.
7
.
3
(sentinel baseline) →
33
→ 333
→ 3333
→ …
1.33.7
, 1.333.7
.1.3.37
, MAJOR version increments MUST NOT
occur. If a breaking change is unavoidable, the project SHOULD
fork under a new name or major line. If the original line must
continue, the change MUST be released as a DISHONORABLE MINOR
with appropriate deprecation and migration guidance.
3
digits inserted before the terminal 7
in
PATCH relative to 37
. Example:
1.3.3337
indicates three DISHONORABLE hotfixes after
1.3.37
.
3
digits in MINOR minus one (since
3
is the sentinel baseline). Example:
1.333.7
indicates two DISHONORABLE MINOR releases after
1.3.37
.
1.3.337-rc.1
, 1.33.7+exp.sha.5114f85
.
1.3.37 < 1.3.337 < 1.3.3337
and
1.3.37 < 1.33.7
.
1.3.37
, versioning is purely SemVer.
1.3.37
:
37
, 337
, 3337
, … (i.e.,
one or more 3
digits followed by a single
7
). When a postsentinel MINOR occurs,
PATCH MUST be set to 7
and then follow the
PATCH rule thereafter for subsequent hotfixes.
3
, 33
, 333
, … After a
postsentinel hotfix, MINOR MUST remain unchanged.
3
s before the terminal 7
in
PATCH).
3
s in MINOR minus one).
w_patch = 1
and w_minor = 3
.
S = (H * w_patch) + (M * w_minor)
. The
simple “dishonor score” in §6 MAY continue to be reported as
H + M
, but reviewer enforcement SHOULD use
S
.
S
MUST include a “Dishonor
rationale” in release notes.
M
increases) MUST include
deprecation/migration guidance.
Shame: S (H hotfix, M minor)
as a badge or in release
notes. Shame resets to 0
only when a new major line or
fork establishes its own path to 1.3.37
.
1.3.3337
→ H=3, M=0 → S = 3
.1.333.7
→ H=0, M=2 → S = 6
.1.33.337
→ H=2, M=1 → S = 5
.1.3.36
→ 1.3.37
(Perfection Sentinel
reached; final recommended)
1.3.37
→ 1.3.337
→ 1.3.3337
1.3.37
→ 1.33.7
→ 1.333.7
1.3.37
→ 1.33.7
→ 1.33.337
→
1.333.7
→ 1.333.337
1.3.337-rc.1
, 1.333.7+build.42
^3+7$
^3+$
1.3.37
?You MAY, but all such releases are DISHONORABLE and MUST follow the encoding rules. You SHOULD minimize them.
1.3.37
?
SBVer treats 1.3.37
as final; MAJOR increments after this
point violate that finality and are disallowed. Fork instead or use
DISHONORABLE MINOR with deprecations.
No. They behave as in SemVer and do not affect the dishonor count.
Yes. All versions remain MAJOR.MINOR.PATCH
with numeric
fields and follow SemVer precedence. Existing SemVer tooling will
parse and compare correctly.
Consider the fact that jobs are temporary, git tagged shame is eternal.
No, much like the horseshoe creb a project on v1.3.37 is very much usable and has simply achieved Perfection Sentinel.
Yes. Your project does not seem very perfect.
It is. Consider only depending on projects which use Skillbased Versioning.
Please submit issues on github.
This suggestion is intended to be used alongside the Semantic Versioning specification (CC BY 3.0).