- The admin refuses a parent from another menu than the one the form
names (errors.parent_menu) instead of moving the entry to the parent's
menu without a word; BeforeSave records the named menu
(MenuEntry.RequestedMenuID).
- An entry moved to another menu moves its descendants in the same
transaction, so the public tree no longer drops them.
- TestAllowedURL and TestMenuTree (Docker-free): the URL scheme and
target rules, BuildTree order, unreachable and looping entries, list
and single registry types, generated children, locale alternates,
left-out entries logged, the JSON shape
- TestMenuEntryModel (Docker-free): fillable, rules, filter scope
- TestMenuEntryBeforeSave, TestMenuAPI and TestMenuImport (Postgres):
PHP beforeSave rules, D-16 API rules beyond the smoke test, import
drops for page subtrees, foreign menus, missing parents, maps to
nothing and unregistered types
- golem15.menu plugin, tables golem15_menu_menus and golem15_menu_menu_entries with the PHP columns plus a nullable url_pattern (D-02)
- MenuEntry BeforeSave ports PHP beforeSave: nest columns 0, menu from the parent, sort_order after the menu's last
- entry type dropdown: url, divider and the signpost registry types; reference depends on type through signpost.ReferenceOptions
- URL scheme allowlist (errors.url_scheme), target _self or _blank, menu and parent cycle checks
- menu filter, toolbar reorder/create/delete and config_reorder.yaml partitioned by menu
- navigation Menus with Menus and Menu entries, permission golem15.menu.manage_menu, en and pl phrasebooks
- TestMenuAdminSmoke