Flowforge v3.0.0-beta1
Breaking Changes
- Position column type changed from VARCHAR to DECIMAL(20,10)
- New dependency:
ext-bcmathrequired - Removed:
Rank.phpservice (Lexorank algorithm)
New Features
- DecimalPosition Service - BCMath-based positioning with cryptographic jitter
- PositionRebalancer Service - Automatic gap management and rebalancing
- Retry Mechanism - Handles concurrent update conflicts with exponential backoff
- Operations Commands:
flowforge:diagnose-positions- Detect gaps, inversions, duplicatesflowforge:rebalance-positions- Redistribute positions evenlyflowforge:repair-positions- Interactive multi-strategy repair
Improvements
- Concurrent insertion safety via jitter (±5% randomness)
- Auto-rebalancing when gap < 0.0001
- Pessimistic locking on reference cards during moves
- Support for custom primary keys (
getKeyName()) - Comprehensive logging of rebalancing operations
Migration from v2.x
- Ensure
ext-bcmathis installed - Change position column to DECIMAL(20,10)
- Run
php artisan flowforge:repair-positionswith "regenerate" strategy - Add unique constraint:
unique(['status', 'position'])
Technical Details
| Property | Value |
|---|---|
| Default Gap | 65535 |
| Min Gap (triggers rebalancing) | 0.0001 |
| Jitter Factor | ±5% |
| BCMath Scale | 10 decimal places |
| Max Retry Attempts | 3 |
| Retry Backoff | 50ms, 100ms, 200ms |
Full Changelog
Changed:
- Position algorithm from Lexorank (string) to DecimalPosition (decimal)
- Blueprint macro:
flowforgePositionColumn()now creates DECIMAL(20,10)
Added:
DecimalPositionservice with jitterPositionRebalancerserviceMaxRetriesExceededExceptionexception- Three artisan commands for position management
- Unique constraint recommendation in docs
Removed:
Rank.phpservice- String-based position calculations
- Binary collation requirements