signal-bot/DOCS-changelog.md
Krzysztof kuhy Rudnicki 2e2e00be96 release: 0.0.7 «Telesfor» — !papież, and the bot can test itself
Adds !papież / !papiez / !pope: a random pope as a photo, captioned with his
Latin name, reign and pl.wikipedia link. popes.json already carried a Commons
portrait filename for all 267 and nothing had ever consumed it.

The Latin name comes from the Latin column of Poczet papieży, not from the
la.wikipedia sitelink. The sitelink resolved for all 267 and was still wrong:
la.wikipedia numbers several popes differently, so #154 came out as
"Stefan IX — Stephanus X" in a single caption, which reads as an off-by-one.
The table's own column says "Stephanus Nonus" and cannot disagree with the
name beside it. LATIN_OVERRIDES ships empty; it is a tripwire, not a backlog.

Portraits are cached on disk under CacheDirectory=signal-bot, named from the
ordinal so no upstream string ever reaches a path, and bounded at 267 entries
so nothing needs evicting. Verified that CacheDirectory wins against
ProtectHome=read-only before relying on it.

Also adds POST /_selftest and scripts/selftest.sh. Signal never delivers an
account its own sends, so no command has ever been exercised end-to-end
without asking a human to type it. This injects a real frame into the live
dispatcher; it is loopback-only and refuses any group not in SELFTEST_GROUPS,
which is empty by default.

Verified against the real endpoints, not just the fake: 267/267 portraits
resolve on Commons, regeneration is byte-identical on every previously
shipped field, and !papież was driven 7 times through the live dispatcher in
testbot, returning distinct popes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015d48t4qsQLBJnDwDeo2Nom
2026-08-30 17:06:25 +02:00

3.5 KiB

Changelog

Releases are named after the popes, in order: release n is pope n. The version number is a pure function of that ordinal — see signal_bot/versioning.py for the two constants and why they are what they are. The short version is that Jan Paweł II has to land on 2.13.7, and everything else follows.

The bot reads this file. The heading format is load-bearing:

## <version> — <pope name>
- <one change, in Polish, as the group will read it>

Add the new section at the top when you bump RELEASE_ORDINAL. Anything that is not a ## heading or a - bullet under one is ignored, so prose between releases is free.

Every release takes the next pope, however small. A one-line fix consumes an ordinal exactly like a feature does; the ladder tracks releases, not importance. 0.0.4 and 0.0.5 were both bug fixes. Do not try to squeeze a fix out at the current version to "save" a pope -- there are 267 of them.

A version bump is a publish, not a checkpoint. Restarting the service after one posts these bullets into every watched group, including the real one. So exercise the feature in a test group — testbot, catbot, finaltestbot, each just you and the bot — before bumping RELEASE_ORDINAL, tagging or restarting. To try something at the current version without announcing, leave RELEASE_ORDINAL alone and restart. Green unit tests and a green scripts/e2e.sh are not sufficient evidence: e2e.sh runs against the local fake, so it proves the wiring and nothing about how Signal renders the result or how the real upstream API behaves. 0.0.3 shipped a !gekon that passed every gate and posted the same photo every time, because the one thing nobody had done was call the real endpoint twice.

Write bullets the group can notice. The audience is people in a chat, not this repo: describe what changes for them. 0.0.1 shipped a bullet about /healthz, an endpoint bound to 127.0.0.1 that nobody in a Signal group can reach, and it was rightly called out.

0.0.7 — Telesfor

  • nowa komenda !papież (działa też jako !papiez, !papa, !pope) — bot wrzuca losowego papieża: zdjęcie, imię po łacinie, lata pontyfikatu i link do polskiej Wikipedii. Do wyboru jest cała lista, 267 papieży od Świętego Piotra do Leona XIV — czyli ci sami, po których nazywają się wersje bota

0.0.6 — Sykstus I

  • po restarcie komputera bot wraca sam — wcześniej, jeśli włączył się zanim Signal był gotowy, poddawał się po 25 sekundach i milczał do końca dnia; 30 sierpnia stało się to na osiem godzin

0.0.5 — Aleksander I

  • komendy działają teraz niezależnie od tego, na jakiej klawiaturze je piszesz — !gekon napisany rosyjskimi literami (albo jako !g3ck0) wreszcie odpowiada, wcześniej bot go po prostu ignorował

0.0.4 — Ewaryst

  • !gekon pokazuje teraz za każdym razem innego gekona — wcześniej wrzucał w kółko to samo zdjęcie

0.0.3 — Klemens I

  • nowa komenda !gekon — bot wrzuca losowe zdjęcie gekona; działa też !gecko, !geckon, !geko, !gekony i !geckos

0.0.2 — Anaklet

  • bot odpowiada teraz na konkretną wiadomość, cytując ją — w ruchliwej rozmowie widać, czyje !cat to jest

0.0.1 — Linus

  • wersje bota nazywają się teraz imionami kolejnych papieży
  • po aktualizacji bot ogłasza w grupie nową wersję i listę zmian
  • /healthz pokazuje wersję i papieża, więc widać co naprawdę działa

0.0.0 — Święty Piotr Apostoł

  • bot taki, jaki był przed drabinką papieską: !cat, !dog i dzienne podsumowanie