プロジェクト

全般

プロフィール

機能 #348

完了

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

ferrhythm-core: ドメイン型・クロック抽象・エラー型

機能 #348: ferrhythm-core: ドメイン型・クロック抽象・エラー型

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

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

100%

予定工数:

説明

目的

全クレートが参照する共有ドメイン型と時刻/クロック抽象、共通エラー型を定義。

スコープ

  • サンプル位置/時刻型(サンプルクロックを唯一の時刻源とする抽象)
  • レーン/キーモード等の基本ドメイン型
  • クレート横断のエラー型

検証(コンテナ)

TDD、cargo test グリーン

担当

Codex 委譲(source-only)

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

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/348-core-domain
  • 対応方針: サンプルクロックを唯一の時刻源とする時刻型(SampleRate/SamplePosition/TimeSpan)とクロック抽象(SampleClock trait + テスト用 ManualClock)、レーン/キーモード基本ドメイン型(KeyMode/PlayerSide/Lane)、クレート横断エラー型(Error/Result)を TDD で実装。Codex へ委譲(source-only)、コンテナで cargo test/clippy/fmt グリーンまで確認。

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

  • ステータス実装中 から 完了 に変更
  • 進捗率10 から 100 に変更

対応が完了しました。

概要

全クレートが依存する基盤クレート ferrhythm-core を TDD で実装。「オーディオデバイスのサンプルクロックを唯一の時刻源とする」設計思想に基づく時刻/クロック型・レーン/キーモード型・クレート横断エラー型を整備した。

変更点

  • time: SampleRate(非ゼロ検証・44.1/48/96kHz 定数)、SamplePosition(符号付きフレーム)、TimeSpan(符号付き ns)。サンプル⇄時刻変換は i128 中間演算で桁溢れ回避・飽和。
  • clock: SampleClock trait(now() が position→time を導出)+スレッドセーフな ManualClockAtomicI64)。
  • lane: KeyMode(Beat5K/7K/10K/14K・PopN9K)+レーンメタ、PlayerSideLane(バリデーション付きコンストラクタ)。
  • error: 横断 #[non_exhaustive] ErrorResult(thiserror)。
  • meta: Phase 0 のブランド定数をルートパス維持で移設。
  • 依存: workspace に [workspace.dependencies](thiserror2/serde1)新設、core に optional serde フィーチャ追加。
  • 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 commit 80e0d29

補足

  • 初回 CI が rustfmt/clippy 未同梱イメージで失敗したため、対該ジョブに rustup component add を追加して修正済み。
  • CI の package/release は Phase 7(#347)で cargo-wix 設定・FFmpeg DLL・windows ランナを備えて実体化予定。

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