fix what a 1.0 would have welded into PyPI metadata

An adversarial review of the release, and four of its findings were things
PyPI never lets you replace once uploaded.

  - rust-version said 1.74. clap has needed 1.85 since 4.6, and cargo
    hard-errors rather than warning, so the sdist advertised a floor it could
    not build on. docs/releasing.md sends macOS and Windows users to that
    sdist.
  - The wheel was classified Development Status :: 4 - Beta on a release the
    changelog calls stable, with none of the Python version classifiers PyPI
    indexes on.
  - Six README links were relative. PyPI resolves them against the project
    page, so every one 404'd there, as they do on the live 0.2.0 page now.
  -  in that order packs the wheel into the
    sdist. The tarball on disk was 431KB with an x86-64 binary inside it.

Also: twine upload gains --skip-existing, so a retry after a partial upload
finishes rather than dying on a version that cannot be reused; twine check
gains the renderer that makes it parse the description at all, without which
it returns None and reports PASSED; and the README no longer claims a
twenty-year sweep the test did not run, because 366 * 21 / 4 is five years.
The test now runs the twenty-one it was named for.

The crates.io name belongs to an unrelated project, which the README now says
rather than leaving a reader to find out from cargo.
This commit is contained in:
funkpower
2026-09-18 13:41:41 -04:00
parent 785754295b
commit 7970f785c8
9 changed files with 64 additions and 27 deletions
+19 -15
View File
@@ -45,6 +45,10 @@ One static binary, no runtime to install first.
$ cargo install --git https://git.pumpin.online/funkpower/typikon
```
Rust 1.85 or newer. The name `typikon` on crates.io belongs to an unrelated
project, so `cargo install typikon` and a `typikon = "1"` dependency will not
get you this; install and depend on it by git URL.
Or build it from a checkout:
```console
@@ -63,7 +67,9 @@ $ pip install typikon
```
The menologion is compiled into that too, so it carries no data files and needs
no network either.
no network either. Wheels are built for Linux on x86-64 and aarch64; everywhere
else pip falls back to the source distribution, which needs a Rust toolchain of
1.85 or newer on the installing machine.
## Which calendar?
@@ -176,7 +182,7 @@ will want.
Ten of the fourteen Byzantine-rite Eastern Catholic churches have no entry of
their own. Each keeps one of the three reckonings, and
[docs/calendars.md](docs/calendars.md) sets out which questions decide it.
[docs/calendars.md](https://git.pumpin.online/funkpower/typikon/src/branch/main/docs/calendars.md) sets out which questions decide it.
## The fast
@@ -425,22 +431,18 @@ It lands in `~/.local/share/typikon/` and is overlaid automatically.
## Further reading
- [docs/calendars.md](docs/calendars.md) sets out which churches keep which
- [docs/calendars.md](https://git.pumpin.online/funkpower/typikon/src/branch/main/docs/calendars.md) sets out which churches keep which
reckoning, how the split came about, what is modelled here and what is not.
- [docs/versioning.md](docs/versioning.md) says what counts as the public
- [docs/versioning.md](https://git.pumpin.online/funkpower/typikon/src/branch/main/docs/versioning.md) says what counts as the public
surface, and how a correction to the calendar itself is announced.
- [CHANGELOG.md](CHANGELOG.md) carries those announcements.
- [CHANGELOG.md](https://git.pumpin.online/funkpower/typikon/src/branch/main/CHANGELOG.md) carries those announcements.
## Accuracy
`typikon` is pinned against published calendars: the paschalion for six years
by both reckonings and its invariants across two centuries, 146,000 calendar
round-trips from 1800 to 2200, the fast on every day that is not open to
interpretation, and every jurisdiction over twenty years.
It was ported from a Python implementation, and the port was checked by
running both over 199,446 day-records, 26 jurisdictions across 21 years, and
requiring every field of every record to match.
`typikon` is pinned against published calendars: the paschalion for eleven
named years and its invariants across the two centuries from 1900, 146,000
calendar round-trips from 1800 to 2200, the fast on every day that is not open
to interpretation, and every jurisdiction over the twenty-one years from 2020.
It is a calendar, not an authority. If it disagrees with the one your parish
prints, your parish is right. Please open an issue.
@@ -455,10 +457,12 @@ widgets for Hyprland (Quickshell), waybar and eww, all reading the JSON above.
## Releasing
`main` is always releasable; a `vX.Y.Z` tag on it builds the wheels and publishes
to PyPI. [docs/releasing.md](docs/releasing.md) has the workflow, and what has to
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. See [LICENSE](LICENSE). The menologion is under it too;
GPL-2.0-only. The source for any published release is the source distribution
beside it on PyPI, and `Cargo.lock` pins every dependency to an exact version.
See [LICENSE](https://git.pumpin.online/funkpower/typikon/src/branch/main/LICENSE). The menologion is under it too;
`data/LICENSE` says so and notes what the fetched sets are not.