# Changelog

## Score

- CAI 41 → 68 (+27.4)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

## Lenses

- Code Health 79 → 77 (-1.8)
- Architecture 96 → 100 (+4.0)
- Maturity 58 → 56 (-1.6)
- Readiness 30 → 78 (+48.3)
- Security 30 → 77 (+46.5)

## Resolved (110)

- Coverage not measured — test suite did not build
- Dimension evaluation failed
- Duplicated block (10 lines × 2) (src/PhpSpreadsheet/Calculation/Statistical/Distributions/Beta.php)
- Duplicated block (10 lines × 2) (src/PhpSpreadsheet/Reader/Xlsx.php)
- Duplicated block (10 lines × 2) (src/PhpSpreadsheet/Style/Style.php)
- Duplicated block (10 lines × 2) (src/PhpSpreadsheet/Writer/Ods/Cell/Style.php)
- Duplicated block (10 lines × 2) (src/PhpSpreadsheet/Writer/Xlsx/Chart.php)
- Duplicated block (10 lines × 2) (src/PhpSpreadsheet/Writer/Xlsx/Drawing.php)
- Duplicated block (10 lines × 6) (src/PhpSpreadsheet/Style/NumberFormat.php)
- Duplicated block (11 lines × 2) (src/PhpSpreadsheet/Calculation/Calculation.php)
- Duplicated block (11 lines × 2) (src/PhpSpreadsheet/Chart/Renderer/JpGraphRendererBase.php)
- Duplicated block (11 lines × 2) (src/PhpSpreadsheet/ReferenceHelper.php)
- Duplicated block (11 lines × 2) (src/PhpSpreadsheet/Style/Style.php)
- Duplicated block (11 lines × 2) (src/PhpSpreadsheet/Writer/Xlsx/Drawing.php)
- Duplicated block (11 lines × 2) (src/PhpSpreadsheet/Writer/Xlsx/Theme.php)
- Duplicated block (11 lines × 5) (src/PhpSpreadsheet/Reader/Xls.php)
- Duplicated block (12 lines × 2) (src/PhpSpreadsheet/Reader/Xlsx.php)
- Duplicated block (12 lines × 2) (src/PhpSpreadsheet/Reader/Xlsx/Chart.php)
- Duplicated block (12 lines × 2) (src/PhpSpreadsheet/Writer/Xls.php)
- Duplicated block (12 lines × 2) (src/PhpSpreadsheet/Writer/Xls/Escher.php)
- …and 90 more

## New (1121)

- AdvancedValueBinder.bindValue (cognitive 23) (src/PhpSpreadsheet/Cell/AdvancedValueBinder.php)
- AdvancedValueBinder.bindValue (cyclomatic 16) (src/PhpSpreadsheet/Cell/AdvancedValueBinder.php)
- AgileEncryption.parse (cognitive 39) (src/PhpSpreadsheet/Shared/Xlsx/AgileEncryption.php)
- AgileEncryption.parse (cyclomatic 40) (src/PhpSpreadsheet/Shared/Xlsx/AgileEncryption.php)
- AgileEncryption.writeEcma376Container (cognitive 30) (src/PhpSpreadsheet/Shared/Xlsx/AgileEncryption.php)
- AgileEncryption.writeEcma376Container (cyclomatic 22) (src/PhpSpreadsheet/Shared/Xlsx/AgileEncryption.php)
- Alignment.applyFromArray (cognitive 18) (src/PhpSpreadsheet/Style/Alignment.php)
- ArrayArgumentProcessor.evaluateVectorMatrixPair (cognitive 17) (src/PhpSpreadsheet/Calculation/Engine/ArrayArgumentProcessor.php)
- AutoFilter.filterTestInCustomDataSet (cognitive 31) (src/PhpSpreadsheet/Worksheet/AutoFilter.php)
- AutoFilter.filterTestInCustomDataSet (cyclomatic 32) (src/PhpSpreadsheet/Worksheet/AutoFilter.php)
- AutoFilter.showHideRows (cognitive 131) (src/PhpSpreadsheet/Worksheet/AutoFilter.php)
- AutoFilter.showHideRows (cyclomatic 50) (src/PhpSpreadsheet/Worksheet/AutoFilter.php)
- AutoFilter.writeAutoFilterColumnRule (cognitive 29) (src/PhpSpreadsheet/Writer/Xlsx/AutoFilter.php)
- AutoFilter.writeAutoFilterColumnRule (cyclomatic 16) (src/PhpSpreadsheet/Writer/Xlsx/AutoFilter.php)
- Averages.modeCalc (cognitive 18) (src/PhpSpreadsheet/Calculation/Statistical/Averages.php)
- BaseDrawing.setWorksheet (cognitive 27) (src/PhpSpreadsheet/Worksheet/BaseDrawing.php)
- BestFit.calculateGoodnessOfFit (cognitive 21) (src/PhpSpreadsheet/Shared/Trend/BestFit.php)
- Biff8.readBIFF8CellRangeAddressB (cognitive 20) (src/PhpSpreadsheet/Reader/Xls/Biff8.php)
- Borders.applyFromArray (cognitive 16) (src/PhpSpreadsheet/Style/Borders.php)
- Calculation.calculateCellValue (cognitive 29) (src/PhpSpreadsheet/Calculation/Calculation.php)
- …and 1101 more

## Changes since last survey

- 136 commits — 121 feature/other, 15 fixes

## By area

- (repo) — 44 commits
- (root) — 29 commits
- src/PhpSpreadsheet — 22 commits
- tests/PhpSpreadsheetTests — 21 commits
- docs/extra — 6 commits
- tests/data — 4 commits
- samples/Basic2 — 3 commits
- docs/index.md — 2 commits
- docs/topics — 2 commits
- .github/PULL_REQUEST_TEMPLATE.md — 1 commit
- docs/faq.md — 1 commit
- samples/Wizards — 1 commit

## Notable commits

- fix: Fix Agile encryption CFB directory ordering
- fix: Fix Agile encryption fixture stream size
- fix: Fix CFB v3 OLE writer header and DIFAT boundaries
- fix: Fix Problem with Multiple Images on Multiple Sheets
- fix: Fix VALUE() treating product text as a date
- fix: Fix VLOOKUP #N/A with whole-column ranges when end column has no data
- fix: Fix encrypted XLSX reader review findings
- fix: Fix quote-prefix numeric test to cover clearing behavior
- fix: Merge branch 'master' into fix-betainv-underflow-false-convergence
- fix: Merge pull request #4953 from gaoflow/fix-gamma-large-shape
- fix: Merge pull request #4954 from gaoflow/fix-betainv-underflow-false-convergence
- fix: Merge pull request #4962 from saifulferoz/fix/issue-4454-ods-strings
- fix: Merge pull request #4967 from DIReports/fix/vlookup-column-range-empty-end-column
- fix: Merge pull request #4983 from n3crosis/fix/ole-cfb-root-conformance
- fix: Merge pull request #4997 from gechuanpan/fix-value-product-description-4996
- change: 2.2.7 Reported Internal Error on Win11 - Upgrade to 2.2.8
- change: A Bit Of Coverage
- change: Add Agile XLSX file encryption support
- change: Add Memory Drawing Sample
- change: Add Some Blank Lines
- …and 116 more

## Architecture

- Containers 0 added · 0 removed · contexts 1 added · 0 removed · edges 0 added · 0 removed

## Added bounded contexts (1)

- phpoffice/phpspreadsheet
