getAttribute() calls with hasAttribute() to prevent MissingAttributeException when models use preventAccessingMissingAttributes (e.g. User model during logout)filament-workflows.tenancy.enabled in getTenantId() to prevent errors when tenancy is not enabled (e.g. on user logout)@svg() directive instead of Blade components for icon rendering in selection grids, fixing compatibility when blade-icons components are disabledHasModelSelection 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.StateTransitionTrigger fires workflows on state changes, TransitionToStateAction transitions models to target states as a workflow step, and StateTransitionListener with cached workflow lookups for fast filteringRunActionAction invokes registered Laravel Action classes as workflow steps with reflection-based parameter resolution and context variable mappingintegrations.model_states, integrations.actions_bridge, and integrations.action_classes config options (auto-detected, individually toggleable)Cache::lock() prevents duplicate dispatches from concurrent workers on the same schedule minuteNonRetryableWorkflowException permanently fails queue jobs for config/validation errors instead of retryingExecuteWorkflowJob now implements ShouldBeUniqueUntilProcessing to prevent duplicate job executionExecuteWorkflowJob to prevent race conditionsTriggerWorkflowAction now checks rate limits and dispatches via queue instead of synchronous executionhttp_request config section for SSRF protection: blocked_domains, allowed_domains, block_private_networks, max_response_body_sizeResolvesModelMorphClass concern for consistent model type resolutionWorkflow::syncTriggerMetadata() auto-syncs trigger type/event on save via model saving eventExecuteWorkflowJob where concurrent workers could execute the same run (#8)CloneRecordAction and DeleteRecordAction error handling hardened (#8)ProcessScheduledWorkflowsCommand lock release on failure so another worker can retry (#8)HasWorkflowTriggers trait, not just the triggerable_models config arrayFull Changelog: https://github.com/leek/filament-workflows/compare/v1.2.4...v1.3.0
Full Changelog: https://github.com/leek/filament-workflows/compare/v1.2.1...v1.2.4
evaluate_decision_table and auto-detection calloutTriggerWorkflowAction example4.x or 5.xleek- prefix from config keys, view namespace, Blade component prefix, and publish tags to align with Filament conventionsleek-filament-workflows.php to filament-workflows.phpconfig('leek-filament-workflows.') calls are now config('filament-workflows.')leek-filament-workflows:: to filament-workflows::x-leek-filament-workflows:: to x-filament-workflows::filament-workflows-config instead of leek-filament-workflows-config)WorkflowEventSubscriber wildcard listenerEventDiscoveryService with app event scanning and curated vendor events (Auth, Mail, Notification, Queue)ModelIntrospectionService for variable autocomplete and field discovery in workflow buildersTriggerWorkflowAction Filament action for manual workflow triggeringEventTrigger condition matching and event property introspectionevent_discovery and introspection config sectionsvendor_events config set to null now correctly falls back to built-in defaultsFull Changelog: https://github.com/leek/filament-workflows/compare/v1.0.0...v1.1.0
Initial Release
Full Changelog: https://github.com/leek/filament-workflows/commits/v1.0.0