forked from retoor/devplacepy
Outcome: done Changed: devplacepy/routers/profile/index.py:205-208; devplacepy/schemas/content.py:71 Verified by: `python -c "from devplacepy.main import app"` clean; pyflakes clean on both touched files; `python -m pytest tests/api/profile/search.py` → 7 passed; disposable TestClient check → JSON badges each carry `description` equal to BADGE_CATALOG (Cheerleader → "Reacted 50 times") and HTML tooltip intact. Full `make test` not runnable here: only Python 3.11 installed, project requires >=3.12; CI runs the full suite. Findings: index.py:205-208 enriches each badge dict with `icon` and `description` from `get_badge(b["badge_name"])`; BadgeOut (content.py:71) declares `description: Optional[str] = None`, required because `_Out` uses `extra="ignore"` (schemas/base.py:7). BadgeOut feeds only ProfileOut.badges (schemas/profile.py:32). profile.html:55 tooltips read only `badge_name` from the dict, so HTML is unchanged. tests/api/profile/awards_tab.py:81 fails on base state too (patch round-trip) — pre-existing, unrelated. Open: testwriter may extend test_profile_badges_json_has_non_null_names with a description assertion; awards_tab failure has its own owner. Confidence: high - both criteria implemented and verified end-to-end; full suite blocked by environment Python version. Typosaurus-Run: 3828c0c223934696842a70e9d9efb9e0 Typosaurus-Node: 974d049e1b1e4a01923bdf9f583d07cd Typosaurus-Agent: @nadia Refs: #157