From 36e91574e8f7c4a0d4a30b704addaf86946b6c67 Mon Sep 17 00:00:00 2001 From: byrongamatos Date: Mon, 13 Jul 2026 12:01:17 +0200 Subject: [PATCH] =?UTF-8?q?fix(career):=20passport=20review=20polish=20?= =?UTF-8?q?=E2=80=94=20a11y=20semantics=20+=20seen-state=20guard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CodeRabbit follow-up on #936 (the one Major — overlay outside the click root — was verified false: the host mounts every screen.html root inside #plugin-career, ✕-close confirmed working live): - Tabs: aria-selected/aria-controls + role=tabpanel/aria-labelledby. - Book overlay: role=dialog + aria-modal + aria-label; focus moves to the close button on open and returns to the opener on close. - seenBadges(): guard non-object JSON so a corrupt stored value cannot throw on every passport refresh (covered by a new corruption test). - Fresh-session suppression test (badge seen → no re-notification). - Stylelint declaration-empty-line-before nit in .pp-stamp. Co-Authored-By: Claude Fable 5 --- CHANGELOG.md | 5 +++++ plugins/career/assets/career.css | 1 + plugins/career/screen.html | 8 ++++---- plugins/career/screen.js | 22 +++++++++++++++++++--- plugins/career/tests/passports.test.js | 22 ++++++++++++++++++++-- 5 files changed, 49 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 494a943..13e556e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 engine (`app.js`, `highway.js`, `playSong`, `showScreen`, the capability registry). ### Fixed +- **Career passports review polish** — the passport tabs and book overlay carry + proper ARIA semantics (`aria-selected`/`aria-controls`/`tabpanel`; + `role="dialog"` + `aria-modal` with focus moved to the close button on open + and restored on close), and a corrupt stored seen-badges value (e.g. a stray + `"null"`) can no longer throw on every passport refresh. - **The packaged desktop app could not start (`ModuleNotFoundError: No module named 'appstate'`).** feedback-desktop's `scripts/bundle-slopsmith.sh` copies a *hardcoded list* of core files into the app bundle — `server.py`, `VERSION`, `lib/`, `data/`, diff --git a/plugins/career/assets/career.css b/plugins/career/assets/career.css index b21d9f2..b6c09b9 100644 --- a/plugins/career/assets/career.css +++ b/plugins/career/assets/career.css @@ -257,6 +257,7 @@ /* The rubber stamp */ .pp-stamp { --pp-rot: 0deg; + position: relative; display: flex; flex-direction: column; diff --git a/plugins/career/screen.html b/plugins/career/screen.html index 756f369..3fa5047 100644 --- a/plugins/career/screen.html +++ b/plugins/career/screen.html @@ -4,11 +4,11 @@
- - + +
-
+

Earn stars by playing songs well — 60% accuracy is a star, 75% two, 85% three. Stars unlock bigger stages, and the crowd plays along with you.

@@ -26,7 +26,7 @@
-