summaryrefslogtreecommitdiff
path: root/CHANGELOG.md
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 16:19:02 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-08-17 16:19:02 +0200
commitcc6655134e155dd0879ecb8eb009271e17488834 (patch)
tree31dc6c6be64f03d02a1067644e04e904d7312167 /CHANGELOG.md
parent7055723f8b79240ab2df1353eaaf3761f65414a9 (diff)
downloadcolitur-cc6655134e155dd0879ecb8eb009271e17488834.tar.gz
colitur-cc6655134e155dd0879ecb8eb009271e17488834.zip
feat(cli): --version, a CHANGELOG, and a release target
Groundwork for tagging. The project had no version anywhere: not in dune-project, not in the binary, no CHANGELOG, no tags. The version lives in two places -- dune-project, which generates colitur.opam, and a constant in bin/main.ml, which is what --version prints. Two rather than one because dune's watermarking only substitutes in a release tarball, so a binary built the ordinary way from a checkout would report a placeholder. The release target rewrites both and then re-checks both, and finally requires the freshly built binary to report the version it just wrote: a release that bumped one and not the other would ship a binary disagreeing with its own package metadata. --version is deliberately not embedded in the help text. cli.t pins help's first line, and a version there would mean editing a test expectation every release for no gain. The release target mirrors lectio's, refusals included: no release from a dirty tree, none without a CHANGELOG entry for that version, none whose version bump silently failed to apply, and `make check` -- the full 1583-9999 sweep, not the sampling suite -- must pass before the tag is created.
Diffstat (limited to 'CHANGELOG.md')
-rw-r--r--CHANGELOG.md6
1 files changed, 6 insertions, 0 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 0000000..1c5d1fb
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,6 @@
+# Changelog
+
+One line per release. Versions are git tags (`vX.Y.Z`).
+
+## [0.1.0] - 2026-08-17
+- First tag. The Extraordinary Form (1962 Roman Missal) end to end: the complete temporal cycle, the resolution engine (occurrence, precedence, commemorations, transfers) against the sanctoral calendar, and the Mass reading citations for every day — correct and total over 1583–9999, with no clock, randomness or environment read below the CLI. Four commands (`easter`, `temporal`, `day`, `readings`) plus `--help`/`--version`, a man page, and a Makefile that installs binary, calendar data and man page into `~/.local` by default. Validated in five layers: types, QCheck properties over every year in the domain, a 16 801-day differential against the sibling lectio engine, two independent missalemeum oracle windows (2026–2027 and 2038), and ~36 hand-verified golden pins — 375 tests. Rules are computed against the Missal and its *Rubricae Generales*, with every published-calendar divergence adjudicated against the primary text rather than adopted; several are resolved in this engine's favour and cited in the register. Not included: the Ordinary Form, the chants (Psalm/Gradual/Tract/Alleluia/Sequence, deliberately rejected rather than guessed), and template-driven output.