Skip to content

0.2.0

Choose a tag to compare

@dereuromark dereuromark released this 23 May 11:53
· 23 commits to master since this release
9a65051

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)
  • WorkflowBatchService now 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 useOptimisticLock mode 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_at column on every state change (auto-applied only when the column exists; configurable), enabling aging/SLA queries. (#29)
  • New workflow apply CLI command to run a single transition from the command line (with --reason/--user/--dry-run). (#23)
  • New workflow batch CLI command to apply a transition to all records currently in a given state (with --state/--limit/--stop-on-failure/--dry-run). (#27)
  • workflow init --migration now 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/*.php file with no extra parser dependency. (#26)
  • entity_id defaults to integer (CakePHP's default PK type) and follows the shared Polymorphic.type config key — biginteger for large-id apps, uuid/binaryuuid for non-integer keys; signedness follows Migrations.unsigned_primary_keys. (#19, #21, #32)

Full Changelog: 0.1.3...0.2.0