ui: the shared shell runtime keeps the names every already-generated app shell binds (#7427) - #7433
Merged
Merged
Conversation
…app shell binds (#7427) #7400 rewrote the generated shell template together with the shared runtime appShell.js and renamed the contract between them: hiddenPanels.left -> isSmallScreen, isOpen -> showSidebarSheet, the sidebarPanel / overlay refs -> sidebarSlot / sidebarSheet. The runtime is served once by absolute URL to every generated gen/<model>/index.html, and that page is a file in the project, rewritten only by an explicit Generate - so the upgrade swapped the runtime under every deployed application's page. Against such a page init() threw on an undefined ref before moving the sidebar out of the split panel, and the panel's :data-hidden threw on the missing property, so the ONE thing that hid the sidebar in embedded mode was gone: every entity opened in the application shell rendered the app's own sidebar next to the form. The runtime now keeps the old names alive alongside the new ones - hiddenPanels and isOpen as accessors kept in step with isSmallScreen / embedded and showSidebarSheet (a plain setter too, because the old sheet writes isOpen = false from its overlay click), and the breakpoint handler resolves the refs by their current names else by the old ones. The comment above them states the rule the rename missed: this file's page contract is public across generated vintages. ShellRuntimeVintageIT is the guard the class of failure lacked. Every other Harmonia IT regenerates the page, so old page + new runtime was never exercised. The fixture is the pre-#7400 template rendered by the real pipeline for the DependsOnHarmoniaIT model (not hand-written): the project is generated with the current template, that page is put in the registry over the generated one - the way a deployed project keeps its page through an upgrade - and the browser asserts the sidebar is hidden embedded, visible standalone, and in the drawer the hamburger opens below the breakpoint. Against origin/master's runtime it fails at the embedded assertion; with this change it passes. Verified: ShellRuntimeVintageIT green (and red against the unfixed runtime), DependsOnHarmoniaIT green (current page + current runtime), formatter:validate with the cache wiped. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
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.
Cause
#7400 rewrote the generated shell template together with the shared runtime
application-core/shell/js/components/layout/appShell.jsand renamed the contract between them (hiddenPanels.left->isSmallScreen,isOpen->showSidebarSheet, thesidebarPanel/overlayrefs ->sidebarSlot/sidebarSheet). The runtime is served once, by absolute URL, to every generatedgen/<model>/index.html- and that page is a file in the project, rewritten only by an explicit Generate. So the upgrade swapped the runtime under every deployed application's page:init()threw on an undefined ref before moving the sidebar out of the split panel, the panel's:data-hiddenthrew on the missing property, and the one thing hiding the sidebar in embedded mode was gone. Every entity opened in the application shell rendered the app's own sidebar next to the form.Change
appShell.jskeeps the old names alive alongside the new ones:hiddenPanelsandisOpenas accessors kept in step withisSmallScreen/embeddedandshowSidebarSheet(with a setter, because the old sheet writesisOpen = falsefrom its overlay click), and the breakpoint handler resolves the refs by their current names else the old ones. The comment states the rule the rename missed: this file's page contract is public across generated vintages.ShellRuntimeVintageITguards the class of failure: every other Harmonia IT regenerates the page, so old page + new runtime was never exercised. The fixture is the pre-ui: the generated Harmonia app shell follows the Harmonia 3 reference (#7399) #7400 template rendered by the real pipeline for theDependsOnHarmoniaITmodel, not hand-written. The project is generated with the current template, that page is put in the registry over the generated one (the way a deployed project keeps its page through an upgrade), and the browser asserts the sidebar is hidden embedded, visible standalone, and in the drawer the hamburger opens below the breakpoint.harmonia-ui.md's shared-runtime bullet records the contract and the guard.Verified
ShellRuntimeVintageITgreen headless with this change, and red against origin/master's runtime at the embedded-sidebar assertion.DependsOnHarmoniaITgreen (current page + current runtime, unchanged behaviour).mvn formatter:validatewith the cache wiped, green.Not verified: a real deployed application in a browser other than through the IT.
The host-side half - the platform shells drawing the Harmonia 3 frame around the hosted iframe - is #7428 / #7432.
Fixes #7427
🤖 Generated with Claude Code