v0.38.0
2 November 2026
Users are stored in shard folders by uuid, and the cache per value all is now none.
Added
phlat user:migratemovesdata/users/{username}folders todata/users/{shard}/{uuid}and saves each folder's name as itsusername. Runphlat registry:rebuildafterwards.$app->users($query)takes a find query:$app->users('role=admin,sort=-created').UserCollection::first(),last()andnth()return?User.
Changed
- A user is stored at
data/users/{shard}/{uuid}, where the shard is the first two characters of the uuid. Theusernameis kept in_index.json. $app->user($username)finds the account through the registry and returns null for anything that is not a valid username. Logging in needs the registry;phlat registry:rebuildrestores it.User::new()checks the username under a lock and throwsConflictExceptionwhen it is taken.- A user's registry path is
{shard}/{uuid}, and$app->users()sorts byusername.$user->name()returns the uuid: use$user->username. per: 'none'replacesper: 'all'in{cache},{fragment},{component}and a view'scache.CacheandSessionRoottakenonethe same way.
Removed
- The built-in
guestuser. A signed-out visitor still holds theguestrole, andsite/roles/gueststill overrides it.