プロジェクト

全般

プロフィール

機能 #314

完了

ノーツレーダー細分化 Phase 1: A分類サブ軸の露出・IR伝送・EAV保持・集計

機能 #314: ノーツレーダー細分化 Phase 1: A分類サブ軸の露出・IR伝送・EAV保持・集計

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

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

100%

予定工数:

説明

目的

#313 で確定した細分化データモデル設計(docs/notes-radar-subdivision-design.md)の Phase 1。新規パターン解析を伴わず、既に NotesRadarCalculator / NotesRadarFeature が算出済みの A分類サブ軸を新 axis_key として露出し、伝送 → 保持(EAV) → 集計 の縦串を先に通す。

親設計: #313。後続: Phase 2(B分類・新規パターン解析)。

スコープ(A分類サブ軸)

  • NOTES: notes_density_peak_1s(既存 peakBurstNotes 公開化)/ notes_local_hardness(ピーク密度/平均密度比)
  • PEAK: peak_burst_1s / peak_sustained_3s(既存値公開化)
  • CHORD: chord_max_sizemaxChordSize 公開済)
  • SOF-LAN: soflan_accel / soflan_decel(既存ソフランクラスタを speed 差符号で分離)/ soflan_stopstopCount/soflanStopTimeTotal)/ soflan_visualscrollChangeCount+逆スクロール)
  • SCRATCH: scratch_bss(scratch lane の LongNote 始端。判定が軽微なため Phase 1 に含める)

本体側の変更接点(#313 §7 の縦串・既存29列と同型)

  1. NotesRadarCalculator.ChartMetrics / calculate(): A分類値の露出(多くは既存値、soflan accel/decel は cluster 生成時に speed 差符号を保持する小改修)。
  2. NotesRadarFeature.java: record コンポーネントを末尾追加。EMPTY・互換コンストラクタ・コンパクトコンストラクタを更新。既存6値先頭は不変=後方互換
  3. SongData.java: getter 追加。
  4. SongDataDto.java / SongDataResultSetHandler.java(列名存在チェック付き getDouble)。
  5. SQLiteSongDatabaseAccessor.java: SONG_COLUMNS / FEATURE_COLUMNS_SQL / Table new Column("feature_xxx","REAL")(自動 ALTER 起点)。INSERT の VALUES プレースホルダ数を SONG_COLUMNS/DTO 順と一致させる。
  6. IRChartData.java: values.put("feature_xxx", ...)現状の「最終6値のみ送信」を「全 feature_ 送信」へ拡張*(server がサブ軸を受け取れる前提)。

plugin / server 側の責務

  • IR 受信で feature_* を EAV テーブル song_chart_feature(song_sha256, axis_key, value, updated_at) に展開保持(axis_key = feature_ を除いた名と1:1)。
  • 集計(達成率 min(exscore/(notes*2),1.0) 重み・軸ごと上位N平均・0〜200 アンカー)を新 axis_key へ拡張。

バックフィル

#145 同方式: 楽曲全更新で全譜面再計算 → songdata.db を IR 側へ取り込み。自動 ALTER で旧 DB も列追加、旧値0は全更新で再計算され埋まる。

テスト方針

  • NotesRadarCalculatorTest 拡張: A分類値の算出・境界、既存6軸値の不変(回帰)NotesRadarFeature.EMPTY 要素数一致、SongDataDto round-trip 一致、列欠落 DB(旧スキーマ)で getDouble が 0 を返すこと。
  • IRChartDataTest: 新 feature_* キーが values に載ること。

未解決(実データ後決め)

  • soflan accel/decel/visual の重み配分(既存総合 soflan との二重計上回避係数)。
  • 各サブ軸の集計上位N。
  • パターン軸ではないため anchor は既存流用 or 比率系はそのまま。

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

次のチケットに後続 beatoraja - 機能 #313: ノーツレーダー6軸の細分化データモデル設計(弱点分析 #293 の前提整備)完了いづ さん2026/06/19

操作
次のチケットに先行 beatoraja - 機能 #315: ノーツレーダー細分化 Phase 2: B分類(パターン認識)サブ軸の新規解析実装完了いづ さん2026/06/232026/06/23

操作

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

  • 期日2026/06/22 にセット
  • 開始日2026/06/19 から 2026/06/22 に変更
  • 次のチケットに後続 機能 #313: ノーツレーダー6軸の細分化データモデル設計(弱点分析 #293 の前提整備) を追加

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

  • 次のチケットに先行 機能 #315: ノーツレーダー細分化 Phase 2: B分類(パターン認識)サブ軸の新規解析実装 を追加

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

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

実装に着手しました。

  • ブランチ: feature/314
  • 対応方針: #313 設計の Phase 1(A分類サブ軸)を本体側に実装。10サブ軸を raw 値・タクソノミー名で NotesRadarFeature/songdata.db に専用列として追加(既存6値先頭は不変=後方互換)、IR 伝送を「最終6値のみ」→「全 feature_*」へ拡張。EAV保持・集計は izu-ir 側(本リポジトリ外)のため対象外。

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

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

対応が完了しました。

概要

#313 設計の Phase 1。算出済みの A分類サブ軸10種を raw 値・タクソノミー名で NotesRadarFeature / songdata.db に専用列として露出し、IR 伝送を「最終6値のみ」→「全 feature_*(39キー)」へ拡張。既存6値先頭+23 raw 値は不変=後方互換。EAV保持・集計は izu-ir(本リポジトリ外)のためスコープ外。

変更点

  • NotesRadarFeature の record 末尾に10サブ軸を追加(EMPTY・互換コンストラクタ2種・コンパクトコンストラクタ更新)。追加: notes_density_peak_1s / notes_local_hardness / peak_burst_1s / peak_sustained_3s / chord_max_size / soflan_accel / soflan_decel / soflan_stop / soflan_visual / scratch_bss
  • NotesRadarCalculator: peakBurstNotes 公開化、soflan cluster score を speed差符号でイベント数比例分割(accel+decel==clusterScore)、逆スクロール(scroll<0)計数、scratch lane LongNote 始端計数。
  • SongDataDto / SongDataResultSetHandler / SQLiteSongDatabaseAccessor(SONG_COLUMNS・FEATURE_COLUMNS_SQL・Table 自動ALTER)に10列を同順反映。旧スキーマDBは自動ALTER+getDouble既定0で無痛拡張。
  • IRChartData: feature_* を6→全39キー送信へ拡張。
  • 変更ファイル: 本体6・テスト3 の計9件。

テスト

  • xvfb-run -a ./gradlew test(全スイート): 成功
  • 追加: 各サブ軸の算出・境界、soflan accel/decel 分割不変条件、逆スクロール、scratch BSS、既存6軸+23raw値の回帰不変、SongDataDto round-trip、旧スキーマDBで getDouble=0、IR 全39キー送信。

関連 MR

  • !68 (feature/314 → develop、merge commit 6db08830)

残課題 / 補足

  • anchor正規化・集計上位N・soflan重み配分は設計§8の後決め事項(server / Phase 2 範囲)。
  • 実データ反映はバックフィル(楽曲全更新で全譜面再計算→songdata.db を IR 取り込み、#145 同方式)。
  • 後続: #315(Phase 2: B分類・新規パターン解析)。

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