What's Changed
- Remove redundant recentchanges_v2 feature flag by @Sanket17052006 in #13094
- fix(search-modal): count NoResults per settled query, not per keystroke by @lokesh in #13114
- fix(a11y): add title attributes to iframes (WCAG 2.4.1 H64) by @mekarpeles in #13012
- fix(a11y): mark decorative star rating symbols aria-hidden (WCAG 1.4.3) by @mekarpeles in #13028
- fix(a11y): fix color contrast in OlToggle sublabel and nav-bar work-menu (WCAG 1.4.3) by @mekarpeles in #13027
- fix(a11y): add role=group to OlSelectPopover host (aria-prohibited-attr WCAG 4.1.2) by @mekarpeles in #13037
- fix(a11y): add aria-label to generic-dropper arrow button (link-name WCAG 2.4.4) by @mekarpeles in #13029
- fix(a11y): use --link-blue for secondary login button (contrast WCAG 1.4.3) by @mekarpeles in #13030
- feat: add progress bar to OlToast and improve alignment of OlToast and OlBanner by @Sadashii in #13082
- feat(agentic): Richy issue enrichment via claude-code-action by @mekarpeles in #13075
- feat(agentic): add workflow_dispatch for manually testing Richy by @openlibrary-bot in #13117
- feat(search-modal): add ResultsShown analytics event by @lokesh in #13115
- fix(a11y): add aria-label to ReadButton dropdown summary (WCAG 4.1.2) by @lokesh in #13116
- fix(agentic): correct stale label names, add checklist-resolution discipline by @openlibrary-bot in #13118
- Update environment of cron service by @jimchamp in #13111
- Remove redundant superfast feature flag by @Sanket17052006 in #13100
- Remove redundant lists feature flag by @Sanket17052006 in #13087
- Replace history_v2 feature flag with is_librarian_or_higher() check by @Sanket17052006 in #13121
- Remove leftover recentchanges_v2 feature flag from openlibrary.yml by @gaurav0107 in #13122
- Migrate hide banner to FastAPI by @Shikhar-395 in #13096
- feat: preview tracking before data for #12881 by @Sadashii in #13099
- fix(add_book): use _data.pop to strip infobase metadata from matched author by @TechGenius-Karan in #13032
- Copy cover_i key from Solr. Fixes #11563 by @tfmorris in #11696
- Warm nexus cache before parallel docker pull in deploy by @cdrini in #12976
- Fix null ASINs being saved during promise item import by @cdrini in #12834
- Fix 3,063 lists with subjects failing to index into solr by @cdrini in #12873
- Fix ratings microdata appearing thrice on book page, causing SEO errors by @cdrini in #12975
- Move expiry date info inside ReturnForm and update My Loans table layout by @Sadashii in #12912
- Add issue labeling exclusion for GitHub bot accounts by @jimchamp in #13139
- Update S3 key removal script by @jimchamp in #13127
- Fix: Added want to read button on trending page by @dvvrtmshra in #13120
- chore(search): remove dead search-mode localStorage plumbing by @lokesh in #13124
- Fix SIM103 lint error in issue_comment_bot.py by @lokesh in #13143
- Fix author date precision matching by @MakenRosa in #13128
- Add environment favicons and logo badges for localhost & testing by @lokesh in #13125
- Fix issue labeling logic by @jimchamp in #13145
- Remove unnecessary feature and test by @hornc in #13147
- fix(agentic): allow non-write actors to trigger issue enrichment by @mekarpeles in #13154
- fix(agentic): exclude openlibrary-bot from issue enrichment by @mekarpeles in #13166
- feat(agentic): PR auto-responder via claude-code-action by @mekarpeles in #13164
- feat(ci): add weekly on-call Slack notification workflow by @jimchamp in #13168
- feat(agentic): scaffold Code Review Action trigger (NOP) by @mekarpeles in #13167
- feat(dev): add mockservices — mocks IA/third-party services for local dev (replaces /internal/fake/* stubs) by @mekarpeles in #13045
- switch bookworm to use amz creators API by @mekarpeles in #13173
- Add usefulness score to solr + UI by @cdrini in #11724
- feat: show alternatives banner on unavailable book pages by @Sadashii in #12910
- fix(ci): pass Slack channel as a secret, not a with: input by @mekarpeles in #13175
- fix: resolve download record bar overflowing containers globally by @RsbhThakur in #13091
- Migrate qrcode endpoint to FastAPI by @Shikhar-395 in #13140
- Fix: Add FastAPI validation bounds and test suites for patron check-ins and yearly goals endpoints (#13150) by @RsbhThakur in #13156
- Migrate api/link endpoint to FastAPI by @Sanket17052006 in #13144
- fix(docker): route staging's runtime pip fallback through internal PyPI mirror by @mekarpeles in #13178
- feat: Make Preview / Search Inside more visible on books page by @Sadashii in #13112
- fix(docker): source build_env.sh from /olsystem + wire PIP_INDEX_URL as a build arg by @mekarpeles in #13180
- Update monitoring UA list by @cdrini in #13181
- Comment out broken Unique Visitors chart (#12823) by @Sadashii in #12831
- Add genres and subgenres fields to work type definition and schema by @Chisomnwa in #13151
- fix: resolve volumes multiget endpoint failing with .json extension by @RsbhThakur in #13093
- fix(add_book): fix walrus operator precedence bug in author dedup (#13015) by @addy790 in #13021
- feat(api): allow /api/unlink caller to specify op type (dark vs mismatch) by @mekarpeles in #13183
- chore(docker): parameterize hardcoded dev ports for parallel worktrees by @mekarpeles in #13185
- refactor: convert Follow.html macro to template with safe attribute interpolation by @TechGenius-Karan in #12985
- feat(identifiers): add ITAN Book ID identifier (itan_technologies) by @mekarpeles in #12947
- Fix: crash on /books/add check page that prevents selecting matches o… by @dvvrtmshra in #13085
- fix: safe attribute construction for data-ol-link-track in 4 templates by @mekarpeles in #13187
- Redirect DAISY pages to Archive item pages by @nathanpixodeo in #13049
- Use docker compose extra_hosts to work around ol-home0 issues by @cdrini in #13198
New Contributors
- @gaurav0107 made their first contribution in #13122
- @TechGenius-Karan made their first contribution in #13032
- @dvvrtmshra made their first contribution in #13120
- @MakenRosa made their first contribution in #13128
- @addy790 made their first contribution in #13021
- @nathanpixodeo made their first contribution in #13049
Full Changelog: deploy-2026-07-02-at-19-32...deploy-2026-07-23-at-21-45