会場別のコース適性を分析する。会場を省略すると全会場の成績を表示する。「コース分析」「会場別の適性を見たい」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
再実行性・リカバリー・テスタビリティのレビュー。
new Date() / Date.now() の直接呼出と時刻の注入可能性、toISOString() が UTC 日付になる点、同じ JSON を2回取り込んでも重複行・統計の二重計上が起きない再インポートの冪等性(RebuildStats との関係)、トランザクション境界と途中失敗時の一貫性、DB 接続のクローズを検証。
Use when user says 'リカバリーレビュー', '再実行性チェック', 'review recovery', '冪等性確認', or 'テスタビリティ確認'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
src/ 配下の TypeScript と src/database/schema.sql を探索し、以下のチェックリストに基づいてレビューする。このプロジェクトは CLI であり、同じコマンド(特にインポート)が何度も流されることが前提。
起動時に「対象スコープ」と「対象ファイル一覧」が渡される場合がある(review-all 等からの dispatch 時)。その扱いは次の通り:
N-A で残し、備考に根拠を書く。行を省かない)Summary: SKIPPED の最小出力でよい(テーブル骨格は不要)node_modules/ は除外)を対象にするnew Date( / Date.now() / getFullYear() / toISOString()(__test__ を除く本番コードを対象に、件数のベースラインをその場で取る)src/commands/ImportData.ts(取り込みの本体・トランザクション・統計再構築の呼び出し)src/repositories/aggregates/(insertRace / insertHorseWithBloodline / insertRaceEntry の一致条件と upsert、ScoreAggregateRepository.rebuildHorseStats)src/database/DatabaseConnection.ts(runInTransaction / close)と src/database/schema.sql(UNIQUE 制約・ON CONFLICT の効き方・CURRENT_TIMESTAMP)src/commands/ 各コマンドの finally での接続クローズ、src/models/MachineLearningModel.ts の ownsConnection 方式src/domain/ 内の引数なし new Date() / Date.now() は plugin no-ambient-time(warn・src/domain/** のみ適用)が機械検出する。該当 warning が本変更で純増していないかを見る(ドメインは純粋に保ち、必要な日付はレース日・基準日として引数で受け取る)now: () => Date のようなフィールド)になっているか。形は問わずテストから固定できることが基準schema.sql の created_at DATETIME DEFAULT CURRENT_TIMESTAMP / updated_at)は業務判定に使わない限り直接取得でよい(指摘対象外。備考に区別を書く)NG例(現状 — 既存債務): ImportData の生年計算 — const baseYear = raceYear ? Number(raceYear[1]) : new Date().getFullYear();。レース日から年が取れないとき実行時の年で生年を計算するため、過去データを後日再インポートすると birth_year がずれる。HorseDataExtractor も同様で、URL から日付が取れないとき new Date().toISOString().split('T')[0] をレース日の既定値にしている
OK例: Horse.calculateRotationAptitudeScore — 出走間隔をレース日同士(current.raceDate と prev.raceDate)の差分で求めており、現在時刻に依存しない
toISOString() の結果から日付部分を切り出していないか(toISOString() は UTC。JST の 0:00〜8:59 は前日の日付になる)YYYY-MM-DD のレース日)で揃っているかnew Date('YYYY-MM-DD') のパース結果(UTC 起点)で日数差を取る場合、両辺が同じ扱いで打ち消し合うか(片側だけローカル時刻由来だとずれる)NG例(現状 — 既存債務): HorseDataExtractor のレース日フォールバック new Date().toISOString().split('T')[0] は UTC の日付。日本時間の早朝に実行すると前日の日付になる
OK例: レース日は URL から抽出した YYYY-MM-DD をそのまま使い、実行環境のタイムゾーンを介在させない
同じ JSON をもう一度取り込んでも結果が同じになることがこのプロジェクトの中核要件:
ON CONFLICT があり、アプリ側の SELECT→INSERT と DB 側の制約が食い違っていないかhorse_course_stats / horse_track_stats)が加算ではなく再構築か。加算で更新すると再取り込みのたびに出走数・勝利数が二重計上されるrebuildHorseStats() を呼ぶ順序が保たれているか(前走データの取り込みより後か)。再構築を外す・条件付きにする変更は二重計上や集計漏れを招かないかNG例: 統計を UPDATE horse_course_stats SET runs = runs + 1 ... のように加算で更新する(同じ JSON を2回取り込むと出走数が倍になる)
OK例: ScoreAggregateRepository.rebuildHorseStats — DELETE FROM horse_track_stats / DELETE FROM horse_course_stats してから保存済みのレース結果を正として再構築し、ImportData がインポートの最後に必ずそれを呼ぶ
DatabaseConnection.runInTransaction または db.transaction(...))DELETE → 再 INSERT)が 1 トランザクション内で完結し、途中失敗で統計が空のまま残らないかNG例: catch (e) { console.warn(e); } をトランザクション内の各行の書き込みに付ける(一部だけ入った状態でコミットされ、次回の再取り込みでも一致条件に引っかかって直らない)
OK例: ImportData.importExtractedJSON — レース・馬・出馬表の登録を db.transaction(...) にまとめ、前走データだけは意図的にトランザクション外に出し、「前走データのエラーがメインのインポートに影響しないように分離」とコメントで根拠を残したうえでスキップ件数を集計している
finally で必ず閉じているか(例外時も閉じるか)ownsConnection 相当のフラグがあるか)createTestDb(...).cleanup())DatabaseConnection を開いていないか(new DatabaseConnection() はスキーマ適用も走るため、無駄な再初期化になる)NG例: try の最後で connection.close() を呼ぶ(途中で例外が出ると閉じられず、SQLite ファイルのハンドルが残る)
OK例: ImportData / CalculateScore / Predict / RebuildStats の finally { this.connection.close(); }。外部接続を受け取る側は MachineLearningModel のように ownsConnection を見てから閉じる
Summary: SKIPPED## リカバリー / テスタビリティ レビュー結果
| # | チェック項目 | ステータス | 該当箇所 | 備考 |
| - | ------------ | ---------- | -------- | ---- |
### 詳細所見
### 推奨アクション
- 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からデータを取ってきて」「出馬表を取得して」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
有馬記念分析システムで利用可能なスキル一覧と使い方、スコア配分、基本ワークフローを表示する。「ヘルプ」「使い方を教えて」「何ができるの」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.