v0.0.50
6 July 2026
Items indexed in full-text search, deterministic item UUIDs, FieldTypeCollection::has() and item(), and single-level sharded storage.
Added
FieldTypeCollection::has(string $uuid): returns true if an item with the given UUID exists in the registry.FieldTypeCollection::item(string $uuid): looks up and returns a singleItemby UUID, or null if not found.FieldTypeCollection::new()now accepts an optionalstring $uuidparameter : pass a pre-generated UUID for deterministic item creation (e.g. when the UUID is derived from stable input).Itemfields are now indexed in full-text search:FieldIndexhandlesItemrecords in the same pass asPagerecords, andRegistry::scanItems()indexes each item's fields intosearch_indexduring rebuild.Item::save()emitsitem.update:after;Item::delete()emitsitem.delete:beforeand deletes the item directory recursively.- Core hooks for
item.update:afteranditem.delete:beforeregistered inApp::registerCoreHooks(): registry and field index are kept current automatically.
Changed
- Item storage reverted to a single shard level (
_{field}/{xx}/{uuid}/, using the first two chars ofmd5(uuid)), matching v0.0.49's correction. The double-shard scheme introduced in v0.0.49 is gone. Record::syncRegistry()made private again (was brieflyprotectedto supportItem's override;Itemnow overridessave()directly instead).