Filament Workflow Engine

Filament Workflow Engine changelog

2 weeks ago
1.3.4

v1.3.4

leek/filament-workflows

Fixed

  • Guard all dynamic getAttribute() calls with hasAttribute() to prevent MissingAttributeException when models use preventAccessingMissingAttributes (e.g. User model during logout)
2 weeks ago
1.3.3

v1.3.3

leek/filament-workflows

Fixed

  • Check filament-workflows.tenancy.enabled in getTenantId() to prevent errors when tenancy is not enabled (e.g. on user logout)
2 weeks ago
1.3.2

v1.3.2

leek/filament-workflows

Fixed

  • Use @svg() directive instead of Blade components for icon rendering in selection grids, fixing compatibility when blade-icons components are disabled
2 weeks ago
1.3.1

v1.3.1

leek/filament-workflows

Bug Fix

  • Fixed empty Record Type dropdown: HasModelSelection was reading directly from config('filament-workflows.triggerable_models') instead of using the TriggerableModelDiscovery service, causing the Record Type dropdown to be empty when auto-discovery is enabled.
2 weeks ago
1.3.0

v1.3.0

leek/filament-workflows

Added

  • Spatie Model States integration (#3): StateTransitionTrigger fires workflows on state changes, TransitionToStateAction transitions models to target states as a workflow step, and StateTransitionListener with cached workflow lookups for fast filtering
  • Laravel Actions bridge (#3): RunActionAction invokes registered Laravel Action classes as workflow steps with reflection-based parameter resolution and context variable mapping
  • New integrations.model_states, integrations.actions_bridge, and integrations.action_classes config options (auto-detected, individually toggleable)
  • Schedule execution locking (#7): Cache::lock() prevents duplicate dispatches from concurrent workers on the same schedule minute
  • Non-retryable workflow exceptions (#7): NonRetryableWorkflowException permanently fails queue jobs for config/validation errors instead of retrying
  • ExecuteWorkflowJob now implements ShouldBeUniqueUntilProcessing to prevent duplicate job execution
  • Atomic terminal-state check with row-level locking in ExecuteWorkflowJob to prevent race conditions
  • TriggerWorkflowAction now checks rate limits and dispatches via queue instead of synchronous execution
  • http_request config section for SSRF protection: blocked_domains, allowed_domains, block_private_networks, max_response_body_size
  • ResolvesModelMorphClass concern for consistent model type resolution
  • Workflow::syncTriggerMetadata() auto-syncs trigger type/event on save via model saving event

Fixed

  • Race condition in ExecuteWorkflowJob where concurrent workers could execute the same run (#8)
  • Allowlist bypass in model trigger validation (#8)
  • Error handling improvements: failed queue dispatch now marks run as failed with error message (#8)
  • CloneRecordAction and DeleteRecordAction error handling hardened (#8)
  • ProcessScheduledWorkflowsCommand lock release on failure so another worker can retry (#8)
  • Model allowlist validation now respects auto-discovered models with HasWorkflowTriggers trait, not just the triggerable_models config array

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.2.4...v1.3.0

3 weeks ago
1.2.4

v1.2.4

leek/filament-workflows

Fixed

  • Fix if/else conditional branching not executing from builder (#6)
  • Fix execution history table not displaying on edit page (#5)
  • Fix variable autocomplete dropdown not selectable (#4)

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.2.1...v1.2.4

1 month ago
1.2.1

v1.2.1

leek/filament-workflows

Documentation Updates

  • Update README for v1.2.0 features: metrics, templates, Decision Tables integration, event discovery, model introspection, and notification roles
  • Update config block to match current source of truth
  • Add Integration action table with evaluate_decision_table and auto-detection callout
  • Add Manual Trigger usage docs with TriggerWorkflowAction example
  • Fix Filament version requirement to 4.x or 5.x
1 month ago
1.2.0

v1.2.0

leek/filament-workflows

What's Changed

  • Drop leek- prefix from config keys, view namespace, Blade component prefix, and publish tags to align with Filament conventions

Breaking Change

  • Config file renamed from leek-filament-workflows.php to filament-workflows.php
  • All config('leek-filament-workflows.') calls are now config('filament-workflows.')
  • View namespace changed from leek-filament-workflows:: to filament-workflows::
  • Blade component prefix changed from x-leek-filament-workflows:: to x-filament-workflows::
  • Publish tags updated (e.g. filament-workflows-config instead of leek-filament-workflows-config)
1 month ago
1.1.0

v1.1.0

leek/filament-workflows

Added

  • Event-triggered workflows via WorkflowEventSubscriber wildcard listener
  • EventDiscoveryService with app event scanning and curated vendor events (Auth, Mail, Notification, Queue)
  • ModelIntrospectionService for variable autocomplete and field discovery in workflow builders
  • TriggerWorkflowAction Filament action for manual workflow triggering
  • EventTrigger condition matching and event property introspection
  • event_discovery and introspection config sections
  • Optional Decision Tables integration with promotional action tiles

Fixed

  • Tenant isolation bypass: tenant-scoped workflows no longer fire for null-tenant events
  • Illuminate event blocking: curated Auth/Mail/Queue class events now pass through the subscriber
  • vendor_events config set to null now correctly falls back to built-in defaults
  • Event subscriber now uses rate limiter and async job dispatch (matching observer pattern)
  • Event cache staleness in Octane/workers: static cache with automatic invalidation on Workflow save/delete
  • Workflow form value sync, test runner side-effect types, and model loading

Full Changelog: https://github.com/leek/filament-workflows/compare/v1.0.0...v1.1.0

1 month ago
1.0.0

v1.0.0

leek/filament-workflows

Initial Release

Full Changelog: https://github.com/leek/filament-workflows/commits/v1.0.0