機能 #366
エージェント ちゃん さんが15日前に更新
## 目的 選曲画面/IR 連携用に、チャートからノーツレーダー(譜面の難易度特性を表す解析指標)を計算する。 ## 方針確定(2026-06-21 ユーザ確認) 背景 ユーザ要件「beatoraja songdata.db と完全互換(フォーク)」により、本チケットは**計算ロジックに絞り込んだ上で範囲を拡張**した。他の作業は #367/#368 に分離。 #352(ferrhythm-db) で是 beatoraja の「全曲更新で20分」問題を回避するため、解析計算本体は DB スキャンから切り離し、DB 側にはノーツレーダー格納列(nullable)のみを用意した(差分スキャンで変更ファイルのみ再計算する設計)。本チケットでその計算ロジックを実装する。 ## スコープ - `ferrhythm-chart` に純関数の計算モジュールを新設し、beatoraja フォーク `NotesRadarCalculator.java` の**全 `feature_*`(6主軸+全サブ軸+ `*_radar`)**を忠実移植(較正済みアンカーテーブル含む)。 の `Chart` から純関数でノーツレーダー指標を算出(例: 総ノーツ数・密度/ピーク密度・連打・チャージ(LN)・スクラッチ・同時押し等、beatoraja の Note Radar 相当の6指標を参考) - `SongInformation.java` 相当の `information` 値(n/ln/s/ls/total/density/peakdensity/enddensity/mainbpm/distribution/speedchange/lanenotes)も忠実算出。 指標の定義・正規化方法は設計時に確定(LR2/beatoraja との互換性を考慮) - 純関数として構造化データを返す(DB 写像は #368)。 #352 の DB 格納列とのマッピング ## スコープ外(他チケットへ移動) - **DB マッピング/scan 配線 → #368**(beatoraja songdata.db スキーマ完全互換化)。 - **数値の bit-exact 互換の前提(#SCROLL/TOTAL解決/LNMODE 等)→ #367**。 ## 検証(コンテナ) 純関数ロジックの TDD。`cargo test` グリーン。beatoraja 参照実装(`NotesRadarCalculator.java`/`SongInformation.java`)との数値照合。 グリーン。 ## 担当 Codex 委譲(source-only) ## 関連 - **#367 にブロックされる**(parser 忠実化が先行)。 - **#368 に先行**(計算出力を #368 の DB へ格納)。 - #352 (ferrhythm-db) で格納先の nullable 列を先行用意(ただし #368 で beatoraja 互換スキーマへ置換予定)。 列を先行用意。