[{"data":1,"prerenderedAt":369},["ShallowReactive",2],{"content-/taiwan-export-orders-fallback-and-secret-scan-false-positive":3,"all-pages-for-dir":348,"related-/taiwan-export-orders-fallback-and-secret-scan-false-positive":349,"og-image-/taiwan-export-orders-fallback-and-secret-scan-false-positive":368},{"id":4,"title":5,"body":6,"category":326,"concepts":327,"description":328,"extension":329,"meta":330,"navigation":331,"ogImage":327,"path":332,"project_name":333,"published":334,"publishedAt":335,"seo":336,"source":337,"stem":338,"tags":339,"todo":327,"unpublished":334,"updatedAt":327,"__hash__":347},"pages/2026-10/2026-10-13/taiwan-export-orders-fallback-and-secret-scan-false-positive.md","台湾の外銷訂単CSVが止まったので経済部の新聞稿xlsxを予備経路にした（韓国品目別旬報の欠けとコミットゲートの誤検知も直す）",{"type":7,"value":8,"toc":315},"minimark",[9,13,28,31,48,53,60,67,71,74,77,80,83,91,94,97,109,113,116,119,122,125,128,131,134,138,145,155,158,161,164,177,180,188,194,197,200,207,213,216,219,295,298,312],[10,11,5],"h1",{"id":12},"台湾の外銷訂単csvが止まったので経済部の新聞稿xlsxを予備経路にした韓国品目別旬報の欠けとコミットゲートの誤検知も直す",[14,15,16,17,21,22,27],"p",{},"前日分（10月12日）の日記生成チェーンは、朝のうちに最後まで回り終えていた。\n統合日記と詳細記事をまとめたコミットは ",[18,19,20],"code",{},"e690f56a"," になっている（",[23,24,26],"a",{"href":25},"/2026-10-12-diary","10月12日の日記","）。\nそれでも、報告には片付いていない点が残っていた。",[14,29,30],{},"自分が頼んだことは三つある。",[32,33,34,42,45],"ul",{},[35,36,37,38,41],"li",{},"非公開にしたい記事を ",[18,39,40],{},"_local-unpublished"," へ移す",[35,43,44],{},"原因が分かっているなら、Codex のコミットレビューを通す",[35,46,47],{},"統計の2件は、よく分からないので正常な状態にしておく",[49,50,52],"h2",{"id":51},"非公開にしたい記事を-_local-unpublished-へ移した","非公開にしたい記事を _local-unpublished へ移した",[14,54,55,56,59],{},"ある記事を、サイトには出さずに置いておきたかった。\nただ、",[18,57,58],{},"content/"," の通常の場所に置いたままだと、公開ビルドの SQL ダンプに本文が残りかねない。\nダンプに残るなら、非公開にした意味がない。",[14,61,62,63,66],{},"そこで ",[18,64,65],{},"apps/web/content/_local-unpublished/"," へ移すように頼んだ。\nこの移動は、あとで統計の修正とは別のコミットにしてもらった。",[49,68,70],{"id":69},"台湾の外銷訂単は公開csvが7月分で止まっていた","台湾の外銷訂単は、公開CSVが7月分で止まっていた",[14,72,73],{},"台湾の輸出受注（外銷訂単）は、公開 CSV から取っている。\nその CSV は、何度取り直しても 8/20 版（7月分まで）しか返してこなかった。",[14,75,76],{},"まず、8月分を最初にどこから取ったのかを git の履歴で確かめてもらった。\nそのうえで、経済部の新聞稿のような別の公開経路を探させた。",[14,78,79],{},"経済部の新聞稿ページ（8月分）は取得できた。\n新聞稿には、全附表をまとめた xlsx が付いていた。\n貨品別の表（表2）には、電子產品と資訊通信の列がある。\nCSV が止まったときは、この xlsx から CSV より新しい月だけを補う形にした。",[14,81,82],{},"実装の途中で、取得の段で一度つまずいた。",[32,84,85,88],{},[35,86,87],{},"Node の fetch は、Cloudflare に 403 で弾かれた",[35,89,90],{},"curl なら通った（TLS の特徴で判定されているようだ）",[14,92,93],{},"そのため、予備経路の取得は curl で行う。",[14,95,96],{},"もう一つの落とし穴は、xlsx の見出しにあった。\n結合セルの見出しのせいで、年增率の列を金額と読むおそれがある。\nそこで、最初に現れた列を採るようにした。\nこの部分のテストを6件足してもらい、テストは15件とも通った。",[14,98,99,100,103,104,108],{},"実データで取得スクリプトを走らせると、改定0件、exit 0 で冪等になった。\n取得元の後退を知らせる警告も、出なくなっている。\n",[18,101,102],{},"taiwanExportOrders.ts"," は D1 から再生成し、値は変わらずヘッダーだけが変わった。\n経緯は issue（2026-10-02 の取得元の後退）に追記し、解決済みにした。\n最後に、",[23,105,107],{"href":106},"/memory-makers/taiwan-export-orders","外銷訂単のページ","が表示できることを確かめた。",[49,110,112],{"id":111},"韓国の品目別旬報はssdの行が空のまま入った","韓国の品目別旬報は、SSDの行が空のまま入った",[14,114,115],{},"韓国の品目別旬報は、X の投稿から取り込んでいる。\n10月上旬分の品目別の数値が、10/12 の投稿に出ていた。\n9月上旬分も、同じ投稿元から取っている。",[14,117,118],{},"数値を読み取って D1 に10件追加したところ、テストが1件落ちた。\n原因は、SSD の10月の行が day10 と day20 のどちらも null で入ったことだった。",[14,120,121],{},"この行を消したい。\nただ、D1 は追記型なので、まず削除の手段を確かめてもらった。\nそのうえで、値が null の SSD の2行だけを D1 から消した。",[14,123,124],{},"TS 側からも SSD の行を外し、D1 から生成し直した。\nTS の差分は意図した追記の13行だけで、D1 の中身と一致した。\n念のため手編集の検知を外して D1 から作り直し、同じ内容になることも確かめた。\nテストが通り、品目別旬報のチャートに10月が出ていることも画面で確認した。",[49,126,127],{"id":127},"単価の9月後半はどこへ行ったのか",[14,129,130],{},"報告を受けて、自分でも画面を見た。\nすると、単価のチャートで9月後半の分が抜けているように見えた。",[14,132,133],{},"スクリーンショットを貼って、何が原因かを尋ねた。\nこのセッションのログには、その答えが残っていない。",[49,135,137],{"id":136},"コミットゲートは記事urlのsk-をキーと見なしていた","コミットゲートは、記事URLの「sk-」をキーと見なしていた",[14,139,140,141,144],{},"朝のチェーンでは、日記のコミットのときにゲートが「OpenAI 形式のキー」の可能性を検出していた。\n調べると誤検知で、記事 URL の中の ",[18,142,143],{},"sk-"," に反応していた。",[146,147,153],"pre",{"className":148,"code":150,"language":151,"meta":152},[149],"language-text","/elon-musk-teach-the-problem-not-the-tool\n        ^^^ musk- の末尾が sk- に見えた\n","text","",[18,154,150],{"__ignoreMap":152},[14,156,157],{},"このゲートは、秘匿情報らしい文字列を見つけると Codex のレビュー自体を飛ばす。\nつまり誤検知のせいで、日記のコミットはゲートでの Codex レビューを受けずに通っていた。",[14,159,160],{},"原因が分かっているので、レビューを通してほしいと頼んだ。\nClaude Code にコミットの差分（110ファイル）を再現させた。\n次に、検知に当たる箇所が誤検知の1件だけかを洗い出させようとした。\nところが、ゲートの判定を迂回する形になるため、この経路は権限で拒否された。\n作業はそこで止まり、判断が自分に返ってきた。",[14,162,163],{},"返事は「検知パターンを修正しましょう」にした。\n迂回するのではなく、検知する側を直す。",[14,165,166,167,169,170,173,174,176],{},"検知パターンに後読み（lookbehind）の条件を足してもらった。\n",[18,168,143],{}," の直前を見る条件で、",[18,171,172],{},"musk-"," のように単語の途中に現れた ",[18,175,143],{}," を拾わないようにした。",[14,178,179],{},"直したあとは、二つの向きで確かめた。",[32,181,182,185],{},[35,183,184],{},"誤検知は消えた",[35,186,187],{},"本物のキーの形をした文字列は、今までどおり検知される",[14,189,190,191,193],{},"再現したコミット ",[18,192,20],{}," に、ゲートそのものをかけ直した。\n今回は誤検知に邪魔されず、Codex のレビューが最後まで走った。",[49,195,196],{"id":196},"コミットとプッシュ",[14,198,199],{},"作業が終わったかを確かめると、頼んだ分は済んでいたが、どれもまだコミットしていなかった。\nそこで、コミットとプッシュを頼んだ。",[14,201,202,203,206],{},"mdx-playground は2コミットに分けた。\n先に統計の修正（",[18,204,205],{},"daf74b2c","）、次に記事の移動である。\nCodex の指摘は、どちらのコミットにも出なかった。",[14,208,209,212],{},[18,210,211],{},"~/.claude"," のリポジトリでは、先に入ってきていた1コミットを pull してから、コミットしてプッシュした。\nこのコミットで、Codex が検知パターンの「大文字と数字を含む」という条件を指摘してきた。\n誤検知を止めるには後読みの条件だけで足りるので、この条件は外してもらった。",[14,214,215],{},"最後に、両方のリポジトリが origin と一致していることを確かめた。",[49,217,218],{"id":218},"試行錯誤のまとめ",[220,221,222,235],"table",{},[223,224,225],"thead",{},[226,227,228,232],"tr",{},[229,230,231],"th",{},"試したこと",[229,233,234],{},"結果",[236,237,238,247,255,263,271,279,287],"tbody",{},[226,239,240,244],{},[241,242,243],"td",{},"外銷訂単の公開 CSV を取り直す",[241,245,246],{},"何度取っても 8/20 版（7月分まで）",[226,248,249,252],{},[241,250,251],{},"新聞稿の附表 xlsx を Node の fetch で取る",[241,253,254],{},"Cloudflare に 403 で弾かれた",[226,256,257,260],{},[241,258,259],{},"同じ xlsx を curl で取る",[241,261,262],{},"通った。予備経路は curl にした",[226,264,265,268],{},[241,266,267],{},"旬報10月上旬を D1 に10件追加",[241,269,270],{},"SSD の2行が null で入り、テストが1件落ちた",[226,272,273,276],{},[241,274,275],{},"null の SSD 2行を D1 から消し、TS を再生成",[241,277,278],{},"差分は追記13行だけ。テストが通った",[226,280,281,284],{},[241,282,283],{},"差分を再現し、誤検知の箇所を洗い出す",[241,285,286],{},"ゲートの迂回にあたるとして権限で拒否された",[226,288,289,292],{},[241,290,291],{},"検知パターンに後読みの条件を足す",[241,293,294],{},"誤検知が消え、本物のキーの形は引き続き検知された",[49,296,297],{"id":297},"学びメモ",[32,299,300,303,306,309],{},[35,301,302],{},"公開 CSV が止まっても、同じ統計の新聞稿に付く附表が予備の取得元になる。xlsx は結合セルの見出しで列を取り違えやすい",[35,304,305],{},"Node の fetch が 403 で弾かれても、curl は通ることがある",[35,307,308],{},"誤検知を迂回しようとすると、権限で止まる。検知パターンを直し、本物のキーの形が引き続き捕まることまで確かめると、ゲートを残したまま通せる",[35,310,311],{},"追記型の D1 に null の行が入ったら、消す手段を確かめてから該当行だけを消し、TS は D1 から生成し直す",[14,313,314],{},"画面を見て気づいた単価の9月後半の抜けだけは、理由をまだこの記録に書けていない。",{"title":152,"searchDepth":316,"depth":316,"links":317},2,[318,319,320,321,322,323,324,325],{"id":51,"depth":316,"text":52},{"id":69,"depth":316,"text":70},{"id":111,"depth":316,"text":112},{"id":127,"depth":316,"text":127},{"id":136,"depth":316,"text":137},{"id":196,"depth":316,"text":196},{"id":218,"depth":316,"text":218},{"id":297,"depth":316,"text":297},"dev",null,"毎朝の統計チェーンに空いた穴を塞いだ記録。更新が止まった台湾の外銷訂単は経済部の新聞稿に付く附表xlsxを予備経路にし、韓国の品目別旬報は10月上旬を取り込んだ。あわせて、記事URLの「sk-」に反応してCodexのコミットレビューを飛ばしていた秘匿情報の検知パターンを後読みの条件で直した。","md",{},true,"/taiwan-export-orders-fallback-and-secret-scan-false-positive","mdx-playground",false,"2026-10-13T00:00:00.000Z",{"title":5,"description":328},"make-diary","2026-10/2026-10-13/taiwan-export-orders-fallback-and-secret-scan-false-positive",[340,341,342,343,344,345,346],"統計データ","台湾","韓国","外銷訂単","Codex","コミットゲート","Claude Code","cNmNeketzeFw47l9vP5GdxXfgm912KKoKPUMfVL15gU",[],[350,354,357,361,365],{"title":351,"path":352,"publishedAt":353},"囲碁のルールをストーリー版講座にした1日：日本囲碁規約で裏取りした計画書から13講の公開設定、Codexレビューゲートの差分上限の見直しまで","/igo-rules-story-lesson-and-review-gate","2026-10-15T00:00:00.000Z",{"title":355,"path":356,"publishedAt":335},"2026年10月13日の開発日記 - 父のPCの退避をセッション分担で進め、USBのビット化けをSHA256で見抜いた","/2026-10-13-diary",{"title":358,"path":359,"publishedAt":360},"月次統計のSSOTをGitのTSファイルからCloudflare D1へ移す：Turso推奨を過去の検討資料で改めた日","/stats-ssot-to-cloudflare-d1","2026-10-05T00:00:00.000Z",{"title":362,"path":363,"publishedAt":364},"講座のストーリー版を電子書籍版の章立てに組み直す。本文の食い違いは電子書籍に合わせ、音声合成はMacだけに","/story-course-ebook-chapters-realign","2026-10-19T00:00:00.000Z",{"title":366,"path":367,"publishedAt":364},"税効果会計講座の段6、Excel操作動画をMP4で書き出していた経緯を調べて計画書を直し、回帰テストを必要な範囲に絞った","/tax-effect-course-mp4-cleanup-scoped-regression","https://log.eurekapu.com/og/blog/taiwan-export-orders-fallback-and-secret-scan-false-positive.png?v=2026-10-13T00%3A00%3A00.000Z&title=%E5%8F%B0%E6%B9%BE%E3%81%AE%E5%A4%96%E9%8A%B7%E8%A8%82%E5%8D%98CSV%E3%81%8C%E6%AD%A2%E3%81%BE%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A7%E7%B5%8C%E6%B8%88%E9%83%A8%E3%81%AE%E6%96%B0%E8%81%9E%E7%A8%BFxlsx%E3%82%92%E4%BA%88%E5%82%99%E7%B5%8C%E8%B7%AF%E3%81%AB%E3%81%97%E3%81%9F%EF%BC%88%E9%9F%93%E5%9B%BD%E5%93%81%E7%9B%AE%E5%88%A5%E6%97%AC%E5%A0%B1%E3%81%AE%E6%AC%A0%E3%81%91%E3%81%A8%E3%82%B3%E3%83%9F%E3%83%83%E3%83%88%E3%82%B2%E3%83%BC%E3%83%88%E3%81%AE%E8%AA%A4%E6%A4%9C%E7%9F%A5%E3%82%82%E7%9B%B4%E3%81%99%EF%BC%89&author=Kei%20Komatsu&sig=59a774b3af873f43",1792550155586]