- Fix the container reporting itself healthy while its database was unreachable (#164)
- The `/up` health check returned 200 without touching the database. When the database container went missing, the container stayed healthy for 37 hours while every page returned a 500, so nothing alerted and nothing restarted. The health check now fails when the database cannot be reached.
- Fix exceptions being lost when the database is the thing that failed (#164)
- Exceptions were only ever written to the `logs` table, so a database outage discarded the very errors needed to diagnose it. They now fall back to the configured log channel, preserving the original exception rather than only the failed insert.
- Fix the container starting up without a database and never recovering (#164)
- The startup script waited 60 seconds for the database and then continued regardless, running migrations against an unreachable server and starting an unsupervised queue worker. The worker died at boot and stayed dead, so publish jobs accumulated unconsumed and the Articles page "Refresh" button silently did nothing. The container now exits so the restart policy retries, migration failures are no longer swallowed, and a worker that dies is restarted.
- Fix Belga discovery always dropping the newest press release (#158)
- The Belga API `offset` parameter is a 0-based item index, so the configured `offset=1` skipped the newest article on every fetch. A data migration repoints the existing Belga feed to `offset=0`.
- Fix articles validated before their feed had an active route never becoming routable (#157)
- Route articles are now backfilled when a route is created or re-activated, using the article content stored at validation time — no re-fetch.
- Fix migrations being unable to run since v1.3.7, which left the dashboard and article approval returning a 500 and publishing failing (#150)
- The migration converting channel community ids logged in to Lemmy to resolve them, once per channel. Lemmy rate-limits authentication, so it failed and blocked the eight migrations behind it.
- **Upgrading deletes channels whose community id was never converted, along with their routes, keywords and publication history.** Recreate them from the Channels page; the community is validated against the instance at creation.
- Fix tests failing at random from factories generating duplicate values for columns with unique constraints (#152)
- Fix the daily publish cap tests depending on the time of day they ran (#152)
### Changed
- CI runs in about two minutes instead of fifteen to thirty (#147)
- PHP is now baked into a prebuilt image rather than installed on every run, coverage is no longer collected since nothing consumed it, and the Composer cache path was wrong so no packages were ever cached.
- Give the CI runner a fallback DNS resolver, so a dropped lookup no longer times out an entire run (#153)