Codexのデューデリジェンス改善計画の残りを実装から確かめ、Excel講座の記事を直してデプロイした日(Codexレビューが503で止まった原因つき)
Codexのデューデリジェンス改善計画の残りを実装から確かめ、Excel講座の記事を直してデプロイした日
この日の Codex のコミットレビューは、昼過ぎに Git 講座の部品の修正を2回止めて、4つの指摘を出した。 同じレビューが、夕方には2回続けて失敗した。 仕組みは同じなのに、数時間で振る舞いが変わった理由が分かったのは、記事の修正とデプロイを全部済ませたあとだった。
積み残しを聞いて、先に30本上げてからデプロイした
朝6時半から続けていたセッションで「積み残しってありますか」と聞き、そのまま進めてもらった。 前半の作業で作った音声を R2 へ上げて計画書をコミットすると、残りはデプロイだけになった。
デプロイは、作業ツリーの中身がそのまま本番になる。 本番のファイルを変えているセッションは今は無いだろうと考えて、デプロイを頼んだ。 確かめてもらうと、別のセッションのコミットしていない変更が5ファイル残っていた。 これも一緒に出すことにした。
次に引っかかったのは、財務諸表の動画の音声だった。 動画の2回分は今日の変更で台本が作り直されていて、新しい回も1本増えていた。 手元にあるこの3回分の音声30本は、すべて新しい版だった。 30本を先に R2 へ上げてからデプロイすることにした。 上げたあとの公開前の検査は、4,432件すべて通った。
デプロイは13時27分に終わり、5.6分かかった。
CDN には古い音声が2本残っていて、キャッシュの期限が切れるまでの最長4時間は、新しい文に古い音声が流れる状態だった。
キャッシュの削除を許可すると、2本とも cf-cache-status: MISS で、手元の MP3 と同じ中身が返ってきた。
Git講座の部品が「勝手に進む」
積み残しの一覧には、次の1行があった。
Git 講座の部品(GitSceneIsland)にも同じ「勝手に進む」の作りが残っています。
別の部品で先に直したのと同じ不具合の作りが、Git 講座の部品にも残っていた。 これは直してもらった。
症状は、ステップをクリックしたときに出る。 スクロールに2.5秒かかる状態で比べると、直す前の本番では、7 をクリックすると 1→2→…→7 と途中のステップを全部通っていた。 送った先に届くまでの最長3秒は判定を止め、利用者が外側を自分でスクロールしたらその場で判定を戻す作りに変えてもらった。 直したあとは、5回とも途中のステップに飛ばずに止まった。 ホイールで動かすと、ステップは今までどおり付いてきた(7 から上へ回して 1、下へ回して 4)。 Home キーで動かしたときも同じだった。
コミットは、Codex のレビューに2回止められた。 指摘は4つで、Claude Code に判定し直させると medium が3つ、low が1つだった。 medium の3つは直した。 low の1つ(ページ全体でスクロールしているときのスクロールバー操作)は、Git 講座ではその経路を通らないので、理由を残して通した。
先に直した部品(帳簿の教材のストーリー版)にも同じ細かい修正を当てたかった。 ただ、その部品には別のセッションのコミットしていない変更が入っていたので、あとに回した。
改善計画の進捗は、10月11日で止まっていた
ここで、前から気になっていたことを聞いた。 Excel 講座は以前、Codex に品質のデューデリジェンス(DD)をさせている。 そのレポートから改善計画まで作り、進捗もどこかに書いたはずだった。
見つかったのは10月6日の計画書で、Codex の DD レポートとその後の修正を突き合わせ、直す順番を決めたものだった。 最後の更新は10月11日で、それ以降は書き足されていなかった。 5と6と7の3項目には、進んだ記録が無い。
記録が無いだけなのか、作業そのものが無いのか。 計画書からは決められないので、実装を見て確かめてもらった。 5(演習章の卒業課題の答え合わせ)と 7(記事の作り直しと目次の整理)は、サブエージェント2体に並行して調べさせた。 6(導入の3区間)は、完了の記録の仕組みが 5 と同じなので、1体目に追加で頼んだ。
結果は3項目で分かれた。
- 6:終わっていた
- 5:残りは卒業課題の答え合わせ1本で、自分の確認待ち
- 7:ほぼ手付かずで、記事の古い記述が10点中9点残っていた
6 は記録が無くても終わっていて、7 は記録どおり進んでいなかった。 7 の報告は、Claude Code に何か所か実物で確かめさせた。 「棍棒」「マウスは捨てましょう」「4つの注意」「Alt → O → C → W」が、記事に今もそのまま残っていた。
「1もAで2もA」と、2026年10月の値段
示された判断は2つで、項目7の進め方と、ハードウェアの価格の扱いだった。 どちらも A にして、小さい直しも進めてもらった。 ハードウェアの記事は、2026年10月時点だと値段がかなり変わっている気がした。 そこで、価格の調べ直しをサブエージェントに任せ、計画書にも進捗を書かせた。
作業は分担した。 3ファイルは Claude Code 本体に直させ、AI ツール、ショートカットなどの記事(FD-06)、ハードウェアの3つはサブエージェントに作り直させた。
途中で、小さなつまずきが2つあった。
1つ目に、最初の置き換えが行番号のずれで当たっていなかった。
これは中身で探して直させた。
2つ目に、node の require に相対パスと /c/ 形式のパスを渡していて、ファイルを読み込めていなかった。
こちらは読み方を直させた。
サブエージェントからの報告は次のとおり。
- FD-06:6点のうち5点を直した。語りは変えていない。残した1点(「E5の文字をG5へ」の語り)は、本人の録画の時刻に合わせた語りなので、動画を差し替えるときに直す
- AI ツール:4区間を動画の台本どおりに書き直し、語りは22拍すべて変わった
- ハードウェア:語りを変えた拍は3区間で10あった。スマホ幅の早見表は4列で窮屈だが、横へのはみ出しは無く、直す前の表も同じ列数だった
語りを変えた拍は、音声も作り直す。 区間まるごとを一時フォルダに合成し、話速と音量の決め方を元の音声と同じ条件にそろえてから、変えた拍だけを本番の場所へ写した。 AI ツールの音声は、別の場所へ置く案もあったが、同じ場所に上書きした。 その代わり、R2 へのアップロードはデプロイの直前にして、そのあと CDN のキャッシュを URL ごとに消す。 こうすれば、古い本文に新しい声が流れる時間がほとんど無くなる。 MP3 は、AI ツールの22拍と写した5拍で27本、ハードウェアの10拍を足して37本になった。
コミットでは、改行コードが特殊な記事2本(基本関数とショートカット)を、改行コードを変えない指定で追加した。 差分は直した行だけ(合わせて19行)に収まった。 途中で別のセッションのコミットと重なり、レビューの結果が破棄されたので、同じ内容でやり直した。
全部コミットしてデプロイし、Codexレビューだけが返ってこなかった
残りを全部コミットしてデプロイし、諸々の手続きまで済ませるよう頼んだ。
その途中で、Codex のレビューが2回続けて失敗した。 コミットしていない変更は片付いたが、レビューなしで入ったコミットが3本残った。
R2 には、別のセッションが15時28分に作った音声を139本、すべて新規で上げた(上書きは0本)。 続けて作り直した Excel の音声37本を上書きで上げ、37本とも R2 の中身と一致した。 デプロイは17時6分に終わった。 キャッシュを消す URL は重複なしで148件あり、30件ずつに分けて消した。 本番では、新しい記事と音声と図が出ていることを抜き取りで確かめた(キャッシュは MISS、中身は MD5 で一致)。
一時フォルダの片付けだけは、再帰削除のガード(リポジトリの外は消せない)に止められて残っていた。
「まいったな。これなんでOpenAIのCodexうまくいかないんですかね、レビュー」と聞いた。
原因はOpenAI側の満杯だった
原因は OpenAI 側の一時的な混雑で、レビューの仕組みもこちらの設定も壊れていなかった。
失敗したのは16時43分から16時46分の3分間だけだった。
ログには、接続のやり直しを5回試したあと、「503 Service Unavailable」と「Selected model is at capacity」が出ていた。
レビューに使っている gpt-6-sol に、その時間だけ空きが無かった。
昼に指摘を4つ出したのも、夕方に返ってこなかったのも、同じゲートだった。 違ったのは、OpenAI 側の空きのほうだった。
一時フォルダを自分で消して、レビューをやり直した
止められていた一時フォルダは、作業用の音声と画面の撮影が入っているだけで、本番には関係ない。 消すコマンドを教えてもらい、PowerShell で自分で実行した。 パスは環境ごとに違うので、形だけ書いておく。
Remove-Item -Recurse -Force <一時フォルダのパス>
3つ(narr-regen、excel-view、purge)とも消えた。
そのあと「今通るんじゃないですかね」と、Codex のレビューをもう一度頼んだ。 ゲートはステージした差分を読む作りなので、3本を順にレビューする手順をスクリプトにして、裏で流してもらった。 今度は3本とも最後まで動き、本番を壊すような指摘は無かった。
リポジトリの中に残った未追跡の一時ファイルも消したかった。 対象は7つで、別のセッションが17時15分に作った作業中の図のフォルダは外してもらった。 最初に出てきたのは Git Bash 用のコマンドで、「PowerShell です」と伝えて出し直してもらった。 実行すると7つとも消え、未追跡で残ったのは別のセッションの図だけになった。
引き継ぎと、隣のセッションの中身
計画書はまだ終わっていないので、引き継ぎのプロンプトをダウンロードフォルダのテキストファイルに書き出してもらった(2つ)。
ついでに、別のセッションの URL を貼って、何をしているかを聞いた。 コミットの末尾にはセッションの ID が残るので、そこから辿ってもらった。 その ID が入ったコミットは19件(8時54分から13時34分)あった。 そのセッションは、帳簿の教材のストーリー版に、帳簿を1手ずつ進める教材を移していた。 朝に「取引の図を上から1・2・3・4と並べたい」とフィードバックを貼ったのも、そのセッションだった。
画面のスクリーンショットを見せて、作業ツリーの変更から今の作業を調べてもらった。 縦に長い図が枠から数 px はみ出して、スクロールバーが出てしまう不具合を直していて、そのテストを書き足しているところだった。 幅と高さの指定が無い SVG では、ブラウザが図の大きさを整数に丸める(例:95×150)。 そのため、枠の高さに合わせて計算した幅が数 px ずれていた。 今日自分が指摘した件だそうだ。
この日はコミットのたびに自動のセキュリティレビューも走っていて、eurekapu-nuxt4 だけで約40本のセッションが残った。 7時50分の1本は、スクロール位置を追う処理を足した差分を見て、脆弱性は無いと返していた。
学び
- 計画書に進んだ記録が無くても、作業が無いとは限らない。5と6と7を実装と完了の記録で確かめて、6 は終わっていて 7 は手付かずだと分かった
- Codex のレビューが失敗したら、設定を疑う前にログのエラーと時刻を見る。この日は「503」と「at capacity」が出ていて、失敗は3分間だけだった