Versioning

September 2, 2026 · View on GitHub

Sentinel-As-Code uses two independent version schemes:

  • The repository / release uses CalVer (date-based).
  • The Sentinel.Common PowerShell module uses SemVer (it is a Gallery-style reusable library, versioned independently).

A repository release may ship with an unchanged module version, and vice versa.

Repository CalVer

Format: YY.0M - two-digit year, zero-padded month.

ExampleMeaning
26.06June 2026
26.11November 2026
27.01January 2027

This sorts correctly both lexically and chronologically (lexical order == release order), which keeps release branches and release lists ordered.

Same-month releases

When more than one release ships in the same calendar month, append a Black-style micro ordinal starting at 0:

Version
26.06.0first June 2026 release
26.06.1second June 2026 release

A month's sole release is written bare (26.05); a month with two or more releases uses the micro suffix.

Release branches and GitHub Releases

The repository does not use git tags for releases (git tag --list returns zero results, and none have ever been created). The release mechanism is:

  1. A release/<CalVer> branch is cut for the release (for example release/26.07.1), following the same YY.0M[.micro] string as the version itself. Work lands on the release branch via PR before it merges to main.
  2. Once merged, the release is published as a GitHub Release named after the CalVer string (for example 26.07.1), with the release notes drawn from Docs/Releases/ / the CHANGELOG.

If tagging is introduced in future, it should tag the merge commit of the release PR with v + the CalVer string (e.g. v26.07.1) so the convention matches the release branch and GitHub Release naming - but this is not current practice and no such tags exist today.

Wave → CalVer history

"Wave N" was the pre-CalVer release label (now retired; it survives only in immutable git history). The mapping:

Former labelCalVerNotes
Wave 126.03approximate (pre-CalVer history)
Wave 226.04approximate (direct-to-main batch)
Wave 326.05PR #7
Wave 426.06.0PR #25
Repository restructure26.06.1PR #27
Word report + Apache-2.0 relicence26.07PR #29
Copilot activity monitoring content pack, Sentinel as Code Toolkit, PR template validation gate26.07.1PR #30, PR #31
Documentation overhaul, Toolkit and pipeline docs, Docs restructure, deploy fixes26.07.2PR #33
Classic-to-DCR and DCR-from-schema toolkits, Spark notebooks, MCP prompt books, drift-sync fix, docs housekeeping26.07.3PR #34, PR #35, PR #37, PR #40, PR #42, PR #43, PR #44, PR #45, PR #46, PR #47
Sophos codeless connector, Detection Engineering dashboard, connector-metadata corrections, PowerShell header standardisation26.09PR #49, PR #50, PR #52, PR #53, PR #54, PR #55, PR #57

None of these releases were git-tagged; each shipped as a release/<CalVer> branch merged to main and, where published, a GitHub Release. The "Copilot content pack, authoring toolkit, PR-template scaffolding" row adds .github/agents/, .github/prompts/, .github/instructions/, and .github/PULL_REQUEST_TEMPLATE.md; the template's sections are informational only (its own text notes "Empty sections / unchecked boxes are fine") and are not enforced by any CI gate today.

Module SemVer

Modules/Sentinel.Common follows SemVer in its .psd1 ModuleVersion / ReleaseNotes (currently 1.1.1). Bump it per the usual major / minor / patch rules when the module's API or behaviour changes, independently of the repository CalVer release it happens to ship with.