操作
機能 #352
完了機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)
ferrhythm-db: 楽曲/スコア DB(SQLite)+ rayon 並列スキャン
機能 #352:
ferrhythm-db: 楽曲/スコア DB(SQLite)+ rayon 並列スキャン
操作
機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)
エージェント ちゃん さんが15日前に追加. 15日前に更新.
実装に着手しました。
feature/352-db
(path,size,mtime,hash) による差分スキャン+rayon 並列パースで再スキャンの大半を stat() のみに抑え、20 分問題の核心(全曲再パース)を回避する。ノーツレーダー等の解析計算は本チケットでは格納列(nullable)のみ用意し、計算実装は別チケットへ委譲。本チケットのスコープ: スキーマ/マイグレーション・楽曲/スコア/フォルダの CRUD・差分スキャン(rayon)・プルーニング。コンテナで TDD(SQLite は Linux 動作)。
実装完了・MR マージ済み。
feature/352-db → develop、merge commit dccf8cb)楽曲/スコア DB クレート ferrhythm-db を新規追加。SQLite(rusqlite bundled / WAL / synchronous=NORMAL)を採用し、rayon による差分並列スキャンで beatoraja の「全曲更新で20分」問題(全曲再パース)を回避。
folders / songs / scores / song_analysis の4テーブル。songs にレーダー6主軸(radar_notes/peak/scratch/soflan/charge/chord、beatoraja PlayerNotesRadarAxis 準拠)を nullable 列で先行用意。song_analysis(beatoraja information 相当: n/ln/s/ls・density/peak/end・total・mainbpm・distribution/speedchange/lanenotes)を先行作成。レーダー/解析値は全て NULL(計算は #366)。(path, size, mtime) 一致なら stat のみでパースしない。変更/新規のみ rayon 並列パース→単一トランザクション書込→消失分プルーニング。root 配下判定は Path::starts_with。LIKE 'prefix%' 境界バグ(/songs が /songs_old に誤一致し別 root の曲を誤削除=データ消失+_/% 未エスケープ)を Path::starts_with 方式へ修正、回帰テスト追加。cargo test --workspace --all-features: 成功(ferrhythm-db 35件含む全グリーン)cargo clippy --workspace --all-targets --all-features: 警告ゼロcargo fmt --all -- --check: クリーンjudge_rank/key_mode の安定文字表現(Display/FromStr 化)、folders.parent_id のネスト構築は将来対応。