Summary
feedBack's master-difficulty slider (feedBack#48) filters the highway per phrase using each phrase's levels[] — one note/chord/anchor set per authored difficulty tier. Sloppaks saved from this editor can't actually use it: the editor authors one flat note list per arrangement, so every synthesized tier ends up identical.
This is already called out in our own CHANGELOG (search "Sloppak save now repopulates each phrase's per-difficulty"):
Sloppak save now repopulates each phrase's per-difficulty levels[].notes/chords/anchors from the editor's flat lists. Previously _save_sloppak round-tripped phrases verbatim from the source archive, so the highway's mastery-filter consumer (static/highway.js, which reads notes from phrases[].levels[idx].notes whenever phrases are present) silently rendered the original archive chart [...] This makes the mastery slider a no-op for editor-saved sloppaks (every level shows the same notes), which matches the editor's single-difficulty authoring model.
Possible upgrade
Give the editor a way to author distinct per-tier content for a phrase, e.g.:
- A "difficulty tier" mode where a phrase (Shift+P) can hold N variants — full chart down to a simplified version — mirroring how RS2014
<level difficulty="N"> blocks work.
- At minimum, a bulk "simplify this phrase" command that derives a lower tier from the existing full tier (thin dense chords, drop ornaments/hammer-pull chains, drop the shortest-duration notes first), so authors aren't hand-duplicating notes per level.
- Update the sloppak save path (
_save_sloppak) to persist the authored per-tier data instead of repeating the flat list across every levels[] entry.
Why it matters
Without this, the master-difficulty / difficulty-ladder feature only works for GP-imported RS2014 charts. Every editor-authored or editor-edited sloppak — meant to be the primary hand-editable format — permanently loses a feature that end users otherwise see on imported content.
References
- feedBack core CLAUDE.md — "Master-difficulty (feedBack#48)" / difficulty ladder docs
- This repo's
CHANGELOG.md — the "Sloppak save now repopulates each phrase's per-difficulty levels[]..." entry
- feedBack core
static/highway.js _rebuildMasteryFilter() (consumer of phrases[].levels[])
- feedBack core
lib/song.py — PhraseLevel / Phrase data classes
Summary
feedBack's master-difficulty slider (feedBack#48) filters the highway per phrase using each phrase's
levels[]— one note/chord/anchor set per authored difficulty tier. Sloppaks saved from this editor can't actually use it: the editor authors one flat note list per arrangement, so every synthesized tier ends up identical.This is already called out in our own CHANGELOG (search "Sloppak save now repopulates each phrase's per-difficulty"):
Possible upgrade
Give the editor a way to author distinct per-tier content for a phrase, e.g.:
<level difficulty="N">blocks work._save_sloppak) to persist the authored per-tier data instead of repeating the flat list across everylevels[]entry.Why it matters
Without this, the master-difficulty / difficulty-ladder feature only works for GP-imported RS2014 charts. Every editor-authored or editor-edited sloppak — meant to be the primary hand-editable format — permanently loses a feature that end users otherwise see on imported content.
References
CHANGELOG.md— the "Sloppak save now repopulates each phrase's per-difficulty levels[]..." entrystatic/highway.js_rebuildMasteryFilter()(consumer ofphrases[].levels[])lib/song.py—PhraseLevel/Phrasedata classes