mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-10-02 19:21:50 +00:00
1. Add data/progression/paths/vocals.json (5 levels, instrument:vocals
challenges) so the Vocals tile appears on wizard step 4.
2. Add vocals to INSTRUMENTS in plugins/input_setup/screen.js (mode:audio)
so the wizard renders a Vocals panel when that path is selected.
3. In renderAudioPanel, branch vocals away from noteDetect.launchCalibration
to window.feedBack.vocalCalibration.launch({requester,onDone,onCancel}).
Guard: facade absent (vocal-highway plugin disabled) → shows a notice and
auto-advances via setTimeout; never hangs or throws.
4. Update test_bundled_content_loads_clean to expect the 'vocals' path id.
5. Add tests/js/vocal_calibration_handoff.test.js — 4 tests covering:
- vocals.json shape (id/icon/5 levels, namespaced challenge ids)
- INSTRUMENTS includes vocals
- fallback when facade absent (no hang/throw, auto-advance)
- facade.launch called with correct args, onDone resolves wizard
Facade contract: window.feedBack.vocalCalibration frozen {version:1,
launch({requester,onDone,onCancel})} — built by Dwight (vocal-highway).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H2bM5jSbMskpdxm2CmuQVj
129 lines
4.0 KiB
JSON
129 lines
4.0 KiB
JSON
{
|
|
"id": "vocals",
|
|
"name": "Vocals",
|
|
"icon": "vocals",
|
|
"order": 5,
|
|
"levels": [
|
|
{
|
|
"level": 1,
|
|
"required": 2,
|
|
"challenges": [
|
|
{
|
|
"id": "vocals.l1.first-phrase",
|
|
"title": "First Phrase",
|
|
"description": "Finish any vocal song with pitch detection on.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "target": 1 }
|
|
},
|
|
{
|
|
"id": "vocals.l1.clean-run",
|
|
"title": "Clean Run",
|
|
"description": "Score 80%+ accuracy on a vocal song.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "min_accuracy": 0.8, "target": 1 }
|
|
},
|
|
{
|
|
"id": "vocals.l1.daily-grind",
|
|
"title": "Daily Grind",
|
|
"description": "Complete 3 daily quests.",
|
|
"goal": { "type": "quest_completed", "period": "daily", "target": 3 }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"level": 2,
|
|
"required": 2,
|
|
"challenges": [
|
|
{
|
|
"id": "vocals.l2.five-songs",
|
|
"title": "Warming Up",
|
|
"description": "Finish 5 vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "target": 5 }
|
|
},
|
|
{
|
|
"id": "vocals.l2.sharpshooter",
|
|
"title": "On Pitch",
|
|
"description": "Score 90%+ accuracy on a vocal song.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "min_accuracy": 0.9, "target": 1 }
|
|
},
|
|
{
|
|
"id": "vocals.l2.arcade-debut",
|
|
"title": "Arcade Debut",
|
|
"description": "Play 3 FeedBarcade rounds.",
|
|
"goal": { "type": "minigame_run", "target": 3 }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"level": 3,
|
|
"required": 2,
|
|
"challenges": [
|
|
{
|
|
"id": "vocals.l3.repertoire",
|
|
"title": "Repertoire",
|
|
"description": "Finish 10 different vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "distinct": true, "target": 10 }
|
|
},
|
|
{
|
|
"id": "vocals.l3.consistent",
|
|
"title": "Consistent",
|
|
"description": "Score 85%+ accuracy on 5 vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "min_accuracy": 0.85, "target": 5 }
|
|
},
|
|
{
|
|
"id": "vocals.l3.weekly-warrior",
|
|
"title": "Weekly Warrior",
|
|
"description": "Complete 2 weekly quests.",
|
|
"goal": { "type": "quest_completed", "period": "weekly", "target": 2 }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"level": 4,
|
|
"required": 2,
|
|
"challenges": [
|
|
{
|
|
"id": "vocals.l4.streak-week",
|
|
"title": "Seven-Day Streak",
|
|
"description": "Reach a 7-day play streak.",
|
|
"goal": { "type": "streak_reached", "days": 7 }
|
|
},
|
|
{
|
|
"id": "vocals.l4.precision",
|
|
"title": "Pitch Perfect",
|
|
"description": "Score 95%+ accuracy on 3 vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "min_accuracy": 0.95, "target": 3 }
|
|
},
|
|
{
|
|
"id": "vocals.l4.marathon",
|
|
"title": "Marathon",
|
|
"description": "Finish 25 vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "target": 25 }
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"level": 5,
|
|
"required": 2,
|
|
"challenges": [
|
|
{
|
|
"id": "vocals.l5.collector",
|
|
"title": "Collector",
|
|
"description": "Earn 5,000 lifetime Decibels.",
|
|
"goal": { "type": "db_earned", "amount": 5000 }
|
|
},
|
|
{
|
|
"id": "vocals.l5.virtuoso",
|
|
"title": "Virtuoso",
|
|
"description": "Score 95%+ accuracy on 10 different vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "min_accuracy": 0.95, "distinct": true, "target": 10 }
|
|
},
|
|
{
|
|
"id": "vocals.l5.dedicated",
|
|
"title": "Dedicated",
|
|
"description": "Finish 50 vocal songs.",
|
|
"goal": { "type": "song_completed", "instrument": "vocals", "target": 50 }
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|