**監視を「作り切る」リリース。**4.4.0 で仕組みを入れ、4.5.0 で穴を埋めたが、実際に起きたインシデントは検知できないままだった。基準にしたのは 2026-06 の Matrix 配信停止(#1455)で、3 月末から更新が止まっていたのに監視は最後まで緑だった。
目玉
宛先の一部にだけ配信できていない状態を検知する (#1504)
直近の「配信を試みた run」で delivered_count < attempted_count なら 503 に倒す。hooks を 2 つ持ち片方だけ失敗し続ける、という #1455 の形がこれで捕まる。
⚠ **解除は「次に全宛先へ届いた run」だけ。**取りこぼしたエントリは再送されないため、新着が無いことは失敗の解消にならない。
**宛先を組み立てられなかった場合も未達として数える。**各アクセサは生成時の例外を握って nil を返すので、上流が落ちている・429 を返す・URL のスキームが欠けている場合に宛先が黙って消え、配信ゼロのまま緑になっていた。
サイレント不発を確認して緑に戻せるようにする (#1505)
しきい値を完璧に当てにいくのをやめ、いったん赤にして運用者が bin/shrieker source ack ID で確認して緑に戻せるようにした。確認は「今回は問題なかった」の記録であって「今後も問題ない」の保証ではないので、さらに silence_tolerance が経過すれば再び赤になる。
修正
- フィード取得の間欠 404 が再送されず、5 ソースが恒常的に赤くなる問題を修正 (#1500)
/healthzが DB エラー時に壊れる問題を修正(ASCII-8BIT のerror_message・json 3.0 で顕在化)(#1469)- 部分失敗 1 件で run 全体が error になり、日次 cron のソースが 24 時間 503 に貼り付く問題を修正 (#1482)
- FeedSource の
last_delivered_atfallback が前進し続け、silent?が永久に false になる問題を修正 (#1483) /healthz/source/:idがdisable?を見ておらず、スキーマの免除規定と食い違う問題を修正 (#1486)- 配信より手前で落ちた失敗が「宛先未達」に化け、宛先が健全でも赤に貼り付く問題を修正 (#1504)
セキュリティ
- sqlite3 を 2.9.6 へ更新(GHSA-mwm8-39rw-8826 / Use-After-Free)(#1501)
ドキュメント
移行にあたって
**migration 011 / 012 が起動時に走る。**011 は配信計測より前の source_run_log 行を一度だけ捨てる(本番実測で 19,765 / 105,205 行。全行が消えるソースは 0 件)。**どちらも不可逆(down なし)**なので、切り戻す可能性があるなら DB のバックアップを先に取ること。
⚠ デプロイ順序は pull → 再起動 → CLI で固定する。マイグレーションを走らせるのはデーモンの起動時だけなので、再起動前に source ack を叩くと silence_ack が無くて落ちる。