mirror of
https://github.com/got-feedBack/feedBack.git
synced 2026-08-11 03:09:57 +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>
56 lines
1.1 KiB
Plaintext
56 lines
1.1 KiB
Plaintext
__pycache__/
|
|
*.pyc
|
|
.venv/
|
|
venv/
|
|
dist/
|
|
build/
|
|
*.egg-info/
|
|
*.log
|
|
.env*
|
|
.DS_Store
|
|
.vscode/
|
|
data/web_library.db
|
|
static/*.ogg
|
|
static/*.mp3
|
|
static/*.wav
|
|
static/art/
|
|
static/audio_*
|
|
plugins/*/
|
|
!plugins/__init__.py
|
|
# Core plugins ship in-tree. They're plugins-as-plugins (plugin loader
|
|
# treats them identically to user-installed ones) but are bundled with
|
|
# the default container image and marked `"bundled": true` in their
|
|
# manifest. Add new core plugins as `!plugins/<id>/` exceptions.
|
|
!plugins/achievements/
|
|
!plugins/achievements/**
|
|
plugins/achievements/__pycache__/
|
|
!plugins/highway_3d/
|
|
!plugins/highway_3d/**
|
|
plugins/highway_3d/__pycache__/
|
|
!plugins/app_tour_library/
|
|
!plugins/app_tour_library/**
|
|
!plugins/app_tour_settings/
|
|
!plugins/app_tour_settings/**
|
|
!plugins/capability_inspector/
|
|
!plugins/capability_inspector/**
|
|
!plugins/minigames/
|
|
!plugins/minigames/**
|
|
plugins/minigames/__pycache__/
|
|
!plugins/tuner/
|
|
!plugins/tuner/**
|
|
plugins/tuner/__pycache__/
|
|
!plugins/input_setup/
|
|
!plugins/input_setup/**
|
|
node_modules/
|
|
test-results/
|
|
playwright-report/
|
|
|
|
/dlc
|
|
|
|
.vscode
|
|
Thumbs.db
|
|
*.tmp
|
|
*.swp
|
|
.idea/
|
|
plugins/support_creators
|