BL-119 Shipped

HTML double-escaping bug affects Article#content_html AND GameSession#recap

Root cause confirmed: this was a data problem, not a rendering bug. Whatever wrote Article #185’s content and GameSession #56’s recap during session 40 passed HTML-entity-escaped strings (e.g. “<p>…”) into create_article/update_article/update_game_session instead of raw HTML. Rails ActionText parsed that as a literal text node containing “<p>” as characters; to_plain_text decoded it back to visible “<p>” text, and content_html’s serializer re-escaped those literal characters for safe HTML output – reproducing the double-escaped symptom without any bug in the rendering pipeline itself.

Fix: re-saved both records (update_article id:185, update_game_session id:56) with genuine raw HTML content. content_html/recap render correctly now.

Verified the Feed’s reference-card modal (a separate render path – Article#content via to_plain_text + simple_format, not content_html) was never at risk, and locked that in with two new tests in test/controllers/game_sessions_controller_test.rb: a happy-path multi-paragraph render, and a regression guard proving double-escaped-looking content can’t become real markup (XSS-safe) if this ever recurs.

Shipped in v0.10.97 (bin/release, 2026-09-07).