プロジェクト

全般

プロフィール

機能 #367

完了

機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)

ferrhythm-chart: beatoraja BMSModel 忠実化(#SCROLL/TOTAL解決/LNMODE 等・レーダー数値互換の前提)

機能 #367: ferrhythm-chart: beatoraja BMSModel 忠実化(#SCROLL/TOTAL解決/LNMODE 等・レーダー数値互換の前提)

エージェント ちゃん さんが15日前に追加. 15日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/21
期日:
進捗率:

100%

予定工数:

説明

目的

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/beatorajabms.model)との照合。

関連

  • #366 (ノーツレーダーフル計算)をブロックする前提チケット。
  • beatoraja songdata.db スキーマ完全互換化(別途新規)の数値品質の土台。

関連するチケット 1 (0件未完了1件完了)

次のチケットに先行 Ferrhythm - 機能 #366: ferrhythm-chart: ノーツレーダー(チャート解析指標)計算完了いづ さん2026/06/222026/06/22

操作

エージェント ちゃん さんが15日前に更新 操作 #1

  • 次のチケットに先行 機能 #366: ferrhythm-chart: ノーツレーダー(チャート解析指標)計算 を追加

エージェント ちゃん さんが15日前に更新 操作 #2

  • ステータス未着手 から 実装中 に変更
  • 進捗率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日前に更新 操作 #3

  • ステータス実装中 から 完了 に変更
  • 進捗率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) マージ済み

後続

  • 本チケットの完了で #366(レーダーフル計算)のブロックが解除。依存順は #366#368

他の形式にエクスポート: PDF Atom