[{"data":1,"prerenderedAt":464},["ShallowReactive",2],{"content-/earnings-dynamics-sector-split-and-fye-fix":3,"all-pages-for-dir":442,"related-/earnings-dynamics-sector-split-and-fye-fix":443,"og-image-/earnings-dynamics-sector-split-and-fye-fix":463},{"id":4,"title":5,"body":6,"category":424,"concepts":425,"description":426,"extension":427,"meta":428,"navigation":429,"ogImage":425,"path":430,"project_name":431,"published":432,"publishedAt":433,"seo":434,"stem":435,"tags":436,"todo":425,"unpublished":432,"updatedAt":425,"__hash__":441},"pages/2026-07/2026-07-29/earnings-dynamics-sector-split-and-fye-fix.md","決算ビートモニタリングでメモリとHDDのセクターを分離 — SNDKの会計年度末月の登録ミスが出てきた",{"type":7,"value":8,"toc":412},"minimark",[9,13,16,21,24,27,37,40,44,59,67,74,77,80,83,90,93,101,104,251,254,258,261,264,267,270,274,277,280,299,306,309,313,316,319,327,330,334,337,340,344,347,358,362,365,385,388,391,408],[10,11,12],"p",{},"朝、決算ビートモニタリングのページを開いたまま、STX（Seagate）の行を数秒見ていた。「半導体（メモリ/ストレージ）」の棚に入っている。Seagateはメモリの会社だっただろうか。ついでに、気になっていた「ここは中国の影響を受けない」という説明も、自分で裏を取っていない。まず質問から投げた。",[10,14,15],{},"予想が当たったのは半分だった。",[17,18,20],"h2",{"id":19},"メモリではなくhdd中国リスクは向きが違う","メモリではなくHDD、中国リスクは向きが違う",[10,22,23],{},"SeagateはDRAM/NANDを作っていない。回転する磁気ディスクの上にヘッドを数ナノメートルで浮かせて読み書きする、HDDのメーカーである。半導体メモリとは技術の系統が別物だった。",[10,25,26],{},"「中国の影響を受けない」のほうは、供給側と規制側で答えが分かれた。",[28,29,30,34],"ul",{},[31,32,33],"li",{},"供給側: CXMT/YMTCのような中国勢の増産による価格破壊は、HDDには効きにくい。ヘッドとメディアを作れるのが3社しかなく、装置を買い揃えて参入できる産業ではない。世界出荷の95%超をSeagate・WD・東芝で分けている",[31,35,36],{},"規制側: こちらはむしろ直撃する。2023年、Seagateは対中輸出規制（FDPR）に違反してHuaweiへHDDを出荷し、BISから3億ドルの制裁金を食らっている",[10,38,39],{},"同じ「中国」でひとくくりにできる話ではなかった。棚を分ける理由としても十分だったので、その場で分類の修正を頼んだ。",[17,41,43],{"id":42},"棚を2つに割ってmuを移す","棚を2つに割って、MUを移す",[10,45,46,50,51,54,55,58],{},[47,48,49],"code",{},"半導体（メモリ/ストレージ）"," を ",[47,52,53],{},"半導体（メモリ）"," と ",[47,56,57],{},"ストレージ（HDD）"," に分けた。",[28,60,61,64],{},[31,62,63],{},"半導体（メモリ）: MU / SNDK / Samsung / SK hynix / キオクシア",[31,65,66],{},"ストレージ（HDD）: STX / WDC",[10,68,69,70,73],{},"あわせてMUをメモリ側へ移した。HBMでAI需要を取り込んでいるのでこれまで ",[47,71,72],{},"半導体（AI/GPU）"," に置いていたが、作っているものはDRAM/NANDである。トップの主力行は固定リストで並ぶので、この移動で表示位置は動かない。",[10,75,76],{},"なぜHDDを分けたのかは、半年後の自分が同じ疑問を持つだろうから、tickerMeta.tsのコメントに理由まで書き残させた。分類の判断は、分類そのものより忘れやすい。",[10,78,79],{},"テストは7件pass。devで開いて、グループ見出しが「半導体・ストレージ・光部材」に変わり、2つの棚がそれぞれ並んでいるのを確認した。",[17,81,82],{"id":82},"動かないスライダー",[10,84,85,86,89],{},"分類を触るついでに、もうひとつ気になっていた挙動を調べさせた。",[47,87,88],{},"/earnings-dynamics/STX"," のスライダーを動かしても、バーが何も変わらない。",[10,91,92],{},"データ取得が止まっているのだろう、と思っていた。違った。値は取れていて、スクリプトも動いている。STXは前日に決算を発表したばかりで、次Qのwindowが始まった直後だったため、区間の中に価格改定が1点しか存在しなかった。1点しかなければ、どの目盛に動かしても同じ点が返る。",[10,94,95,96,100],{},"つまりSTX固有の事故ではなく、",[97,98,99],"strong",{},"どの銘柄でも決算発表の翌日には必ず起きる","。フロントのバグを探しても何も見つからないはずだった。",[10,102,103],{},"修正の方針は、スナップショットが1点しかないfocus四半期を候補から外すこと。「動かせるのに何も変わらないスライダー」を出さない。",[105,106,111],"pre",{"className":107,"code":108,"language":109,"meta":110,"style":110},"language-ts shiki shiki-themes vitesse-light vitesse-light","const withData = candidates.filter((f) => countSnapshotDates(series, f) >= 1)\nconst playable = withData.filter((f) => hasPlayableSnapshots(series, f))\nreturn playable.length > 0 ? playable : withData\n","ts","",[47,112,113,179,218],{"__ignoreMap":110},[114,115,118,122,126,130,133,136,140,143,146,149,152,155,158,161,164,167,169,172,176],"span",{"class":116,"line":117},"line",1,[114,119,121],{"class":120},"stQ0i","const ",[114,123,125],{"class":124},"s4oTP","withData",[114,127,129],{"class":128},"shFtX"," =",[114,131,132],{"class":124}," candidates",[114,134,135],{"class":128},".",[114,137,139],{"class":138},"senZ8","filter",[114,141,142],{"class":128},"((",[114,144,145],{"class":124},"f",[114,147,148],{"class":128},")",[114,150,151],{"class":128}," =>",[114,153,154],{"class":138}," countSnapshotDates",[114,156,157],{"class":128},"(",[114,159,160],{"class":124},"series",[114,162,163],{"class":128},",",[114,165,166],{"class":124}," f",[114,168,148],{"class":128},[114,170,171],{"class":128}," >=",[114,173,175],{"class":174},"sM54T"," 1",[114,177,178],{"class":128},")\n",[114,180,182,184,187,189,192,194,196,198,200,202,204,207,209,211,213,215],{"class":116,"line":181},2,[114,183,121],{"class":120},[114,185,186],{"class":124},"playable",[114,188,129],{"class":128},[114,190,191],{"class":124}," withData",[114,193,135],{"class":128},[114,195,139],{"class":138},[114,197,142],{"class":128},[114,199,145],{"class":124},[114,201,148],{"class":128},[114,203,151],{"class":128},[114,205,206],{"class":138}," hasPlayableSnapshots",[114,208,157],{"class":128},[114,210,160],{"class":124},[114,212,163],{"class":128},[114,214,166],{"class":124},[114,216,217],{"class":128},"))\n",[114,219,221,225,228,230,234,237,240,243,245,248],{"class":116,"line":220},3,[114,222,224],{"class":223},"sHkkW","return",[114,226,227],{"class":124}," playable",[114,229,135],{"class":128},[114,231,233],{"class":232},"sz8Xr","length",[114,235,236],{"class":128}," >",[114,238,239],{"class":174}," 0",[114,241,242],{"class":120}," ?",[114,244,227],{"class":124},[114,246,247],{"class":120}," :",[114,249,250],{"class":124}," withData\n",[10,252,253],{},"3行目のフォールバックは、最初の実装には入っていなかった。",[17,255,257],{"id":256},"_57銘柄が0件と出た","57銘柄が0件と出た",[10,259,260],{},"修正を当てたあと、全銘柄への影響を測らせた。「実績済」タブが0件になる銘柄が57本、と返ってきた。",[10,262,263],{},"分類を分けただけで57本が壊れるとは思えない。計測の当て方の問題と、本当の回帰が混ざっているはずだった。切り分けさせたところ、実際にスライダーが丸ごと消えるのは8本（285A/AMKR/ASML/COF/JPM/NOC/PGR/SYF）だった。取り込みを始めたばかりで、どの四半期も1点しか持っていない銘柄である。",[10,265,266],{},"候補が空になると選択UIごとページから消える。それでフォールバックを足した。全部が1点しか持たない銘柄では、従来どおり1件以上で通す。少なくとも今まで見えていたものは見せる。",[10,268,269],{},"全74銘柄で突き合わせて、消える銘柄がゼロになったことを確認した。テストは97件pass。",[17,271,273],{"id":272},"focus-0件の3銘柄は原因が別々だった","focus 0件の3銘柄は、原因が別々だった",[10,275,276],{},"手元に残していた宿題がひとつある。focus四半期の候補が0件になる銘柄が3つ（SNDK / FDXF / TER）。このうちSNDKは主力3銘柄の固定行に入っているので、個別ページが機能していないのは惜しい。ここだけ原因を見てもらった。",[10,278,279],{},"調べさせたら、3銘柄で原因が違った。共通の欠陥を1つ直せば3つ直る、という期待は外れた。",[10,281,282,283,286,287,290,291,294,295,298],{},"SNDKの原因は、Turso側の登録値だった。",[47,284,285],{},"tickers.fiscal_year_end_month"," が ",[97,288,289],{},"12"," で入っている。WDCとSTXは正しく ",[97,292,293],{},"6","。SanDiskはWestern Digitalから分社した6月期末の会社で、12は明確な誤りだった。しかも同じDBの ",[47,296,297],{},"eac_periods"," には FY2025 Q4 end = 2025-06-30 と6月期末で入っている。DBの中で自己矛盾していた。",[10,300,301,302,305],{},"効き方はこうだった。SNDKは ",[47,303,304],{},"report_date"," が全期nullなので、生成スクリプトは会計年度末月から発表日を推定する。12のままだと推定日が半年ずれ、focus windowが 2026-10-29〜2027-01-28 という未来にずれる。実在するスナップショットは 2026-05-19〜07-29 なので、窓の中に1件も入らない。スライダーが機能しないのは当然だった。",[10,307,308],{},"画面の症状はフロント側に見えていたのに、原因はDBの1カラムにあった。",[17,310,312],{"id":311},"承認の壁は自分の手で越えるしかなかった","承認の壁は、自分の手で越えるしかなかった",[10,314,315],{},"訂正スクリプトができたところで、本番DBへの書き込みが止まった。自動承認の分類器がブロックしていて、チャットで「どうぞ」と返しても解除されない層だという。",[10,317,318],{},"それならコマンドを出してもらえばいい。貼って、自分の手で実行した。",[105,320,325],{"className":321,"code":323,"language":324},[322],"language-text","BEFORE: {\"ticker\":\"SNDK\",\"fiscal_year_end_month\":12}\nAFTER:  {\"ticker\":\"SNDK\",\"fiscal_year_end_month\":6}\n","text",[47,326,323],{"__ignoreMap":110},[10,328,329],{},"不可逆な書き込みの前で一度人間の手を通す作りは、こういうときに納得できる。原因が確定していて、値が1つで、BEFORE/AFTERが目の前に出るなら、貼るのに迷いはない。",[17,331,333],{"id":332},"再生成してstxの手作業を戻す","再生成して、STXの手作業を戻す",[10,335,336],{},"訂正後、全74銘柄を再生成させた。SNDKのFY26 4Qはwindowが 2026-04-29〜07-28 に収まり、スナップショットが60件入った。devで開くとスライダーが動き、実績6.0・予想8.4・ガイダンス8.0が正しい位置に立っている。",[10,338,339],{},"STX側には後片付けがあった。FY26 4Qの実績値はKoyfinがまだ実績化していないので、手順書どおり手で書き足してある行だった。再生成すると消える。復元したあと、差分が生成時刻の2行だけになっていることを確認して、復元が正確だったと判断した。",[17,341,343],{"id":342},"待てばいいものは待つ","待てばいいものは、待つ",[10,345,346],{},"STXの4Qについては、Koyfinが実績化するのを待てばいい、という整理にした。今すぐ直す種類の問題ではない。",[10,348,349,350,353,354,357],{},"ただし待っている間の副作用が1つある。",[47,351,352],{},"/make-diary"," を回すと ",[47,355,356],{},"generate:earnings-dynamics"," が走るので、Koyfinが実績化していない状態だと手で足した2行が上書きで消える。データが壊れるわけではなく、実績化されれば次の生成で自動的に戻る。チャートで4Qの黒いバーが消えていたら「まだ待ちの状態だな」と読めばいい。",[17,359,361],{"id":360},"コミットは3本学習ゲートはスキップ","コミットは3本、学習ゲートはスキップ",[10,363,364],{},"パス指定でステージして、3本に分けてコミットした。",[28,366,367,373,379],{},[31,368,369,372],{},[47,370,371],{},"d10233aa"," メモリとHDDのセクターを分離しMUをメモリへ移動",[31,374,375,378],{},[47,376,377],{},"30e438c4"," スナップショット1点のfocus四半期を候補から外す",[31,380,381,384],{},[47,382,383],{},"45f2c1c2"," SNDKの会計年度末月訂正を反映してデータ再生成",[10,386,387],{},"学習ゲートは出たが、クイズを出すMCPツールが見つからなかった。サーバー側を追いかけると本題から離れるので、今日はスキップして通した。",[17,389,390],{"id":390},"残したメモ",[28,392,393,396,402,405],{},[31,394,395],{},"FDXF と TER の focus 0件は、SNDKとは別の原因のまま置いてある。SNDKの1カラムのような単純な話とは限らない",[31,397,398,399,401],{},"Turso側のマスタ値は、同じDBの別テーブル（",[47,400,297],{}," の期末日）と突き合わせれば矛盾を機械的に検出できる。SNDKは2つのテーブルが半年ずれて共存していた",[31,403,404],{},"「決算翌日はスナップショットが1点」は毎四半期どこかで踏む。銘柄固有の症状に見えるものを、まずカレンダー由来で疑う癖をつけたい",[31,406,407],{},"分類を分けた理由はコード内コメントに残した。分類は変えた瞬間より、あとから理由を思い出せないほうが困る",[409,410,411],"style",{},"html pre.shiki code .stQ0i, html code.shiki .stQ0i{--shiki-default:#AB5959;--shiki-dark:#AB5959}html pre.shiki code .s4oTP, html code.shiki .s4oTP{--shiki-default:#B07D48;--shiki-dark:#B07D48}html pre.shiki code .shFtX, html code.shiki .shFtX{--shiki-default:#999999;--shiki-dark:#999999}html pre.shiki code .senZ8, html code.shiki .senZ8{--shiki-default:#59873A;--shiki-dark:#59873A}html pre.shiki code .sM54T, html code.shiki .sM54T{--shiki-default:#2F798A;--shiki-dark:#2F798A}html pre.shiki code .sHkkW, html code.shiki .sHkkW{--shiki-default:#1E754F;--shiki-dark:#1E754F}html pre.shiki code .sz8Xr, html code.shiki .sz8Xr{--shiki-default:#998418;--shiki-dark:#998418}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":110,"searchDepth":181,"depth":181,"links":413},[414,415,416,417,418,419,420,421,422,423],{"id":19,"depth":181,"text":20},{"id":42,"depth":181,"text":43},{"id":82,"depth":181,"text":82},{"id":256,"depth":181,"text":257},{"id":272,"depth":181,"text":273},{"id":311,"depth":181,"text":312},{"id":332,"depth":181,"text":333},{"id":342,"depth":181,"text":343},{"id":360,"depth":181,"text":361},{"id":390,"depth":181,"text":390},"dev",null,"STXがメモリの棚に並んでいる違和感からセクター分類を分け直し、そのままスライダーが動かない銘柄を追ったら、TursoのSNDKの会計年度末月が12で登録されていた。訂正して全74銘柄を再生成するまでの記録","md",{},true,"/earnings-dynamics-sector-split-and-fye-fix","beat-monitoring",false,"2026-07-29T00:00:00.000Z",{"title":5,"description":426},"2026-07/2026-07-29/earnings-dynamics-sector-split-and-fye-fix",[431,437,438,439,440],"earnings-dynamics","Turso","データ品質","開発日記","RTgnyudw11fTA6rsZLf72wezwgAgQcPq3y9YXSBM9As",[],[444,448,452,456,459],{"title":445,"path":446,"publishedAt":447},"Micron Q4 FY26 ガイダンスチャートの1Qズレ修正と earnings-dynamics の Focus Quarter ボタン復活","/micron-q4-guidance-chart-fix-and-focus-button","2026-06-26T00:00:00.000Z",{"title":449,"path":450,"publishedAt":451},"決算ビートモニタリングにAMKR（Amkor Technology）を追加 — ガイダンス売上の棒が下を向いた理由を確かめるまで","/beat-monitoring-amkr-addition","2026-07-28T00:00:00.000Z",{"title":453,"path":454,"publishedAt":455},"決算ビートモニタリングにAEHR・ASMLを追加 — /add-tickerを1日2本回して、ASMLのPER拡大に気づくまで","/beat-monitoring-add-aehr-asml","2026-07-15T00:00:00.000Z",{"title":457,"path":458,"publishedAt":447},"2026年6月26日の開発日記 - Micron Q4ガイダンス修正・beat-monitoring ハイパースケーラー枠・税務系実務書の一括 OCR & restructure","/2026-06-26-diary",{"title":460,"path":461,"publishedAt":462},"Micron Q3 FY26 決算をbeat-monitoringとearnings-dynamicsに手作業で反映した記録","/micron-q3-fy26-beat-monitoring-coverage","2026-06-25T00:00:00.000Z","https://log.eurekapu.com/og/blog/earnings-dynamics-sector-split-and-fye-fix.png?v=2026-07-29T00%3A00%3A00.000Z&title=%E6%B1%BA%E7%AE%97%E3%83%93%E3%83%BC%E3%83%88%E3%83%A2%E3%83%8B%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0%E3%81%A7%E3%83%A1%E3%83%A2%E3%83%AA%E3%81%A8HDD%E3%81%AE%E3%82%BB%E3%82%AF%E3%82%BF%E3%83%BC%E3%82%92%E5%88%86%E9%9B%A2%20%E2%80%94%20SNDK%E3%81%AE%E4%BC%9A%E8%A8%88%E5%B9%B4%E5%BA%A6%E6%9C%AB%E6%9C%88%E3%81%AE%E7%99%BB%E9%8C%B2%E3%83%9F%E3%82%B9%E3%81%8C%E5%87%BA%E3%81%A6%E3%81%8D%E3%81%9F&author=Kei%20Komatsu&sig=76b1ee6e9e44a9d3",1785379976362]