Repository navigation
Conversation
Creating or updating an application (context) can now set its menu. The menu items are validated at the controller boundary, and invalid input is answered with a 400 instead of a 500. - every save replaces the whole menu inside the same transaction as the rest of the update - the views and tables the menu opens become nodes of the application, with read permission, so everyone it is shared with can open them; the owner must be able to manage them - a menu item without a technical name gets one derived from its label, with a numeric suffix when the menu already uses it - only http and https links are accepted Co-authored-by: Ruben van der Linde <ruben@conduction.nl> Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
…hnical names - a new menu target that does not exist gets the same refusal as one the owner cannot manage, so a save reveals nothing about others' ids; a target that was already in the menu is kept and marked broken - an item sent without a technical name keeps the name stored for the same target, so renaming or reordering no longer changes it - removing a menu item keeps its view or table as a resource, as documented - the start page mock gets an id, which PHP 8.5 needs for the array key - a javascript link with a host is tested, which only the scheme check stops - the menu list is mapped with a first-class callable Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
The update runs in one transaction since the menu is saved with it. On SQLite a concurrent request can take the write lock between its read and its write, and the update then failed at once with a 500. It now runs again on a retryable database error, as atomicRetry() does in core. Assisted-by: ClaudeCode:claude-opus-5-5 Signed-off-by: Remko <remko@conduction.nl>
remko48
added this pull request to stack #3090
October 13, 2026 14:39
remko48
force-pushed
the
feat/noid/menu-saving
branch
from
October 14, 2026 07:16
0299c48 to
80b1262
Compare
remko48
force-pushed
the
feat/noid/menu-saving
branch
from
October 14, 2026 09:00
80b1262 to
02fa6ad
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Applications (contexts) can now save their menu:
createandupdatetake amenuItemslist that replaces the whole menu.What changes
MenuItemInput): every item is validated before the service is called; an invalid item returns a 400.view,tableorurl(urlwhen left out)httporhttpsaddress with a host, at most 2000 charactersmenuItemsreplaces the whole menu; leaving it out keeps the stored menu. The order of the list is the order of the menu.broken. Removing a menu item leaves its view or table in the application as a resource.menuItemsis added to the create and update endpoints (OpenAPI and TS types regenerated).🖼️ Screenshots
Backend only, no UI changes.
🏁 Checklist
/backport to stableX.X🤖 AI (if applicable)