mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-24 05:41:53 +00:00
* feat(career): gigs backend — propose a setlist, log the completed set
Career v3, WS3 (backend half). A gig is career's verb:
- POST /gigs/propose {instrument, genre, size}: setlist from the
passport's own stubs — qualifying songs (per the genre's badge bar,
family-aware) shuffled for a free re-roll, topped with the
highest-accuracy near-bar songs as stakes, and filled from UNPLAYED
genre songs when the passport is young (the first gig is how stubs
start). Names the highest venue the current stars can book.
- POST /gigs: logs a COMPLETED set only (abandoned sets never log — no
fail state). Per-song accuracy = MAX(last_accuracy) from song_stats,
freshly written by the set's own plays; encore = avg ≥ the data-driven
bar (passports.json gig.encore_accuracy, 0.75). Appends to the career
state file (same atomic _save_json pattern).
- Passports view: per-passport gigs (newest first, capped 20) and
per-instrument gig_count — the profile wall's gig line lights up.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* fix(career): gig backfill offsets by qualifying taken, not picks length
CodeRabbit on #954: after the stakes loop appends near-bar songs,
qualifying[len(picks):] overshoots and skips eligible qualifying songs
— a stocked passport could still get a short set.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
44 lines
1.4 KiB
JSON
44 lines
1.4 KiB
JSON
{
|
|
"badge_requirement": {
|
|
"songs": 5,
|
|
"min_stars": 2
|
|
},
|
|
"gig": {
|
|
"min_songs": 3,
|
|
"max_songs": 5,
|
|
"stakes_songs": 2,
|
|
"encore_accuracy": 0.75
|
|
},
|
|
"families": [
|
|
{ "key": "metal", "match": ["metal", "djent", "grindcore", "thrash", "doom"] },
|
|
{ "key": "blues", "match": ["blues"] },
|
|
{ "key": "jazz", "match": ["jazz", "bebop", "swing", "bossa"] },
|
|
{ "key": "funk", "match": ["funk", "disco"] },
|
|
{ "key": "rock", "match": ["rock", "punk", "grunge", "shoegaze"] }
|
|
],
|
|
"genres": {
|
|
"blues": { "virtuoso_nodes": { "guitar": ["blues_shuffle"] } },
|
|
"rock": { "virtuoso_nodes": { "guitar": ["rock_power_backbeat"] } },
|
|
"metal": { "virtuoso_nodes": { "guitar": ["melodic_metal_gallop"] } },
|
|
"funk": { "virtuoso_nodes": { "guitar": ["sixteenth_pocket"] } },
|
|
"jazz": { "virtuoso_nodes": { "guitar": ["vl_shells"] } }
|
|
},
|
|
"drill_labels": {
|
|
"blues_shuffle": "Blues Shuffle",
|
|
"rock_power_backbeat": "Power Chords & Backbeat",
|
|
"melodic_metal_gallop": "Gallop Picking",
|
|
"sixteenth_pocket": "16th Pocket",
|
|
"vl_shells": "Shell Voicings"
|
|
},
|
|
"graded_instruments": [
|
|
"guitar",
|
|
"keys"
|
|
],
|
|
"instruments": [
|
|
"guitar",
|
|
"bass",
|
|
"keys",
|
|
"drums"
|
|
]
|
|
}
|