マージしても公開はされていなかった — 公開確認と成果物の管理

記事を書いてPRを出し、テストが通ってマージされた。 それで公開された気になっていました。実際には公開されていませんでした。
自動デプロイを止めた副作用
無料枠のデプロイ上限に当たったので、リポジトリの各プロジェクトで自動デプロイを切りました。 PRをマージしても本番へは反映されず、デプロイスクリプトを手で起動して初めて反映されます。
切った直後は覚えているので問題になりません。困るのは数日経ってからです。 「マージした」までは記憶に残り、「デプロイした」は記憶に残りません。 どちらもやっていない日と、片方だけやった日の区別が、手元の感覚では付かなくなります。
気づいた方法
疑いを持ったきっかけは、公開したはずの記事のURLを直接開いたときの404でした。 ただ、1本ずつ手で開いて確かめるのは続きません。
やったのは、ローカルの記事ファイルと本番のsitemapを突き合わせるだけの確認です。 手元にあってsitemapに無いものが、公開されていない記事です。 差分がゼロなら公開済み、1件でも出ればデプロイが要る。判定はそれだけで足ります。
画像も同じで、記事が出ていてもアイキャッチが404のままということが起きます。 HTMLが出ているかと、参照している画像が実体として配信されているかは別の話です。
エージェントが手元に残した成果物
もう1つ、別種の取りこぼしがありました。
別のエージェントに作業を任せた回で、生成された成果物がコミットされないまま 作業ディレクトリに残っていました。当人の中では作業は完了しています。 ただ、コミットしていないので、こちらから見ると何も起きていないのと同じです。
同じ回に、スキル定義の同期ずれも見つかりました。 同じ内容を2か所に置いていて、片方だけ更新されていたパターンです。 片方が古いと、そちらを読む側には指示が丸ごと届きません。 壊れるのではなく、静かに無効になるので気づきにくい。
どちらも「エラーが出ない失敗」です。 公開されていない記事と性質は同じで、成功したように見えて何も起きていません。
入れたもの
対処は3つに落ち着きました。
- 公開の入口をスクリプトに一本化する。記事を出す操作が、デプロイの起動まで含む形にする
- 公開前のガードを非ゼロ終了にする。アイキャッチの実体が無い、本文に図が無い、といった記事を通さない
- 公開後に、ローカルの記事と本番sitemapを突き合わせる
3つとも、判定を人間の記憶から外すことが目的です。 「やったはず」を確認の対象にしない、と言い換えてもいい。
手順としてまとめたものは、WIKIの公開されたか確かめるに置きました。 作っているものの一覧はプロダクトにあります。
まとめ
- 自動デプロイを切ると、マージと公開の間に人間の記憶が挟まる
- 挟まった記憶は数日で当てにならなくなる
- エラーを出さずに何も起きない失敗は、突き合わせでしか見つからない
- 確認する対象は、本番URL・画像の実体・sitemapの3点