会場別のコース適性を分析する。会場を省略すると全会場の成績を表示する。「コース分析」「会場別の適性を見たい」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
テスト品質のレビュー(bun:test)。
`bun test` の全通過、エンティティのビルダー直接検証と createTestDb による実 SQLite E2E の使い分け、実ネットワーク(JRA)非依存、回帰テストの存在(ImportData の一致条件・枠番の JRA 割当規則・生年計算)、回帰テストの削除/skip 化の禁止、新機能・バグ修正へのテスト追随、契約の検証 vs 実装詳細への過剰結合、console spy と一時ファイルの後始末を検証。
Use when user says 'テストレビュー', 'review test', 'テスト品質チェック', or 'カバレッジ確認'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
src/**/__test__/ と src/test/helpers/ を探索し、テストの品質と網羅をレビューする。
起動時に「対象スコープ」と「対象ファイル一覧」が渡される場合がある(review-all 等からの dispatch 時)。その扱いは次の通り:
N-A で残し、備考に根拠を書く。行を省かない)Summary: SKIPPED の最小出力でよい(テーブル骨格は不要)node_modules/ は除外)を対象にするsrc/**/__test__/ 配下の全テストファイル(テストは実装と併置されている)src/test/helpers/testDb.ts(createTestDb / seedTestData / getTestDbPath)bun test を 1 回流し、pass 件数とテストファイル数のベースラインをその場で取る(件数は常に動くので本スキルには書かない)。base との比較が要るときは base 側でも同じコマンドを流すtodo( / コメントアウトされた it( describe((.skip / .only は lint が error で落とすため Grep 不要)bun test が全通過し、pass 件数がベースラインから減っていないか(失敗・タイムアウトを残していないか)JRAFetcher をテストから呼ぶ場合は、必ず取得済み HTML 文字列やローカルファイルを入力にする)beforeEach で createTestDb、afterEach で cleanup)setTimeout での待機)に依存していないかNG例: describe の外や beforeAll で 1 個の DB を作り、全テストが同じ DB に書き込む(順序が変わると落ちる・落ちた原因が特定できない)
OK例: src/commands/__test__/CalculateScore.e2e.test.ts — beforeEach で createTestDb('calculate-score')、afterEach で testDb.cleanup()
Horse / Jockey / Trainer / RaceResult / ScoreComponents)のテストが、DB を使わずビルダー(Horse.builder(...) 等)で組んで直接検証しているかcreateTestDb(src/test/helpers/testDb.ts)で実 SQLiteを使う E2E になっているか(スキーマは本番の schema.sql をそのまま適用する)seedTestData(testDb, ...)(src/test/helpers/testDb.ts)や src/test/helpers/syntheticRaces.ts を使い、各テストで同じ INSERT を書き散らしていないかmock.module / モジュール差し替えに頼っていないか(新規に導入する変更は、実 SQLite やビルダーで代替できないか必ず検討する)src/test/helpers/testDb.ts に置けないか検討しているか(各テストファイルにローカル factory が重複していないか)NG例: リポジトリのテストで SQL 実行を差し替えたフェイクを注入する(スキーマ制約・JOIN・ON CONFLICT の挙動という検証したい対象そのものが消える)
OK例: src/domain/entities/__test__/Horse.test.ts — Horse.builder(1, 'テスト馬').withRaceResults(results).build() で DB 無しにスコア計算だけを検証する
過去に実際に起きた問題の回帰テスト。削除・skip 化・弱体化は FAIL(既存の回帰テストを消す変更は、消す理由をレビューで説明させる):
src/commands/__test__/ImportData.test.ts。馬=馬名+父+母、レース=開催日+会場+レース番号、出馬表=レースID+馬ID、レース結果=エントリID、騎手は getOrCreate で更新しないsrc/utils/__test__/HorseDataExtractor.test.ts の境界頭数(8頭以下 / 9頭 / 12頭 / 14頭 / 16頭 / 17頭 / 18頭)と、HTML パースを通した E2Esrc/domain/services/__test__/ScoringOrchestrator.test.ts(calculateScoresForRace / calculateScoreForEntry / 特徴量抽出の postPositionScore が揃う)src/commands/__test__/ImportData.test.tssrc/commands/__test__/ImportData.test.ts の統計再構築まわりのアサーションsrc/domain/services/__test__/AsOfLeakage.test.ts(対象レース/後続レースの結果を投入してもスコアと特徴量が変わらない、getHorseRaceResults の同日除外、as-of 集計が集計テーブルを参照しない)、src/features/__test__/FeatureBuilder.test.ts の asOf 明示、src/models/__test__/MachineLearningModel.e2e.test.ts のリーク遮断(学習経路)todo / コメントアウトされたテストを新たに増やしていないか(一時的に無効化するなら理由と復活条件をコメントに残す).skip / .only の残存は lint(suspicious/noSkippedTests・noFocusedTests = error)が落とすため本項では見ない。lint の通過確認は review-code 2.1NG例: describe.skip('ImportData - インポート機能', ...) のようにブロックごと無効化して緑にする(過去に回帰テストが長期間この状態で死んでいた事例がある。現在は lint が error で落とす)
OK例: 実装の API が変わったときは無効化せずテスト側を新 API(HorseAggregateRepository / RaceAggregateRepository)に書き換えて生かす
NG例: 計算バグの修正が本番ファイルだけを変更し __test__ の変更がゼロ(過去に JockeyQueryRepository の複勝/連対の取り違え修正がこの形で入り、回帰テストが付かないまま残っている)
OK例: 枠番を JRA の割当規則から計算する変更が、実装と同時に src/utils/__test__/HorseDataExtractor.test.ts を新規追加し、境界頭数を全部押さえている
console.log の整形結果)の完全一致に依存していないか(文言変更で壊れすぎるテストは WARN。検証したいのが数値なら数値を検証する)catch で握り潰される経路(Backtest.evaluateRace 等)を、握り潰されていないことまで検証しているかNG例: テストファイル内に着順スコアの計算式を書き写し、本番の戻り値と突き合わせる(式のバグは検出できない)
OK例: src/commands/__test__/ImportData.test.ts の E2E — spyOn(console, 'error') を取って「エラーが 1 件も出ていないこと」を契約として検証する
spyOn(console, ...) が必ず afterEach の jest.restoreAllMocks() 等で復元されているか(復元漏れは後続テストの出力を黙らせ、失敗原因を隠す)createTestDb で作った DB が cleanup() で削除されるか(close() だけだとファイルが残る).gitignore の対象かを確認する(*.db は無視されるが、./test-*.json のような JSON は無視されない)NG例(現状 — 既存債務): src/commands/__test__/ImportData.test.ts の ./test-importdata-e2e.json はリポジトリ直下に作られ .gitignore に該当パターンが無いため、テストが途中で落ちると未追跡ファイルが残る
OK例: src/commands/__test__/Backtest.e2e.test.ts — beforeEach で console を黙らせ、afterEach で jest.restoreAllMocks() して必ず戻す
JRAFetcher / ExtractData / CLI 配線)を触るなら、入力を文字列・ローカルファイルに切り出してテスト可能にできないか検討したかPredict / RebuildStats / JRAFetcher / Score.ts / Race.ts 等。対応する __test__ の有無を Glob で確認する)を変更する場合、少なくとも変更した振る舞いの 1 本は足しているかHorseQueryRepository.getHorsesRaceResultsBatch のバッチ版 beforeDate、JockeyQueryRepository.getJockeyVenueStats / getJockeyOverallStats / getJockeyTrainerStats の beforeDate)に変更を入れるなら、基準日より後のデータを投入しても結果が変わらないことを確かめるテストを同じ変更で足しているか(現在は ScoringOrchestrator 経由の間接検証しかない)NG例: 「テストは別ファイルで実施」と書きながらその別ファイルが存在せず、当該メソッドが未検証のまま残る
OK例: src/domain/services/__test__/ScoringOrchestrator.test.ts — DB を伴う経路でも createTestDb で複数経路の一致を検証している
bun test 不通過、回帰テスト(5.3)の削除・skip 化・弱体化、新機能やバグ修正にテストなし、テストからの実ネットワークアクセス、テスト間の状態共有による順序依存Summary: SKIPPED__test__/ 併置)は review-arch.skip / .only の残存は lint(suspicious/noSkippedTests・noFocusedTests = error)が担保するため本スキルでは見ない。lint の通過確認は review-code 2.1## テスト品質 レビュー結果
| # | チェック項目 | ステータス | 該当箇所 | 備考 |
| - | ------------ | ------------ | --------- | ---- |
### 詳細所見
### 推奨アクション
- HIGH / MEDIUM / LOW(該当が無い優先度は「なし」と明示)
レポート末尾に必ず以下の 1 行を出力する:
Summary: OK=<n> WARN=<n> FAIL=<n>
Summary: SKIPPED아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
会場別のコース適性を分析する。会場を省略すると全会場の成績を表示する。「コース分析」「会場別の適性を見たい」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
抽出済みJSONファイル(馬・血統・レース出走データ)をSQLiteデータベースにインポートする。「DBインポート」「データベースに保存」「JSONをDBに登録」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
実装前に参照する設計原則。理解容易性 = 読み手の思考量の少なさを基準に、AI が作りがちな失敗4パターン(引数・依存5個以上、コマンド層肥大・ドメイン貧血症、ポリモーフィズム機会の見逃し、トリッキーな実装)と、実装後セルフチェックの7観点(名称・役割・参照・状態・面積・階層・秩序)を言語化。Use when starting any implementation task, when user says '設計原則', 'design principles', or before writing new entities/commands/repositories.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
agent 向けテキスト指示(skill / slash command / task プロンプト / コード生成プロンプト)を、バイアスを排した実行者に動かしてもらい、両面(実行者の自己申告 + 指示側メトリクス)で評価して反復改善する手法。改善が頭打ちになるまで回す。Use when user says 'プロンプトを改善して', 'スキルをチューニング', 'empirical-prompt-tuning', or after creating/heavily revising a skill or prompt.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
JRA公式サイトから特定レースの出馬表HTMLを取得して馬データを抽出する。「データ取得」「JRAからデータを取ってきて」「出馬表を取得して」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
有馬記念分析システムで利用可能なスキル一覧と使い方、スコア配分、基本ワークフローを表示する。「ヘルプ」「使い方を教えて」「何ができるの」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.