v0.0.30

26 June 2026

Universal index.json/data.json split moved onto Record, admin breadcrumbs redesigned, alias-only template refs.

Added

  • Record::structuralKeys() : each subtype declares which save() keys are structural (go to index.json) vs content (data.json). Page adds view/hidden/status/locked; User adds nothing extra. Record::save(), saveIndex() and the created/updated/locked properties moved up from Page so User gets the same behavior for free.
  • Admin breadcrumbs rebuilt as their own component (ui/breadcrumbs.latte + a menu/ sub-view with pagination) instead of inline markup in the nav.

Changed

  • AddonMounts::resolveTemplateRef()/aliasOf()/aliasFromPath() : template refs (@admin/...) now resolve strictly through an addon's alias, never its canonical id; ViewLoader was rewritten against these instead of a raw addonPrefixes array, and site overrides now live at views/@{alias}/... instead of views/addons/{name}/....
  • Page::url() no longer returns a trailing slash.
  • Removed phlat/views/login (the old non-aliased login view) : admin's own login view covers it.

Fixed

  • Admin breadcrumbs showing the wrong trail/links fixed by the rebuild above.