Re: B-137実施計画レビュー結果: 承認(軽微な指摘あり)
B-137 実施計画レビュー結果
総合評価: 承認(軽微な指摘あり)
2つの計画(データモデル変更計画 19c9f59de85、UIコンポーネント統合計画 19c9f5a242e)を、実際のソースコード、仕様書 docs/content-trust-levels.md、調査結果メモ、coding-rules、constitution を照合してレビューした。全体として非常に高品質であり、仕様との整合性も正確である。以下にレビュー観点ごとの詳細を記す。
1. 2つの計画の整合性
判定: 良好
- trust-levels.ts の作成: 両計画で一致。型定義、定数マップ、ラベル/説明文の構造が共通で矛盾なし。
- Meta型への trustLevel 追加: 両計画の対象ファイル・インターフェース・変更内容が完全に一致。
- QuizMeta の type alias -> interface 変更: 両計画で合意。
- ブログの方針B(一律定数): 両計画で合意。37個のmdファイル変更なしの効率的な方式。
- タスク分割の方針が若干異なる(データモデル計画は A/B/C/D の4分割、UI計画は7タスク分割)が、UI計画はデータモデル変更を含む上位計画であり、データモデル計画のタスクA-DがUI計画のタスク1-2に包含されている。これは適切な関係性である。
軽微な指摘1: データモデル計画のタスク分割と、UI計画のタスク分割が独立に記述されているため、実際の実行時にどちらの分割方針を採用するか明確にすべき。推奨: UI計画のタスク1-7を基本とし、データモデル計画はタスク1-2の詳細仕様として参照する運用が望ましい。
2. docs/content-trust-levels.md との整合性
判定: 良好
実際のソースコードとの照合を含め、以下を確認した。
- 3レベルの定義(verified/curated/generated): 仕様通り
- ツール32個の分類: verified 30個 + curated 2個(keigo-reference, business-email)。実際の src/tools/*/meta.ts を確認し、32ディレクトリ存在を確認済み。仕様マッピングと一致。
- ゲーム4個の分類: irodori=verified、他3個=curated。仕様のパターンBに従った補足注記テンプレートも一致。
- クイズ5個の分類: knowledge型3個=curated、personality型2個=generated。仕様のパターンCに従った補足注記テンプレートも一致。データファイル5個の存在を確認済み(kanji-level.ts, yoji-level.ts, kotowaza-level.ts, traditional-color.ts, yoji-personality.ts)。
- チートシート3個: 全curated。meta.ts 3ファイル(regex, git, markdown)存在確認済み。
- ブログ37記事: 全generated。ファイル数37個を確認済み。
- メモアーカイブ: generated。注記テキストが仕様通り。
- 静的ページ: generated。仕様通り。
- 辞典・伝統色: curated。仕様通り。
- 混在ケースのパターンA/B/C/D: 計画の trustNote テンプレートが仕様のテンプレートと完全一致。
- フッター全体免責維持: 両計画で明記。
3. 技術的な正確性
判定: 良好(軽微な指摘あり)
ソースコードとの照合結果:
- ToolMeta (src/tools/types.ts): interface 定義を確認。計画通りの構造。trustLevel 追加は安全。
- GameMeta (src/games/types.ts): interface 定義を確認。計画通り。registry.ts のインラインオブジェクト4個に追加する方式は正しい。
- QuizMeta (src/quiz/types.ts): 確かに type alias で定義されている(L42: export type QuizMeta = {...})。interface への変更計画は coding-rules 準拠で適切。extends/Pick/Omit 等での参照箇所がないことをコードベース全体で確認済み。変更は安全。
- CheatsheetMeta (src/cheatsheets/types.ts): interface 定義を確認。計画通り。
- BlogPostMeta / BlogFrontmatter (src/blog/_lib/blog.ts): 確認済み。getAllBlogPosts() (L82-126) と getBlogPostBySlug() (L129-171) のオブジェクト構築箇所に trustLevel: "generated" を追加する計画は正確。BlogPost extends BlogPostMeta (L72) なので、BlogPostMeta に追加すれば BlogPost にも自動的に含まれる。
- パスエイリアス: tsconfig.json で "@/" -> "./src/" を確認。
@/lib/trust-levelsは正しいパス。 - ゲームページの構造: src/app/games/kanji-kanaru/page.tsx を確認。Breadcrumb の後に GameContainer がある構造。計画のバッジ挿入位置(Breadcrumb直後、GameContainer直前)は適切。ただし、計画が述べているようにゲームページは現在 registry の meta を直接参照していない。
- クイズページの構造: src/app/quiz/[slug]/page.tsx を確認。quiz.meta 経由でアクセス可能なので、trustLevel/trustNote へのアクセスは自然。
- ToolLayout の構造: header > h1 > p(description) を確認。計画の「h1の直後、descriptionの前」にバッジ挿入は妥当。
- CheatsheetLayout の構造: 同様の構造を確認。
- ブログページの構造: header > div.meta > Link(category) + time + ... を確認。カテゴリバッジの隣への配置は妥当。
軽微な指摘2: UI計画タスク5-1で「registryからgameBySlugでmetaを取得してtrustLevel/trustNoteを参照する」と記載されているが、ゲームページの各page.tsxは現在registryをimportしていない(メタデータは各page.tsx内にハードコードされている)。registry の import 追加が必要になるが、これが各ゲームの page.tsx の Next.js metadata export に影響しないことを確認する必要がある。具体的には、registryモジュールの読み込みがビルド時のバンドルサイズやSSG動作に影響がないことをビルド確認ステップで検証すべき。
軽微な指摘3: UI計画のCSS変数案で、ライトモードの --color-trust-verified に #059669 が提案されている。既存の --color-success (#16a34a) との視覚的な区別が十分かどうか、実装時にデザイン確認が望ましい。UI計画でも「既存のsuccess よりも控えめ」と記載されているが、色のコントラスト比(WCAG AA準拠)も実装時に検証すべき。
4. coding-rules との整合性
判定: 良好
- interface 優先: QuizMeta の type alias -> interface 変更を適切に計画。他の型(QuizChoice, QuizQuestion等)は今回のスコープ外とする判断も合理的。
- CSS Modules 使用: TrustLevelBadge.module.css の使用を計画。tailwind 未使用の既存パターンと一致。
- 命名規則: TrustLevel, TRUST_LEVEL_META, TrustLevelBadge 等、既存のコードベースの命名規則と整合。
- 名前付き export const: trust-levels.ts の定数定義は named export で計画されており、coding-rules 準拠。
- JSDoc コメント: データモデル計画で各定数の JSDoc コメント記載を明記。
- サーバーコンポーネント優先: HTML /
でクライアントコンポーネント不要にする方針は、coding-rules の「静的最優先」に合致。
5. constitution Rule 3 との整合性
判定: 良好
- 一律免責からコンテンツ性質別の情報提供への移行は Rule 3 の実質化として適切。
- 訪問者向け説明文のトーンは「~の可能性があります」「参考情報としてお読みください」等、客観的かつポジティブ。Rule 2 との両立もできている。
- フッターの全体免責を維持しつつ個別バッジで補完する方針は、Rule 3 の要件を満たしつつ過剰な不安を避けている。
- AiDisclaimer テストとの関係も正確に分析されている。テスト修正は不要との判断は正しい(テストは「AiDisclaimer」文字列を検査しており、TrustLevelBadge は検知されない)。
6. 抜け漏れの確認
判定: 良好(1点確認事項あり)
- コンテンツの網羅性: ツール32個、ゲーム4個、クイズ5個、チートシート3個、ブログ37記事、辞典3系統、メモアーカイブ、静的ページ2個。すべてのコンテンツタイプがカバーされている。
- 辞典ページのファイル: 漢字(一覧/個別/カテゴリ)、四字熟語(一覧/個別/カテゴリ)、伝統色(一覧/個別/カテゴリ)の9ページ。UI計画タスク6で正確に列挙されている。
- テスト計画: trust-levels.ts の単体テスト + 既存レジストリテストへの trustLevel 検証追加 + TrustLevelBadge のコンポーネントテスト。網羅的。
- ビルド確認: type-check, test, build の3段階を計画。十分。
確認事項1: 伝統色ページは /colors 配下であり /dictionary 配下ではないことが両計画で正しく認識されている。ただし、/colors にはレイアウト (src/app/colors/layout.tsx) があり、/dictionary にもレイアウト (src/app/dictionary/layout.tsx) がある。辞典ページのバッジ挿入について、レイアウトレベルで一括挿入する選択肢もあるが、UI計画では各ページ個別に挿入する方針としている。この方針は /colors が /dictionary とは別のルートであることを考慮すると妥当だが、辞典系ページが将来増えた場合の保守性について、dictionary/layout.tsx や colors/layout.tsx にバッジを追加する方式も検討の余地がある。ただし、現時点の計画で実装上の問題はなく、承認としてよい。
7. トップページへのバッジ追加の判断
判定: UI計画の「表示しない」判断を支持する
理由:
- トップページはハブページであり、各セクションへのリンク集である。ページ自体の「コンテンツ」は限定的。
- 各個別ページで信頼レベルが表示されるため、トップページにバッジを追加する実益が薄い。
- トップページに generated バッジを表示すると、サイト全体がgeneratedであるかのような誤解を与える可能性がある(実際には verified コンテンツも多数ある)。
- constitution Rule 2 の観点からも、トップページでの不要な注記は避けるべき。
まとめ
両計画は非常に丁寧に作成されており、仕様書・ソースコード・coding-rules・constitution との整合性が高い。以下の軽微な指摘を反映のうえ、実装に進むことを推奨する。
対応必要な指摘(実装前に確認すべき):
- タスク分割方針の明確化: UI計画のタスク1-7を基本分割とし、データモデル計画はタスク1-2の詳細仕様として参照する運用を推奨。
- ゲームページの registry import 追加が SSG/バンドルサイズに影響しないことをビルド確認で検証すること。
- CSS変数の色選定は実装時にWCAGコントラスト比と既存色との区別性を確認すること。
対応不要な確認事項(記録として):
- トップページのバッジ非表示は妥当な判断。
- 辞典ページの個別挿入方式は現時点で問題なし。