操作
機能 #367
完了機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)
ferrhythm-chart: beatoraja BMSModel 忠実化(#SCROLL/TOTAL解決/LNMODE 等・レーダー数値互換の前提)
機能 #367:
ferrhythm-chart: beatoraja BMSModel 忠実化(#SCROLL/TOTAL解決/LNMODE 等・レーダー数値互換の前提)
説明
目的¶
beatoraja フォーク(/workspaces/beatoraja)の songdata.db と数値レベルで bit-exact に互換させるための前提として、ferrhythm-chart のパーサー/Chart モデルを beatoraja の bms.model.BMSModel/TimeLine 相当の解決結果に合わせる。
背景¶
#350 では #SCROLL/#SPEED/#STPを明示的にスコープ外とした。しかし #366(ノーツレーダー・information 値のフル計算)を beatoraja と同値にするには、soflan(speed=bpm×scroll)・TOTAL・LN 数などの解決が beatoraja と一致している必要がある。本チケットでそのソースデータ忠実性を整える。
スコープ(設計時に詳細確定)¶
-
#SCROLL/ scroll チャンネル(SC): scroll 値のパースとChartへの保持(speed = bpm × scroll で soflan 計算に必須)。 -
#STP/#SPEED: beatoraja 拡張の stop(ms)・speed の取り込み可否を確定し必要なら実装。 -
TOTAL 解決:
#TOTAL未指定時の既定値を beatoraja の算出式(ノーツ数/モード依存)に合わせて解決し、Chartから取得可能にする。 -
LNMODE / LNTYPE / LNOBJ: LN 形成と集計が beatoraja と一致するよう確認・補強(LNTYPE 1/2、
#LNOBJ、#LNMODE)。 - MINE / invisible: beatoraja の扱いと一致させる。
-
ノーツ時刻/TimeLine セマンティクス: beat→ms 解決・小節線/セクション、
getLastTime相当の結果が beatoraja と一致することを確認。 -
charthash:
md5/sha256(生ファイルバイト列)が beatoraja のcharthash/sha256と一致することを確認。
検証(コンテナ)¶
純ロジックの TDD。cargo test グリーン。beatoraja 参照実装(/workspaces/beatoraja の bms.model)との照合。
関連¶
- #366 (ノーツレーダーフル計算)をブロックする前提チケット。
- beatoraja songdata.db スキーマ完全互換化(別途新規)の数値品質の土台。
エージェント ちゃん さんが15日前に更新
- 次のチケットに先行 機能 #366: ferrhythm-chart: ノーツレーダー(チャート解析指標)計算 を追加
エージェント ちゃん さんが15日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/367-bmsmodel-fidelity - 対応方針: beatoraja
bms.model(BMSDecoder/BMSModel/TimeLine)と現行ferrhythm-chartパーサーを照合し、#SCROLL/scroll・TOTAL 解決・LNMODE/LNTYPE/LNOBJ・MINE・TimeLine 時刻解決を beatoraja と bit 一致させる。純ロジック TDD。詳細仕様を設計中。
エージェント ちゃん さんが15日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
beatoraja の songdata.db と数値レベルで bit-exact 互換にする後続作業(#366 レーダーフル計算 / #368 songdata.db スキーマ互換)の前提として、ferrhythm-chart のパーサー/Chart モデルを beatoraja の BMS モデル(一次ソース=/workspaces/jbms-parser/src/bms/model/)へ忠実化した。
変更点¶
-
#SCROLL 対応:
#SCROLLxx定義+SCチャンネル → 新フィールドChartTiming.scroll_changes(Vec<ScrollChange>)。scroll 既定 1.0(soflan の speed=bpm×scroll に必須)。 -
TOTAL 解決:
ChartMeta::resolved_total()追加(#TOTAL未指定時は jbms 既定 100.0)。 -
#LNMODE 対応: 新 enum
LnMode(LongNote/ChargeNote/HellChargeNote) をChart.lnmodeに保持(モデル忠実化、radar 数値は非影響)。 - 負 STOP の abs 化(jbms 準拠)。
- 確定事項:
#STPは jbms 非存在=対象外、STOP 単位は現行/48.0一致、md5/sha256・ch03(hex)・地雷 D/E 一致で変更不要。LNTYPE2 は未対応(LNOBJ+LN チャンネルのみ)、bmson scroll は将来対応として doc 明記。 - 変更ファイル:
crates/ferrhythm-chart/src/のmodel.rs/bms.rs/lib.rs/bmson.rs計 4 件。
テスト¶
-
cargo test --workspace --all-features: 成功(ferrhythm-chart 33 / ferrhythm-db 35 ほか、失敗 0) -
cargo clippy --workspace --all-targets/cargo fmt --all -- --check: 成功(無警告・整形差分なし) - 追加テスト: scroll(単一/複数/未定義参照)・resolved_total(既定100.0/明示)・lnmode・負STOP abs の 6 件
関連 MR¶
- !9 (feature/367-bmsmodel-fidelity → develop) マージ済み
後続¶
操作