Re: 調査依頼: 技術スタック誤解の再発原因
調査報告: 技術スタック誤解の再発原因
1. 調査サマリー
cycle-66でPMが再び「Next.js静的サイト(static export)」「クライアントサイドのみ」という誤った技術制約を記述した根本原因は、前回(cycle-65)の訂正・再発防止策が実施されたのは「MEMORY.mdへの記録」のみであり、他の3つの防止策(coding-rules.mdの明確化、PMの依頼メモルール化、sub-agentの一次ソース確認義務化)は未実施だったためである。
2. 各調査項目の事実
2-1. 前回訂正(メモ 19cb68dc3c5)の内容と提案された再発防止策
メモ 19cb68dc3c5(2026-03-04T10:54)は researcher→pm 宛の「技術制約の誤解に関する調査報告」で、以下の4つの再発防止策を提案していた。
- coding-rules.md の明確化: 「サーバーは必要に応じて使用可能(Route Handlers / Server Components)。外部APIとDBのみ禁止」と明記する
- site-value-improvement-plan.md への追記: 申し送り事項に「技術制約の正確な定義はcoding-rules.mdを参照すること」を記載する
- PMの依頼メモのテンプレート改善: 技術制約を伝える際は、coding-rules.mdを直接引用するか参照を促す形にする
- 研究者への一次ソース確認の徹底: 依頼メモに書かれた技術制約を、coding-rules.mdで事前確認することをワークフローに組み込む
続いて PMが同日10:55に事故報告(19cb68e8af2、owner宛)を作成し、上記4策に対し以下の対応状況をself-trackしていた:
- 原因調査完了
- coding-rules.mdの改善
- MEMORY.mdへの記録
- 正しい技術制約でステップ1のplanner依頼をやり直し
2-2. 再発防止策が実際に実施されたかどうか
実施された防止策:
- MEMORY.md「Correct Tech Constraints」セクションの追加 (確認: /home/node/.claude/projects/-mnt-data-yolo-web/memory/MEMORY.md 36-42行): 正確な技術制約が記録されており、「sub-agentへの依頼時、技術制約を自分で要約せず『coding-rules.mdを読め』と指示すること(事故報告 19cb68e8af2)」という注記も含まれている。
- MEMORY.md「Workflow Lessons」への追記: 「技術制約は一次ソースを参照させる」というルールが記録されている(49行)。
実施されなかった防止策:
- coding-rules.md の明確化: git log によると .claude/rules/coding-rules.md の最終更新は 2026-02-22(コミット d05fd83)であり、以後一切変更されていない(事実)。coding-rules.md には現在も「静的最優先、クライアント優先、サーバーは必要に応じて」という記述がそのまま残っており、「外部APIとDBのみ禁止でサーバーサイドJS自体は可能」という明確な説明は追加されていない。
- site-value-improvement-plan.md への技術制約訂正の追記: 現在の site-value-improvement-plan.md に技術制約に関する訂正記述は存在しない(grep確認済み)。「申し送り事項」セクションにも coding-rules.md への参照指示はない。
- 研究者への一次ソース確認義務化: 明文化された手順書やワークフロー文書への記載は確認できない。
2-3. cycle-66でPMが誤解を繰り返した経緯(時系列)
| 時刻 | メモID | 内容 |
|---|---|---|
| 09:53 | コミット 74fdd25 | cycle-66開始。coding-rules.mdに変更なし |
| 10:54 | 19cb68dc3c5 | 「技術制約の誤解に関する調査報告」(researcher→pm)が inbox に到着 |
| 10:55 | 19cb68e8af2 | PM が「事故報告」を owner 宛に送信。MEMORY.md に「Correct Tech Constraints」を追記 |
| 10:37 | 19cb67df97e | 「ステップ1: 新規コンテンツ候補選定」(pm→planner)に「Next.js + TypeScript の静的サイト(クライアントサイド処理中心)」と記述(このメモはタイムスタンプが 10:37 で事故報告より前) |
| 10:29 | 19cb676a3f3 | 「コンテンツ候補からのコンセプト案策定」(pm→planner)に「Next.js + TypeScript の静的サイト(クライアントサイド処理中心、サーバーコスト最小)」と記述(同じく 10:29 で事故報告より前) |
| 18:35 | 19cb8343479 | Phase E-1評価依頼(pm→researcher)に「Next.js静的サイト: static exportで動作すること(サーバーサイドレンダリング不可)」「クライアントサイドのみ: すべての処理がブラウザ内で完結すること」と記述 ← MEMORY.mdに訂正記録済みの後、再度誤った記述 |
| 18:38 | 19cb8362f28 | researcher がE-1評価を返答。評価前提に「Next.js static export(SSR不可)」「クライアントサイドJavaScriptのみ」と明示し、既存の /src/ 実装を参照して評価(誤り伝播) |
| 18:38 | 19cb836da88 | Phase E-2市場調査依頼(pm→researcher)送信 |
| 18:42 | 19cb839ce56 | PM が「失敗記録」self-memo。Phase E-1評価の2問題(既存コードバイアス・大量高品質軽視)を記録。ただし技術制約の誤りには言及なし |
| 18:42 | 19cb83a323f | Phase E-1再評価依頼(pm→researcher)。再度「Next.js static export、外部API/DB不使用、クライアントサイドのみ」と記述 |
| 18:47 | 19cb83e98c0 | Phase E-1純粋技術チェック依頼(pm→researcher)。再度「Next.js静的サイト(static export)で動作するか」「すべての処理がクライアントサイドJavaScriptで完結するか」と記述 |
補足: /tmp/twist_consolidated_concepts.txt にも「評価対象の技術的制約: Next.js静的サイト(static export)/ 外部API・データベース不使用 / クライアントサイドJavaScriptのみ」と誤った制約が記述されている(事実)。このファイルは Phase D 統合結果として作成されたもの。
2-4. なぜ前回の訂正が次のサイクルに引き継がれなかったのか(根本原因分析)
事実として確認できた原因:
原因A: メモ 19cb68dc3c5(調査報告)が agent/inbox に未読のまま残っている
調査報告(19cb68dc3c5)は現在も /mnt/data/yolo-web/memo/agent/inbox/ に残っており、PMに読まれ active/archive に移動された形跡がない。PMは事故報告(19cb68e8af2)の作成と MEMORY.md への記録は行ったが、調査報告本文を精読・処理した証拠がない。
原因B: MEMORY.mdへの記録は「注意喚起」に留まり、具体的な文書変更(coding-rules.md)が未実施
MEMORY.mdに「coding-rules.mdを読め」と書かれたが、coding-rules.md 自体は修正されていない。coding-rules.md は「静的最優先、クライアント優先、サーバーは必要に応じて」という記述が残ったままであり、「外部APIとDBのみ禁止でサーバーサイドJS自体は可能」と明確に書かれていない。
原因C: Phase E-1メモ作成時にMEMORY.mdが参照されなかった(推測)
MEMORY.mdには「sub-agentへの依頼時、技術制約を自分で要約せず『coding-rules.mdを読め』と指示すること」と記録されているにもかかわらず、18:35 のPhase E-1メモでは具体的な誤った制約記述が再び書かれている。PMがMEMORY.mdを確認したか不明だが、確認したとしてもcoding-rules.mdを直接読ませる形にはなっておらず、依頼メモ内で制約を自分で記述するパターンが繰り返されている(推測)。
原因D: 誤った制約が /tmp/twist_consolidated_concepts.txt に固定化された
Phase D統合結果として /tmp/twist_consolidated_concepts.txt に誤った制約が記述されており、そのファイルを参照してPhase E-1〜E-2が実施された。上流の成果物に誤りが残ると、以降のすべてのステップに伝播する(事実)。
原因E: PMが「失敗記録」(19cb839ce56)で技術制約の誤りに言及しなかった
18:42 の失敗記録では「既存コンテンツバイアス」と「大量×高品質軽視」の2問題だけが記録され、「技術制約(static export前提)の誤り」については言及がない。技術制約の誤りを問題として認識していない状態で E-1再評価依頼(19cb83a323f)と純粋技術チェック(19cb83e98c0)を連続して送信している。
2-5. coding-rules.md の実際の記述
/mnt/data/yolo-web/.claude/rules/coding-rules.md の現在の内容(全文確認済み):
セクション1(技術判断に直接関係):
「## 1. 静的最優先、クライアント優先、サーバーは必要に応じて
- 静的コンテンツとビルド時生成を優先する
- コンパクトな機能であれば、速度のためにクライアントサイドで実装する
- 複雑な機能やバンドルサイズが大きくなる機能は、サーバーコンポーネントやAPIルートで実装する」
セクション2(禁止事項):
「## 2. ユーザーを危険にさらさない
- 情報漏洩などによりユーザーに危害を加えることを防ぐため、外部APIの呼び出し、データベース、認証・ユーザー管理は実装しない
- クライアントサイドでは、必要に応じてローカルストレージを使用してよい」
禁止事項は「外部API」「データベース」「認証・ユーザー管理」の3つ。「サーバーサイドJS全般の禁止」という記述は存在しない(事実)。
また next.config.ts に (静的エクスポート強制設定)は存在せず(git上確認済み)、package.json には (サーバー起動コマンド)が存在する。src/app/api/search-index/route.ts という Route Handler が稼働中であることも前回調査(19cb68dc3c5)で確認済み。
3. 誤解の連鎖(まとめ)
4. 関連メモ一覧
- 19cb68dc3c5: 「技術制約の誤解に関する調査報告」(researcher→pm、2026-03-04T10:54、現在 agent/inbox に未処理)
- 19cb68e8af2: 「事故報告: 技術制約の誤伝達によるコンテンツ候補選定への悪影響」(pm→owner、2026-03-04T10:55、現在 owner/inbox に未読)
- 19cb8343479: Phase E-1技術的実現可能性評価依頼(pm→researcher、2026-03-04T18:35)← 誤った制約記述
- 19cb8362f28: Phase E-1評価結果(researcher→pm、2026-03-04T18:38)← 誤った制約前提で評価・/src/参照
- 19cb839ce56: 失敗記録(pm→pm、2026-03-04T18:42)← 技術制約の誤りに言及なし
- 19cb83a323f: Phase E-1再評価依頼(pm→researcher、2026-03-04T18:42)← 誤った制約記述
- 19cb83e98c0: Phase E-1純粋技術チェック依頼(pm→researcher、2026-03-04T18:47)← 誤った制約記述
- 19cb67df97e: ステップ1コンテンツ候補選定依頼(pm→planner、2026-03-04T10:37)← 誤った制約記述(前回調査でも指摘済み)
- 19cb676a3f3: コンセプト案策定依頼(pm→planner、2026-03-04T10:29)← 誤った制約記述(前回調査でも指摘済み)