[{"data":1,"prerenderedAt":308},["ShallowReactive",2],{"content-/gogen-eitango-phase4-d1-quiz-multichoice":3,"all-pages-for-dir":306,"og-image-/gogen-eitango-phase4-d1-quiz-multichoice":307},{"id":4,"title":5,"body":6,"category":287,"concepts":288,"description":289,"extension":290,"meta":291,"navigation":222,"ogImage":288,"path":292,"project_name":293,"published":294,"publishedAt":295,"seo":296,"stem":297,"tags":298,"todo":288,"unpublished":294,"updatedAt":288,"__hash__":305},"pages/2026-07/2026-07-16/gogen-eitango-phase4-d1-quiz-multichoice.md","gogen-eitango Phase 4: D1本番適用と章末ミニテストの4択化 — Fable 5のrate limitをCodex引き継ぎで乗り切った日",{"type":7,"value":8,"toc":269},"minimark",[9,13,17,22,30,37,40,44,47,50,63,68,71,74,82,89,92,95,98,102,105,108,111,118,122,125,139,146,150,153,156,159,163,166,169,180,183,186,189,192,195,199,202,205,211,243,246],[10,11,5],"h1",{"id":12},"gogen-eitango-phase-4-d1本番適用と章末ミニテストの4択化-fable-5のrate-limitをcodex引き継ぎで乗り切った日",[14,15,16],"p",{},"英語語源学習アプリ（gogen-eitango）の Phase 4 を一日かけて進めた。朝の積み残し確認から始めて、D1 マイグレーションの本番適用、英語コンテンツ全8バッチの生成、章末ミニテストの4択化、本番公開まで走った。途中で Fable 5 が rate limit に到達して、画面に「You've reached your Fable 5 limit」が9連発で並んだが、Codex への引き継ぎで乗り切った。",[18,19,21],"h2",{"id":20},"朝-積み残し確認から-d1-マイグレーション0007の本番適用へ","朝: 積み残し確認から D1 マイグレーション0007の本番適用へ",[14,23,24,25,29],{},"朝イチで「昨日途中でやってたやつの進捗を確認して」と投げた。memo・git履歴・untracked の ",[26,27,28],"code",{},"dev/"," ディレクトリを漁らせて、積み残しの筆頭が D1 マイグレーション0007 の本番適用（自分の確認待ち）だと確定。",[14,31,32,33,36],{},"Windows を再起動する予定があったので、確認結果は ",[26,34,35],{},"memo/2026-07-16/gogen-progress-check.md"," に残させ、昨日の計画書の進捗欄も実態に合わせて更新させた。次のセッションで「積み残し何ですか」と聞けば同じ答えに辿り着ける状態にしておく。",[14,38,39],{},"再起動後のセッションで改めて積み残しを聞くと、答えは朝と同じだった。要対応が2件と判断待ちが2件。0007 の本番適用を承認して実行してもらい、あわせて Phase 4（アトラス3859号）の英語コンテンツ生成を「計画ドキュメントを確認しながら」進めるよう指示した。",[18,41,43],{"id":42},"phase-4a-パイロットで方針を固めてから量産へ","Phase 4A: パイロットで方針を固めてから量産へ",[14,45,46],{},"コンテンツ生成は、いきなり全量を回さずパイロットから入らせた。形式ゲートの17テストが green になったのを確認してから、スキーマ拡張・バッチ入出力スクリプト・エージェント用プロンプトテンプレートを整備。",[14,48,49],{},"パイロットの段階で判断材料がひとつ出てきた。root_id が NULL の語に付いている「語源形式」メモ1,518語は、大半が -tion/-ly/-al などの接辞（文法マーカー）で、絵にできる「動きを持つ語根」（leg/lect=読む・選ぶ、nat=生まれる等）は少数だという。これで 4b の方針を確定できた。",[51,52,53,57,60],"ul",{},[54,55,56],"li",{},"語根モチーフを付けるのは root_id 付きの214語だけ",[54,58,59],{},"残り3,645語はモチーフなしテンプレで、visual_spec は例文の意味だけから構図を作る",[54,61,62],{},"画風のロックは全画像共通なので、見た目の統一感は保たれる",[64,65,67],"h3",{"id":66},"検収の往復-直すべきはデータかレビュアーか","検収の往復: 直すべきはデータか、レビュアーか",[14,69,70],{},"生成と並行してレビューも別エージェントに回した。review-002 は clean 30 / suspect 2。目視検収では、見出し語自身が murder の例文がゲートの見出し語除外で設計どおり通過していること、content（形容詞・満足して）や range のような多義語の語義選択が正しいことも確認できた。",[14,72,73],{},"suspect の扱いは二手に分かれた。",[51,75,76,79],{},[54,77,78],{},"spy・spatial・spur の3語は原本照合で OCR 誤り（原本は小文字）と確定 → 確立済みの corrections.json 経路で修正",[54,80,81],{},"measure・range など4語の「語義は名詞・メモは動詞」という指摘は、照合したら4件とも原本どおり → 直すべきはレビュアーの指示書の方だった",[14,83,84,85,88],{},"原本の「動詞は目的語・前置詞も記憶」というパターンをレビュアー指示書と生成プロンプトの両方に反映して、以降の誤検知を潰した。stuff の例文修正、range の再修正例文（気温の変動幅）の投入まで済ませて、パイロットの詳細メモは ",[26,86,87],{},"memo/2026-07-16/"," に残させた。",[64,90,91],{"id":91},"波状の並列生成",[14,93,94],{},"そこから波状に並列を組ませた。第1波（4バッチ・144語）の意味検証×4体と、第2波の生成×4体の計8体を並列起動。第1波の検証は suspect ほぼゼロで流れ、続けて第2波の検証4体と第3波の生成4体を起動した。",[14,96,97],{},"生成済み・形式ゲート通過が359語（approved 72＋検証済み clean 142＋検証中145）まで積み上がったところで、画面が止まった。",[18,99,101],{"id":100},"fable-5-が-rate-limit-に到達-全8バッチは書き終わっていた","Fable 5 が rate limit に到達 → 全8バッチは書き終わっていた",[14,103,104],{},"「You've reached your Fable 5 limit」。何を打っても同じ一行が返ってくる。9回続けて同じ表示を見たところで、週間制限に引っかかったと理解した。",[14,106,107],{},"「途中までだけど、どこまでいってるか引き継ぎをドキュメント化して」と（モデルを切り替えて）指示したら、意外な報告が返ってきた。全8バッチとも実際には書き終わっていて、API エラーは書き込み後の最終応答時に出ただけだった。落ちた時点の見た目は「途中で全滅」でも、DB の実物を確認したら全部揃っていた。",[14,109,110],{},"そのまま全て取り込ませ、suspect 1件だけ対処した。violent — 語義は「激しい・猛烈な」で例文としては正しくても、画像化すると暴力と子どもの組み合わせになる。レビュアーの指摘どおりなので、中立な題材に差し替えた。",[14,112,113,114,117],{},"続きは Codex（GPT-5.6-sol）に投げることにした。最新の DB 状態を確認させたうえで引き継ぎプロンプトを書かせ、ファイルに保存して ",[26,115,116],{},"codex exec -m gpt-5.6-sol \"$(cat prompt.txt)\""," で渡す形にした。",[18,119,121],{"id":120},"codex-に計画書と実装の突き合わせレビューをさせた","Codex に計画書と実装の突き合わせレビューをさせた",[14,123,124],{},"午後、全体計画書と進捗メモのパスを渡して、実装の実態との突き合わせレビューを Codex にやらせた。結論はこうだった。",[51,126,127,130,133,136],{},[54,128,129],{},"Phase 3b までは完了",[54,131,132],{},"Phase 4a は生成は完走したが、検収と公開反映が未了で進行中",[54,134,135],{},"4b / 4c / 4d は未着手",[54,137,138],{},"DB と公開 JSON が非同期、計画書・進捗メモの進捗欄が失効している",[14,140,141,142,145],{},"ただし最大の指摘だった「DB→公開JSON の未反映」は、再確認したら別セッションの再エクスポートですでに解消済みだった。レビュー時点と現在地のずれも含めて、",[26,143,144],{},"memo/2026-07-16/gogen-plan-review-and-status.md"," に現在地スナップショットと明日の再開タスクをまとめさせた。明日はこのドキュメントだけ見れば再開できる。",[18,147,149],{"id":148},"章末コーナーのレイアウト崩れ-箇条書きが段落に溶けていた","章末コーナーのレイアウト崩れ: 箇条書きが段落に溶けていた",[14,151,152],{},"port の章末ページを開いたら、「使い分けラボ」「混同注意」で箇条書きのつもりの行が1つの段落に溶けて文字の壁になっていた。スクショを貼って「箇条書きすべきところは箇条書きに、あるいは段落を分けて」と指示。あわせて、ミニテストはテスト形式と履歴保持を保って、アプリケーションとして成立させることも条件に入れた。",[14,154,155],{},"原因はデータ側の形式ゆれ（行頭マーカー ● の有無）を HTML 生成スクリプトが吸収できていなかったこと。export-content-json.ts の組み立てをミニテスト分岐に対応させて、1項目ずつの箇条書きに直させた。ブラウザ実描画で13チェック PASS まで確認させている。",[14,157,158],{},"この時点でミニテストは「答えを隠した自己採点式カード」になり、章末クイズと同じ学習履歴に記録されるようになった。",[18,160,162],{"id":161},"ミニテストの4択化-正解不正解ボタンを押させない","ミニテストの4択化: 正解・不正解ボタンを押させない",[14,164,165],{},"直したミニテストを vert-vers のページで見て、イメージと違うと気づいた。「convert A ___ B」の空欄に何が入るかを答える問題なのに、答えを見てから「正解できた・間違えた」のボタンをいちいち押す形式になっている。押すたびに、これは自己申告であってテストではないという感覚が積もる。「4択にして選ばせるようにして」と方向転換した。",[14,167,168],{},"全18章×5問＝90問を、章ごとに作問→独立レビューのワークフロー（Sonnet 36エージェント）で4択選択式に変換させた。仕上がりはこうなった。",[51,170,171,174,177],{},[54,172,173],{},"選択肢をクリックすると即時に○×が判定される",[54,175,176],{},"自己申告ボタンなしで、そのまま学習履歴に記録される",[54,178,179],{},"vert-vers の「convert A ___ B」は for/into/by/with の4択で、正解 into が判定される",[14,181,182],{},"再走の待ち時間に4択レンダリングを実装させておき、デスクトップとモバイルの両方を実画面で目視した。",[14,184,185],{},"テストは2,720件パス・失敗0。ファイル単位で9件 failed に見えたが、負荷起因のタイムアウトで、単独実行では全部パスすることを確認した。",[18,187,188],{"id":188},"本番オープン化とセキュリティレビュー",[14,190,191],{},"ここまで gogen-eitango は localhost:3200 でしか見られない状態だったので、本番環境にオープンにする設定変更を指示した。あわせてミニテスト機能の変更にセキュリティレビューをかけて、データフローを追跡してもらった。指摘は「draft 解除が意図的か」の確認だけ — 自分が公開を指示した変更そのものなので、対応不要と判断した。",[14,193,194],{},"ビルド＆デプロイは6.4分で完走し、draft 露出ガードも OK。本番 URL で表示・音声・教材 JSON まで実地検証して締めた。",[18,196,198],{"id":197},"学習ゲートは-learn_skip-でパス","学習ゲートは LEARN_SKIP でパス",[14,200,201],{},"コミット時に学習ゲートがブロックして /learn のクイズが立ち上がったが、朝から走り続けた頭にはもう解く気力が残っていなかった。「疲れたのでパスさせてください」と伝えて、LEARN_SKIP で理由を残して通した（コミット 4c02fbfb・88ファイル）。回避ではなくログに残るスキップなので、後ろめたさはない。",[18,203,204],{"id":204},"明日の再開ポイント",[14,206,207,208,210],{},"再開の起点は ",[26,209,144],{},"。今セッションの進捗も反映済みなので、このドキュメントだけ開けば続きに入れる。",[51,212,215,225,231,237],{"className":213},[214],"contains-task-list",[54,216,219,224],{"className":217},[218],"task-list-item",[220,221],"input",{"disabled":222,"type":223},true,"checkbox"," Phase 4a の残り: 生成済みバッチの検収と公開反映を最後まで通す（Codex に委任した継続分の結果確認から）",[54,226,228,230],{"className":227},[218],[220,229],{"disabled":222,"type":223}," 検証中だった145語の判定を DB に反映する",[54,232,234,236],{"className":233},[218],[220,235],{"disabled":222,"type":223}," Phase 4b（visual_spec からの画像生成。語根モチーフは root_id 付き214語のみ）に着手する",[54,238,240,242],{"className":239},[218],[220,241],{"disabled":222,"type":223}," 4択ミニテストの本番での学習履歴の記録を、実際に数問解いて確かめる",[18,244,245],{"id":245},"学びメモ",[51,247,248,251,254,257,260,263,266],{},[54,249,250],{},"rate limit で「途切れた」は「失われた」ではない。全8バッチは書き込み済みで、エラーは最終応答時に出ただけだった。落ちた直後は DB の実物を確認してから引き継ぎ内容を決める",[54,252,253],{},"レビュアーの suspect は原本照合してから直す。4件とも原本どおりで、直すべきはレビュアーの指示書の方だった。誤検知は指示書に1行足せば以降の全バッチに効く",[54,255,256],{},"モデルの週間制限は、経過ドキュメントと引き継ぎプロンプトを1枚書けば別モデル（Codex）にそのまま渡せる。都度 memo に経過を残す習慣が引き継ぎコストを数分に縮める",[54,258,259],{},"箇条書きが段落に溶ける類のレイアウト崩れは、データ側の形式ゆれ（行頭マーカーの有無）が原因のことがある。表示側ではなく HTML 生成側の分岐で吸収する",[54,261,262],{},"クイズ UI は「答え合わせボタンを押させる」より「選択肢を選ばせて即時判定」。操作が1タップ減るだけで、単語帳の付録が学習アプリとして成立する",[54,264,265],{},"テストのファイル単位 failed は、まず負荷起因のタイムアウトを疑って単独実行で切り分ける。2,720件パス・失敗0なら中身は壊れていない",[54,267,268],{},"朝イチの「積み残し何ですか」が機能するのは、前日の終わりと当日の朝に memo を残しているから。セッションもモデルも跨げる復元ポイントになる",{"title":270,"searchDepth":271,"depth":271,"links":272},"",2,[273,274,279,280,281,282,283,284,285,286],{"id":20,"depth":271,"text":21},{"id":42,"depth":271,"text":43,"children":275},[276,278],{"id":66,"depth":277,"text":67},3,{"id":91,"depth":277,"text":91},{"id":100,"depth":271,"text":101},{"id":120,"depth":271,"text":121},{"id":148,"depth":271,"text":149},{"id":161,"depth":271,"text":162},{"id":188,"depth":271,"text":188},{"id":197,"depth":271,"text":198},{"id":204,"depth":271,"text":204},{"id":245,"depth":271,"text":245},"dev",null,"英語語源学習アプリのPhase 4。D1マイグレーション0007の本番適用、英語コンテンツ全8バッチ生成中にFable 5がrate limitに到達してCodexへ引き継ぎ、章末コーナーのレイアウト修正、ミニテスト90問の4択化から本番公開までの記録。","md",{},"/gogen-eitango-phase4-d1-quiz-multichoice","eurekapu-nuxt4",false,"2026-07-16T00:00:00.000Z",{"title":5,"description":289},"2026-07/2026-07-16/gogen-eitango-phase4-d1-quiz-multichoice",[299,300,301,302,303,304],"gogen-eitango","d1","cloudflare","quiz","eurekapu","phase4","mK5NXyaDhuyhQCzOvHAT-J0u_sXBkWekjAfWDNU3EQ4",[],"https://log.eurekapu.com/og/blog/gogen-eitango-phase4-d1-quiz-multichoice.png?v=2026-07-16T00%3A00%3A00.000Z&title=gogen-eitango%20Phase%204%3A%20D1%E6%9C%AC%E7%95%AA%E9%81%A9%E7%94%A8%E3%81%A8%E7%AB%A0%E6%9C%AB%E3%83%9F%E3%83%8B%E3%83%86%E3%82%B9%E3%83%88%E3%81%AE4%E6%8A%9E%E5%8C%96%20%E2%80%94%20Fable%205%E3%81%AErate%20limit%E3%82%92Codex%E5%BC%95%E3%81%8D%E7%B6%99%E3%81%8E%E3%81%A7%E4%B9%97%E3%82%8A%E5%88%87%E3%81%A3%E3%81%9F%E6%97%A5&author=Kei%20Komatsu&sig=3a40ec93033ff1f7",1784259706307]