Skip to content

ui: the shared shell runtime keeps the names every already-generated app shell binds (#7427) - #7433

Merged
delchev merged 1 commit into
masterfrom
issue-7427-shell-runtime-contract
Sep 17, 2026
Merged

delchev merged 1 commit into
masterfrom
issue-7427-shell-runtime-contract

Conversation

@delchev

@delchev delchev commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

Cause

#7400 rewrote the generated shell template together with the shared runtime application-core/shell/js/components/layout/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: init() threw on an undefined ref before moving the sidebar out of the split panel, the panel's :data-hidden threw 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.js keeps the old names alive alongside the new ones: hiddenPanels and isOpen as accessors kept in step with isSmallScreen / embedded and showSidebarSheet (with a setter, because the old sheet writes isOpen = false from 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.
  • ShellRuntimeVintageIT guards 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 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.
  • harmonia-ui.md's shared-runtime bullet records the contract and the guard.

Verified

  • ShellRuntimeVintageIT green headless with this change, and red against origin/master's runtime at the embedded-sidebar assertion.
  • DependsOnHarmoniaIT green (current page + current runtime, unchanged behaviour).
  • mvn formatter:validate with 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

…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>
@delchev
delchev merged commit 03cdafc into master Sep 17, 2026
10 checks passed
@delchev
delchev deleted the issue-7427-shell-runtime-contract branch September 17, 2026 14:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

ui: the shared shell runtime dropped the names every already-generated app shell binds - embedded apps show their own sidebar (#7400)

1 participant