プロジェクト

全般

プロフィール

機能 #317

完了

ノーツレーダー細分化: CHARGE/LN サブ軸の新設と BSS の LN 再分類

機能 #317: ノーツレーダー細分化: CHARGE/LN サブ軸の新設と BSS の LN 再分類

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

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

100%

予定工数:

説明

目的

#313 タクソノミーに CHARGE/LN のサブ軸が未定義(§4 に CHARGE 節がない)だったため、LN/CHARGE サブ軸を新設し、BSS を SCRATCH から LN 親へ再分類する。#293(弱点分析)のドリルダウンで LN 系の弱点を表現できるようにする。

親設計: #313。前提: #314(Phase 1 raw)/ #315(Phase 2 raw)/ #316(本体 0–200 正規化・anchor 較正)の縦串・正規化基盤。

方針確認(ユーザー指示): BSS は リネームせず再分類のみ(物理キー scratch_bss は維持)。LN サブ軸は ln_density / ln_overlap / ln_max_simultaneous の3軸(CN/HCN 分離は今回見送り)。

スコープ

1. 設計拡張(#313 文書更新)

  • docs/notes-radar-subdivision-design.md§4.8 CHARGE/LN 節を追加し、下記サブ軸を定義。
  • BSS の所属を明記: 物理キーは scratch_bss のまま(破壊的変更回避)だが、論理カテゴリは LN 親としてドリルダウンにぶら下げる(リネームしない)。

2. 新設 LN/CHARGE サブ軸(3軸)

axis_key 定義 raw 入力(既存流用)
ln_density 保持密度=LN総保持秒/曲長 longNoteSecondsTotal(raw: feature_ln_seconds_total)
ln_overlap LN中の同時押し=他レーンLN保持中の打鍵(擬似/ロック処理) chargeNotesDuringLongNote(raw: feature_charge_notes_during_ln)
ln_max_simultaneous 最大同時LN保持数 maxSimultaneousLongNotes(raw: feature_max_simultaneous_ln)

raw 入力は #314 で既に算出・伝送済みなので、主作業は「正規化サブ軸としての露出+anchor 較正」

3. 実装(#315/#316 と同型の縦串)

  • NotesRadarFeature 末尾に 3 コンポーネント追加(後方互換:既存不変)。
  • NotesRadarCalculator.calculate: 既存 metrics を流用し #316 同様に radarFromAnchors(... / durationSeconds, *_SCORE_ANCHORS, SUBAXIS_RADAR_ANCHORS) で 0–200 化。
  • SongDataDto / SongDataResultSetHandler / SQLiteSongDatabaseAccessor(SONG_COLUMNS / FEATURE_COLUMNS_SQL / Table 自動ALTER)/ IRChartDatafeature_ln_density / feature_ln_overlap / feature_ln_max_simultaneous を追加。
  • anchor 数値は #316 同様、実データ分布(分位点)から較正(暫定線形 → 実データ後確定)。

4. BSS 再分類

  • コード上の scratch_bss(カラム/IRキー/server EAV)は 不変
  • タクソノミー文書と #293 接続側でのカテゴリ所属を LN 親へ(必要に応じて両記でなく LN 主所属)。

5. テスト

  • 各サブ軸の anchor 区間境界(直下/直上)・単調性・0/200 クランプ、既存6軸・既存 raw の不変(回帰)。EMPTY ゼロ・DTO round-trip・旧スキーマ0デフォルト・IR キー数。

バックフィル

  • #145 同方式:全曲更新(gradlew updateAllSongs)で再計算し、新カラムを埋める(自動 ALTER で旧 DB も列追加)。

関連

  • #313(設計)/ #314 / #315 / #316(正規化・anchor)
  • #293(弱点分析パネル)への接続(CHARGE 親→ LN サブ軸のドリルダウン、BSS を含む)。

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

次のチケットに後続 beatoraja - 機能 #316: ノーツレーダー細分化 Phase 3: B分類パターン軸の 0–200 anchor 実データ較正と本体正規化完了いづ さん2026/06/242026/06/24

操作

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

  • 期日2026/06/25 にセット
  • 開始日2026/06/20 から 2026/06/25 に変更
  • 次のチケットに後続 機能 #316: ノーツレーダー細分化 Phase 3: B分類パターン軸の 0–200 anchor 実データ較正と本体正規化 を追加

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

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

実装に着手しました。

  • ブランチ: feature/317
  • 対応方針: 既存 raw(feature_ln_seconds_total / feature_charge_notes_during_ln / feature_max_simultaneous_ln)を流用し、CHARGE 親配下に LN サブ軸3軸(ln_density / ln_overlap / ln_max_simultaneous)を #316 と同型の縦串で 0–200 正規化露出。anchor はローカル実譜面52,449件の分布から #316 と同手法で較正済み。BSS は物理キー scratch_bss 不変・論理カテゴリのみ LN 親へ再分類(文書・#293 接続側)。

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

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

対応が完了しました。

概要

CHARGE 親軸配下に LN サブ軸3軸(ln_density / ln_overlap / ln_max_simultaneous)を新設し、#314 算出済みの既存 raw を流用して 0–200 正規化サブ軸として露出。BSS は物理キー不変のまま論理カテゴリのみ LN 親へ再分類。#316 と同型の縦串で strictly additive(既存6主軸・25サブ軸は不変)。

変更点

  • 新設サブ軸3軸(全て A=既存raw流用の正規化露出、新規走査なし): ln_densityfeature_ln_seconds_total÷dur)/ ln_overlapfeature_charge_notes_during_ln÷dur)/ ln_max_simultaneousfeature_max_simultaneous_ln raw)。
  • 正規化サブ軸の DB列/IRキーは raw と別名の clean axis_key(feature_ln_density 他、_radar サフィックス無し)。NotesRadarFeature 81→84 component、IR feature_* キー 81→84。
  • anchor は #316 と同手法で実譜面52,449件から較正(scripts/analyze_notes_radar_lnclass.py)。raw も併送。
  • BSS 再分類: 物理キー scratch_bss(DB列・IRキー・server EAV)不変、論理カテゴリのみ LN 親へ(文書・#293 接続側のみ、コード変更なし)。
  • 設計doc §4.8 / §4.5 BSS注記 / §8' #317較正 を追記。
  • 変更ファイル: 本体6(NotesRadarFeature / NotesRadarCalculator / SongDataDto / SongDataResultSetHandler / SQLiteSongDatabaseAccessor / IRChartData)+ テスト3 + 設計doc + 較正スクリプト = 11件。

テスト

  • xvfb-run -a ./gradlew test : 成功(1062 tests, 0 failed, 8 skipped)

関連 MR

  • !72 (feature/317 → develop) マージ済み

残課顔 / 補足

  • 本番適用時は #145 同方式の全曲更新(gradlew updateAllSongs)で新列をバックフィル(自動 ALTER で旧 DB も列追加)。
  • server 側 EAV 展開・集計・#293 パネル描画は本チケット範囲外(#293 側)。

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