# Changelog

> Every released version, with its date and what changed in it.

Source: https://boring-observability.dev/sailfish/docs/changelog
Section: Reference — Sailfish documentation (version 0.2)
Updated: 2026-10-23

---

Every released version of Sailfish, newest first, with what changed in each. Releases are published to the private Composer registry at `sailfish.composer.sh`; `composer update boring-o11y/my-sailfish` moves you to the newest release your version constraint allows.

## All releases

| Version | Date | Headline |
| --- | --- | --- |
| [**0.2**](#v0-2) | 23 Oct 2026 | Transactions after they finish, and an Instrumentation page |
| [**0.1**](#v0-1) | 2 Oct 2026 | First public release |

## 0.2 — 23 October 2026

**Added — a Transactions page.** Every collection reads the transactions that finished since the previous one: committed against rolled back, charted as the share rolled back, and those that ran at least `transactions.long_seconds` (5 by default, `SAILFISH_LONG_TRANSACTION_SECONDS`), listed slowest first with how long each ran, whether it rolled back, how many statements it ran, its access mode and isolation level, and the account and program that ran it. Never its text. Long transactions are kept for `retention.long_transaction_days` (30). See [The dashboard](https://boring-observability.dev/sailfish/docs/dashboard#transactions) and [What gets recorded](https://boring-observability.dev/sailfish/docs/what-gets-recorded#transactions).

**Added — two events.** A rollback surge, sent immediately, when the share of transactions rolled back over the last hour is at least 3× its usual share for that hour, at least 5%, and at least 60 rollbacks. A long transaction, sent in the daily digest, for each account and program that finished a transaction over `transactions.long_seconds` in the last hour. See [Events](https://boring-observability.dev/sailfish/docs/events#transactions).

**Added — the statements each open transaction has run.** On the Activity page, under the session in the open transactions and in the blocking trees: their text, time, rows affected, sent and examined, and any error, from `events_statements_history`. The statement that took row locks on a table someone is waiting for is marked where performance_schema can tell. Text and error messages are behind the `viewSailfishQueryText` gate.

**Added — what a running statement waits on, and `ALTER TABLE` progress.** While `events_waits_current` is on, the Activity page says what each running statement is waiting on: disk I/O, the redo log, a row, table or metadata lock, a mutex or latch, the network. While `events_stages_current` is on, it says the stage each statement is in, and shows a running `ALTER TABLE`'s progress with an estimate of the time left. See [The dashboard](https://boring-observability.dev/sailfish/docs/dashboard#activity).

**Added — an Instrumentation page.** What each part of Sailfish needs from performance_schema and whether it is on, every consumer with what it records and what Sailfish reads it for, the share of statements sent as native prepared statements, and the SQL and `my.cnf` lines to turn on what is off. The overview also warns when most statements get no digest. See [The dashboard](https://boring-observability.dev/sailfish/docs/dashboard#instrumentation).

**Changed — table-scan surges allow for traffic.** The usual scans are grown by as much as the table's index reads grew, and the surge must add twice the usual on top of that, so more queries alone stay quiet. A quiet hour still needs 3× the usual. A surge opens only on a table of at least `min_rows` (1,000), since a small lookup table is scanned by design. See [Events](https://boring-observability.dev/sailfish/docs/events#scan-surge-traffic).

**Removed — PHP 8.2 and 8.3.** Sailfish now requires PHP 8.4 or later.

## 0.1 — 2 October 2026

The first public release: five-minute snapshots of performance_schema kept across restarts, the overview, Server, Activity, Indexes, Tables, Errors and Events pages, sixteen detectors, and notifications by mail, Slack and webhook with a daily digest, reminders and recoveries.


## Common questions

### What is the latest version of Sailfish?

0.2, released on 23 October 2026. It reads transactions after they finish, with a Transactions page and events for long transactions and rollback surges, shows what a running statement waits on and how far an ALTER TABLE has got, lists the statements each open transaction has run, and adds an Instrumentation page. It requires PHP 8.4.

### How do I update Sailfish to the latest version?

Run composer update boring-o11y/my-sailfish. That moves you to the newest release your version constraint allows. Every purchase includes twelve months of upgrades.
