<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Release-Notes on OpenEMR</title><link>https://www.open-emr.org/release-notes/</link><description>Recent content in Release-Notes on OpenEMR</description><generator>Hugo</generator><language>en-us</language><copyright>OpenEMR Foundation, Inc</copyright><atom:link href="https://www.open-emr.org/release-notes/index.xml" rel="self" type="application/rss+xml"/><item><title>OpenEMR 8.2.0 Release Notes</title><link>https://www.open-emr.org/release-notes/8.2.0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.open-emr.org/release-notes/8.2.0/</guid><description>&lt;div class="release-status release-status-final" role="status"&gt;
 &lt;strong&gt;FINAL&lt;/strong&gt; — OpenEMR &lt;code&gt;8.2.0&lt;/code&gt; released 2026-07-08.
&lt;/div&gt;
&lt;h1 id="openemr-820--release-notes"&gt;OpenEMR 8.2.0 — Release Notes&lt;/h1&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12822"&gt;#12822&lt;/a&gt; feat(portal): Add view only mode to portal appointments — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12820"&gt;#12820&lt;/a&gt; feat(portal): Add view only mode to portal appointments — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12810"&gt;#12810&lt;/a&gt; feat(database): add DBAL query-audit middleware — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12753"&gt;#12753&lt;/a&gt; feat(bc): add internal deprecation utility — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12651"&gt;#12651&lt;/a&gt; feat(docker): declare HOST_UID/HOST_GID env in insane dev compose — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12647"&gt;#12647&lt;/a&gt; feat(docker): declare HOST_UID/HOST_GID env in dev compose files — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12642"&gt;#12642&lt;/a&gt; feat(flex): honor HOST_UID/HOST_GID for apache uid alignment — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12609"&gt;#12609&lt;/a&gt; feat(docker): add fsupgrade-11.sh for 8.1.1 release (master sync) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12608"&gt;#12608&lt;/a&gt; feat(docker): add fsupgrade-11.sh for 8.1.1 release on rel-810 — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12603"&gt;#12603&lt;/a&gt; feat(codes): Modernized DBAL/ORM service path for code type syncing — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12580"&gt;#12580&lt;/a&gt; feat(ci): add byte-identical canary + config to FILES_ALL with context-aware diff logic — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12577"&gt;#12577&lt;/a&gt; feat(ci): auto-sync byte-identical files from master to rel branches — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12539"&gt;#12539&lt;/a&gt; feat(dx): Add REPL tool for dev envs — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12534"&gt;#12534&lt;/a&gt; feat(insurance): client-side phone/fax validation on insurance + pharmacy edit forms — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12481"&gt;#12481&lt;/a&gt; feat(routing): Symfony-routing strangler seam for zend_modules — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12484"&gt;#12484&lt;/a&gt; feat(faxsms): encrypt unassigned inbound faxes at rest — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11265"&gt;#11265&lt;/a&gt; feat(claimrev): install ClaimRev Connect module as Composer dependency — @claimrevolution&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12397"&gt;#12397&lt;/a&gt; feat(ehi): extract (b)(10) EHI table set to b10-tables.yml — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12267"&gt;#12267&lt;/a&gt; feat(cli): refuse to run OpenEMR CLI as root — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12335"&gt;#12335&lt;/a&gt; feat(phpstan): SqlReservedWordRule + automated MySQL/MariaDB drift detection — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12163"&gt;#12163&lt;/a&gt; feat(vitals): add input validation for numeric fields — @lilit1121&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11973"&gt;#11973&lt;/a&gt; feat(crypto): add database encryption opt-out setting — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12096"&gt;#12096&lt;/a&gt; feat(crypto): add encryption status check methods and conditional database encryption — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12093"&gt;#12093&lt;/a&gt; feat(encryption): Add DBAL-based key storage and extract loadWithEngines — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11912"&gt;#11912&lt;/a&gt; feat(auth): add audit logging for failed TOTP, U2F, and OAuth2 MFA attempts — @aanand-1706&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12000"&gt;#12000&lt;/a&gt; feat(crypto): Refactor filesystem encryption — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12035"&gt;#12035&lt;/a&gt; feat(ci): auto-merge dependabot docker-compose updates — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11594"&gt;#11594&lt;/a&gt; feat(phpstan): add rule to forbid CoversClass/CoversFunction attributes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11621"&gt;#11621&lt;/a&gt; feat(phpstan): forbid unsafe catch blocks and exit/die inside them — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11631"&gt;#11631&lt;/a&gt; feat(cli): Expose installer in symfony/console command — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11650"&gt;#11650&lt;/a&gt; feat(phpstan): forbid shell execution functions and eval() — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11687"&gt;#11687&lt;/a&gt; feat(background-services): add run-all-due REST and CLI entry points — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11705"&gt;#11705&lt;/a&gt; feat(ci): Run API tests through Front Controller — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11742"&gt;#11742&lt;/a&gt; feat(db): Base-level ORM installation — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11797"&gt;#11797&lt;/a&gt; feat(storage): add CacheDirectory for secure cache paths — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11830"&gt;#11830&lt;/a&gt; feat(cli): add API enablement flags to install command — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11946"&gt;#11946&lt;/a&gt; feat(crypto): add encryptForDatabase and decryptFromDatabase methods — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10904"&gt;#10904&lt;/a&gt; feat(validation): add email_direct validation and native email input type (#10866) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/8220"&gt;#8220&lt;/a&gt; feat(flow-board): show lock icon for signed/locked encounters — @juggernautsei&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11559"&gt;#11559&lt;/a&gt; feat: support redis session locking and fix redis encryption support over wire — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11519"&gt;#11519&lt;/a&gt; feat(storage): Flysystem setup; first example integration — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10943"&gt;#10943&lt;/a&gt; feat(cli): Add doctrine/migrations to cli — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11139"&gt;#11139&lt;/a&gt; feat(crypto): Separate password encryption (2/2) — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11135"&gt;#11135&lt;/a&gt; feat(crypto): Separate password encryption (1/2) — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11448"&gt;#11448&lt;/a&gt; feat(encryption): Key material storage APIs — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11475"&gt;#11475&lt;/a&gt; feat(encryption): New core API - &lt;code&gt;CipherSuiteInterface&lt;/code&gt; — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11452"&gt;#11452&lt;/a&gt; feat(encryption): CryptoInterface and modern Encryption compatibility bridge — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11378"&gt;#11378&lt;/a&gt; feat(email): add email send test to admin interface — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11337"&gt;#11337&lt;/a&gt; feat(background-services): add REST API endpoints for listing and triggering services — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11335"&gt;#11335&lt;/a&gt; feat(background-services): add CLI tooling for listing, running, and crontab generation — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11424"&gt;#11424&lt;/a&gt; feat(ui): display software version in fixed footer — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11410"&gt;#11410&lt;/a&gt; feat: support worktrees in the easy dev environments — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/9943"&gt;#9943&lt;/a&gt; feat(routing): Initial front-controller implementation — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11002"&gt;#11002&lt;/a&gt; feat(branding): make main menu logo link and title configurable (#10986) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11294"&gt;#11294&lt;/a&gt; feat(encryption): Add encrypt methods to new ciphers — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11250"&gt;#11250&lt;/a&gt; feat(phpstan): forbid direct access to request superglobals — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11001"&gt;#11001&lt;/a&gt; feat(config): Start to set up PSR-11 DI container — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11138"&gt;#11138&lt;/a&gt; feat(database): Add ConnectionManager for named database connections — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10795"&gt;#10795&lt;/a&gt; feat(phpstan): Add rule for blocking direct instantiation of certain classes — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10778"&gt;#10778&lt;/a&gt; feat(db): Migrate ADODB setup in Gacl to new factory method — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10776"&gt;#10776&lt;/a&gt; feat(db): Prepare central ADODB setup — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11379"&gt;#11379&lt;/a&gt; feat(csrf): add CsrfUtils::checkCsrfInput() convenience method — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10244"&gt;#10244&lt;/a&gt; feat(session): porting core and portal apps to HttpSessionFactory — @zmilan&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11056"&gt;#11056&lt;/a&gt; feat(users): add email field to user admin UI — @rollingventures&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11075"&gt;#11075&lt;/a&gt; feat: other payer claim control number for secondary claims — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10837"&gt;#10837&lt;/a&gt; feat(api): add prescription REST API endpoints with tests — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10806"&gt;#10806&lt;/a&gt; feat(patients): optionally generate csv file of duplicate patients — @ruthkonyn&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10777"&gt;#10777&lt;/a&gt; feat(db): Migrate ADODB setup in sql.inc to new factory method — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/8932"&gt;#8932&lt;/a&gt; feat(api): add missing appointment fields and auto-set pc_time/pc_informant — @tswagger&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10704"&gt;#10704&lt;/a&gt; feat(db): Support Doctrine migrations for new schema migrations — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10723"&gt;#10723&lt;/a&gt; feat(ci): Add workflow summaries for PHPStan failures — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10720"&gt;#10720&lt;/a&gt; feat(phpstan): add generator for database table type aliases — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10719"&gt;#10719&lt;/a&gt; feat(db): add structure to connection parsing, prepare reading socket option — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10674"&gt;#10674&lt;/a&gt; feat(internals): add ServiceContainer for centralized service access — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10715"&gt;#10715&lt;/a&gt; feat(phpstan): Add deprecation rules for PHPStan — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10697"&gt;#10697&lt;/a&gt; feat(phpstan): enforce literal-string for translation functions — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10643"&gt;#10643&lt;/a&gt; feat(facility): add organization type field — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10679"&gt;#10679&lt;/a&gt; feat(core): add typed getKernel() method to OEGlobalsBag — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10616"&gt;#10616&lt;/a&gt; feat(phpstan): add rule to forbid empty() in favor of explicit checks — @kojiromike&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="bug-fixes"&gt;Bug Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12842"&gt;#12842&lt;/a&gt; fix(translation): Ensure xl() doesn&amp;rsquo;t leave hints when translation is disabled — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12840"&gt;#12840&lt;/a&gt; fix(sql-upgrade): version-check backup + smart dropdown default — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12826"&gt;#12826&lt;/a&gt; fix(sql-upgrade): server-status polling now terminates reliably — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12831"&gt;#12831&lt;/a&gt; fix(sql-upgrade): skip audit logging on the status poll endpoint — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12652"&gt;#12652&lt;/a&gt; fix(edihistory): strict types string errors — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12569"&gt;#12569&lt;/a&gt; fix(core): prevent {headerTemplate} from rendering the page header twice — @dac-ai-worker&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12821"&gt;#12821&lt;/a&gt; fix(core): prevent {headerTemplate} from rendering the page header twice — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12765"&gt;#12765&lt;/a&gt; fix(ccda): CCDA to pass ONC USCDI V3 test scenarios. — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12815"&gt;#12815&lt;/a&gt; fix(ccda): CCDA to pass ONC USCDI V3 test scenarios. — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11369"&gt;#11369&lt;/a&gt; fix: resolve PHP deprecation warnings and undefined variable errors — @claw-explorer&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12691"&gt;#12691&lt;/a&gt; fix(modules): Move module loading after OPENEMR_GLOBALS_LOADED — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12653"&gt;#12653&lt;/a&gt; fix(gacl): Fix invalid property access in gacl — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12648"&gt;#12648&lt;/a&gt; fix(spell): exclude CHANGELOG line quoting &amp;lsquo;Dislay&amp;rsquo; typo from codespell — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12632"&gt;#12632&lt;/a&gt; fix(docker): irp imports 0 patients because synthea output is in root-only /root/ — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12547"&gt;#12547&lt;/a&gt; fix(docker): checkout repo before flex build to dodge submodule recursion — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12604"&gt;#12604&lt;/a&gt; fix(ci): Restore Inferno after docker rearranging — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12597"&gt;#12597&lt;/a&gt; fix(ci): docker-validate-release-targets reads master version.php from PR checkout — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12594"&gt;#12594&lt;/a&gt; fix(ci): sync-byte-identical handles rename + removed-from-config — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12585"&gt;#12585&lt;/a&gt; fix(ci): only require release-targets.yml in master context for byte-identical canary — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12538"&gt;#12538&lt;/a&gt; fix(insurance): clear phone_numbers before re-insert in legacy persist + cleanup migration — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12570"&gt;#12570&lt;/a&gt; fix(contrib): repair trailing comma in Pain_Initial_Assessment.json — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12548"&gt;#12548&lt;/a&gt; fix(docker): add php-posix to the flex image apk install list — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12529"&gt;#12529&lt;/a&gt; fix(persist): skip phones the legacy parts schema cannot represent (insurance + pharmacy) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12524"&gt;#12524&lt;/a&gt; fix(deps): Harden dependencies by pulling in security meta-package — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12525"&gt;#12525&lt;/a&gt; fix: prevent PHP 8 TypeError in Claim::payerCount() and procCount() — @rtmalikian&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12520"&gt;#12520&lt;/a&gt; fix(calendar): restore appointments hidden after 8.0→8.1 upgrade — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12519"&gt;#12519&lt;/a&gt; fix(calendar): restore appointments hidden after 8.0→8.1 upgrade — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12400"&gt;#12400&lt;/a&gt; fix(reminders): Numerous bug fixes — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12473"&gt;#12473&lt;/a&gt; fix(password): expired password warning not displaying — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12472"&gt;#12472&lt;/a&gt; fix(ci): don&amp;rsquo;t run sql_upgrade as root in Inferno test — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12444"&gt;#12444&lt;/a&gt; fix(calendar): allow save for timed In/Out of Office events — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10989"&gt;#10989&lt;/a&gt; fix(portal): block negative or zero patient payment amounts — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12399"&gt;#12399&lt;/a&gt; fix(fhir): make generated Observation value[x] PHPDoc nullable — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12353"&gt;#12353&lt;/a&gt; fix(payments): edit payment sql error — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12327"&gt;#12327&lt;/a&gt; fix(oauth): use spec-compliant &lt;code&gt;invalid_request&lt;/code&gt; error code (remove stray space) — @DucMinhNe&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12339"&gt;#12339&lt;/a&gt; fix(payments): add cryptogen to front_payment.php — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12340"&gt;#12340&lt;/a&gt; fix(sql): backtick bare &lt;code&gt;system&lt;/code&gt; in ContactTelecomService for MySQL 8+ compat — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12329"&gt;#12329&lt;/a&gt; fix(sql): backtick &lt;code&gt;rank&lt;/code&gt; column in ContactTelecomService for MySQL 8+ compat — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12273"&gt;#12273&lt;/a&gt; fix(globals): stop forcing E_ALL error reporting and add reporting options — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12007"&gt;#12007&lt;/a&gt; fix(vitals): drop duplicate growth-chart buttons from Vitals History — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12189"&gt;#12189&lt;/a&gt; fix: Fix ethnicity decline setting — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12170"&gt;#12170&lt;/a&gt; fix: bypass max_input_vars truncation in edit_layout and edit_payment — @progradedteam-dev&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12224"&gt;#12224&lt;/a&gt; fix(faxsms): lazy-init AppDispatch session to survive static factory path — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12223"&gt;#12223&lt;/a&gt; fix(edihistory): move use statement out of docblock — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11868"&gt;#11868&lt;/a&gt; fix(billing): cast 835 monetary fields to float for type-strict comparisons — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12194"&gt;#12194&lt;/a&gt; fix(upgrade): normalize categories_seq instead of unsafe multi-row UP… — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11691"&gt;#11691&lt;/a&gt; fix(billing): session crashes on posting page — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12188"&gt;#12188&lt;/a&gt; fix: Fix ethnicity decline setting — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12186"&gt;#12186&lt;/a&gt; fix(globals): Restore windows webserver_root normalization. (#12140) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12011"&gt;#12011&lt;/a&gt; fix(upgrade): drop redundant categories_seq UPDATE in eye form laser migration — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12140"&gt;#12140&lt;/a&gt; fix(globals): Restore windows webserver_root normalization. — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12144"&gt;#12144&lt;/a&gt; fix(portal): correct deleteItem target and readMessage issue — @techaround&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11949"&gt;#11949&lt;/a&gt; fix(login): default login_page_layout when globals row is missing — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12083"&gt;#12083&lt;/a&gt; fix(patient): dispatch PatientCreatedEvent from legacy new_patient_save.php — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12050"&gt;#12050&lt;/a&gt; fix(faxsms): use filesystem-targeted encryption for cached auth — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12031"&gt;#12031&lt;/a&gt; fix(billing): add CSRF check + tighten input on fee_sheet review/justify — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12019"&gt;#12019&lt;/a&gt; fix(sql): handle table-qualified columns in escape_sql_column_name() — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12018"&gt;#12018&lt;/a&gt; fix(security): physical_exam edit_diagnoses ACL gate is dead code — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11551"&gt;#11551&lt;/a&gt; fix(security): use DOM construction for iframe in twAddFrameTab — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11601"&gt;#11601&lt;/a&gt; fix(cda): register-conditional list XPath in CdaTextParser — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11603"&gt;#11603&lt;/a&gt; fix(tests): Remove error-suppressing catch block — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11615"&gt;#11615&lt;/a&gt; fix(ci): Detect PHPUnit exiting without finishing — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11620"&gt;#11620&lt;/a&gt; fix(ci): match runner Node version to nginx container — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11647"&gt;#11647&lt;/a&gt; fix(php85): resolve deprecations in services test suite — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11680"&gt;#11680&lt;/a&gt; fix(medex): decouple background service from legacy AJAX entry point — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11688"&gt;#11688&lt;/a&gt; fix(mailer): hardcode UTF-8 CharSet to avoid null from missing global — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11690"&gt;#11690&lt;/a&gt; fix(db): use tinyint(1) for questionnaire_repository.active boolean — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11693"&gt;#11693&lt;/a&gt; fix(installer): require igroup field during installation — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11700"&gt;#11700&lt;/a&gt; fix(orm): fix multiple bugs in ORDataObject::_load_enum — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11728"&gt;#11728&lt;/a&gt; fix(ci): prevent cross-Node-version cache contamination in test workflow — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11735"&gt;#11735&lt;/a&gt; fix(local-api): bootstrap missing user UUID to prevent 500 on fresh installs — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11755"&gt;#11755&lt;/a&gt; fix(e2e): wait for post-login title transition to avoid race — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11756"&gt;#11756&lt;/a&gt; fix(ci): gate openemr on mysql service_healthy to avoid race — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11767"&gt;#11767&lt;/a&gt; fix(docker): remove obsolete &amp;ndash;with-pic from dev-php-fpm 8.6 build — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11802"&gt;#11802&lt;/a&gt; fix(phpstan): drain file-not-found baseline entries — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11803"&gt;#11803&lt;/a&gt; fix(deps): sync package-lock.json with xmldom 0.9.10 update — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11813"&gt;#11813&lt;/a&gt; fix(phpstan): drain function-not-found baseline entries — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11858"&gt;#11858&lt;/a&gt; fix(e2e): capture diagnostics for user-add modal timeout flake — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11864"&gt;#11864&lt;/a&gt; fix(db): Log all &amp;ldquo;helpfuldie&amp;rdquo; sql errors — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11866"&gt;#11866&lt;/a&gt; fix(db): Fix SQL upgrade syntax — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11876"&gt;#11876&lt;/a&gt; fix(db): convert declne_to_specfy in patient_data language and ethnicity — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11877"&gt;#11877&lt;/a&gt; fix(portal): drain PHPStan class.notFound baseline for portal/patient — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11882"&gt;#11882&lt;/a&gt; fix(rx): set linkMethod for Ensora eRx prescription button — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11883"&gt;#11883&lt;/a&gt; fix(encounter): handle missing row and null uuid in encounter view form — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11888"&gt;#11888&lt;/a&gt; fix(csrf): stop rotating CSRF private key on every main_screen.php load — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11897"&gt;#11897&lt;/a&gt; fix(ci): Inferno testsuite setup fixes — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11906"&gt;#11906&lt;/a&gt; fix(sql): Allow sql_upgrade to work on the cli — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11907"&gt;#11907&lt;/a&gt; fix(faxsms): catch up missed appointment-reminder ticks — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11909"&gt;#11909&lt;/a&gt; fix(ci): Turn off redis persistence in inferno tests — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11916"&gt;#11916&lt;/a&gt; fix(ci): add NPI to user to qualify as Practitioner in Inferno tests — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11917"&gt;#11917&lt;/a&gt; fix(test): correct Inferno test group IDs for body height/weight — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11922"&gt;#11922&lt;/a&gt; fix(faxsms): require appointments lib; log background-service errors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11937"&gt;#11937&lt;/a&gt; fix(clinical-notes): correct i18formatting asset name typo — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11939"&gt;#11939&lt;/a&gt; fix: guard undefined keys and legacy PHP warnings flagged in production logs — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11947"&gt;#11947&lt;/a&gt; fix(main-tabs): restore default tab loading after login — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11951"&gt;#11951&lt;/a&gt; fix(security): validate db parameter in standard_tables_manage — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11953"&gt;#11953&lt;/a&gt; fix(session): restore brief-lock pattern on long-running pages — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11958"&gt;#11958&lt;/a&gt; fix(portal): add CSRF protection to payment handler — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11959"&gt;#11959&lt;/a&gt; fix(ci): Run additional web workers in API integration tests — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11962"&gt;#11962&lt;/a&gt; fix(faxsms): tighten oe_faxsms_queue schema for utf8mb4 compatibility — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11972"&gt;#11972&lt;/a&gt; fix(auth): remove unused redirect_token from OneTimeAuth — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11983"&gt;#11983&lt;/a&gt; fix(ci): disable patient birthday alert in e2e compose stack — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11985"&gt;#11985&lt;/a&gt; fix(care-plan): unify blank-row template through foreach — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11999"&gt;#11999&lt;/a&gt; fix(ui): Fix crash from uncaught class in birthday popup — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11976"&gt;#11976&lt;/a&gt; fix(vitals): growth chart fatals on missing patient sex; drain variable.undefined — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10762"&gt;#10762&lt;/a&gt; fix(db): rename misspelled &amp;lsquo;declne_to_specfy&amp;rsquo; value in race — @phantom930&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11987"&gt;#11987&lt;/a&gt; fix(encounter): use getBoolean for inhouse_pharmacy check in visit summary — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11940"&gt;#11940&lt;/a&gt; fix(session): clean up callers that re-open read_and_close session — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/8087"&gt;#8087&lt;/a&gt; fix: clinicians can edit medications — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11618"&gt;#11618&lt;/a&gt; fix(bootstrap): replace die() with exception for missing session site_id — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11948"&gt;#11948&lt;/a&gt; fix(background-services): resolve PHP CLI binary via PhpExecutableFinder — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11846"&gt;#11846&lt;/a&gt; fix(faxsms): surface notification background-task failures — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11904"&gt;#11904&lt;/a&gt; fix(phpdoc): repair legacy parse errors across the codebase — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11807"&gt;#11807&lt;/a&gt; fix(smarty): save admin practice practice settings — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11547"&gt;#11547&lt;/a&gt; fix(ci): simplify Codecov flags to fix &amp;ldquo;Multiple flags detected&amp;rdquo; error — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11801"&gt;#11801&lt;/a&gt; fix(background-services): isolate run-all-due behind subprocess boundary — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11245"&gt;#11245&lt;/a&gt; fix(calendar): remove 0000-00-00 date defaults from postcalendar events — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10511"&gt;#10511&lt;/a&gt; fix(deprecations): Comlink module — @juggernautsei&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11678"&gt;#11678&lt;/a&gt; fix(background-services): recover stuck leases from crashed workers — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11625"&gt;#11625&lt;/a&gt; fix(encounter): fix saving in collection on auto create encounter — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11407"&gt;#11407&lt;/a&gt; fix(calendar): route freq_type 5 to REPEAT_ON branch to prevent infin… — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11442"&gt;#11442&lt;/a&gt; fix(security): centralize XML parsing to enforce LIBXML_NONET across all call sites — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11091"&gt;#11091&lt;/a&gt; fix(security): add ACL check to claim file tracker endpoint — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11090"&gt;#11090&lt;/a&gt; fix(security): prevent XSS in portal signer modal — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11089"&gt;#11089&lt;/a&gt; fix(security): prevent XSS in clickmap annotation legend — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11019"&gt;#11019&lt;/a&gt; fix(auth): correct assignment typo in AuthHash SHA512 fallback — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11008"&gt;#11008&lt;/a&gt; fix: Remove accidental override of OEGlobalsBag::getString — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10849"&gt;#10849&lt;/a&gt; fix(db): set uor=0 for deprecated care_team layout fields — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11211"&gt;#11211&lt;/a&gt; fix(schema): correct empty string in list_options integer columns — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11130"&gt;#11130&lt;/a&gt; fix(logging): SystemLogger PSR-3 compliance and simplification — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11097"&gt;#11097&lt;/a&gt; fix(security): check sensitivity from correct table for group encounters — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11094"&gt;#11094&lt;/a&gt; fix(security): negate ACL condition in CDR ControllerRouter — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11096"&gt;#11096&lt;/a&gt; fix(security): escape code descriptions in dynamic code picker — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11093"&gt;#11093&lt;/a&gt; fix(security): remove user input from SQL alias in graphs — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11095"&gt;#11095&lt;/a&gt; fix(security): escape Track Anything graph titles and labels — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11092"&gt;#11092&lt;/a&gt; fix(security): escape patient data in prescription print view — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11418"&gt;#11418&lt;/a&gt; fix(calendar): Render restoreSession JS inside of script tag — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11503"&gt;#11503&lt;/a&gt; fix: Fixes #11161 #11492 encounter nav issues — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11347"&gt;#11347&lt;/a&gt; fix(security): replace addslashes() with js_escape() in JS contexts — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11372"&gt;#11372&lt;/a&gt; fix(tests): add integration tests to phpunit.xml and CI suite list — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11485"&gt;#11485&lt;/a&gt; fix(documents): view document from past encounters for rel-800 — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11597"&gt;#11597&lt;/a&gt; fix(security): validate formdir before using in include paths — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11589"&gt;#11589&lt;/a&gt; fix(faxsms): stop overwriting pc_apptstatus during notification dedup — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11592"&gt;#11592&lt;/a&gt; fix(security): validate require_once paths loaded from database — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11588"&gt;#11588&lt;/a&gt; fix(faxsms): dedup recurring appointment notifications via notification_log — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11587"&gt;#11587&lt;/a&gt; fix(faxsms): read cron interval from background_services instead of hardcoding 150 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10896"&gt;#10896&lt;/a&gt; fix(security): add allowed_classes to unprotected unserialize calls — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11504"&gt;#11504&lt;/a&gt; fix: Fixes #11493 observation form report embed fix — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11511"&gt;#11511&lt;/a&gt; fix(install): use newline separator in SQL statement concatenation — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11513"&gt;#11513&lt;/a&gt; fix(security): validate menu role filenames to prevent path traversal — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10901"&gt;#10901&lt;/a&gt; fix(api): fix per-patient allergy and condition endpoints returning empty (#10827) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11509"&gt;#11509&lt;/a&gt; fix(faxsms): use 24-hour clock for notification window math — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11510"&gt;#11510&lt;/a&gt; fix(eye-mag): use correct PMSFH key for PMH diagnoses in Diagnosis Builder — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11499"&gt;#11499&lt;/a&gt; fix(cpt4): skip UPDATE when CPT4 code lookup returns empty — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11430"&gt;#11430&lt;/a&gt; fix(config): stop suppressing E_USER_WARNING and E_USER_DEPRECATED — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11363"&gt;#11363&lt;/a&gt; fix(csv): replace addslashes() with RFC 4180 CSV double-quote escaping — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11291"&gt;#11291&lt;/a&gt; fix: Fix clinical notes date formatting (Fixes #11290). — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11300"&gt;#11300&lt;/a&gt; fix(e2e): resolve flaky User add test under coverage — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11331"&gt;#11331&lt;/a&gt; fix(background-services): fix OPENEMR__NO_BACKGROUND_TASKS env var reliability and scope — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11396"&gt;#11396&lt;/a&gt; fix(portal): remove dead $payment_key code in portal_payment.php — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11169"&gt;#11169&lt;/a&gt; fix: Fixes #11142 employer data not saving (#11156) — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11383"&gt;#11383&lt;/a&gt; fix(menu): sync Custom.json with standard.json for email send test entry — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11362"&gt;#11362&lt;/a&gt; fix(phpstan): emit ADOdb-accurate types in TableTypes generator — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11388"&gt;#11388&lt;/a&gt; fix(security): add LIBXML_NONET to all simplexml_load_string calls — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11420"&gt;#11420&lt;/a&gt; fix(hooks): read commit message content instead of file path — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11450"&gt;#11450&lt;/a&gt; fix(payments): post payment from portal in portal dash — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11455"&gt;#11455&lt;/a&gt; fix(phpstan): correct misleading docblock @return/@param types — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11484"&gt;#11484&lt;/a&gt; fix(faxsms): stop resending appointment reminder emails every hour — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11515"&gt;#11515&lt;/a&gt; fix(cdr): stop translating DB identifiers in render_select — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11466"&gt;#11466&lt;/a&gt; fix(sql-upgrade): drop fgets() length limit and insert line separator — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11470"&gt;#11470&lt;/a&gt; fix(direct-messaging): drop fgets() length limits in phiMail protocol parsers — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11500"&gt;#11500&lt;/a&gt; fix(translation): use unconditional xl() for dynamic strings, not xl_list_label — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11502"&gt;#11502&lt;/a&gt; fix(db): Change OSCONJ column type on form_eye_antseg table — @margarethaywood&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11512"&gt;#11512&lt;/a&gt; fix(security): escape tab label in TabsWrapper to prevent XSS — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11543"&gt;#11543&lt;/a&gt; fix(deps): resolve Dependabot overlapping directory error — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11150"&gt;#11150&lt;/a&gt; fix(claims): other payer claim control number for secondary claims — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11003"&gt;#11003&lt;/a&gt; fix(install): add space separator between SQL lines in load_file() (#10935) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11217"&gt;#11217&lt;/a&gt; fix(security): prevent open redirect in portal messaging — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11072"&gt;#11072&lt;/a&gt; fix(session): respect sessionAllowWrite global in PHPSessionWrapper (#10931) — @abishop1990&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10651"&gt;#10651&lt;/a&gt; fix: Add missing $form_return variable assignment in eye_mag save.php — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11061"&gt;#11061&lt;/a&gt; fix: selenium dependabot updates for development-easy-redis — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11188"&gt;#11188&lt;/a&gt; fix(security): validate DICOM zip entry paths — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11189"&gt;#11189&lt;/a&gt; fix(security): enforce encounter ownership on vitals — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11059"&gt;#11059&lt;/a&gt; fix: set production docker-compose.yml to use latest tag on master branch — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11288"&gt;#11288&lt;/a&gt; fix(database): resolve PHP 8.5 PDO MySQL attribute deprecations — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10977"&gt;#10977&lt;/a&gt; fix: Revert prior predis 3.4.0 fix — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11282"&gt;#11282&lt;/a&gt; fix(database): Ensure legacy DB connection is established — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11004"&gt;#11004&lt;/a&gt; fix(messages): replace misleading unauthorized template with silent return (#10686) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11251"&gt;#11251&lt;/a&gt; fix(schema): remove 0000-00-00 values from document_templates inserts — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10999"&gt;#10999&lt;/a&gt; fix(docs): correct spelling errors caught by codespell — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10664"&gt;#10664&lt;/a&gt; fix(sql): wrap scalar values in arrays for SQL function params — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11007"&gt;#11007&lt;/a&gt; fix(phpstan): add types and fix errors in ClientAdminController — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10998"&gt;#10998&lt;/a&gt; fix(db): remove dynamically created onsite_activity_view — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10939"&gt;#10939&lt;/a&gt; fix(session): replace direct $_SESSION writes with SessionUtil::setSession() — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11246"&gt;#11246&lt;/a&gt; fix(ci): quote time values in dependabot.yml — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11220"&gt;#11220&lt;/a&gt; fix(security): parameterize all SQL in deleter.php via root-cause refactor — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11156"&gt;#11156&lt;/a&gt; fix: Fixes #11142 employer data not saving — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10869"&gt;#10869&lt;/a&gt; fix: use https in @link header tags — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10685"&gt;#10685&lt;/a&gt; fix(e2e): handle duplicate visit alert immediately after menu click — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11218"&gt;#11218&lt;/a&gt; fix(security): parameterize SQL, add CSRF, and fix serialization injection in portal appointment — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11212"&gt;#11212&lt;/a&gt; fix(schema): use CURRENT_TIMESTAMP default for medex_recalls.r_created — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11219"&gt;#11219&lt;/a&gt; fix(security): add CSRF protection and parameterize SQL in new_payment.php — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11216"&gt;#11216&lt;/a&gt; fix(security): parameterize SQL, remove dead code, and migrate to QueryUtils in pnotes.inc.php — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11210"&gt;#11210&lt;/a&gt; fix(schema): reduce onetime_auth index prefix length — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11215"&gt;#11215&lt;/a&gt; fix(portal): portal messaging display fix for #11202 — @zmilan&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10988"&gt;#10988&lt;/a&gt; fix(i18n): correct &amp;ldquo;Dislay&amp;rdquo; typo in main menu logo description — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11208"&gt;#11208&lt;/a&gt; fix(session): fix leftovers from porting core session — @zmilan&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11166"&gt;#11166&lt;/a&gt; fix(composer): use forward slashes in autoload-dev path — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10824"&gt;#10824&lt;/a&gt; fix(api): include provider first/last name in appointment API responses — @fzzio&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10905"&gt;#10905&lt;/a&gt; fix(ci): prevent PHPStan pre-commit hook baseline mismatch (#10868) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11111"&gt;#11111&lt;/a&gt; fix(install): remove OEGlobalsBag dependency from sql_upgrade.php — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10856"&gt;#10856&lt;/a&gt; fix(predis): predis 3.4.0 fix — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10899"&gt;#10899&lt;/a&gt; fix(sql): qualify column reference in CareTeamService::getCareTeamData() — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10804"&gt;#10804&lt;/a&gt; fix(phpstan): fix invalid return type annotations — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10888"&gt;#10888&lt;/a&gt; fix(oauth2): create certificates directory before writing key files — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10822"&gt;#10822&lt;/a&gt; fix(api): use isPortalRequest() for portal route detection in RoutesExtensionListener — @fzzio&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10871"&gt;#10871&lt;/a&gt; fix(ci): rector cache masks violations on unchanged files — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11146"&gt;#11146&lt;/a&gt; fix(reports): include custom LBF layout forms in patient report — @pradhankukiran&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10839"&gt;#10839&lt;/a&gt; fix(semgrep): add generate_select_list and json_encode as sanitizers — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11134"&gt;#11134&lt;/a&gt; fix(upgrade): disable audit logging before globals.php loads — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10814"&gt;#10814&lt;/a&gt; fix(eye-mag): correct Schirmer field name typos in copy_forward ANTSEG zone — @danielalanbates&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11214"&gt;#11214&lt;/a&gt; fix(security): parameterize SQL in patient.inc.php and harden column name escaping — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10799"&gt;#10799&lt;/a&gt; fix(e2e): handle UnexpectedAlertOpenException in assertActiveTab — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11199"&gt;#11199&lt;/a&gt; fix(security): parameterize SQL and filter request inputs in add_edit_event — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11194"&gt;#11194&lt;/a&gt; fix(security): escape inline script values in portal payment — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11193"&gt;#11193&lt;/a&gt; fix(security): add authorization to FaxSMS AppDispatch — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11192"&gt;#11192&lt;/a&gt; fix(security): add authorization to dated reminders log — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11191"&gt;#11191&lt;/a&gt; fix(security): escape portal credential print output — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11190"&gt;#11190&lt;/a&gt; fix(security): sanitize SearchHighlight input — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11187"&gt;#11187&lt;/a&gt; fix(security): respect explicit ACL denies in zhAclCheck — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11186"&gt;#11186&lt;/a&gt; fix(security): escape user data in Eye Exam report — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11185"&gt;#11185&lt;/a&gt; fix(security): sanitize backup export command arguments — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10765"&gt;#10765&lt;/a&gt; fix(e2e): add CI full test mode and fix stale element in assertActiveTab — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10703"&gt;#10703&lt;/a&gt; fix(phpstan): Fail if baseline doesn&amp;rsquo;t match generator — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11155"&gt;#11155&lt;/a&gt; fix(documents): separate password from encryption for C_Document.clas… — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10749"&gt;#10749&lt;/a&gt; fix(e2e): wait for active tab element before checking content — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10791"&gt;#10791&lt;/a&gt; fix(phpstan): correct custom rule implementations — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10760"&gt;#10760&lt;/a&gt; fix(claimrev): add mailto: protocol to email links — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10758"&gt;#10758&lt;/a&gt; fix(claimrev): add input validation for ERA ID parameter — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10891"&gt;#10891&lt;/a&gt; fix(search): wrap DATETIME empty-string comparisons with CAST — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11163"&gt;#11163&lt;/a&gt; fix(controller): add order-independent routing via dispatch() method — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10846"&gt;#10846&lt;/a&gt; fix(db): rename misspelled &amp;lsquo;interpretter&amp;rsquo; column to &amp;lsquo;interpreter&amp;rsquo; — @jbaiad&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11144"&gt;#11144&lt;/a&gt; fix(encounter): hide dispensed medications section when inhouse_pharmacy is disabled — @pradhankukiran&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11053"&gt;#11053&lt;/a&gt; fix: remove OEGlobalsBag dependency from version.php — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10985"&gt;#10985&lt;/a&gt; fix(appt): avoid HTML-encoded status text in demographics widgets — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10983"&gt;#10983&lt;/a&gt; fix(i18n): apply xlt filter in patient verify success email templates — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10993"&gt;#10993&lt;/a&gt; fix(api): align allergy begdate validation with YYYY-MM-DD docs — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10991"&gt;#10991&lt;/a&gt; fix(encounter): enforce newest-first sort in encounters report — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10984"&gt;#10984&lt;/a&gt; fix(apptstat): accept #RRGGBB in status color field — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10949"&gt;#10949&lt;/a&gt; fix(sdoh): add missing site parameter to SDOH assessment URLs — @Boykosoft&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10895"&gt;#10895&lt;/a&gt; fix(security): protect bin/ directory from web access — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10851"&gt;#10851&lt;/a&gt; fix(payments): use theme-stable colors for receipt background contrast — @jbaiad&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10763"&gt;#10763&lt;/a&gt; fix(claimrev): use $postData parameter instead of $_POST — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10759"&gt;#10759&lt;/a&gt; fix(claimrev): replace hardcoded dev URLs with configurable settings — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10733"&gt;#10733&lt;/a&gt; fix(lbf): respect default value for checkboxes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10756"&gt;#10756&lt;/a&gt; fix(claimrev): validate required settings in isConfigured() — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10757"&gt;#10757&lt;/a&gt; fix(claimrev): restrict file permissions for EDI downloads — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10752"&gt;#10752&lt;/a&gt; fix(claimrev): throw exceptions on API failures instead of returning error values — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10647"&gt;#10647&lt;/a&gt; fix(demographics): hide appointments card when user lacks permission — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10755"&gt;#10755&lt;/a&gt; fix(modules): remove dead methods referencing undefined constants — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10754"&gt;#10754&lt;/a&gt; fix(claimrev): prevent HTML escaping of ERA file downloads — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10728"&gt;#10728&lt;/a&gt; fix(billing): create ERA directory and add overwrite confirmation — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10644"&gt;#10644&lt;/a&gt; fix(patient): detect duplicates when lower-PID patient matches higher-PID — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10652"&gt;#10652&lt;/a&gt; fix(e2e): add diagnostics and retry for modal close timeout in testUserAdd — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10661"&gt;#10661&lt;/a&gt; fix(payments): SQL Query Error: Column &amp;lsquo;session_id&amp;rsquo; cannot be null — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10788"&gt;#10788&lt;/a&gt; fix(labs): PHP warnings interface/orders — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/7667"&gt;#7667&lt;/a&gt; fix(patient): set portal login username when enabling portal access — @ruthkonyn&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11115"&gt;#11115&lt;/a&gt; fix: preserve patient context in EHR launch skip-auth flow — @mattpolly&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11381"&gt;#11381&lt;/a&gt; fix(email): remove SMTP_SECURE from isConfigured required keys — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11297"&gt;#11297&lt;/a&gt; fix(security): harden escape_table_name() with backtick-quoting — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11280"&gt;#11280&lt;/a&gt; fix(security): harden escape_sql_column_name() with backtick-quoting — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10894"&gt;#10894&lt;/a&gt; fix(eye): add state license number to prescription popup — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10882"&gt;#10882&lt;/a&gt; fix(eye): Dispense glasses Rx: manifest/dispensed refraction — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11198"&gt;#11198&lt;/a&gt; fix(users): allow clearing email field in user admin update — @rollingventures&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10937"&gt;#10937&lt;/a&gt; fix(search): wrap DATETIME empty-string comparisons with CAST (#10891) for rel-800 — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10865"&gt;#10865&lt;/a&gt; fix(eyeform): pass encounter/pid in navbar form URLs to prevent stale session — @jbaiad&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10908"&gt;#10908&lt;/a&gt; fix(ci): detect database.sql schema changes missing upgrade SQL (#10854) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10903"&gt;#10903&lt;/a&gt; fix(security): add CSV formula escaping to League\Csv exports (#10415) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10902"&gt;#10902&lt;/a&gt; fix(security): remove eval() from application JavaScript files (#2010) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10922"&gt;#10922&lt;/a&gt; fix(test): make dupscore unique-flag test robust against demo data — @jbaiad&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10909"&gt;#10909&lt;/a&gt; fix(ci): ensure xdebug.mode=coverage for PHPUnit test file coverage (#10687) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10557"&gt;#10557&lt;/a&gt; fix(recalls): improve recall board filtering and form validation — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10897"&gt;#10897&lt;/a&gt; fix(security): add safe_href URL scheme validation for Twig href attributes — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10823"&gt;#10823&lt;/a&gt; fix(api): pass HttpRestRequest to PatientRestController::getOne() in portal route — @fzzio&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10813"&gt;#10813&lt;/a&gt; fix(database): return falsy column values from fetchSingleValue instead of null — @danielalanbates&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10830"&gt;#10830&lt;/a&gt; fix(ehi-export): initialize variables in createExportTasksFromJobWith… — @robinson-j16&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10772"&gt;#10772&lt;/a&gt; fix(phone): Use correct locale-aware formatting for phone number display — @evolvomind&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10750"&gt;#10750&lt;/a&gt; fix(claimrev): save all subscribers in eligibility request — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10663"&gt;#10663&lt;/a&gt; fix(sql): Error: Object of class Closure could not be converted to st… — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10698"&gt;#10698&lt;/a&gt; fix: rename &amp;lsquo;uncomplete&amp;rsquo; mode to &amp;lsquo;incomplete&amp;rsquo; in AMC tracking — @evolvomind&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10693"&gt;#10693&lt;/a&gt; fix(phpstan): add @var annotations to reduce variable.undefined baseline — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10680"&gt;#10680&lt;/a&gt; fix(erx): allow allergy entry without eRx role — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10677"&gt;#10677&lt;/a&gt; fix(ci): add path fixes for Codecov coverage reports — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10464"&gt;#10464&lt;/a&gt; fix(qrda): use escaped Mustache variables in XML attribute positions — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10673"&gt;#10673&lt;/a&gt; fix: SingletonTrait — @igormukhingmailcom&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10672"&gt;#10672&lt;/a&gt; fix(pre-commit): exclude PHPStan baseline files from analysis hooks — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10636"&gt;#10636&lt;/a&gt; fix(zend): include port in PDO DSN for non-default database ports — @kojiromike&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="refactoring"&gt;Refactoring&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12699"&gt;#12699&lt;/a&gt; refactor(audit): Update audit logger sql path to be DI-friendly — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12526"&gt;#12526&lt;/a&gt; refactor(oe-module-faxsms): Fix SignalWire fax support in oe-module-faxsms — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12766"&gt;#12766&lt;/a&gt; refactor(oe-module-faxsms): Fix SignalWire fax support in oe-module-faxsms — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12763"&gt;#12763&lt;/a&gt; refactor(globals): Integrate OEGlobalsBag key deprecation tooling — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12689"&gt;#12689&lt;/a&gt; refactor(session): Adopt DTO for settings &amp;amp; tidy cookie path — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12698"&gt;#12698&lt;/a&gt; refactor(audit): Centralize and simplify &amp;ldquo;should log&amp;rdquo; logic — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12655"&gt;#12655&lt;/a&gt; refactor(audit): Add multi-sink destination — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12633"&gt;#12633&lt;/a&gt; refactor(db): Move doctrine/migrations config — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12590"&gt;#12590&lt;/a&gt; refactor(ci): relocate docker/compose.yml to .github/docker/ — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12578"&gt;#12578&lt;/a&gt; refactor(ci): extract sync-byte-identical bash into a tested script — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12576"&gt;#12576&lt;/a&gt; refactor(ci): trim docker/.gitignore + docker/COVERAGE.md from byte-identical set — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12575"&gt;#12575&lt;/a&gt; refactor(ci): externalize byte-identical FILES_ALL to a dedicated config file — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12510"&gt;#12510&lt;/a&gt; refactor(security): Remove unused client SSL certificate auth feature — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12435"&gt;#12435&lt;/a&gt; refactor(calendar): migrate PostCalendar from Smarty to Twig — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11521"&gt;#11521&lt;/a&gt; refactor(portal): remove AngularJS from secure_chat and messages — @rollingventures&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12246"&gt;#12246&lt;/a&gt; refactor: replace raw assert() calls with real runtime checks — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12231"&gt;#12231&lt;/a&gt; refactor(portal): extract PatientPortalLoginController, behavior-preserving — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12195"&gt;#12195&lt;/a&gt; refactor(holidays): move to src/ services and fix calendar import + N+1 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12020"&gt;#12020&lt;/a&gt; refactor(faxsms): remove unimplemented VoiceClient — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12146"&gt;#12146&lt;/a&gt; refactor(ui): replace vendored SearchHighlight.js with vanilla TreeWalker helper — @progradedteam-dev&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12123"&gt;#12123&lt;/a&gt; refactor(audit): Remove redundant encryption from audit log writes — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11956"&gt;#11956&lt;/a&gt; refactor(crypto): migrate call sites to encryptForDatabase/decryptFromDatabase helpers — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12069"&gt;#12069&lt;/a&gt; refactor(sphere): use session storage instead of encryption for payment data — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12066"&gt;#12066&lt;/a&gt; refactor(auth): remove redundant encryption from OneTimeAuth tokens — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12062"&gt;#12062&lt;/a&gt; refactor(portal): remove unnecessary encryption from one-time tokens — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11555"&gt;#11555&lt;/a&gt; refactor(services): add array type to $search parameter — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11556"&gt;#11556&lt;/a&gt; refactor(phpstan): add LayoutOptionsRow type to TableTypes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11557"&gt;#11557&lt;/a&gt; refactor(finder): replace getSearchClass with SearchClass enum — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11571"&gt;#11571&lt;/a&gt; refactor(ci): modernize auto_prepend.php — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11583"&gt;#11583&lt;/a&gt; refactor(billing): replace escaped HTML strings in EDI270 with heredoc — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11619"&gt;#11619&lt;/a&gt; refactor: narrow broad exception catches to specific types — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11682"&gt;#11682&lt;/a&gt; refactor(background-services): migrate module installers to Registry — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11701"&gt;#11701&lt;/a&gt; refactor(ci): Simplify and speed up the integration test build matrix — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11702"&gt;#11702&lt;/a&gt; refactor(cli): Separate &amp;ldquo;beta&amp;rdquo; CLI commands — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11704"&gt;#11704&lt;/a&gt; refactor(logging): Support CipherSuiteInterface in EventAuditLogger — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11707"&gt;#11707&lt;/a&gt; refactor(cli): replace allow_cronjobs.php with Symfony console commands — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11757"&gt;#11757&lt;/a&gt; refactor(globals): migrate interface/forms path reads to typed Kernel accessors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11758"&gt;#11758&lt;/a&gt; refactor(globals): migrate interface/patient_file path reads to typed Kernel accessors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11759"&gt;#11759&lt;/a&gt; refactor(globals): migrate interface/modules path reads to typed Kernel accessors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11760"&gt;#11760&lt;/a&gt; refactor(globals): migrate interface/reports path reads to typed Kernel accessors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11761"&gt;#11761&lt;/a&gt; refactor(globals): migrate remaining interface/ subdirs to typed Kernel path accessors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11778"&gt;#11778&lt;/a&gt; refactor(document): extract storage path calculation for testability — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11779"&gt;#11779&lt;/a&gt; refactor(filesystem): Move Smarty and mPDF temp directories to system temp — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11791"&gt;#11791&lt;/a&gt; refactor(globals): clean up stale $GLOBALS references in comments — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11817"&gt;#11817&lt;/a&gt; refactor(globals): rename &amp;lsquo;Default Password Expiration Days&amp;rsquo; to &amp;lsquo;Password Expiration Days&amp;rsquo; — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11879"&gt;#11879&lt;/a&gt; refactor(edihistory): lift edih_x12_file to OpenEMR\Billing\EdiHistory\X12File — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11884"&gt;#11884&lt;/a&gt; refactor: replace literal preg_match prefix/suffix checks with native string functions — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11895"&gt;#11895&lt;/a&gt; refactor(billing): drain variable.undefined PHPStan baseline entries — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11860"&gt;#11860&lt;/a&gt; refactor(daysheet): extract DaySheetAggregator from print_daysheet_report_num1 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11348"&gt;#11348&lt;/a&gt; refactor(php): route superglobal access through HttpRestRequest in src/ — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/8587"&gt;#8587&lt;/a&gt; refactor(calendar): remove return/store polymorphism from pnHTML — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11263"&gt;#11263&lt;/a&gt; refactor(globals): migrate library/ path reads to typed Kernel accessors — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11727"&gt;#11727&lt;/a&gt; refactor(background-services): migrate main-tab poll to REST API — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11736"&gt;#11736&lt;/a&gt; refactor(uuid): scope auth-path UUID bootstrap to single row — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11270"&gt;#11270&lt;/a&gt; refactor(calendar): replace repeat-type if/elseif chain with date arithmetic — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11069"&gt;#11069&lt;/a&gt; refactor(audit): Extract ATNA logging — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10883"&gt;#10883&lt;/a&gt; refactor(db): Remove support for secure_sqlconf.php — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11106"&gt;#11106&lt;/a&gt; refactor(logging): Remove remaining dependence on errorLogCaller — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11309"&gt;#11309&lt;/a&gt; refactor(logging): inject PSR Clock into EventAuditLogger — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11318"&gt;#11318&lt;/a&gt; refactor(prescription): add native types to Prescription properties — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11520"&gt;#11520&lt;/a&gt; refactor(di): Cache service instances in ServiceContainer — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11422"&gt;#11422&lt;/a&gt; refactor(billing): replace exec(unzip) with ZipArchive for ERA file uploads — @mw2000&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11269"&gt;#11269&lt;/a&gt; refactor: reduce PHPStan baseline — QueryUtils, PSR-3 logging, inTransaction — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11570"&gt;#11570&lt;/a&gt; refactor(globals): add typed path accessors to Kernel and migrate src/ — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11067"&gt;#11067&lt;/a&gt; refactor(types): add native types to well-covered source files — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11371"&gt;#11371&lt;/a&gt; refactor(camos): remove js_escape_protected() &amp;ndash; convert literal escapes at source — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11553"&gt;#11553&lt;/a&gt; refactor(faxsms): remove dead variables from notification script — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11320"&gt;#11320&lt;/a&gt; refactor: use BC\Utilities::isDateEmpty() for zero-date checks — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11349"&gt;#11349&lt;/a&gt; refactor(prescription): parameterize SQL, fix loose comparisons, remove dead code — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11302"&gt;#11302&lt;/a&gt; refactor(encryption): Message parser and format tooling — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11305"&gt;#11305&lt;/a&gt; refactor(encryption): Simplify the modern key format handling, prepare for explicit key ids — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11303"&gt;#11303&lt;/a&gt; refactor(encryption): Add keychain component — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11334"&gt;#11334&lt;/a&gt; refactor(background-services): extract orchestration into BackgroundServiceRunner — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11313"&gt;#11313&lt;/a&gt; refactor(camos): modernize CAMOS form code and eliminate PHPStan baseline entries — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11423"&gt;#11423&lt;/a&gt; refactor(background-services): distinguish lock failure reasons in BackgroundServiceRunner — @mw2000&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11404"&gt;#11404&lt;/a&gt; refactor(config): replace encrypted more_secure globals with constants — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11336"&gt;#11336&lt;/a&gt; refactor(background-services): add BackgroundServiceRegistry for module registration — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11414"&gt;#11414&lt;/a&gt; refactor(billing): use symfony/process for print command — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11444"&gt;#11444&lt;/a&gt; refactor(cdr): fix literal-string violations in clinical decision rules — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11428"&gt;#11428&lt;/a&gt; refactor(core): replace VersionService::asString() with SoftwareVersion DTO — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11427"&gt;#11427&lt;/a&gt; refactor(calendar): replace hardcoded day/month arrays with int-backed enums — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11429"&gt;#11429&lt;/a&gt; refactor(fhir): fix literal-string violations in xl/xlt calls — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11443"&gt;#11443&lt;/a&gt; refactor(eye-mag): fix literal-string violations in xl/xlt/xla calls — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11454"&gt;#11454&lt;/a&gt; refactor(translation): fix literal-string violations in xl wrappers — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11457"&gt;#11457&lt;/a&gt; refactor(reports): fix literal-string violations in xl/xlt calls — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11456"&gt;#11456&lt;/a&gt; refactor(menu): fix literal-string violations in xl/xlt calls — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11460"&gt;#11460&lt;/a&gt; refactor: fix scattered xl literal-string violations (Part 7, final) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11461"&gt;#11461&lt;/a&gt; refactor(install): drop 1024-byte fgets() buffer in Installer::getLine() — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11476"&gt;#11476&lt;/a&gt; refactor(direct-messaging): wrap phiMail socket lifecycle in try/finally — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11488"&gt;#11488&lt;/a&gt; refactor(database): migrate sqlBeginTrans call sites to QueryUtils::inTransaction — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10847"&gt;#10847&lt;/a&gt; refactor(dates): migrate oeFormatDateTime to DateFormatterUtils and add tests — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10761"&gt;#10761&lt;/a&gt; refactor(gacl): Narrow scope and apply correct type to Gacl properties — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10982"&gt;#10982&lt;/a&gt; refactor(crypto): Migrate CryptoGen to CryptoInterface — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11252"&gt;#11252&lt;/a&gt; refactor(api): replace $_GET with $request-&amp;gt;query in REST routes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11068"&gt;#11068&lt;/a&gt; refactor(globals): use getInt() for numeric OEGlobalsBag settings — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11229"&gt;#11229&lt;/a&gt; refactor(auth): replace raw SQL parameter in AuthUtils::updatePassword() — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11023"&gt;#11023&lt;/a&gt; refactor(tests): add native PHP types to ApiTestClient and BulkAPITestClient — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11082"&gt;#11082&lt;/a&gt; refactor(db): Move dbal connection into factory — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11078"&gt;#11078&lt;/a&gt; refactor(audit): Extract DB loggers from EventAuditLogger — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11050"&gt;#11050&lt;/a&gt; refactor(globals): use getBoolean() for boolean OEGlobalsBag settings — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10995"&gt;#10995&lt;/a&gt; refactor(crypto): Pass enums instead of strings — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11240"&gt;#11240&lt;/a&gt; refactor(csrf): simplify collectCsrfToken() usage across codebase — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10967"&gt;#10967&lt;/a&gt; refactor(phpstan): Add and correct missing type info — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11244"&gt;#11244&lt;/a&gt; refactor(acl): throw exceptions instead of exit() in controller ACL checks — @phantom930&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10683"&gt;#10683&lt;/a&gt; refactor(security): use AccessDeniedHelper for ACL denial patterns — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10688"&gt;#10688&lt;/a&gt; refactor(health): use QueryUtils in DatabaseCheck — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10981"&gt;#10981&lt;/a&gt; refactor(crypto): Encapsulate legacy decryption methods — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10972"&gt;#10972&lt;/a&gt; refactor(db): Simplify config file reading — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11017"&gt;#11017&lt;/a&gt; refactor: replace $GLOBALS access with OEGlobalsBag across the codebase — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10889"&gt;#10889&lt;/a&gt; refactor(db): change $_db property from public to protected — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10948"&gt;#10948&lt;/a&gt; refactor(faxsms): replace magic vendor IDs with ServiceType enum — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11266"&gt;#11266&lt;/a&gt; refactor: remove redundant &lt;code&gt;global $GLOBALS&lt;/code&gt; declarations — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11014"&gt;#11014&lt;/a&gt; refactor: use OEGlobalsBag::getKernel() instead of -&amp;gt;get(&amp;lsquo;kernel&amp;rsquo;) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10942"&gt;#10942&lt;/a&gt; refactor(auth): replace die() with RuntimeException in generatePortal… — @Boykosoft&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10729"&gt;#10729&lt;/a&gt; refactor: Deduplicate more global functions — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10884"&gt;#10884&lt;/a&gt; refactor(db): migrate get_db() calls to QueryUtils — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10840"&gt;#10840&lt;/a&gt; refactor(format-money): use OEGlobalsBag and add isolated tests — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11131"&gt;#11131&lt;/a&gt; refactor(crypto): Start to add DI support to CryptoGen — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11113"&gt;#11113&lt;/a&gt; refactor(audit): Get most global state out of the instance path — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11108"&gt;#11108&lt;/a&gt; refactor(logging): Remove most remaining coupling to SystemLogger — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11088"&gt;#11088&lt;/a&gt; refactor(log): Update many SystemLogger to Psr LoggerInterface — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10803"&gt;#10803&lt;/a&gt; refactor(db): centralize connection persistence detection — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10790"&gt;#10790&lt;/a&gt; refactor: Deduplicate more global functions — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10779"&gt;#10779&lt;/a&gt; refactor: Fix most duplicate class definitions — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11102"&gt;#11102&lt;/a&gt; refactor(audit): Have log table and ATNA implement common interface — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11100"&gt;#11100&lt;/a&gt; refactor(logging): Avoid errorLogCaller() where exception context available — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10773"&gt;#10773&lt;/a&gt; refactor(calendar): Update PostNuke internals to DBAL — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11105"&gt;#11105&lt;/a&gt; refactor(audit): Make audit destinations (&amp;ldquo;sinks&amp;rdquo;) configurable — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10692"&gt;#10692&lt;/a&gt; refactor(types): Add type annotations to CCR — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10690"&gt;#10690&lt;/a&gt; refactor(globals): Switch from error_log to standard system logger, fix status codes — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10920"&gt;#10920&lt;/a&gt; refactor(db): Remove sqlconfig event — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10770"&gt;#10770&lt;/a&gt; refactor(claimrev): use PSR-18 HTTP client — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11262"&gt;#11262&lt;/a&gt; refactor(modules): stop constructing throwaway Kernel instances — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11077"&gt;#11077&lt;/a&gt; refactor(calendar): extract inline JS from add_edit_event.php — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11257"&gt;#11257&lt;/a&gt; refactor(globals): enable getInt() and getString() typed getters — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11025"&gt;#11025&lt;/a&gt; refactor(tests): convert non-FHIR JSON fixtures to PHP files — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10966"&gt;#10966&lt;/a&gt; refactor(db): Update backup script to central config reads; exclude phpstan info — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10913"&gt;#10913&lt;/a&gt; refactor(crypto): remove silent failure handling from RandomGenUtils — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10850"&gt;#10850&lt;/a&gt; refactor(billing): return booleans instead of string values in connectivity checks — @jbaiad&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10713"&gt;#10713&lt;/a&gt; refactor(cron): Avoid duplicate function definitions — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11048"&gt;#11048&lt;/a&gt; refactor: convert remaining $GLOBALS existence checks to OEGlobalsBag — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10805"&gt;#10805&lt;/a&gt; refactor(installer): use centralized database connection factory — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/9980"&gt;#9980&lt;/a&gt; refactor(db): Doctrine/DBAL initial integration — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10689"&gt;#10689&lt;/a&gt; refactor(ccr): remove dead code and fix undefined variables — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10691"&gt;#10691&lt;/a&gt; refactor(modules): Fix a few missing/incorrect types — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10596"&gt;#10596&lt;/a&gt; refactor(db): Remove getSqlLastError() global function, improve types — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10520"&gt;#10520&lt;/a&gt; refactor(db): Move more logic from sql.inc to QueryUtils — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10573"&gt;#10573&lt;/a&gt; refactor(sql): remove QuotedOrNull and convert to prepared statements — @Firehed&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="chores"&gt;Chores&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12794"&gt;#12794&lt;/a&gt; chore(deps): bump nikic/php-parser from 5.7.0 to 5.8.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12793"&gt;#12793&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.33 to 9.0.34 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12801"&gt;#12801&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.12.3 to 7.13.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12800"&gt;#12800&lt;/a&gt; chore(deps-dev): bump psy/psysh from 0.12.23 to 0.12.24 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12797"&gt;#12797&lt;/a&gt; chore(deps-dev): bump webpack from 5.108.1 to 5.108.4 in the build-tools group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12796"&gt;#12796&lt;/a&gt; chore(deps): bump smarty/smarty from 4.5.6 to 4.5.7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12799"&gt;#12799&lt;/a&gt; chore(deps): bump twig/twig from 3.27.1 to 3.28.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12802"&gt;#12802&lt;/a&gt; chore(deps): bump google/apiclient from 2.19.3 to 2.19.4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12764"&gt;#12764&lt;/a&gt; chore(phpstan): Fix weird variant type in legacy phreeze path — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12706"&gt;#12706&lt;/a&gt; chore(coderabbit): skip auto-review on bot-authored PRs — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12676"&gt;#12676&lt;/a&gt; chore(deps-dev): bump globals from 17.6.0 to 17.7.0 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12687"&gt;#12687&lt;/a&gt; chore(deps): bump league/flysystem from 3.34.0 to 3.35.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12685"&gt;#12685&lt;/a&gt; chore(deps): bump claimrevolution/oe-module-claimrev-connect from 2.1.5 to 2.1.6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12680"&gt;#12680&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.15 to 8.5.16 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12543"&gt;#12543&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.11.0 to 2.12.1 in /interface/modules/custom_modules/oe-module-faxsms — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12686"&gt;#12686&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.12.1 to 7.12.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12684"&gt;#12684&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.12.1 to 2.12.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12683"&gt;#12683&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.32 to 9.0.33 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12682"&gt;#12682&lt;/a&gt; chore(deps-dev): bump slevomat/coding-standard from 8.29.0 to 8.30.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12679"&gt;#12679&lt;/a&gt; chore(deps): bump the symfony group with 11 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12677"&gt;#12677&lt;/a&gt; chore(deps-dev): bump autoprefixer from 10.5.0 to 10.5.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12675"&gt;#12675&lt;/a&gt; chore(deps-dev): bump webpack from 5.107.2 to 5.108.1 in the build-tools group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12654"&gt;#12654&lt;/a&gt; chore(di): Prepare BreakglassChecker(Interface) for autowiring — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12614"&gt;#12614&lt;/a&gt; chore: gitignore .worktrees.json.lock/ directory — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12545"&gt;#12545&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.11.1 to 7.12.1 in /interface/modules/custom_modules/oe-module-faxsms — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12600"&gt;#12600&lt;/a&gt; chore(deps): bump uuid from 14.0.0 to 14.0.1 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12601"&gt;#12601&lt;/a&gt; chore(phpstan): refresh RESERVED_WORD_SUPPLEMENT — @openemr-reserved-word-bot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12556"&gt;#12556&lt;/a&gt; chore(deps): bump claimrevolution/oe-module-claimrev-connect from 2.1.4 to 2.1.5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12554"&gt;#12554&lt;/a&gt; chore(deps-dev): bump justinrainbow/json-schema from 6.9.0 to 6.10.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12555"&gt;#12555&lt;/a&gt; chore(deps): bump ramsey/uuid from 4.9.2 to 4.9.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12561"&gt;#12561&lt;/a&gt; chore(deps): bump &lt;a href="https://github.com/macisamuele/language-formatters-pre-commit-hooks"&gt;https://github.com/macisamuele/language-formatters-pre-commit-hooks&lt;/a&gt; from v2.14.0 to 2.16.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12560"&gt;#12560&lt;/a&gt; chore(deps): bump &lt;a href="https://github.com/codespell-project/codespell"&gt;https://github.com/codespell-project/codespell&lt;/a&gt; from v2.4.1 to 2.4.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12557"&gt;#12557&lt;/a&gt; chore(deps): bump &lt;a href="https://github.com/pre-commit/pre-commit-hooks"&gt;https://github.com/pre-commit/pre-commit-hooks&lt;/a&gt; from v4.5.0 to 6.0.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12566"&gt;#12566&lt;/a&gt; chore(composer): ext-posix in &lt;code&gt;require-dev&lt;/code&gt; breaks &lt;code&gt;composer install&lt;/code&gt; on Windows — @sjpadgett&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12552"&gt;#12552&lt;/a&gt; chore(pre-commit): wire hadolint into local hooks — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12544"&gt;#12544&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.11.1 to 7.12.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12542"&gt;#12542&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.11.0 to 2.12.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12499"&gt;#12499&lt;/a&gt; chore(deps): bump phpseclib/phpseclib from 3.0.53 to 3.0.55 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12533"&gt;#12533&lt;/a&gt; chore(deps): bump dompurify from 3.4.10 to 3.4.11 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12532"&gt;#12532&lt;/a&gt; chore(cli): Exit with a nonzero code if bootstrap fails — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12531"&gt;#12531&lt;/a&gt; chore(ci): Instruct CodeRabbit to not edit the main PR body — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12505"&gt;#12505&lt;/a&gt; chore(deps): bump js-yaml from 4.1.1 to 4.2.0 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12504"&gt;#12504&lt;/a&gt; chore(deps): bump tar from 7.5.11 to 7.5.16 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12502"&gt;#12502&lt;/a&gt; chore(deps): bump dompurify from 3.4.9 to 3.4.10 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12498"&gt;#12498&lt;/a&gt; chore(deps): bump zircote/swagger-php from 6.1.2 to 6.2.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12523"&gt;#12523&lt;/a&gt; chore: phpstan fixes and other unrelated fixes — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12522"&gt;#12522&lt;/a&gt; chore(dbal): Groundwork for connecting to ORM and migration events — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12501"&gt;#12501&lt;/a&gt; chore(deps-dev): bump sass from 1.100.0 to 1.101.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12500"&gt;#12500&lt;/a&gt; chore(deps-dev): bump eslint from 10.4.1 to 10.5.0 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12468"&gt;#12468&lt;/a&gt; chore(deps): drop unused laminas-xmlrpc and confirm 8.5 resolution path — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12467"&gt;#12467&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.7.0 to 2.11.0 in /interface/modules/custom_modules/oe-module-faxsms — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12466"&gt;#12466&lt;/a&gt; chore(docker): wall off webpack cache in dev-easy compose envs — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12465"&gt;#12465&lt;/a&gt; chore(deps): pin express version range in ccdaservice lockfile — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12451"&gt;#12451&lt;/a&gt; chore(deps): bump dompurify from 3.4.8 to 3.4.9 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12448"&gt;#12448&lt;/a&gt; chore(deps): bump phpseclib/phpseclib from 3.0.52 to 3.0.53 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12450"&gt;#12450&lt;/a&gt; chore(deps-dev): bump sass from 1.86.0 to 1.100.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12447"&gt;#12447&lt;/a&gt; chore(deps-dev): bump webpack from 5.105.4 to 5.107.2 in the build-tools group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12449"&gt;#12449&lt;/a&gt; chore(deps): bump firehed/container from 1.0.0 to 1.1.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12452"&gt;#12452&lt;/a&gt; chore(deps-dev): bump mini-css-extract-plugin from 2.10.1 to 2.10.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12416"&gt;#12416&lt;/a&gt; chore(deps): bump phpoffice/phpspreadsheet from 5.7.0 to 5.8.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12413"&gt;#12413&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.31 to 9.0.32 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12412"&gt;#12412&lt;/a&gt; chore(deps-dev): bump justinrainbow/json-schema from 6.8.2 to 6.9.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12415"&gt;#12415&lt;/a&gt; chore(deps): bump claimrevolution/oe-module-claimrev-connect from 2.1.3 to 2.1.4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12363"&gt;#12363&lt;/a&gt; chore(deps): bump twig/twig from 3.26.0 to 3.27.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12411"&gt;#12411&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.10.6 to 7.11.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12414"&gt;#12414&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.10.4 to 2.11.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12417"&gt;#12417&lt;/a&gt; chore(deps): bump digitickets/lalit from 3.4.1 to 3.4.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12418"&gt;#12418&lt;/a&gt; chore(deps): bump dompurify from 3.4.7 to 3.4.8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12405"&gt;#12405&lt;/a&gt; chore: remove unused Laminas\Mvc import in FHIRSearchFieldFactory — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12355"&gt;#12355&lt;/a&gt; chore(deps): bump select2 from 4.0.13 to 4.1.0 in the ui-components group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12356"&gt;#12356&lt;/a&gt; chore(deps): bump the symfony group with 8 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12360"&gt;#12360&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.10.4 to 7.10.6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12383"&gt;#12383&lt;/a&gt; chore(actions): pin runner to ubuntu-24.04 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12362"&gt;#12362&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.10.1 to 2.10.4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12361"&gt;#12361&lt;/a&gt; chore(deps): bump dompurify from 3.4.5 to 3.4.7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12359"&gt;#12359&lt;/a&gt; chore(deps): bump doctrine/orm from 3.6.6 to 3.6.7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12364"&gt;#12364&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.30 to 9.0.31 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12381"&gt;#12381&lt;/a&gt; chore(deps): add ext-redis to composer config.platform — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12373"&gt;#12373&lt;/a&gt; chore(phpstan): refresh RESERVED_WORD_SUPPLEMENT — @openemr-reserved-word-bot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12292"&gt;#12292&lt;/a&gt; chore(deps-dev): bump symfony/dom-crawler from 7.4.8 to 7.4.12 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12111"&gt;#12111&lt;/a&gt; chore(deps): bump twilio/sdk from 8.11.5 to 8.11.6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12227"&gt;#12227&lt;/a&gt; chore(deps): bump twig/twig from 3.25.0 to 3.26.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12270"&gt;#12270&lt;/a&gt; chore(deps): bump the symfony group across 1 directory with 4 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12156"&gt;#12156&lt;/a&gt; chore(deps-dev): bump the development group across 1 directory with 2 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12112"&gt;#12112&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.29 to 9.0.30 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12113"&gt;#12113&lt;/a&gt; chore(deps-dev): bump slevomat/coding-standard from 8.28.1 to 8.29.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12157"&gt;#12157&lt;/a&gt; chore(deps): bump league/flysystem from 3.33.0 to 3.34.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12158"&gt;#12158&lt;/a&gt; chore(deps-dev): bump ergebnis/composer-normalize from 2.51.0 to 2.52.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12160"&gt;#12160&lt;/a&gt; chore(deps): bump twig/twig from 3.24.0 to 3.25.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12161"&gt;#12161&lt;/a&gt; chore(deps): bump knplabs/knp-snappy from 1.6.0 to 1.7.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12162"&gt;#12162&lt;/a&gt; chore(deps): bump express from 4.22.1 to 4.22.2 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12169"&gt;#12169&lt;/a&gt; chore(deps): bump setasign/fpdi from 2.6.6 to 2.6.7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12234"&gt;#12234&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.9.0 to 2.10.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12237"&gt;#12237&lt;/a&gt; chore(deps): bump doctrine/orm from 3.6.5 to 3.6.6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12240"&gt;#12240&lt;/a&gt; chore(deps-dev): bump mocha from 11.7.5 to 11.7.6 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12241"&gt;#12241&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.14 to 8.5.15 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12264"&gt;#12264&lt;/a&gt; chore(deps): bump guzzlehttp/guzzle from 7.10.0 to 7.10.4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12245"&gt;#12245&lt;/a&gt; chore: clear arrayValues.list + smaller.invalid PHPStan baseline entries — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12159"&gt;#12159&lt;/a&gt; chore(deps): bump dompurify from 3.4.2 to 3.4.5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12164"&gt;#12164&lt;/a&gt; chore(deps): bump @tootallnate/once and jest-environment-jsdom — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12145"&gt;#12145&lt;/a&gt; chore: clean up js_escape() patterns — @Kasirocswell&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12114"&gt;#12114&lt;/a&gt; chore(deps): bump doctrine/orm from 3.6.3 to 3.6.5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12095"&gt;#12095&lt;/a&gt; chore(deps-dev): bump fast-uri from 3.1.0 to 3.1.2 in /interface/modules/custom_modules/oe-module-comlink-telehealth/public/assets/js — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12092"&gt;#12092&lt;/a&gt; chore(deps): bump fast-uri from 3.0.6 to 3.1.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12045"&gt;#12045&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.13 to 8.5.14 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12044"&gt;#12044&lt;/a&gt; chore(deps): bump google/apiclient from 2.19.2 to 2.19.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12043"&gt;#12043&lt;/a&gt; chore(deps): bump twilio/sdk from 8.11.4 to 8.11.5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12042"&gt;#12042&lt;/a&gt; chore(deps): bump moneyphp/money from 4.8.0 to 4.9.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12041"&gt;#12041&lt;/a&gt; chore(deps): bump the symfony group with 6 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12038"&gt;#12038&lt;/a&gt; chore(deps): bump mongoose from 7.8.8 to 7.8.9 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12037"&gt;#12037&lt;/a&gt; chore(deps): bump ip-address from 10.1.0 to 10.2.0 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11569"&gt;#11569&lt;/a&gt; chore: standardize OpenCoreEMR copyright headers — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11637"&gt;#11637&lt;/a&gt; chore(testing): move database-independent tests to isolated suite — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11653"&gt;#11653&lt;/a&gt; chore(db): Baseline tooling for doctrine/migrations conversion — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11679"&gt;#11679&lt;/a&gt; chore(modules): remove abandoned sms_email_reminder — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11703"&gt;#11703&lt;/a&gt; chore(api): Update swagger schema — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11744"&gt;#11744&lt;/a&gt; chore(ci): exclude config/ from test coverage — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11771"&gt;#11771&lt;/a&gt; chore(db): Pre-create Doctrine migrations table — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11773"&gt;#11773&lt;/a&gt; chore(db): Remove forward upgrade from release — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11820"&gt;#11820&lt;/a&gt; chore(phpstan): drain return.missing baseline (29 → 0) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11821"&gt;#11821&lt;/a&gt; chore(phpstan): drain confident nonObject baselines (21 → 0) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11823"&gt;#11823&lt;/a&gt; chore(phpstan): drain constant.notFound baseline (123 → 0) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11825"&gt;#11825&lt;/a&gt; chore(phpstan): drain eRx method.notFound entries (253 → 189) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11826"&gt;#11826&lt;/a&gt; chore(phpstan): drain variable.undefined in gacl/admin (3446 → 3399) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11859"&gt;#11859&lt;/a&gt; chore(phpstan): drain Carecoordination module class.notFound + method.notFound — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11867"&gt;#11867&lt;/a&gt; chore(db): Fix typo — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11878"&gt;#11878&lt;/a&gt; chore(phpstan): drain edihistory baseline (method.notFound, variable.undefined) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11887"&gt;#11887&lt;/a&gt; chore(phpstan): drain variable.undefined baseline (3064 → 2927) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11901"&gt;#11901&lt;/a&gt; chore(phpstan): drain variable.undefined baseline in interface/main — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11902"&gt;#11902&lt;/a&gt; chore(phpstan): drain variable.undefined across interface/patient_file — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11903"&gt;#11903&lt;/a&gt; chore(phpstan): drain variable.undefined baseline for edihistory, modules, reports, services — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11914"&gt;#11914&lt;/a&gt; chore(phpstan): cap phpDoc.parseError baseline at zero — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11920"&gt;#11920&lt;/a&gt; chore(phpstan): drain variable.undefined baseline for interface/forms/eye_mag (1835 → 800) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11954"&gt;#11954&lt;/a&gt; chore(phpstan): drain variable.undefined for canonical-globals form files (800 → 708) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11963"&gt;#11963&lt;/a&gt; chore(phpstan): drain variable.undefined for interface/forms (708 → 586) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11996"&gt;#11996&lt;/a&gt; chore(phpstan): regenerate baseline for phpstan 2.1.54 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12001"&gt;#12001&lt;/a&gt; chore(phpstan): Clean up some issues in Document — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11993"&gt;#11993&lt;/a&gt; chore(deps): bump zircote/swagger-php from 6.1.1 to 6.1.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11991"&gt;#11991&lt;/a&gt; chore(deps-dev): bump the development group with 2 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11990"&gt;#11990&lt;/a&gt; chore(deps): bump the symfony group with 7 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11994"&gt;#11994&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.12 to 8.5.13 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11992"&gt;#11992&lt;/a&gt; chore(deps): bump dompurify from 3.4.1 to 3.4.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11844"&gt;#11844&lt;/a&gt; chore(deps): bump body-parser from 1.20.4 to 1.20.5 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11780"&gt;#11780&lt;/a&gt; chore(deps): bump uuid from 11.1.0 to 14.0.0 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11722"&gt;#11722&lt;/a&gt; chore(deps-dev): bump grunt from 1.6.1 to 1.6.2 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11838"&gt;#11838&lt;/a&gt; chore(deps-dev): bump phpstan/phpstan from 2.1.50 to 2.1.51 in the development group across 1 directory — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11841"&gt;#11841&lt;/a&gt; chore(deps): bump phpseclib/phpseclib from 3.0.51 to 3.0.52 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11842"&gt;#11842&lt;/a&gt; chore(deps): bump dompurify from 3.4.0 to 3.4.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11843"&gt;#11843&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.10 to 8.5.12 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11839"&gt;#11839&lt;/a&gt; chore(deps): bump doctrine/migrations from 3.9.6 to 3.9.7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11840"&gt;#11840&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.28 to 9.0.29 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11775"&gt;#11775&lt;/a&gt; chore(deps): bump @xmldom/xmldom from 0.9.9 to 0.9.10 in /ccdaservice/packages/oe-cda-schematron — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11713"&gt;#11713&lt;/a&gt; chore(deps-dev): bump the development group across 1 directory with 2 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11718"&gt;#11718&lt;/a&gt; chore(deps): bump zircote/swagger-php from 6.1.0 to 6.1.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11720"&gt;#11720&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.27 to 9.0.28 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11719"&gt;#11719&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.9 to 8.5.10 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11717"&gt;#11717&lt;/a&gt; chore(deps-dev): bump autoprefixer from 10.4.27 to 10.5.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11716"&gt;#11716&lt;/a&gt; chore(deps): bump twilio/sdk from 8.11.3 to 8.11.4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11714"&gt;#11714&lt;/a&gt; chore(deps): bump phpoffice/phpspreadsheet from 5.6.0 to 5.7.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11715"&gt;#11715&lt;/a&gt; chore(deps-dev): bump ergebnis/composer-normalize from 2.50.0 to 2.51.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11654"&gt;#11654&lt;/a&gt; chore(deps): bump dompurify from 3.3.3 to 3.4.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10929"&gt;#10929&lt;/a&gt; chore(globals): remove 19 unused global definitions — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10816"&gt;#10816&lt;/a&gt; chore(phpstan): Add/fix common type hints — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11180"&gt;#11180&lt;/a&gt; chore(docs): add missing GHSA and fix advisory URLs in 8.0.0.2 changelog — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11176"&gt;#11176&lt;/a&gt; chore(docs): Update changelog for 8.0.0.2 — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11301"&gt;#11301&lt;/a&gt; chore(docs): update AI guidelines files for commit trailers — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11412"&gt;#11412&lt;/a&gt; chore(globals): Move function definitions out of globals.php — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11406"&gt;#11406&lt;/a&gt; chore(cleanup): Sort functions in autoloaded function file — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11445"&gt;#11445&lt;/a&gt; chore(encryption): Move KeyId primitive up to top namespace — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11447"&gt;#11447&lt;/a&gt; chore(encryption): Adjust wrapped values in primitives — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11501"&gt;#11501&lt;/a&gt; chore(errors): Improve handling for Symfony HTTP errors — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11517"&gt;#11517&lt;/a&gt; chore(deps): upgrade Symfony components to 7.x — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10900"&gt;#10900&lt;/a&gt; chore(ci): raise codecov coverage targets (#10571) — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11495"&gt;#11495&lt;/a&gt; chore: support for alpine 3.23 with php 8.5 and nodejs 24 — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11508"&gt;#11508&lt;/a&gt; chore: rel-810 support for worktrees and alpine 3.23 — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11299"&gt;#11299&lt;/a&gt; chore(camos): remove mitigateSqlTableUpperCase() wrapper — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11376"&gt;#11376&lt;/a&gt; chore(database): rename Audit connection to NonAudited — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11306"&gt;#11306&lt;/a&gt; chore(ci): Remove PHPUnit &lt;code&gt;--testdox&lt;/code&gt; format from CI — @Copilot&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11373"&gt;#11373&lt;/a&gt; chore(crypto): replace mb_substr/mb_strlen with substr/strlen in binary operations — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11411"&gt;#11411&lt;/a&gt; chore(logging): Add and initialize basic fallback exception handler — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11341"&gt;#11341&lt;/a&gt; chore(docker): prep for rel-810 — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11417"&gt;#11417&lt;/a&gt; chore(utilities): Refactor and add tests for fixDate — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11514"&gt;#11514&lt;/a&gt; chore: drop unnecessary fgets() length limits — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11534"&gt;#11534&lt;/a&gt; chore(ci): bump mariadb to 12.2 — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11523"&gt;#11523&lt;/a&gt; chore(deps-dev): bump rector/rector from 2.4.0 to 2.4.1 in the development group across 1 directory — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11526"&gt;#11526&lt;/a&gt; chore(deps): bump zircote/swagger-php from 6.0.6 to 6.1.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11529"&gt;#11529&lt;/a&gt; chore(deps): bump phpseclib/phpseclib from 3.0.50 to 3.0.51 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11530"&gt;#11530&lt;/a&gt; chore(deps): bump ckeditor5 from 47.6.1 to 47.6.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11531"&gt;#11531&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.8 to 8.5.9 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11527"&gt;#11527&lt;/a&gt; chore(deps): bump phpoffice/phpspreadsheet from 5.5.0 to 5.6.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11181"&gt;#11181&lt;/a&gt; chore(testing): show PHPUnit deprecation details in test output — @Daedalus-Icarus&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11133"&gt;#11133&lt;/a&gt; chore(deps): drop direct laminas/laminas-json requirement — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11295"&gt;#11295&lt;/a&gt; chore(version): set version to 8.1.0 for release branch — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11311"&gt;#11311&lt;/a&gt; chore: change upgrade script to 8.1.0 — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10766"&gt;#10766&lt;/a&gt; chore: bump v_database — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11083"&gt;#11083&lt;/a&gt; chore: remove 2015 reference — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11081"&gt;#11081&lt;/a&gt; chore: changelog 8.0.0.1 — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11213"&gt;#11213&lt;/a&gt; chore: add export-ignore rules to .gitattributes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11289"&gt;#11289&lt;/a&gt; chore(encryption): Add and integrate ciphertext wrapper — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11283"&gt;#11283&lt;/a&gt; chore(docs): Adjust changelog so it doesn&amp;rsquo;t trigger spellcheck errors on all PRs — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11292"&gt;#11292&lt;/a&gt; chore(ci): Run PHPStan on 8.5 — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11276"&gt;#11276&lt;/a&gt; chore(docs): add 8.0.0.3 changelog — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11247"&gt;#11247&lt;/a&gt; chore(crypto): Modularize cryptographic ciphers — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10932"&gt;#10932&lt;/a&gt; chore(deps): bump minimatch to fix ReDoS (CVE-2026-26996) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11033"&gt;#11033&lt;/a&gt; chore(deps): bump immutable 4.3.7 → 4.3.8 in ccdaservice — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10994"&gt;#10994&lt;/a&gt; chore(phpcs): Group and sort &lt;code&gt;use&lt;/code&gt; statements — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10639"&gt;#10639&lt;/a&gt; chore(portal): remove dead verysimple DB drivers — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10938"&gt;#10938&lt;/a&gt; chore(ci): Add unused use statement linting — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10927"&gt;#10927&lt;/a&gt; chore(db): Remove multipledb module — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10916"&gt;#10916&lt;/a&gt; chore(phpstan): Tell composer phpstan to prefer dist config — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10801"&gt;#10801&lt;/a&gt; chore(db): Remove charset option — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11107"&gt;#11107&lt;/a&gt; chore(testing): Default to NullLogger in tests — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11432"&gt;#11432&lt;/a&gt; chore(deps-dev): bump the development group with 2 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11230"&gt;#11230&lt;/a&gt; chore(testing): migrate @dataProvider annotations to PHP 8 attributes — @haoyu-haoyu&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11159"&gt;#11159&lt;/a&gt; chore(testing): Improve code coverage reporting for isolated tests — @Daedalus-Icarus&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11204"&gt;#11204&lt;/a&gt; chore(deps): resolve composer dependency blockers for PHP 8.4 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10965"&gt;#10965&lt;/a&gt; chore(db): Remove laminas-db package dependency — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10921"&gt;#10921&lt;/a&gt; chore(api): Upgrade swagger-php to 6.x with PHP 8 attributes — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10789"&gt;#10789&lt;/a&gt; chore(db): Remove legacy non-utf8 connection support — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11435"&gt;#11435&lt;/a&gt; chore(deps): bump bacon/bacon-qr-code from 3.0.4 to 3.1.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11436"&gt;#11436&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.26 to 9.0.27 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11434"&gt;#11434&lt;/a&gt; chore(deps): bump google/apiclient from 2.19.1 to 2.19.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11433"&gt;#11433&lt;/a&gt; chore(deps): bump digitickets/lalit from 3.4.0 to 3.4.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11431"&gt;#11431&lt;/a&gt; chore(deps): bump the symfony group with 5 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11415"&gt;#11415&lt;/a&gt; chore(deps): bump lodash from 4.17.23 to 4.18.1 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11356"&gt;#11356&lt;/a&gt; chore(deps): bump @xmldom/xmldom from 0.9.8 to 0.9.9 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11355"&gt;#11355&lt;/a&gt; chore(deps): bump knockout from 3.5.2 to 3.5.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11354"&gt;#11354&lt;/a&gt; chore(deps): bump twilio/sdk from 8.11.2 to 8.11.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11353"&gt;#11353&lt;/a&gt; chore(deps): bump google/apiclient from 2.19.0 to 2.19.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11352"&gt;#11352&lt;/a&gt; chore(deps-dev): bump phpstan/phpstan from 2.1.42 to 2.1.44 in the development group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11324"&gt;#11324&lt;/a&gt; chore(deps): bump path-to-regexp from 0.1.12 to 0.1.13 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11323"&gt;#11323&lt;/a&gt; chore(deps): bump serialize-javascript and terser-webpack-plugin in /interface/modules/custom_modules/oe-module-comlink-telehealth/public/assets/js — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11322"&gt;#11322&lt;/a&gt; chore(deps): bump brace-expansion from 2.0.2 to 2.0.3 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11310"&gt;#11310&lt;/a&gt; chore: prep for 8.1.0 and 8.1.1 — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11296"&gt;#11296&lt;/a&gt; chore(version): bump master dev version to 8.1.1 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11285"&gt;#11285&lt;/a&gt; chore(deps): bump picomatch from 4.0.3 to 4.0.4 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11287"&gt;#11287&lt;/a&gt; chore(deps-dev): bump picomatch from 2.3.1 to 2.3.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11275"&gt;#11275&lt;/a&gt; chore(docs): add 8.0.0.3 changelog — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11236"&gt;#11236&lt;/a&gt; chore(deps-dev): bump rector/rector from 2.3.8 to 2.3.9 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11237"&gt;#11237&lt;/a&gt; chore(deps): bump twig/twig from 3.23.0 to 3.24.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11238"&gt;#11238&lt;/a&gt; chore(deps): bump doctrine/dbal from 4.4.2 to 4.4.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11235"&gt;#11235&lt;/a&gt; chore(deps-dev): bump slevomat/coding-standard from 8.28.0 to 8.28.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11196"&gt;#11196&lt;/a&gt; chore(deps-dev): bump flatted from 3.3.3 to 3.4.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11195"&gt;#11195&lt;/a&gt; chore(deps): bump phpseclib/phpseclib from 3.0.49 to 3.0.50 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11172"&gt;#11172&lt;/a&gt; chore: Rel 800 fix changelog 8.0.0.2 — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11104"&gt;#11104&lt;/a&gt; chore: FHIR API documentation minor fixes — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11101"&gt;#11101&lt;/a&gt; chore: remove 2015 reference with schemaspy regen for rel-800 — @stephenwaite&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11148"&gt;#11148&lt;/a&gt; chore(deps): bump jspdf from 4.2.0 to 4.2.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11118"&gt;#11118&lt;/a&gt; chore(deps): bump laminas/laminas-soap from 2.14.0 to 2.15.0 in the laminas group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11125"&gt;#11125&lt;/a&gt; chore(deps): bump ckeditor5 from 47.6.0 to 47.6.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11124"&gt;#11124&lt;/a&gt; chore(deps): bump mpdf/mpdf from 8.2.7 to 8.3.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11123"&gt;#11123&lt;/a&gt; chore(deps): bump dompurify from 3.3.2 to 3.3.3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11122"&gt;#11122&lt;/a&gt; chore(deps): bump bacon/bacon-qr-code from 3.0.3 to 3.0.4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11121"&gt;#11121&lt;/a&gt; chore(deps): bump twilio/sdk from 8.11.1 to 8.11.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11120"&gt;#11120&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.25 to 9.0.26 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11119"&gt;#11119&lt;/a&gt; chore(deps): bump guzzlehttp/psr7 from 2.8.0 to 2.9.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11064"&gt;#11064&lt;/a&gt; chore(deps): bump predis/predis from 3.4.1 to 3.4.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11086"&gt;#11086&lt;/a&gt; chore(phpstan): rebuild baseline on rel-800 — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11071"&gt;#11071&lt;/a&gt; chore(deps): bump tar from 7.5.10 to 7.5.11 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11045"&gt;#11045&lt;/a&gt; chore(deps): bump knockout from 3.5.1 to 3.5.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11044"&gt;#11044&lt;/a&gt; chore(deps-dev): bump ramsey/conventional-commits from 1.6.0 to 1.7.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11042"&gt;#11042&lt;/a&gt; chore(deps): bump dompdf/dompdf from 3.1.4 to 3.1.5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11041"&gt;#11041&lt;/a&gt; chore(deps): bump the symfony group with 4 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11046"&gt;#11046&lt;/a&gt; chore(deps-dev): bump postcss from 8.5.6 to 8.5.8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11043"&gt;#11043&lt;/a&gt; chore(deps-dev): bump eslint from 9.39.3 to 9.39.4 in the build-tools group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11000"&gt;#11000&lt;/a&gt; chore(deps): bump dompurify from 3.3.1 to 3.3.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10996"&gt;#10996&lt;/a&gt; chore(deps): bump tar from 7.5.9 to 7.5.10 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10990"&gt;#10990&lt;/a&gt; chore(deps-dev): bump immutable from 5.1.1 to 5.1.5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10980"&gt;#10980&lt;/a&gt; chore(deps): bump @ckeditor/ckeditor5-html-support and ckeditor5 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10930"&gt;#10930&lt;/a&gt; chore(db): Remove most of ApplicationTable &amp;amp; Laminas DB coupling — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10958"&gt;#10958&lt;/a&gt; chore(deps-dev): bump phpstan/phpstan from 2.1.39 to 2.1.40 in the development group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10957"&gt;#10957&lt;/a&gt; chore(deps): bump the symfony group with 7 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10961"&gt;#10961&lt;/a&gt; chore(deps): bump zircote/swagger-php from 6.0.5 to 6.0.6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10962"&gt;#10962&lt;/a&gt; chore(deps): bump predis/predis from 3.4.0 to 3.4.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10963"&gt;#10963&lt;/a&gt; chore(deps): bump phpoffice/phpspreadsheet from 5.4.0 to 5.5.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10964"&gt;#10964&lt;/a&gt; chore(deps): bump doctrine/dbal from 4.4.1 to 4.4.2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10960"&gt;#10960&lt;/a&gt; chore(deps-dev): bump autoprefixer from 10.4.24 to 10.4.27 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10959"&gt;#10959&lt;/a&gt; chore(deps): bump giggsey/libphonenumber-for-php from 9.0.23 to 9.0.25 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10933"&gt;#10933&lt;/a&gt; chore(deps): bump minimatch — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10880"&gt;#10880&lt;/a&gt; chore(deps): bump underscore from 1.13.7 to 1.13.8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10877"&gt;#10877&lt;/a&gt; chore(deps): bump twilio/sdk from 8.11.0 to 8.11.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10875"&gt;#10875&lt;/a&gt; chore(deps): bump jquery-validation from 1.22.0 to 1.22.1 in the jquery-bootstrap group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10878"&gt;#10878&lt;/a&gt; chore(deps-dev): bump eslint from 9.39.2 to 9.39.3 in the build-tools group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10876"&gt;#10876&lt;/a&gt; chore(deps-dev): bump rector/rector from 2.3.6 to 2.3.8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10874"&gt;#10874&lt;/a&gt; chore(deps-dev): bump phpunit/phpunit from 11.5.53 to 11.5.55 in the development group — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10783"&gt;#10783&lt;/a&gt; chore(deps): bump predis/predis from 3.3.0 to 3.4.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10802"&gt;#10802&lt;/a&gt; chore(db): Convert legacy Phreeze to updated connection handling — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10817"&gt;#10817&lt;/a&gt; chore(deps): bump jspdf from 4.1.0 to 4.2.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10793"&gt;#10793&lt;/a&gt; chore(deps): bump tar from 7.5.7 to 7.5.9 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10784"&gt;#10784&lt;/a&gt; chore(deps): bump sortablejs from 1.15.6 to 1.15.7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10785"&gt;#10785&lt;/a&gt; chore(deps): bump i18next-browser-languagedetector from 8.2.0 to 8.2.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10782"&gt;#10782&lt;/a&gt; chore(deps): bump knplabs/knp-snappy from 1.5.1 to 1.6.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10781"&gt;#10781&lt;/a&gt; chore(deps-dev): bump ergebnis/composer-normalize from 2.49.0 to 2.50.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10780"&gt;#10780&lt;/a&gt; chore(deps-dev): bump the development group with 5 updates — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10732"&gt;#10732&lt;/a&gt; chore(deps): bump qs from 6.14.1 to 6.14.2 in /ccdaservice — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10515"&gt;#10515&lt;/a&gt; chore: reused SingletonTrait at OEGlobalsBag — @igormukhingmailcom&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10695"&gt;#10695&lt;/a&gt; chore: prep changelog for 8.0.0 release — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10655"&gt;#10655&lt;/a&gt; chore(deps): bump twilio/sdk from 8.10.1 to 8.11.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10444"&gt;#10444&lt;/a&gt; chore(phpstan): Raise PHPStan level to 10; baseline new errors — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10656"&gt;#10656&lt;/a&gt; chore(deps-dev): bump rector/rector from 2.3.5 to 2.3.6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10654"&gt;#10654&lt;/a&gt; chore(deps-dev): bump phpunit/phpunit from 11.5.50 to 11.5.52 in the development group — @dependabot[bot]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="other"&gt;Other&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12781"&gt;#12781&lt;/a&gt; ci(deps): bump actions/checkout from 5 to 7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12780"&gt;#12780&lt;/a&gt; ci(deps): bump lewagon/wait-on-check-action from 1.8.0 to 1.8.1 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12778"&gt;#12778&lt;/a&gt; ci(docker): trigger docker-test-release on version.php bumps — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12774"&gt;#12774&lt;/a&gt; ci(all-checks-passed): trigger on rel-* branches — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12720"&gt;#12720&lt;/a&gt; ci(docker): trigger orchestrator on push to release-targets.yml — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12708"&gt;#12708&lt;/a&gt; ci(claude-review): pin orchestrator to Sonnet, drop the premium Opus default — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12707"&gt;#12707&lt;/a&gt; ci(claude-review): drop show_full_output debug flag — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12705"&gt;#12705&lt;/a&gt; ci(claude-review): switch to Anthropic code-review plugin, on-demand only — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12704"&gt;#12704&lt;/a&gt; ci(claude-review): allow-list GitHub comment tools + surface transcript — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12700"&gt;#12700&lt;/a&gt; ci(claude-review): add reusable + caller workflow for PR reviews — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12663"&gt;#12663&lt;/a&gt; ci(deps): bump actions/cache from 5 to 6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12659"&gt;#12659&lt;/a&gt; ci(phpstan): drop vestigial Remove Rector step — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12658"&gt;#12658&lt;/a&gt; ci(phpstan): authenticate Composer with GITHUB_TOKEN to dodge API throttle — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12650"&gt;#12650&lt;/a&gt; docs: note HOST_UID auto-export for transparent host-uid alignment — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12613"&gt;#12613&lt;/a&gt; docs: document new openemr-cmd worktree add -b default and &amp;ndash;base flag — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12595"&gt;#12595&lt;/a&gt; docs(claude): warn against git fetch &amp;ndash;update-head-ok in the primary repo — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12558"&gt;#12558&lt;/a&gt; ci(deps): bump actions/checkout from 6 to 7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12586"&gt;#12586&lt;/a&gt; docs(ci): document release-targets.yml as master-authoritative — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12574"&gt;#12574&lt;/a&gt; ci(pre-commit): broaden workflow to validate every upstream hook on &amp;ndash;all-files — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12573"&gt;#12573&lt;/a&gt; style(pre-commit): split pretty-format-json into per-ecosystem 2-space/4-space blocks — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12571"&gt;#12571&lt;/a&gt; style(yaml): apply pretty-format-yaml across repo-owned configs — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12553"&gt;#12553&lt;/a&gt; ci(dependabot): track pre-commit hook revs — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12551"&gt;#12551&lt;/a&gt; docs(docker): relocate migration doc + refresh post-migration documentation — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12497"&gt;#12497&lt;/a&gt; ci(docker): port migration to rel-704 (phase 2, lighter) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12496"&gt;#12496&lt;/a&gt; ci(docker): port migration to rel-800 (phase 2, lighter) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12495"&gt;#12495&lt;/a&gt; ci(docker): port migration to rel-810 (phase 2, full) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12482"&gt;#12482&lt;/a&gt; ci(docker): docker migration master-side (phases 1a + 1b + 1c) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12530"&gt;#12530&lt;/a&gt; test(billing): add isolated tests for Claim::procCount and payerCount — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12471"&gt;#12471&lt;/a&gt; test(ccda): add integration test for CcdaGenerator::socket_get — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12463"&gt;#12463&lt;/a&gt; docs(claude-md): document Claude Code-driven Selenium debugging — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12453"&gt;#12453&lt;/a&gt; build(deps): replace grunt/jshint with eslint+mocha in oe-cda-schematron — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12464"&gt;#12464&lt;/a&gt; style(docker): normalize YAML indentation in dev-easy-redis compose — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11231"&gt;#11231&lt;/a&gt; build(webpack): replace gulp with webpack for theme compilation — @rollingventures&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12446"&gt;#12446&lt;/a&gt; ci(deps): bump lewagon/wait-on-check-action from 1.7.0 to 1.8.0 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12445"&gt;#12445&lt;/a&gt; ci: capture openemr log and apache coredump in e2e failure artifact — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12431"&gt;#12431&lt;/a&gt; ci: authenticate to Docker Hub before image pulls to lift rate limits — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12425"&gt;#12425&lt;/a&gt; ci: retry Docker image pulls with backoff to survive registry timeouts — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12406"&gt;#12406&lt;/a&gt; ci(deps): bump codecov/codecov-action from 6 to 7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12369"&gt;#12369&lt;/a&gt; docs(worktree): document openemr-cmd worktree prune + graceful remove — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12372"&gt;#12372&lt;/a&gt; ci(deps): migrate dependabot-auto-merge to client-id / vars — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12371"&gt;#12371&lt;/a&gt; ci(phpstan): migrate reserved-word bot to client-id / vars — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12368"&gt;#12368&lt;/a&gt; ci(phpstan): use GitHub App for reserved-word refresh PRs so CI runs — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12341"&gt;#12341&lt;/a&gt; ci: also ignore codecov/patch in All Checks Passed aggregate — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12117"&gt;#12117&lt;/a&gt; docs: add end-to-end RELEASE_PROCESS.md for automated release flow — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12259"&gt;#12259&lt;/a&gt; test(api): align site_addr_oath with baseUrl in GroupExportFhirApiTest setUp — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12321"&gt;#12321&lt;/a&gt; build: exclude generated EHI schema docs from release archives — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12317"&gt;#12317&lt;/a&gt; build: exclude generated EHI schema docs from release archives — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12296"&gt;#12296&lt;/a&gt; Revert &amp;ldquo;chore(release): prep 8.1.0&amp;rdquo; — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12268"&gt;#12268&lt;/a&gt; test: exclude non-logic dirs from phpunit coverage — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12229"&gt;#12229&lt;/a&gt; revert(faxsms): restore VoiceClient and in-browser RingCentral softphone — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12258"&gt;#12258&lt;/a&gt; test: exclude NotificationCronEmailTest from e2e suite (it lives in email suite) — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12250"&gt;#12250&lt;/a&gt; docs: document openemr-cmd phpstan-generate-reset and update-layout-field-fixtures — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12232"&gt;#12232&lt;/a&gt; test(layout): snapshot rendered HTML for every layout field type — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11918"&gt;#11918&lt;/a&gt; test(ci): skip data_absent_reason test in US Core 3.1.1 suite — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12210"&gt;#12210&lt;/a&gt; ci: add apache_{82,85}_118_upgrade variants exercising 5.0.0→current sql_upgrade chain — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12147"&gt;#12147&lt;/a&gt; docs: document docker-routed pre-commit workflow + isolate PHPStan tmpDir via named volume — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12021"&gt;#12021&lt;/a&gt; docs: document new openemr-cmd worktree subcommands and AI-assistant rules — @bradymiller&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12040"&gt;#12040&lt;/a&gt; ci(deps): bump actions/create-github-app-token from 1 to 3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12039"&gt;#12039&lt;/a&gt; ci(deps): bump peter-evans/create-pull-request from 7 to 8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11896"&gt;#11896&lt;/a&gt; docs: plan for openemr release-automation conductor (openemr-devops#664) — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/12010"&gt;#12010&lt;/a&gt; test: move isolated-compatible tests to isolated suite — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11584"&gt;#11584&lt;/a&gt; test(security): expand isolated tests for unserialize allowed_classes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11617"&gt;#11617&lt;/a&gt; ci: include composer.json in vendor cache key — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11638"&gt;#11638&lt;/a&gt; test(phpunit): fail on deprecations in all test suites — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11681"&gt;#11681&lt;/a&gt; docs(background-services): clarify register() active-flag policy — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11699"&gt;#11699&lt;/a&gt; test(background-services): add shell-out CLI integration test — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11795"&gt;#11795&lt;/a&gt; test(calendar): cover recurring event repeat-type branching — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11796"&gt;#11796&lt;/a&gt; ci(phpstan): gate fatal-category baseline entries from ever growing — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11816"&gt;#11816&lt;/a&gt; ci(phpstan): add composer phpstan-baseline-reset to wipe and rebuild — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11847"&gt;#11847&lt;/a&gt; ci(phpstan): make baseline-diff PR lookup tolerant of API failures — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11852"&gt;#11852&lt;/a&gt; ci(ccdaservice): rebuild libxmljs2 from source — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11857"&gt;#11857&lt;/a&gt; ci(e2e): capture diagnostics for InvalidSessionIdException flake — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11861"&gt;#11861&lt;/a&gt; Revert &amp;ldquo;ci(ccdaservice): rebuild libxmljs2 from source (#11852)&amp;rdquo; — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11862"&gt;#11862&lt;/a&gt; ci(ccdaservice): rename cache key to invalidate stale v127 binaries — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11986"&gt;#11986&lt;/a&gt; ci: harden e2e test step against rerun cascade failure — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10387"&gt;#10387&lt;/a&gt; perf(ci): restore file timestamps to enable PHPStan caching — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11832"&gt;#11832&lt;/a&gt; ci(deps): bump marocchino/sticky-pull-request-comment from 2 to 3 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11833"&gt;#11833&lt;/a&gt; ci(deps): bump actions/download-artifact from 7 to 8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11828"&gt;#11828&lt;/a&gt; ci(phpstan): post baseline diff as a sticky PR comment — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11724"&gt;#11724&lt;/a&gt; ci: key phpstan and rector caches on tool version, not composer.lock — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11173"&gt;#11173&lt;/a&gt; Update fetch-depth in build-patch.yml — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11170"&gt;#11170&lt;/a&gt; Conditional directory creation for patch files — @adunsulag&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11158"&gt;#11158&lt;/a&gt; test(crypto): add integration tests for CryptoGen decryption — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11277"&gt;#11277&lt;/a&gt; docs(contributing): update PR and contribution guidelines — @Firehed&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11595"&gt;#11595&lt;/a&gt; docs(api): add OpenAPI attributes to BackgroundServiceRestController — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11366"&gt;#11366&lt;/a&gt; test(background-services): add integration tests for BackgroundServiceRegistry — @corevibe555&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11286"&gt;#11286&lt;/a&gt; style(custom): fix indentation in export_xml.php — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11342"&gt;#11342&lt;/a&gt; docs(ai): expand CLAUDE.md with PHP coding standards — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11518"&gt;#11518&lt;/a&gt; ci: pin Docker images by digest and add Dependabot for CI images — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11541"&gt;#11541&lt;/a&gt; ci(docker): pin Docker images by digest in docker/* development environments — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11537"&gt;#11537&lt;/a&gt; ci(deps): use patch-level tags and refine Dependabot ignore rules — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11536"&gt;#11536&lt;/a&gt; ci(deps): allow patch updates for CI docker images — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11535"&gt;#11535&lt;/a&gt; ci(deps): ignore version bumps for CI images pinned to specific versions — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10853"&gt;#10853&lt;/a&gt; test: add isolated tests for search query subsystem — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10852"&gt;#10852&lt;/a&gt; test: add isolated tests for NetworkUtils, FileUtils, HttpUtils, and DbUtils — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10838"&gt;#10838&lt;/a&gt; test: add isolated tests for KeyVersion and PhoneNumber — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10835"&gt;#10835&lt;/a&gt; test: add isolated tests for QDM AbstractType — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10828"&gt;#10828&lt;/a&gt; test: add isolated tests for QueryPagination and BoundFilter — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10836"&gt;#10836&lt;/a&gt; test: add isolated tests for PlaceOfServiceEnum and DateHelper — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10832"&gt;#10832&lt;/a&gt; test: add isolated tests for BmiCategory and ScopePermissionObject — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11079"&gt;#11079&lt;/a&gt; ci: add Build Patch Release workflow — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10768"&gt;#10768&lt;/a&gt; ci: add check for v_database alignment between version.php and database.sql — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11239"&gt;#11239&lt;/a&gt; ci(deps): add rector and shipmonk to dependabot development group — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10987"&gt;#10987&lt;/a&gt; test(isolated): add EncounterRestController tests — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10974"&gt;#10974&lt;/a&gt; test(isolated): add coverage for 7 previously untested classes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10641"&gt;#10641&lt;/a&gt; test(coverage): exclude uncoverable test infrastructure from coverage — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10648"&gt;#10648&lt;/a&gt; ci(codecov): report every time — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10953"&gt;#10953&lt;/a&gt; docs(contributing): add guidance on proposing changes and repo selection — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10940"&gt;#10940&lt;/a&gt; docs(api): fix copy-paste errors in OpenAPI annotations — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10915"&gt;#10915&lt;/a&gt; test(services): add AppointmentService test coverage — @craigrallen&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10825"&gt;#10825&lt;/a&gt; test(utils): add isolated tests for MeasurementUtils and StringUtils — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11062"&gt;#11062&lt;/a&gt; ci(deps): bump actions/download-artifact from 4 to 8 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11040"&gt;#11040&lt;/a&gt; ci(deps): bump docker/login-action from 3 to 4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11039"&gt;#11039&lt;/a&gt; ci(deps): bump docker/setup-qemu-action from 3 to 4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11175"&gt;#11175&lt;/a&gt; ci(build-patch): delete .github/workflows/build-patch.yml — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11038"&gt;#11038&lt;/a&gt; ci(deps): bump docker/build-push-action from 6 to 7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11037"&gt;#11037&lt;/a&gt; ci(deps): bump docker/setup-buildx-action from 3 to 4 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10873"&gt;#10873&lt;/a&gt; test(cda): add isolated unit tests for CdaTemplateParse — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11232"&gt;#11232&lt;/a&gt; ci(deps): bump j178/prek-action from 1 to 2 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10831"&gt;#10831&lt;/a&gt; test(menu): add isolated tests for MenuItems and BaseMenuItem — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10653"&gt;#10653&lt;/a&gt; ci(deps): bump actions/upload-artifact from 4 to 6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10956"&gt;#10956&lt;/a&gt; ci(deps): bump actions/upload-artifact from 6 to 7 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11030"&gt;#11030&lt;/a&gt; test(api): enable isolated SiteSetupListener tests — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11051"&gt;#11051&lt;/a&gt; perf(ci): parallelize test suites within each configuration — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11010"&gt;#11010&lt;/a&gt; docs: document OEGlobalsBag typed getters from ParameterBag — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10979"&gt;#10979&lt;/a&gt; docs: update CLAUDE.md for recent codebase changes — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11351"&gt;#11351&lt;/a&gt; ci(deps): bump codecov/codecov-action from 5 to 6 — @dependabot[bot]&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/11028"&gt;#11028&lt;/a&gt; test(csrf): add CSRF token round-trip tests with Symfony session — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10872"&gt;#10872&lt;/a&gt; test: add isolated tests for EDI270, event DTOs, Metadata, and oeHttpResponse — @kojiromike&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/openemr/openemr/pull/10484"&gt;#10484&lt;/a&gt; docs(api): add CLI testing tip for special characters in passwords — @fzzio&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>