mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-07-22 12:52:29 +00:00
Adds the Achievements & Feats of Power local engine, fully offline. Core (static/v3/profile.js): the Profile screen becomes tabbed exactly like v3 Settings (.fb-tabbar/.fb-tab/.fb-tabpanel, active tab persisted in localStorage 'v3-profile-tab'). A Profile (main) tab carries the existing cards + a Feats trophy-shelf mount (#v3-profile-feats-slot, earned-only), and an Achievements tab carries a plugin mount (#v3-profile-achievements-mount) + empty-state note. A new `v3:profile-rendered` event fires after every render so the plugin re-injects (mirrors v3:settings-rendered). New bundled plugin (plugins/achievements/): SQLite engine (unlocks/counters/comp_ledger/sync_queue) with pure threshold/criterion math in the testable sibling engine.py (P-V); routes activity/ report-unlock/report-criterion/catalog/earned/feats/remove-me. Feats read activity counters only (batched song:ended POST; notes only when notedetect present — graceful degradation); competency Achievements evaluate from progression events only — the integration law, never crossed. Catalogue is always shown (locked=greyed), grouped by the real progression paths (Global/Guitar/Bass/Drums/Keys, auto-extending) with per-category earned badges. Versioned window.feedBack.achievements registration API with the __feedBackAchievementsPending load-order queue + achievements:ready event. Verified natively (uvicorn) end-to-end + Playwright (tabbar, earned-only Feats shelf, greyed catalogue, registration API, zero console errors); 24 plugin tests pass incl. the integration-law assertion. Opt-in/privacy/data-min gate (PR2) and the hosted wall (PR3) follow. Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
102 lines
2.9 KiB
JSON
102 lines
2.9 KiB
JSON
{
|
|
"version": 1,
|
|
"feats": [
|
|
{
|
|
"id": "notes_total",
|
|
"title": "Note Hunter",
|
|
"description": "Hit a colossal number of notes across all your practice.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": false,
|
|
"needs_notedetect": true,
|
|
"counter": "notes_total",
|
|
"tiers": [100000, 1000000, 10000000],
|
|
"tier_titles": ["Note Hunter", "Million-Note Maestro", "Ten-Million-Note Titan"]
|
|
},
|
|
{
|
|
"id": "notes_session",
|
|
"title": "Marathon",
|
|
"description": "Hit 25,000 notes in a single sitting.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": false,
|
|
"needs_notedetect": true,
|
|
"counter": "notes_session_max",
|
|
"tiers": [25000],
|
|
"tier_titles": ["Marathon"]
|
|
},
|
|
{
|
|
"id": "streak_insong",
|
|
"title": "Untouchable",
|
|
"description": "Land a huge run of consecutive in-song hits with no miss.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": false,
|
|
"needs_notedetect": true,
|
|
"counter": "streak_insong_max",
|
|
"tiers": [1000, 5000],
|
|
"tier_titles": ["Untouchable", "Truly Untouchable"]
|
|
},
|
|
{
|
|
"id": "songs_done",
|
|
"title": "Road Warrior",
|
|
"description": "Finish a mountain of songs.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": false,
|
|
"needs_notedetect": false,
|
|
"counter": "songs_done",
|
|
"tiers": [1000, 5000],
|
|
"tier_titles": ["Road Warrior", "Road Legend"]
|
|
},
|
|
{
|
|
"id": "time_total",
|
|
"title": "Time Served",
|
|
"description": "Pour hundreds of hours into practice.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": false,
|
|
"needs_notedetect": false,
|
|
"counter": "time_total_seconds",
|
|
"tiers": [1800000, 7200000],
|
|
"tier_titles": ["Time Served (500h)", "Time Served (2,000h)"]
|
|
},
|
|
{
|
|
"id": "chart_encore",
|
|
"title": "Encore",
|
|
"description": "Play the same chart again and again and again.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": false,
|
|
"needs_notedetect": false,
|
|
"counter": "chart_encore_max",
|
|
"tiers": [100, 500],
|
|
"tier_titles": ["Encore", "Standing Ovation"]
|
|
},
|
|
{
|
|
"id": "secret_witching",
|
|
"title": "The Witching Hour",
|
|
"description": "Practise in the dead of night, seven nights running.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": true,
|
|
"needs_notedetect": false,
|
|
"counter": "witching_nights_run",
|
|
"tiers": [7],
|
|
"tier_titles": ["The Witching Hour"]
|
|
},
|
|
{
|
|
"id": "secret_combo",
|
|
"title": "Hidden Track",
|
|
"description": "You found the hidden track.",
|
|
"category": "global",
|
|
"sourceId": "achievements",
|
|
"secret": true,
|
|
"needs_notedetect": false,
|
|
"counter": null,
|
|
"tiers": [],
|
|
"tier_titles": ["Hidden Track"]
|
|
}
|
|
]
|
|
}
|