TriggerWorkflowAction no longer needs to be attached to every resource. When the trigger is scoped to a model, the modal prompts for the target record ID (validated against the database) and queues a real run.{{trigger.url}} placeholder — resolves the trigger record's Filament resource URL (view page when registered, otherwise edit) for links in emails and notifications. A real url attribute on the model takes precedence.Polymorphic user tracking — created_by/updated_by on workflows and triggered_by on runs no longer hard-reference the users table, so panels authenticating with custom models (e.g. Admin on its own guard) are attributed correctly instead of causing foreign key violations. WorkflowExecutor::start() now accepts an Authenticatable (or a bare id, which keeps the old configured-user-model assumption) for triggeredBy, and the createdBy/updatedBy/triggeredBy relations are now morphTo.
Upgrade note: existing installs should publish and run the new upgrade_workflows_user_tracking_to_morphs migration — it drops the users foreign keys, adds the *_type columns, and backfills them from the configured user model. Fresh installs need nothing; the create migrations include the columns.
Full Changelog: https://github.com/leek/filament-workflows/compare/v1.5.3...v1.6.0
Security and CI-hygiene improvements:
SECURITY.md with private vulnerability reporting instructions.gitattributes export-ignore rulesFull Changelog: https://github.com/leek/filament-workflows/compare/v1.5.2...v1.5.3
Docs / metadata only — no code or behavior changes.
composer.json suggest entries pointing at companion plugins (sorted alphabetically).TriggerWorkflowAction in a ContextMenuItem to trigger a manual workflow on a right-clicked record.AppServiceProvider::boot() (not a Filament-only boot hook) and that queue workers must be restarted (queue:restart / horizon:terminate) after registering or changing an actionFull Changelog: https://github.com/leek/filament-workflows/compare/v1.5.0...v1.5.1
Schema::hasTable('workflows') probe from WorkflowEventSubscriber::buildEventCache() and StateTransitionListener::buildCache(). Surrounding try/catch already handles missing-table; per-request information_schema/pg_class query was pure overhead under load.Cache::rememberForever in WorkflowEventSubscriber. Prior in-process static memo rebuilt on every FPM request, scanning all active event-triggered workflows. Cache invalidates automatically on workflow save/delete.Full Changelog: https://github.com/leek/filament-workflows/compare/v1.4.1...v1.4.2
Full Changelog: https://github.com/leek/filament-workflows/compare/v1.4.0...v1.4.1
WorkflowResource, WorkflowSecretResource, and all enums (RunStatus, StepStatus, FailureStrategy, MetricPeriodType, TemplateCategory, TriggerEvent, TriggerType) extracted into resources/lang/en/ translation files under the filament-workflows namespaceworkflows.php (147 keys), secrets.php (22 keys), enums.php (50 keys)php artisan vendor:publish --tag="filament-workflows-translations"; documented in READMEFull Changelog: https://github.com/leek/filament-workflows/compare/v1.3.4...v1.4.0
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