訂正版 事故報告: 技術スタック誤解の再発(3回目)
訂正版 事故報告: 技術スタック誤解の再発(3回目)
※ 前回の事故報告(19cb852a751)に重大な事実誤認があったため、訂正版として再送します。 ※ 誤認内容: 「coding-rules.mdの更新が未実施」→ 実際にはワーキングツリー上で更新済みでした。
事故の概要
cycle-66のひねり強制発想法Phase E-1(技術的実現可能性評価)において、PMが「静的サイト(static export)」「クライアントサイドのみ」という誤った技術制約を3回連続でサブエージェントへの指示に記載した。
やってしまったこと
- Phase E-1評価依頼(メモ 19cb8343479)に「Next.js静的サイト: static exportで動作すること(SSR不可)」と記載
- Phase E-1再評価依頼(メモ 19cb83a323f)に同じ誤りを記載
- Phase E-1純粋技術チェック依頼(メモ 19cb83e98c0)に同じ誤りを記載
- /tmp/twist_consolidated_concepts.txt にも誤った制約を記載
- 失敗記録(メモ 19cb839ce56)で技術制約の誤りを問題として認識せず
さらに、この事故の調査報告(メモ 19cb851b453)においても、researcherがgit logのみ確認してgit statusを確認しなかったため、「coding-rules.mdが未更新」という事実誤認を含む調査結果となった。
正しい技術スタック(.claude/rules/coding-rules.md — 更新済み)
- 静的コンテンツとビルド時生成を優先
- コンパクトな機能はクライアントサイドで実装
- 複雑な機能はサーバーコンポーネントやAPIルートで実装する
- 禁止: 外部APIの呼び出し、データベース、認証・ユーザー管理
- 許可: 自前のサーバーサイドロジック、localStorage
- 実績: src/app/api/search-index/route.ts が稼働中
再発防止策の実施状況(訂正版)
前回事故報告(19cb68e8af2)で提案された4つの再発防止策:
| # | 防止策 | 実施状況 |
|---|---|---|
| 1 | coding-rules.mdの明確化 | 実施済み(ワーキングツリー上で更新。セクション2タイトル「ユーザーを危険にさらさない」に変更、外部API/DB/認証の禁止を明記) |
| 2 | MEMORY.mdへの記録 | 実施済み(Correct Tech Constraintsセクション追加、Workflow Lessonsに一次ソース参照ルール追記) |
| 3 | site-value-improvement-plan.mdへの追記 | 未実施 |
| 4 | PM依頼メモのテンプレート改善 | 未実施(MEMORY.mdにルール記載はあるが遵守されなかった) |
誤解が再発した根本原因(訂正版)
前回報告では「coding-rules.mdが未更新のため」としていたが、これは事実誤認。coding-rules.mdは更新済みだった。
真の根本原因
原因1: PMがMEMORY.mdのルールを遵守しなかった MEMORY.mdに「sub-agentへの依頼時、技術制約を自分で要約せず『coding-rules.mdを読め』と指示すること」と記録されているにもかかわらず、Phase E-1メモ(18:35〜)で誤った制約を自分で記述し続けた。
原因2: coding-rules.mdの自動ロード範囲の限界
coding-rules.mdはpaths: src/**/*指定のため、src/配下を触らない研究・評価タスクでは自動ロードされない。研究者は依頼メモに書かれた制約をそのまま使用した。
原因3: 上流成果物への固定化 /tmp/twist_consolidated_concepts.txt に誤った制約が記述され、それを参照してPhase E-1〜E-3が実施された。上流の成果物に誤りがあると以降すべてに伝播する。
原因4: 失敗を認識できなかった 失敗記録(19cb839ce56)を書いた際、「既存コードバイアス」と「大量×高品質軽視」は記録したが、技術制約の誤りは問題として認識しなかった。
調査自体の品質問題(追加の原因)
原因5: 調査がgit logのみで完結した researcherがgit logだけを確認し、git status/git diffを確認しなかった。未コミットの変更を見落とし、「coding-rules.mdは未更新」と誤報告した。Owner指摘により判明。
訂正後の再発防止策
即時対応(済)
- coding-rules.mdの更新: ★既に実施済み(未コミット)
- /tmp/twist_consolidated_concepts.txt: Phase E-1(4回目、19cb852e726)では、このファイルの冒頭制約を無視しcoding-rules.mdを直接読む指示で実施済み
プロセス改善
- 技術制約はcoding-rules.mdへの参照で伝える: 依頼メモに制約を自分で書かない(MEMORY.mdに記録済みだが、遵守を徹底する)
- coding-rules.mdのpaths指定の見直し検討:
src/**/*のみでは研究・評価タスクで自動ロードされない問題がある - 調査時はgit statusも必ず確認する: コミット済み変更だけでなく、ワーキングツリーの未コミット変更も確認する
時系列
| 時刻 | イベント |
|---|---|
| 09:53 | cycle-66開始(コミット 74fdd25) |
| 10:29 | メモ 19cb676a3f3 に誤った制約を記述 |
| 10:37 | メモ 19cb67df97e に誤った制約を記述 |
| 10:54 | 初回調査報告 19cb68dc3c5 がinboxに到着 |
| 10:55 | 初回事故報告 19cb68e8af2 を作成、MEMORY.md更新、coding-rules.md更新 |
| 18:35 | Phase E-1メモ 19cb8343479 に誤った制約を記述(再発) |
| 18:38 | Phase E-1結果 19cb8362f28 が誤った前提で返答 |
| 18:42 | 失敗記録 19cb839ce56(技術制約の誤りに言及なし) |
| 18:42 | Phase E-1再評価 19cb83a323f に誤った制約を記述 |
| 18:47 | Phase E-1純粋チェック 19cb83e98c0 に誤った制約を記述 |
| 19:00 | 調査依頼 19cb84b10da |
| 19:08 | 誤った調査結果 19cb851b453(coding-rules.md未更新と誤報告) |
| 19:09 | 誤った事故報告 19cb852a751(上記の誤りを引き継ぎ) |
| 19:09 | 修正版Phase E-1メモ 19cb852e726(coding-rules.md直接参照で成功) |
| 19:11 | Phase E-1結果 19cb8548248(17コンセプト全て技術的に実現可能) |
関連メモ一覧
今回の事故
- 19cb8343479, 19cb83a323f, 19cb83e98c0: Phase E-1の3回の失敗(誤った制約記述)
- 19cb8362f28: Phase E-1結果(誤った前提)
- 19cb839ce56: 失敗記録(技術制約誤りに言及なし)
- 19cb852e726: Phase E-1修正版依頼(成功)
- 19cb8548248: Phase E-1修正版結果(全17コンセプト○)
誤った調査・報告(訂正済み)
- 19cb84b10da: 調査依頼
- 19cb851b453: 誤った調査結果(archived、訂正: 19cb859150e)
- 19cb852a751: 誤った事故報告(本メモで訂正)
前回の事故と調査
- 19cb68dc3c5: 初回調査報告(researcher→pm)
- 19cb68e8af2: 初回事故報告(pm→owner)
- 19cb29ed05b, 19cb29f48bd: cycle-65での誤解の起点