The README stops explaining how the project tests and releases itself.
Someone arriving at it wants to know what a day of the Great Fast
permits, not how the wheels get built; the parity suite and the release
workflow are in docs/, where the person who needs them will look.

The published description now says how many churches are covered, on
both registries. That is a number in two files nobody editing the
jurisdiction table will open, so a test pins it and names them.
This commit is contained in:
funkpower
2026-09-21 07:29:05 -04:00
parent 5f26563334
commit dde50192c7
6 changed files with 33 additions and 22 deletions
+5 -1
View File
@@ -4,7 +4,7 @@ Notable changes, in the terms [docs/versioning.md](docs/versioning.md) sets out.
**Calendar** entries change what a day reports, whatever the version number
does.
## Unreleased
## 1.1.1
### Fixed
@@ -27,6 +27,10 @@ does.
### Changed
- The README no longer explains how the project tests or releases itself. That
belongs to whoever works on it, and it is in `docs/` where they will look;
a reader who came to find out what a day of the Great Fast permits does not
need it.
- A release runs what a push runs. The release workflow had been gated on
`cargo test` alone, so the C ABI, the Lua binding, the Python parity check
and the README examples were checked on the branch that led to a release but
Generated
+1 -1
View File
@@ -404,7 +404,7 @@ checksum = "adb6935a6f5c20170eeceb1a3835a49e12e19d792f6dd344ccc76a985ca5a6ca"
[[package]]
name = "typikon"
version = "1.1.0"
version = "1.1.1"
dependencies = [
"clap",
"js-sys",
+2 -2
View File
@@ -1,9 +1,9 @@
[package]
name = "typikon"
version = "1.1.0"
version = "1.1.1"
edition = "2021"
rust-version = "1.85"
description = "The Orthodox liturgical day: feasts, seasons and the fast, computed rather than fetched"
description = "The Orthodox liturgical day: feasts, seasons and the fast, computed rather than fetched. Twenty Orthodox jurisdictions and four Byzantine Catholic churches, across the Julian, Revised Julian and Gregorian reckonings."
license = "GPL-2.0-only"
repository = "https://git.pumpin.online/funkpower/typikon"
readme = "README.md"
-17
View File
@@ -555,23 +555,6 @@ widgets for Hyprland (Quickshell), waybar and eww, all reading the JSON above.
![The menologion widget](https://git.pumpin.online/funkpower/menologion/raw/branch/main/docs/nativity-fast.png)
## Every binding agrees
There is one engine and several doors into it, so the doors have to agree.
`tests/parity.sh` asks each one for the same twelve days, chosen where they
could plausibly differ, and compares all twenty-two fields against what the
command line says: the Python wheel, Node by import and by require, TypeScript
under `--strict`, a real browser, Deno, Bun, the C ABI and LuaJIT over it. It
runs on every push and again before a release is uploaded, and
`tests/parity.sh --published` runs it against what is on PyPI and npm rather
than against the checkout.
## Releasing
`main` is always releasable; a `vX.Y.Z` tag on it builds the wheels and publishes
to PyPI. [docs/releasing.md](https://git.pumpin.online/funkpower/typikon/src/branch/main/docs/releasing.md) has the workflow, and what has to
be set up before the first one.
## Licence
GPL-2.0-only. The source for any published release is the source distribution
+1 -1
View File
@@ -1,7 +1,7 @@
{
"name": "typikon",
"version": "@VERSION@",
"description": "The Orthodox liturgical day: feasts, seasons and the fast, computed rather than fetched",
"description": "The Orthodox liturgical day: feasts, seasons and the fast, computed rather than fetched. Twenty Orthodox jurisdictions and four Byzantine Catholic churches, across the Julian, Revised Julian and Gregorian reckonings.",
"license": "GPL-2.0-only",
"homepage": "https://git.pumpin.online/funkpower/typikon",
"repository": {
+24
View File
@@ -706,3 +706,27 @@ fn date_arithmetic_saturates_instead_of_overflowing() {
assert_eq!(d.iso().len(), 10);
}
}
/// The published description counts the churches, on PyPI and on npm, where
/// nobody editing this table will see it. Adding a jurisdiction without saying
/// so makes that description quietly wrong, so the count is pinned here and
/// the failure names the two places to correct.
#[test]
fn the_published_description_still_counts_the_churches_correctly() {
let catholic = ["ruthenian", "ugcc", "melkite", "romanian-catholic"];
let orthodox = JURISDICTIONS
.iter()
.filter(|j| !catholic.contains(&j.key))
.count();
let byzantine_catholic = JURISDICTIONS
.iter()
.filter(|j| catholic.contains(&j.key))
.count();
assert_eq!(
(orthodox, byzantine_catholic, CALENDARS.len()),
(20, 4, 3),
"the counts moved; update `description` in Cargo.toml (PyPI) and in \
npm/package.json.in (npm), and the README's opening"
);
}