Release news ยท 20 September 2026
PHP Ledger 1.1.2: the 1.1.1 record corrected
1.1.2 sets the record straight about what 1.1.1 shipped, counts cash at the point of sale in notes and coins, and brings back signed update metadata so an installation can update itself from /maintenance.php again.
This is a patch release. It carries no migration of its own and no schema change. One rule at the point of sale changes: the cash a cashier records must be a whole number of minor units.
What was wrong in the 1.1.1 record?
1.1.1 was announced with no schema change and no migration. That was wrong. Its package carries migration 034_inventory_locations and the optional Stock locations module: warehouses and vans, transfers at carrying value and stock held per location. The module is off by default and changes nothing until a company enables it under Modules. Its documentation, compatibility matrix and upgrade proof are 1.2 work, so treat it as an early copy of the first 1.2 module.
A fresh 1.1.1 installation applied the migration during setup and needs nothing. An installation upgraded from 1.1.0 by replacing files has it pending: run php www/phpledger/install/migrate.php once, or install 1.1.2 from /maintenance.php, which applies it. The 1.1.1 article and the packaged release notes now say so.
Cash at the point of sale is counted in notes and coins
The showcase accepted a tender such as 1262.2555 against a sale total of 1,262.25 and recorded change of 0.0055 (issue #88). Cash received must now be a whole number of the currency's minor units, so tender, total and change share one precision on the receipt, and the sample catalogue is checked to price goods no more finely. The ledger keeps four decimal places; only the tender is held to two.
Signed update metadata is back
1.1.1 was published without signed metadata, so an installation on 1.1.0 could not reach it through /maintenance.php although its upgrade guide said it could. 1.1.2 carries phpledger-1.1.2.update.json: an installation on 1.1.0 or 1.1.1 with the publisher key pinned installs it from /maintenance.php, and from 1.1.0 that run also applies migration 034. 1.1.1 itself is not signed retroactively.
Documentation and metadata corrected
- The demo packs did not leave the package in 1.1.1, although the roadmap said they would; that work moves to 1.2 with the plugin runtime.
- The download page called 1.1.1 the first release with signed update metadata. 1.1.0 was; 1.1.1 had none; 1.1.2 has it again.
- The hosting requirements page now names
log_bin_trust_function_creators = 1for MySQL 8 with binary logging, which setup already reports at the database connection check. - Pages that still called 1.1.0 the current release are corrected.
What is the assurance status?
Unchanged. 1.1.1 recorded 316 tests with no failures on MySQL 8.4 and MariaDB 10.11; the count for 1.1.2 is in its release receipt. These are technical checks, not accounting or usability sign-off. Independent accounting review, independent security review, supervised pilots including a real month-end close, and installation observation by an unfamiliar operator remain outstanding, as recorded for 1.0.0. The first supervised pilot, on the maintainer's own books, starts on this release on 1 October 2026.
Patch releases ship without a media kit. The public demo still runs 1.1.0.
Upgrading
From 1.1.1 this replaces files only: no migration and no receipt change. From 1.1.0 it also applies migration 034. Either way, install it from /maintenance.php with the pinned publisher key, or replace the files with the manual procedure in the packaged UPGRADE.md and, from 1.1.0, run php www/phpledger/install/migrate.php once. Keep a backup and rehearse a matched code and database restore first. The download page carries the archive and its checksum, and the versioned GitHub release holds its verification record.
Known issue, found 20 September 2026 (issue #90), fixed in 1.1.3. The in-app updater could not complete a real update. See the 1.1.3 article for the fix; an installation on 1.1.1 or 1.1.2 with the key pinned now installs 1.1.3 from /maintenance.php; a 1.1.0 installation uses the manual procedure, because its own database helpers predate a function the new migrations call (issue #91).
