Changelog
Mirrors
CHANGELOG.mdat the repository root.
All notable changes to this project are documented here. This project follows Semantic Versioning.
Unreleased
Modificationgainsflow(direct/approval),status(applied/pending/approved/rejected/partially_resolved),event_type,operation_id,context,occurred_at.active/is_modificationare now derived fromflow/statusand kept for backward compatibility.- Added
ModificationItem(modification_itemstable): an opt-in, per-group decidable unit inside aModification. A model opts in by overridingapprovableItemGroups(); groups store their diff as JSONoriginal/proposed(like the existing diff format), not one row per field, to keep this an audit-friendly, low-row-count design. - Added
modification_item_id(nullable) toapprovals/disapprovals: a vote scoped to an item decides only that item; a vote without it is a global decision, unchanged from before. - Added
$user->approveItem()/$user->disapproveItem().approve()/disapprove()stay interoperable: they decide the wholeModificationwhen it has no items (legacy behavior, unchanged), or resolve all pending items atomically when it has them. - Added
$model->recordModification(): an explicit history API for events outside ofsaving(creation, deletion, attachments, signatures, external integrations). - Added
withOperationId()to correlate multipleModificationrows produced by the same logical operation. - Deprecated
deleteWhenApproved/deleteWhenDisapproved(still functional). - New migration
2024_01_02_000000_add_flow_and_modification_items.php; backfillsflow/statuson existingmodificationsrows. See Upgrading.
0.2.0 - 2026-07-28
- Documented the
ori/moddiff structure stored inModification::$modifications. - Made the
ori/moddiff keys configurable viaconfig('approvals.diff_keys.*').
0.1.0 - 2026-07-28
- Initial extraction from
rex-server-next:RequiresApprovalWhenChanges/ApprovesChangesconcerns,Modification/Approval/Disapprovalmodels, config-based model resolution, optionalHasModificationMediatrait, and a Capsule-based PHPUnit test suite.