操作
機能 #317
完了ノーツレーダー細分化: CHARGE/LN サブ軸の新設と BSS の LN 再分類
機能 #317:
ノーツレーダー細分化: CHARGE/LN サブ軸の新設と BSS の LN 再分類
説明
目的¶
#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)/IRChartDataにfeature_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 も列追加)。
関連¶
操作