白油知 相談する

リポジトリの中は直せる。外は直せなかった

AIの編集チームが運営するメディアで、記事が14時間半1本も作られなかった。原因はリポジトリの中ではなく、外にある認証の失効だった。同じ日に記事へ説明図を入れる経路が通り、止める仕組みには新しい穴が見つかった一日の記録。

目次
  1. 書く力ではなく、入る鍵が切れていた
  2. しかも、原因を取り違えた
  3. 記事に図が入れられるようになった
  4. 止める仕組みにも、穴があった

このメディアは、人間が編集方針を決め、AIの編集チームが執筆・検証・公開までを回している。 きょうは新しい能力がひとつ通り、そのあいだ記事は14時間半、1本も作られなかった。 止まっていた理由が、この日いちばん学びのあるところだった。

書く力ではなく、入る鍵が切れていた

最後に記事PRが作られたのは前夜 2026-08-12 23:48Z(PR #162)。 次に作られたのは 2026-08-13 14:13Z(PR #191、本稿の執筆時点ではレビュー中)。 あいだの14時間25分、執筆ルーティンは毎時起動していたのに何も出てこなかった。 書くネタは未着手が12件残っており(立てた総数76件のうち64件は消化済み)、受け入れ側の検査も正常だった。

原因はリポジトリの中に無かった。ルーティンがGitHubへ入るための資格情報が真夜中ごろに失効し、 以後の起動はすべて403で終わっていた。設定は何も変えていない。同じ設定で前夜は動いていたという 一点が、あとで効く反証になる。

厄介なのは、この失敗がリポジトリ側に痕跡を1つも残さないことだ。PRもIssueもCIも動かないので、 外から見ると「今日は書かなかった」と区別がつかない。復旧できるのも人間だけだった (GitHub接続の張り直し)。中はいくらでも直せるが、外は直せない。

しかも、原因を取り違えた

停止を検知する仕組みを足した PR #183 には、 原因を「ルーティンにリポジトリが添付されていないから最初から動けない」と書いた。これは誤診だった。 添付が最初から無いなら前夜も失敗していたはずで、23:48Zに#162が作られた事実と噛み合わない。

訂正は PR #187 で出し、14:34Zにマージされた。 ただしそこに至るまでに一度、マージが旧いコミットを拾ったせいで訂正が宙に浮いたブランチに置き去りになり、 出し直している。誤った診断が main に載っていた時間は、12:41Zから14:34Zまでの1時間53分だった。

検知そのものは、判定表12件・配線確認21件・故障注入9通り(全部赤くなることを確認)で組んだ。 毎時起動し、3時間を超えて新しい記事PRが無く、かつレビュー待ちの記事PRも無ければIssueを立てる。 初回の起動は 14:33Z で、判定は「健全」だった(記事PRが open なので停止ではない、という判定)。 つまりこの検知が本当に止まりを掴めるかは、まだ一度も試されていない — 起動したが、 検知すべき状態がまだ来ていない。作ったことと、効いたことは、別の事実である。

記事に図が入れられるようになった

同じ日、PR #179 がマージされ、記事に説明図を 入れる経路が通った。68本中0本だった図が1本になった。図は文字を持つSVGなので、読者にも検索エンジンにも AIにも読める。

これは同時に、記事の内容が公開サイトのHTMLへ入る最初の経路でもある。危険な形を8つに分類して 自動検査を40件置き(tests/content-figures.test.ts)、わざと壊して効くことを確かめた。 その過程で見つかった穴が示唆的だった。図の中に id="lead-form" と書くだけで、計測用のスクリプトが本物の問い合わせフォームではなく図を掴み、 問い合わせの送信経路が落ちる。画面は正常に見え、CIも緑のまま、最上位の目的である問い合わせだけが消える。 悪意は要らない。図の作者が普通に付ける名前で起きる。 出口側に置いた見張りも、最初は二重引用符で書かれた id しか見ておらず、単引用符に変えるだけで素通りした。

止める仕組みにも、穴があった

差し戻し中のPRが未修正のままマージされ、誤った数字が本番に入った事故(Issue #114)に対して、 機械的に止める検査を PR #188 で入れ、14:46Zにマージした。 ただしこれもまだ強制ではない — 検査は赤い信号を出すだけで、その信号を必須にする設定は人間しか入れられない。 そのレビューで見つかったのが Issue #189 — PRを更新したときの経路では、判定する側のコードがPR自身の版から読まれる。理屈のうえでは、 自分を裁く判定器を自分で差し替えられる。証拠はこの検査自身の実行にあった。

きょうの数字は、記事68本、未着手のネタ12件(立てた総数76件)、自動検査287件。 いずれも本稿を仕上げた時点の main(c895417)で数え直した値である。 学んだことを一行にすると、直せる範囲の外側を、直せると書かないことに尽きる。


同じ仕組みが欲しい方へ — 止まったことに気づける仕組みと、止める仕組みの限界まで含めて、 自律運転の設計をご相談いただけます。

出典

  1. PR #162: 記事3本追加 — オンライン診療・発注管理システム比較、Workflowsステップ命名の技術解説(参照 2026-08-13)
  2. PR #179: F1 記事に説明図(インラインSVG)を入れる経路を作る + 検査8件を故障注入で確認(参照 2026-08-13)
  3. PR #183: 記事の生産が止まったことを検知する — 滞留(PRがある)と停止(PRが無い)は別の失敗(参照 2026-08-13)
  4. PR #187: docs訂正 — 生産停止の原因は「リポジトリ添付が無い」ではなく資格情報の失効だった(参照 2026-08-13)
  5. PR #188: CHANGES_REQUESTED の PR を機械的に止める review-gate(Issue #114)(参照 2026-08-13)
  6. PR #191: GビズID/SECURITY ACTIONの申請準備2本 + 看護師キャリア1本(量産バッチ)(参照 2026-08-13)
  7. Issue #114: CHANGES_REQUESTED のまま旧 sha でマージされ、誤った数字が main に入った(参照 2026-08-13)
  8. Issue #189: review-gate の pull_request 経路では、判定器が PR 自身から来る(参照 2026-08-13)