v0.0.38
30 June 2026
Registry WAL mode and DDL fast path, HTMX redirect fix for boosted requests, fragment shell decoupled from ui addon, and registry admin filters.
Added
Registry::distinctValues(string $column): returns distinct non-empty values for a structural column (e.g.status), used to populate filter selects in the admin registry view.View::shellFile(): resolves the correct full-page shell template for block rendering, checking the view's own extra roots before falling back tosite/views/index.latte→phlat/views/index.latte. Passes ashellvariable intofragment.latteso each addon can wrap block renders in its own shell.- Registry admin filters : type, status, and sort dropdowns in the registry admin page; pagination and table split into separate
pagination.latteandtable.latteHTMX fragments withhx-targetretargeting.
Changed
App::redirect()now sendsHX-Redirectfor HTMX partial requests instead of a bareLocation:header, so boosted redirects trigger a real browser navigation rather than silently swapping the redirected page's HTML into the HTMX target while the URL bar stays on the original path.Session::requireLogin()updated to route through$app->redirect()so login redirects also get the HTMX header.fragment.lattemoved fromphlat/addons/ui/views/tophlat/views/: the shell-wrapping mechanism no longer depends on theuiaddon being present.App::renderFragment()andView::render()both updated to referencefragment.lattedirectly.AddonMounts::load()fixed to match only exact bare addon refs as mount points (e.g.@adminmarks where the admin is mounted;@admin/loginis a valid view but not a mount). Moved to run afterapp.addons:afterrather than during addon loading, fixing a timing window whereregistry()was called before addons had finished registering their pages.- Registry now enables WAL journal mode and
PRAGMA busy_timeout=5000on connect. DDL bootstrap skipsCREATE TABLE/INDEX IF NOT EXISTSstatements when the schema version is current : checks via two lightweightsqlite_master+metaqueries instead, reducing per-boot SQL overhead. Registry::checkStale()removed : the periodic filesystem fingerprint drift check (throttled at 5s) is gone. The registry stays current exclusively through lifecycle hooks and explicitrebuild()calls.- login/logout views moved from
phlat/addons/ui/views/intophlat/addons/admin/views/where they were always being served from.