This guide summarizes breaking and behavioral changes from early alpha releases through stable 1.0.0. For upgrading 1.0.x → 1.1.0, see UPGRADE-1.1.md. For full release notes, see CHANGELOG.md.
1.0.0 is the first stable release. The runtime public API has been frozen since 1.0.0-rc.1; upgrading from the RC tag requires no breaking code changes for hosts on the documented contract.
composer require dbflowlabs/core:^1.0Pair with dbflowlabs/filament:^1.0 and dbflowlabs/filament-pro:^1.0 when using the Filament ecosystem packages.
Additive changes since 1.0.0-rc.1 (non-breaking):
ActionFailedevent andWorkflowLogEvent::ActionFailedwhen action node handlers throw- Optional action node
stop_on_errorto abort traversal viaActionExecutionFailedException - Sequential approval/rejection edge-case fixes and stricter condition expression evaluation
Upgrade in order when jumping multiple prereleases:
0.2.0-alpha.1—DBFLOW_ENABLEDruntime gate0.3.0-alpha.1— string user IDs, Laravel events,dbflow:sync/dbflow:validate0.3.1-alpha.1— cancel audit logs,DBFLOW_ENABLED=falseartisan availability0.4.0-alpha.1—DBFlow::reassign()andTaskHooks::onReassigned()0.5.0-alpha.1— approval timeouts anddbflow:process-timeouts0.9.0-beta.1— Filament integration contract (WorkflowTaskQueryService)1.0.0-rc.1— API freeze (see API stability)1.0.0— first stable release (no breaking changes from RC)
For new projects or RC adopters ready to move to stable:
composer require dbflowlabs/core:^1.0Pair with dbflowlabs/filament:^1.0 when using the Filament adapter.
From 1.0.0-rc.1 (unchanged at stable 1.0.0), the following surfaces are frozen until the next major:
| Surface | Location |
|---|---|
| Runtime facade | DBFlow::start(), approve(), reject(), cancel(), reassign() |
| Registration API | DBFlow::register* methods |
| Task hooks | TaskHooks interface |
| Pending-task queries | WorkflowTaskQueryService public methods |
| Integration events | DbflowLabs\Core\Events\* constructor properties (see EcosystemContractTest) |
| Database schema | No breaking column/type changes without a new major |
Not part of the stable public API (marked @internal):
- Draft / builder management actions (
CreateWorkflowDraft,PublishWorkflowDraft,SyncWorkflowDefinitions, etc.) - Host applications should use Filament Builder or artisan commands rather than binding these actions directly.
TaskHooks: implementers must addonReassigned(WorkflowTask $task, WorkflowInstance $instance, mixed $actor, string $toUserId): void.- Assignments: treat
reassignedas a terminal assignment status in custom queries.
- User ID columns:
started_by_user_id,assignee_user_id, andactor_user_idareVARCHAR(64)strings without foreign keys tousers. - Model casts: user id attributes are cast to
string, notinteger. - Migration required: run
php artisan migrateafter upgrading. - Host config: set
DBFLOW_AUTH_MODEL(and optionallyDBFLOW_AUTH_TABLE/dbflow.auth.*). - Sync command: replace host-specific definition sync with
php artisan dbflow:sync.
DBFLOW_ENABLED: whenconfig('dbflow.enabled')isfalse, runtime APIs throwWorkflowNotAvailableException;HasWorkflowdoes not auto-start workflows.- Validator namespace: use
DbflowLabs\Core\Validation\WorkflowDefinitionValidatorinstead ofServices\WorkflowDefinitionValidator(removed).
DBFLOW_ENABLED=false:dbflow:syncanddbflow:validateremain available; only runtime actions are blocked.CancelWorkflow: writes per-taskTaskCancelledaudit entries before the instance-level cancel log.
- Approval node
config.timeout.due_inandphp artisan dbflow:process-timeouts. - Schedule the timeout command when using approval deadlines.
- Filament / Pro: from
dbflowlabs/filament:1.0.0-rc.2and matching Pro worktrees, the standard form and Pro canvas editors round-triptimeoutconfiguration without data loss.
WorkflowTaskQueryService::pendingAssignmentsQueryForUser()for Filament tables.- Eager-load
workflowTask.workflowInstance.workflowableon pending-task queries. - Integration contract:
docs/integration/filament.md.
- Pin
dbflowlabs/core:^1.0(and matching Filament tag if applicable). - Run migrations on a staging database.
- Update custom
TaskHooksclasses withonReassigned()if not already done. - Route runtime actions through
DBFlow::facade methods, not direct action instantiation. - Use
stringuser IDs in assignee and actor resolution. - Schedule
dbflow:process-timeoutswhen using approval timeouts. - Read
docs/integration/filament.mdfor adapter integration.
- CHANGELOG.md — detailed release history
- UPGRADE-1.1.md — upgrading from stable
1.0.xto1.1.0 - GitHub Issues — bug reports and questions