# Release Notes - v2.8.41

**Date**: 2026-05-17

## 📝 Executive Summary

```text
2.8.41 2026-05-17

- chore: automated project maintenance and cleanup (extracted `RULES.md`, `MEMORY_DB.md`, `TESTS.md`).
- feat: enhance --forcemem and --forceswap to support human-readable memory units (B, K, M, G, T, P).
- feat: implement idiomatic Perl Boolean practices across the project (#34).
- feat: add recommendation for `table_open_cache_instances` based on CPU cores (#480).
- feat: improve syslog and systemd journal detection for error logs (#440).
- feat: initialize `$mysqllogin` to avoid uninitialized value warnings (#490).
- fix: filter MySQL CLI password warning from execute_system_command output.
- fix: prevent division by zero crash in percentage() with non-numeric values.
- fix: resolve SQL execution failure (return code 256) in MySQL 9.x containers by updating batch execution flags.
- fix: Restore compatibility with older Perl versions (by @jasongill).
- fix: wrap template loading in `get_template_model()` to avoid `uninitialized value` warnings during `require`.
- fix: allow `--updateversion` to work on hosts without `mysql`/`mariadb` installed (#36).
- fix: skip local SSL certificate warnings if they are in an inaccessible `datadir` (#33).
- fix: correct false positives in `check_removed_innodb_variables` by distinguishing real server variables from internal ones (#32).
- fix: improve join_buffer_size recommendation formatting in Variables to Adjust (#881).
- fix: suppress MySQL client warning regarding 'DISABLED' boolean value for SSL (#887).
- fix: correctly handle `--defaults-file` and `--defaults-extra-file` without dropping options (#605).
- fix: restore Debian maintenance account automatic login by using idiomatic boolean checks (#896).
- fix: include `tmp_table_size` in per-thread memory calculation for better accuracy (#864).
- fix: add retry mechanism for initial `SELECT VERSION()` query to improve connection resilience (#782).
- fix: prevent `AUTO_INCREMENT` capacity false positives for empty tables (#37).
- fix: refactor InnoDB Redo Log Capacity logic to be workload-based and avoid false positives (#714, #737, #777).
- fix: add guards against division by zero in calculations for improved stability (#435).
- fix: add truthiness guards to `mysql_innodb` and `mysql_stats` subroutines.
- fix: improve `which` logic for better container/minimal environment support.
- fix: enhance login failure reporting with detailed output.
- fix: handle Plesk Obsidian 18.0.76.5+ removing --show-password (#42).
- test: add validation tests for auth, missing args, and formatting.
- ci: enhance Quality Gate to strictly enforce zero-warning policy on GitHub Actions tests.
- ci: implement dynamic CI test environment detection by wrapping configuration extraction.
- ci: refactor GitHub Actions release and prerelease workflows to support dynamic versions and checksum generation.
- ci: refine audit_logs.pl to prevent false positive warnings on successful output.
- ci: migrate maintenance script to GitHub Actions.
- refactor: update CLI metadata to use `undef` as default for string/path options.
- refactor: replace non-idiomatic `eq '0'`, `ne 0`, etc., with standard truthiness checks.
- refactor: replace "master"/"slave" terminology with "source"/"replica" for cultural sensitivity (#888).
- chore(deps): update docker/setup-buildx-action action to v4.
- chore(deps): update docker/build-push-action action to v7.
- chore(deps): update docker/login-action action to v4.
- chore(deps): update softprops/action-gh-release action to v3.
```

## 📈 Diagnostic Growth Indicators

| Metric | Current | Progress | Status |
| :--- | :--- | :--- | :--- |
| Total Indicators | 12 | 0 | 🛡️ |
| Efficiency Checks | 0 | 0 | 🛡️ |
| Risk Detections | 2 | 0 | 🛡️ |
| Information Points | 10 | 0 | 🛡️ |

## 🛠️ Internal Commit History

- docs: consolidate governance agents and update release notes for v2.8.41 (9e1e8f8)
- ci: refine audit_logs.pl to prevent false positive warnings on successful output (cf49345)
- fix: resolve SQL execution failure in MySQL 9.x containers (b0f71de)
- style: tidy mysqltuner.pl (f8defd5)
- test: add validation tests for auth, missing args, and formatting (bd10c4b)
- feat: enhance --forcemem and --forceswap to support human-readable memory units (b357f7e)
- fix: handle Plesk Obsidian 18.0.76.5+ removing --show-password (#42) (632a4f9)
- feat: finalize release 2.8.41 (abdcb0e)
- ci: fix preflight scripts for changelog header and commitlint refname ambiguity (dd323a4)
- feat: release 2.8.41 (e95c3e9)
- style: tidy mysqltuner.pl (745c909)
- ci: refactor Github release definitions with pre-releases and deliverables support (1da1bb2)
- ci: enforce zero-warning policy and dynamic test env (80788de)
- feat: release 2.8.41 final stabilization (c337213)
- feat: release 2.8.41 final polish (a230c55)
- feat: release 2.8.41 final polish (14e3a31)
- feat: release 2.8.41 (b4a13e6)

## ⚙️ Technical Evolutions

- **MySQL 9.x Container Fix**: Resolved SQL execution failures (return code 256) in MySQL 9.x containers by updating batch execution flags.
- **Audit Log Refinement**: Prevented false positive warnings in `audit_logs.pl` when output contains successful `[OK]` markers.
- **Test Coverage**: Added validation tests for authentication, missing arguments, and formatting edge cases.
- **Upstream Sync**: Rebased on `major/MySQLTuner-perl:master` to integrate latest dependency updates (commitlint v21, actions/checkout v6, non-major deps v20.5.3).

## ✅ Laboratory Verification Results

- [x] Automated TDD suite passed.
- [x] Multi-DB version laboratory execution validated.
- [x] Performance indicator delta analysis completed.
