[{"data":1,"prerenderedAt":421},["ShallowReactive",2],{"content-/course-site-dd-ci-stopped-worktree-parallel":3,"all-pages-for-dir":399,"related-/course-site-dd-ci-stopped-worktree-parallel":400,"og-image-/course-site-dd-ci-stopped-worktree-parallel":420},{"id":4,"title":5,"body":6,"category":379,"concepts":380,"description":381,"extension":382,"meta":383,"navigation":346,"ogImage":380,"path":384,"project_name":385,"published":386,"publishedAt":387,"seo":388,"source":389,"stem":390,"tags":391,"todo":380,"unpublished":386,"updatedAt":380,"__hash__":398},"pages/2026-10/2026-10-23/course-site-dd-ci-stopped-worktree-parallel.md","GitHub Actions のCIが10月10日から止まっていた：教材サイトのDD残件を worktree 5体の並行実装で進める",{"type":7,"value":8,"toc":365},"minimark",[9,14,23,32,35,39,42,49,52,55,59,62,68,71,74,81,84,88,103,113,118,121,125,132,135,163,174,181,184,187,191,194,197,234,245,251,254,257,260,267,274,277,280,293,296,309,312,315,318,321,332,335,361],[10,11,13],"h1",{"id":12},"github-actions-の-ci-は10月10日から一度も動いていなかった","GitHub Actions の CI は10月10日から一度も動いていなかった",[15,16,17,18,22],"p",{},"前のセッションの終わりに、私は「今ってどこまで進んでるんでしたっけ？」と聞いた。\n進捗ファイルの冒頭は前日 15:55 の内容のままだったので、進捗ファイルと DD 報告を T8 の完了まで反映してもらった（",[19,20,21],"code",{},"dfed26d58","）。\nあわせて、次のセッションに渡すプロンプトをダウンロードフォルダのテキストに書き出してもらった。",[15,24,25,26,31],{},"この日は、そのファイルのパスを新しいセッションに貼るところから始めた。\n教材サイトのデューデリジェンス（以下 DD）の残件を進める続きである（前日分は",[27,28,30],"a",{"href":29},"/course-site-dd-remaining-fixes-calc-correctness","教材サイトのDD残件を直したら、所見はまだ148件あった","）。",[15,33,34],{},"最初に手を付けたのは、ローンの残高の整数化と、T6・T4（デプロイ前の関門と自動検証の導線）の調査の2つだった。\nT4 の調査から戻ってきた報告の1行目で、計画の前提が1つ崩れた。",[36,37,38],"h2",{"id":38},"ローンの残高を整数で持ち直す",[15,40,41],{},"返済予定表の「残高」の列は、丸める前の残高のままだった。\n金額が小さく回数が多い入力（1,000円で600回など）では、表示の残高と最終回の返済が合わない。\n既定のローンでも最大 18円ずれる。\nT8 の束で積み残していた項目である。",[15,43,44,45,48],{},"列の中身を「元本から、これまでの丸めた返済額を引いたもの」に変えてもらった（",[19,46,47],{},"2baebaf14","）。\n修正前後の差を測るスクリプトは、依存の解決で一度失敗した。\nold と new の import 先を直して再実行し、差を出し直してもらっている。",[15,50,51],{},"テストでは、指紋の比較から残高を外し（指紋は古いコードの出力で固定）、残高が回をまたいでつながることを確かめる不変条件を足した。\n関連する20ファイルの350件が通り、Chrome で v2 の「借入」シートを開いて残高の列も確かめてもらった。",[15,53,54],{},"push とデプロイは、別のセッションが担当している。\nこちらでは触らないことにして、progress.md にもそう書いてもらった。",[36,56,58],{"id":57},"_146回ともnot-started","146回とも「not started」",[15,60,61],{},"T4 の調査役（サブエージェント）の報告は、次の一文から始まっていた。",[63,64,65],"blockquote",{},[15,66,67],{},"GitHub Actions の CI は 10-10 から止まっています。",[15,69,70],{},"10-10 以降の146回は、どれも2〜4秒で「not started」で終わっていた。\nGitHub の表示は \"recent account payments have failed or your spending limit needs to be increased\"。\n直近3回の失敗は、Claude Code にも確かめてもらった。\nつまり 10-10 以降のコミットは、CI で一度も検証されていない。\n最後に成功したのは 10-05 である。",[15,72,73],{},"ci.yml のコメントには、10月は無料枠の 2,000分を10日で使い切ったと書いてあった。\nただ、止まっている理由が「無料枠を使い切った」なのか「支払いの失敗」なのかは、Billing の画面を見ないと分からない。\nそこはまだ見ていない。",[15,75,76,77,80],{},"DD が T4 で立てた「検査を CI に足す」は、CI が動かない限り1つも効かない。\n計画は、デプロイのスクリプトから呼ぶ共通の検査（",[19,78,79],{},"pnpm verify","）を本体にし、CI を従に置く形で組み直すことになった。",[15,82,83],{},"もう1つ、クリーンな HEAD の worktree で vitest を流すと、5ファイルで43件が落ちた（ほかに読み込みエラーが1件）。\norigin/main の時点と比べようとしたら権限の判定で止められたので、git の履歴で代わりに見てもらった。\n43件のうち42件は、下書きや開発用、一覧に出していない講座のテストだった。\n公開の画面に関わるのは1件だけである。",[36,85,87],{"id":86},"計画書と-codex-レビュー3回判断7件","計画書と Codex レビュー3回、判断7件",[15,89,90,91,94,95,98,99,102],{},"計画書（",[19,92,93],{},"memo/2026-10-23/t6-t4-deploy-ci-plan.md","）を書いてもらい、Codex のレビューを3回回した。\n1回目の指摘を受けて、ソースの関門は2つのモードに分かれ、",[19,96,97],{},"git cherry"," をやめて祖先関係で判定する形に変わった。\n3回目の high 3件と medium 5件まで反映して、",[19,100,101],{},"9daad042d"," でコミットした。",[15,104,105,106,112],{},"判断が要る7件は、Chrome の前面のタブ（",[27,107,111],{"href":108,"rel":109},"http://127.0.0.1:8899/%EF%BC%89%E3%81%AB%E9%96%8B%E3%81%84%E3%81%9F%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%E3%81%A7%E7%AD%94%E3%81%88%E3%81%9F%E3%80%82",[110],"nofollow","http://127.0.0.1:8899/）に開いたフォームで答えた。","\n7件とも推奨どおりにした。\nコメントを書いたのは、CI についての判断1だけである。",[63,114,115],{},[15,116,117],{},"そう、これね、ずっと失敗し続けてるんで、なんとかしたいんですけど、とりあえず11月1日までは止めませんか？多分無料枠そもそも今ないですよね。",[15,119,120],{},"11月1日までは CI を止め、そのあとは軽い検査だけの ci.yml にして戻す、という形に決まった。",[36,122,124],{"id":123},"ci-を止めるコマンドは自分で打った","CI を止めるコマンドは自分で打った",[15,126,127,128,131],{},"ここで作業が止まった。\nClaude Code が ",[19,129,130],{},"gh workflow disable ci.yml"," を実行しようとしたところ、権限の判定（CI Bypass）で拒否されていた。\n直後は、読み取りだけのコマンドまで拒否されたという。",[15,133,134],{},"そこで私は、ターミナルから自分で打った。",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-bash shiki shiki-themes vitesse-light vitesse-light","gh workflow disable ci.yml\n","bash","",[19,143,144],{"__ignoreMap":141},[145,146,149,153,157,160],"span",{"class":147,"line":148},"line",1,[145,150,152],{"class":151},"senZ8","gh",[145,154,156],{"class":155},"sdGka"," workflow",[145,158,159],{"class":155}," disable",[145,161,162],{"class":155}," ci.yml\n",[15,164,165,166,169,170,173],{},"状態が ",[19,167,168],{},"disabled_manually"," になったことを確かめて、progress.md に記録してもらった。\n11月の枠が戻ったら、軽い ci.yml にしてから ",[19,171,172],{},"gh workflow enable ci.yml"," で戻す。",[15,175,176,177,180],{},"続けて「コミットしてください」と頼み、積み残しも聞いた。\nコミットは ",[19,178,179],{},"f0570aaf4"," で、main は origin より6コミット先、push はしていない。",[15,182,183],{},"それでも実装が始まらない。\n私は「ごめん、DDの残りどんどん進めていってほしいんですけど、なんか判断がいるんでしたっけ今。なんで止まってるんですか？」と聞いた。",[15,185,186],{},"止まっていた理由は、判断が残っていたからではなかった。\nCI を止めるコマンドが拒否されたあと、実装を進めてよいかを念のため私に伺っていたのだという。\n判断7件はもう揃っていたので、そのまま T6・T4 の実装に入ってもらった。",[36,188,190],{"id":189},"worktree-5体を走らせ差分は親が読む","worktree 5体を走らせ、差分は親が読む",[15,192,193],{},"実装は、サブエージェントをそれぞれ別の worktree で動かす形にした。\n並行で動かすのは5体までと決めている。\nT6・T4 は、関門（担当G）、node:test の整理（担当N）、検査の空振りの修正（担当C）、lint（担当L）の4体に分けた。",[15,195,196],{},"上がってきた差分は、親のセッションが読んでから main に取り込んだ。",[198,199,200,212,227],"ul",{},[201,202,203,204,207,208,211],"li",{},"担当N：node:test を ",[19,205,206],{},"pnpm test:node"," にまとめた（",[19,209,210],{},"3e4fa1dfe","。42本の621件で 0 fail）",[201,213,214,215,218,219,222,223,226],{},"担当C：",[19,216,217],{},"check:content"," と ",[19,220,221],{},"check:islands"," が対象0件でも通ってしまう空振りを止めた。島は本番と同じ解析で全769個を見る（",[19,224,225],{},"2b94701ca","）",[201,228,229,230,233],{},"担当L：本番に入るコードの lint error 37件を0件にし、scripts の80件は許可の一覧に入れた（",[19,231,232],{},"652690cd7","）。関係するテスト19ファイルの1,059件が通り、画面再現の回帰にも差はなく、公開ページの描画も確かめた",[15,235,236,237,240,241,244],{},"並行して、B-04（音声の頭出しのずれ、",[19,238,239],{},"2fff1c1a1","）と G-12（問い合わせ API のテスト、",[19,242,243],{},"f0270575b","）も main に入った。",[15,246,247,248,250],{},"担当G の関門は、worktree で ",[19,249,79],{}," を流し直し、すべて通った。\nただし、worktree のブランチに仮コミットしたままで、main には入れていない。\n入れると次のデプロイから手順が変わるので、別セッションのデプロイが終わるのを待つことにした。",[36,252,253],{"id":253},"セッション上限で一度止まる",[15,255,256],{},"T9 と T12・T16 の計画の判断を1つのフォームにまとめている途中で、\"You've hit your session limit · resets 11:40am (Asia/Tokyo)\" が2回出た。\nそのあと「ごめん、続きやってください。」と打って再開した。\n途中でコンテキストも尽きたので、要約から続きを始めている。",[15,258,259],{},"再開後は、CF のゴールデンテスト（F-11）と、画面再現の既定の検査（A-08→A-02）の計画書を書いてもらい、Codex のレビューに回した。\nF-11 は、1回目のレビューの high 4件を反映した。",[15,261,262,263,266],{},"フォームは2枚になった。\nT9 と T12・T16 で12件、F-11 と A-08 で9件、合わせて21件に答えた。\nコメントは書いていない。\n回答は ",[19,264,265],{},"af9be4ef8"," でコミットしてもらった。",[36,268,270,271],{"id":269},"改行コードだけの差分と単独コミットの-git-rm-cached","改行コードだけの差分と、単独コミットの ",[19,272,273],{},"git rm --cached",[15,275,276],{},"実装担当の5体（F-11、A-08/A-02、T9 の3分担）が別々の worktree で動き、空いた枠に T12・T16 を入れた。",[15,278,279],{},"T9 ①は、税務の講本の図を R2 に上げる処理を許可リスト方式にするものだった。\n台帳には p153 と p154 の2行を足した。\nworktree の生成物は main と食い違っていたが、worktree に未追跡の素材が無いせいだった。\nmain に適用して確かめると、違いは改行コードだけで、生成し直すと一致した。\np154 は止まり、p153 は公開できる状態のまま残っている。",[15,281,282,283,286,287,286,290,31],{},"T9 ②（CF の Excel の保存と旧版の退避）と ③（返済予定表から仕訳への書き出し）も、差分を読んでから main に適用した。\nmain で 87件と12件が通るのを見てから、②と③を別々にコミットした。\n②はコミット時の Codex のゲートで指摘が出たので、テストを足して直している。\nこれで T9 は3つとも main に入った（",[19,284,285],{},"b5c8346c2","、",[19,288,289],{},"badd641c8",[19,291,292],{},"baf95954a",[15,294,295],{},"F-11 は、担当が Codex のレビューを5回通していた。\n4コミットを main に cherry-pick すると、118件とも通った。",[15,297,298,299,302,303,305,306,102],{},"最後に、gitignore 済みなのに追跡されていた ",[19,300,301],{},"_tmp*"," の9ファイルを、追跡から外した。\n",[19,304,273],{}," は単独のコミットにする決まりなので、手順書を読んでから実行してもらった。\nステージされたのはちょうど9ファイルの削除で、手元のファイルは残っている。\nそれだけを ",[19,307,308],{},"dd6292f0a",[36,310,311],{"id":311},"途中のまま引き継ぎを書き出す",[15,313,314],{},"今日はここで終わりにしたいと伝え、引き継ぎをダウンロードフォルダのテキストに書き出してもらった。\nまだ途中なのか、とも聞いた。",[15,316,317],{},"答えは「まだ途中」だった。\n21件の判断のうち、実装済みは T9 と F-11 の11件である。\nA-08 の4件と T12・T16 の6件は、それぞれの worktree に残っている。\npush とデプロイはしていない。",[36,319,320],{"id":320},"学びメモ",[198,322,323,326,329],{},[201,324,325],{},"権限の判定で1つのコマンドが拒否されると、Claude Code は実装まで止めて許可を待つことがある。止まっている理由が判断待ちとは限らないので、聞けばすぐ分かる",[201,327,328],{},"10-10 からの146回は、テストが落ちたのではなく、どれも始まってすらいなかった（2〜4秒で not started）",[201,330,331],{},"worktree の並行実装でも、main に入れる前に親が差分を読み、main でテストを流し直す。worktree と main の生成物の差は、未追跡の素材や改行コードから来ることがある",[36,333,334],{"id":334},"残っていること",[198,336,339,349,355],{"className":337},[338],"contains-task-list",[201,340,343,348],{"className":341},[342],"task-list-item",[344,345],"input",{"disabled":346,"type":347},true,"checkbox"," CI を、11月の枠が戻ってから軽い ci.yml にして戻す（止まった原因は Billing の画面で未確認）",[201,350,352,354],{"className":351},[342],[344,353],{"disabled":346,"type":347}," 担当G の関門を main に入れる（別セッションのデプロイが終わってから）",[201,356,358,360],{"className":357},[342],[344,359],{"disabled":346,"type":347}," A-08/A-02 と T12・T16 の差分を読み、main に取り込む",[362,363,364],"style",{},"html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sdGka, html code.shiki .sdGka{--shiki-default:#B56959;--shiki-dark:#B56959}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":141,"searchDepth":366,"depth":366,"links":367},2,[368,369,370,371,372,373,374,376,377,378],{"id":38,"depth":366,"text":38},{"id":57,"depth":366,"text":58},{"id":86,"depth":366,"text":87},{"id":123,"depth":366,"text":124},{"id":189,"depth":366,"text":190},{"id":253,"depth":366,"text":253},{"id":269,"depth":366,"text":375},"改行コードだけの差分と、単独コミットの git rm --cached",{"id":311,"depth":366,"text":311},{"id":320,"depth":366,"text":320},{"id":334,"depth":366,"text":334},"dev",null,"教材サイトのDD残件を進める途中で、GitHub Actions のCIが10-10から146回とも「not started」だったと分かった。CIは自分のコマンドで11月まで止め、残りは worktree のサブエージェント5体に並行で実装させて、差分を読んでから main に入れた。","md",{},"/course-site-dd-ci-stopped-worktree-parallel","eurekapu-nuxt4",false,"2026-10-23T00:00:00.000Z",{"title":5,"description":381},"make-diary","2026-10/2026-10-23/course-site-dd-ci-stopped-worktree-parallel",[392,393,394,395,396,397],"Claude Code","Codex","デューデリジェンス","GitHub Actions","git worktree","サブエージェント","y2wJ6Zn0J73lVIBNVYzzWOnZqzP11KjczFixgjLmqlM",[],[401,404,408,412,416],{"title":402,"path":29,"publishedAt":403},"教材サイトのデューデリジェンス残件を修正：7件を直したあと、148件の所見から公開教材の計算の正しさ13件へ","2026-10-22T00:00:00.000Z",{"title":405,"path":406,"publishedAt":407},"Excel講座のデューデリジェンス52件を git worktree で仕分け、サブエージェントで並行して直した記録","/excel-course-due-diligence-worktree-split","2026-10-06T00:00:00.000Z",{"title":409,"path":410,"publishedAt":411},"Codexのデューデリジェンス改善計画の残りを実装から確かめ、Excel講座の記事を直してデプロイした日（Codexレビューが503で止まった原因つき）","/codex-dd-followup-excel-article-fixes","2026-10-16T00:00:00.000Z",{"title":413,"path":414,"publishedAt":415},"コンピュータのしくみ講座18講を動画講座に作り替えた1日：計画書、5体並列の台本づくり、Macの音声待ち","/computer-course-storyboard-video-conversion","2026-10-14T00:00:00.000Z",{"title":417,"path":418,"publishedAt":419},"Excel講座に「道具の前に困りごと」を差し込む：困りごと動画48本とCF精算表ストーリー版の公開まで","/excel-course-trouble-first-videos-cfws-story","2026-10-12T00:00:00.000Z","https://log.eurekapu.com/og/blog/course-site-dd-ci-stopped-worktree-parallel.png?v=2026-10-23T00%3A00%3A00.000Z&title=GitHub%20Actions%20%E3%81%AECI%E3%81%8C10%E6%9C%8810%E6%97%A5%E3%81%8B%E3%82%89%E6%AD%A2%E3%81%BE%E3%81%A3%E3%81%A6%E3%81%84%E3%81%9F%EF%BC%9A%E6%95%99%E6%9D%90%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AEDD%E6%AE%8B%E4%BB%B6%E3%82%92%20worktree%205%E4%BD%93%E3%81%AE%E4%B8%A6%E8%A1%8C%E5%AE%9F%E8%A3%85%E3%81%A7%E9%80%B2%E3%82%81%E3%82%8B&author=Kei%20Komatsu&sig=1d9a51d54ce6a720",1792796521400]