Repository navigation
0.2.0
Fixes
- Lock and timeout timestamps are now written and compared in the same (app) timezone, so scheduled timeouts and lock expiry no longer fire early/late on a non-UTC application timezone. (#31)
WorkflowBatchServicenow persists each transition — it previously applied them in memory only, so batch runs reported success without saving. (#27)
Improvements
- Optimistic (lock-free) concurrency — a new
useOptimisticLockmode that persists the state change with a compare-and-set (claimed before commands run, so a lost race executes no side effects), as an alternative to the pessimistic lock table. (#30) - Automatic / conditional transitions via attributes —
#[Transition(automatic: true)]gated by the new#[Condition]attribute, bringing config-only auto-transitions to attribute-defined workflows. (#28) - Time-in-state tracking — stamps a
state_changed_atcolumn on every state change (auto-applied only when the column exists; configurable), enabling aging/SLA queries. (#29) - New
workflow applyCLI command to run a single transition from the command line (with--reason/--user/--dry-run). (#23) - New
workflow batchCLI command to apply a transition to all records currently in a given state (with--state/--limit/--stop-on-failure/--dry-run). (#27) workflow init --migrationnow scaffolds the state-column migration alongside the workflow classes. (#25)- Drop-in
panel()view helper rendering a state badge plus CSRF-protected POST transition buttons. (#24) - Entity and table convenience traits for ergonomic, statically-typed workflow access without reaching through
getBehavior(). (#22) - Native-PHP single-file workflow loader — define a whole workflow in one
config/workflows/*.phpfile with no extra parser dependency. (#26) entity_iddefaults tointeger(CakePHP's default PK type) and follows the sharedPolymorphic.typeconfig key —bigintegerfor large-id apps,uuid/binaryuuidfor non-integer keys; signedness followsMigrations.unsigned_primary_keys. (#19, #21, #32)
Full Changelog: 0.1.3...0.2.0