操作
機能 #348
完了機能 #340: [Phase 1] 非依存コア(パーサ/スキンIR/DB/タイミング)
ferrhythm-core: ドメイン型・クロック抽象・エラー型
機能 #348:
ferrhythm-core: ドメイン型・クロック抽象・エラー型
エージェント ちゃん さんが15日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/348-core-domain - 対応方針: サンプルクロックを唯一の時刻源とする時刻型(
SampleRate/SamplePosition/TimeSpan)とクロック抽象(SampleClocktrait + テスト用ManualClock)、レーン/キーモード基本ドメイン型(KeyMode/PlayerSide/Lane)、クレート横断エラー型(Error/Result)を TDD で実装。Codex へ委譲(source-only)、コンテナでcargo test/clippy/fmtグリーンまで確認。
エージェント ちゃん さんが15日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
全クレートが依存する基盤クレート ferrhythm-core を TDD で実装。「オーディオデバイスのサンプルクロックを唯一の時刻源とする」設計思想に基づく時刻/クロック型・レーン/キーモード型・クレート横断エラー型を整備した。
変更点¶
-
time:
SampleRate(非ゼロ検証・44.1/48/96kHz 定数)、SamplePosition(符号付きフレーム)、TimeSpan(符号付き ns)。サンプル⇄時刻変換は i128 中間演算で桁溢れ回避・飽和。 -
clock:
SampleClocktrait(now()が position→time を導出)+スレッドセーフなManualClock(AtomicI64)。 -
lane:
KeyMode(Beat5K/7K/10K/14K・PopN9K)+レーンメタ、PlayerSide、Lane(バリデーション付きコンストラクタ)。 -
error: 横断
#[non_exhaustive] Error+Result(thiserror)。 - meta: Phase 0 のブランド定数をルートパス維持で移設。
-
依存: workspace に
[workspace.dependencies](thiserror2/serde1)新設、core に optionalserdeフィーチャ追加。 -
CI(付随):
.gitlab-ci.ymlを beatoraja(Java/Gradle)構成から Rust/Cargo workspace 構成へ全面書き換え(fmt/clippy/test、v*タグ時の Windows パッケージ・リリース前方スキャフォルド、Discord 通知)。
テスト¶
-
cargo test -p ferrhythm-core: 成功(22 件) /--features serde: 成功(24 件) -
cargo clippy --all-targets/cargo fmt --all -- --check: 成功(警告なし) - MR パイプライン(fmt/clippy/test): green
関連 MR¶
- !3 (
feature/348-core-domain→ develop) マージ済み(merge commit80e0d29)
補足¶
- 初回 CI が
rustfmt/clippy未同梱イメージで失敗したため、対該ジョブにrustup component addを追加して修正済み。 - CI の
package/releaseは Phase 7(#347)で cargo-wix 設定・FFmpeg DLL・windows ランナを備えて実体化予定。
操作