Skip to content

v0.2.1

Choose a tag to compare

@pooza pooza released this 15 Aug 16:01
· 15 commits to main since this release
7b5a4a9

⚠ 監視を繋ぐ前に、監視される側を直すためのパッチ。

⚠⚠ **どちらも 0.2.0 のリリース前レビューで赤にし、「監視がまだ 1 本も繋がっていない」を理由に非ブロック化して繰り越したもの。**⚠ 本番 rubicon が 2026-08-15 に稼働を始め、次が監視の接続(pooza/chubo2#98#15)なので、その前に入れる。

#78makoto status が「投稿が実際に出たか」を見ていなかった

⚠⚠ jobs は起動時に決まる登録の本数なので、160 枠すべてが失敗しても jobs: 5 のまま exit 0 だった。

枠の結末を 3 つに分けて、失敗の側だけを数える。

枠の結末 記録
投稿できた failures を 0 に戻す
本文が無い 何も記録しない(中立)
source が落ちた/投稿が失敗した failures を 1 つ進める
  • 🔴 **「本文が無い」を中立に置くのが肝。**⚠ 失敗に数えると原稿がまだ無いだけの日(8/15〜10/31 の 2 か月半)が延々と警告になり、⚠⚠ 成功に数えると「設定を消すと枠の中で例外が上がる」形(#77)が中立に紛れる
  • ⚠⚠ 異常(1)ではなく警告(2)。投稿が落ちる原因(トークンの失効・設定の欠落・source の不具合・Mastodon 側の障害)はどれも再起動で直らないので、1 にすると検知 → 再起動 → また失敗のループになる
  • makoto statusposting: の行が増えた

#79 — 不正なバイト列を含む例外でログ経路自体が落ちていた

⚠ **PostingJobScheduler の両方の rescue を貫通して stderr へ抜け、bin/makoto_daemon.rb/dev/null に落とすので 1 行も残らなかった。**⚠⚠ 常駐は生き続け、makoto status は健全のまま。

**呼び出し側 6 箇所ではなく、Makoto::Logger#create_message(出口 1 つ)で受けた。**⚠ 6 箇所を直す形は 7 箇所目が生えた瞬間に、しかも静かに破れる。

⚠⚠ レビューで出た 3 件(すべて実在した)

  1. 同じ枠の失敗を二重に数えていた — ⚠ 成功は冪等キーで畳まれるのに失敗だけ畳まれず、落ちた枠 1 つで閾値を 2 つ消費「投稿の側で冪等にしたものは、観測の側でも冪等にする」
  2. 🔴 痕跡の書き込みが不可分でなかった — ⚠ File.write は切り詰めてから書くので、読んだ側が壊れた JSON を掴み stale? が true。⚠⚠ makoto status が 1 を返して monit が正常な常駐を再起動する形で、#78 自身が窓を広げていた(1 時間に 1 回 → ライブ当日 160 回)。実測で 2,000 回中 625 回が nil
  3. 🔴 秘密がマスクを迂回して漏れる経路を、#79 の修正自身が作っていた — ⚠⚠ 修正前は syslog で落ちて「ログごと消えて」いたものが、scrub で出力できるようになった結果、秘密がそのまま書かれる。「ログが消える」を「秘密が漏れる」に変えていた

検証

  • ステージング検証(手順 4・省略不可)bydo検知そのものを動かした3 枠落として code=2、同じ枠は二重に数えず、1 本出れば code=0
  • ✅ ⚠ #79 のログが実際に /var/log/makoto2.log に残り、同じ行の token: SECRET はログ全体で 0 件
  • 11/1〜11/4 の 4 日ぶんの下見が 0.2.0 と同一(11/3 は前日増量 8/8、11/4 は 160/160)
  • ✅ lint / config:lint / 357 tests 0 failures(0.2.0 の 314 から +43
  • 投稿は 1 通も出していない

Full Changelog: v0.2.0...v0.2.1