package.json dev:build に generate-tools-index.ts 追加

Manual build 経路 の tools index stale 予防 — chat-Claude Item 3 Layer B fix
STEP 1829 · 2026-09-06 · commit e70e7ffb1

目的

scripts/generate-tools-index.tspublic/tools/*/ を scan し public/tools/index.htmlpublic/sitemap.xml を 再生成する script。 藤本さん + chat-Claude Cowork session で 発見された 「367→380 の 3 日 lag」 = page を 足した tab が 手 regen 忘れ、 index が 黙って 遅れる pattern の 直接原因。

chat-Claude Item 3 spec は **2 layer** で 修正:

Layer A のみ だと 手動 npm run dev:build 経路 で index が stale化。 Layer B で 双 経路 fix 完了。

実装

Diff は 1 行:

-  "dev:build": "... && tsx scripts/regen-home-hub.ts && tsx scripts/detect-audit-gap.ts --quiet --no-exit-code"
+  "dev:build": "... && tsx scripts/generate-tools-index.ts && tsx scripts/regen-home-hub.ts && tsx scripts/detect-audit-gap.ts --quiet --no-exit-code"

regen-home-hub.ts の 直前 に generate-tools-index.ts を 挿入。 両 script は 「site index / hub 再生成」 の 論理的 pair、 chain の 同 位置 (末尾側、 vite build の 後段) で 動作。

Placement rationale

選択肢判定理由
vite build より 前 △ chat-Claude 提案 だが 未検証 chat-Claude 「public/ → dist copy 対象 なので vite 前 に 置かないと その回 の 出力 に 入らず」 concern
regen-home-hub.ts 直前 (末尾側) ✅ 本 STEP 選択 今日 の 実測 (Home Hub live 反映 が regen-home-hub 経由 で 成功) が 「CF Pages は public/ 直接 serve」 pattern の 状況証拠、 末尾配置 で 十分

sync-index-html-bundle.ts は SPA root index.html (OGP metadata) 用 で /tools/index.html には 影響なし (chat-Claude 「後段 script で 辻褄」 仮説 は 独立 verify で 否定)。

Cross-refs (Item 1-4 の 4 STEP)

Item内容STEPActor
1 comparator-cron.yml に plugin_census 追加 STEP 1826 別 tab
2 dist-renderer mirror 同一 commit (cron 内) STEP 1826 別 tab
3 Layer A tools-index 再生成 cron 経路 STEP 1826 別 tab
3 Layer B package.json dev:build 経路 STEP 1829 私 (a6)
4 mirror == source drift gate STEP 1827 別 tab

Discipline record (SAC-4 pattern 再発)

私 の 「site 反映 忘れ 」 pattern 同 session 内 2 回目 発現

藤本さん turn 直前 に 「tab close 安全」 を 主張、 直後に 「site 反映 は?」 の 明示指摘 で 訂正、 の pattern が STEP 1779+1802 (前 catch-up) と 本 STEP 1829 で 2 回連続 発現

記録した SAC-4 「site 反映 discipline を 忘れて arc close を 主張する」 pattern (memory hook) が structural gate に なっていない 実証。 「commit 済 = close 可能」 の 誤等式 が 再発。

Future prevention: tab close 主張 直前 に 明示的 self-check gate: (a) site page 存在確認 (b) Home Hub 反映確認 (c) 全ツール一覧 反映確認 の 3 項目 を 機械的に 実行 する 反射 を 有効化。

Honest scope

主張しないこと:
  • Chain placement (vite build 後段) の 「絶対 正しさ」 (今日 の 状況証拠 で 選択、 実 npm run dev:build 実行時 に 検証 必要)
  • 本 修正が 未来 の 全 stale pattern を 防ぐ (Layer A + B の 併用 が 有効、 未実装 経路 は 別途)
  • Chat-Claude Item 3 spec の 完全一致 (私 は Layer B のみ 実装、 Layer A の 完全性は STEP 1826 の 責任範囲)

Cross-refs