v0.9.5
20 October 2026
Gated image variants stay behind their page's gate, and save() returns the saved record.
Added
Page::isPublic(): whether a page and every ancestor is published and open to anyone.PageFiles::withdraw()removes the public mirrors under a page URL. Closing a page (publishedoraccess) withdraws its subtree's mirrors.SessionRoot::refresh()swaps the signed-in user for the saved one onuser.update:after.task phlat:releaselists the closed issues of a milestone named like the tag in the release notes.
Changed
- Image variants of a page that isn't public are cached at
data/cache/files/{id}/and served through PHP behind the page's gate. Only a public page's variants are mirrored intosite/public/. Record::save(),Page::save()andUser::save()return the record as saved and leave the instance they were called on unchanged.Record::save()writesindex.jsonbeforedata.json, and the registry row and its field and search indexes are updated in one transaction.App::shutdown()runs on response, not fromPage::render().Appkeeps typed definition memos in place of the request snapshot.PageView::save()throws, since views are hand-authored files.site/public/index.phpresolvesvendor/autoload.phpthroughrealpath()and falls back to the literal path.deploy.phpuploads the entry files afterdeploy:shared.backup:createandcollection:migratetruncate long progress labels.
Fixed
- A crash during a save could leave
index.jsonand the registry both stale with matchingupdatedstamps, so the drift was never detected.updatednow stays ahead of the registry until the sync completes, and it heals. user:roleno longer indexes the user twice.
Comments
No comments yet. Be the first!
Loading form…