Skip to content

[SideNav] Make solutions navigation respect 'visibleIn': ['sideNav']#270634

Open
paulinashakirova wants to merge 12 commits into
elastic:mainfrom
paulinashakirova:sideNav-visibleIn-solutions-final
Open

[SideNav] Make solutions navigation respect 'visibleIn': ['sideNav']#270634
paulinashakirova wants to merge 12 commits into
elastic:mainfrom
paulinashakirova:sideNav-visibleIn-solutions-final

Conversation

@paulinashakirova
Copy link
Copy Markdown
Contributor

@paulinashakirova paulinashakirova commented May 22, 2026

Summary

Splits the 'sideNav' value in AppDeepLinkLocations into two explicit values: 'classicSideNav' and 'solutionSideNav'. The solution-nav resolver (getNodeStatus) now honors visibleIn the same way classic chrome and global search already do.

Resolves [SharedUx] Project nav ignores "sideNav" entry in visibleIn setting issue.

Why

The solution-nav resolver was silently ignoring visibleIn, so deep links appeared in solution navs regardless of what their owners declared. Fixing the bypass under the existing 'sideNav' literal would flip the meaning of every existing declaration at once. Splitting the literal lets each call site declare its surfaces explicitly, so the migration is mechanical and reviewable per plugin.

What changes for plugin owners

Surface New visibleIn value
Classic hamburger nav 'classicSideNav'
Solution side nav (Obs / Security / Search) 'solutionSideNav'
Both ['classicSideNav', 'solutionSideNav']
Global search 'globalSearch' (unchanged)

Default for registered apps: ['globalSearch', 'classicSideNav', 'solutionSideNav'] (unchanged behavior).
Default for deep links: ['globalSearch'] (unchanged).

Each plugin's existing 'sideNav' usages have been mapped 1:1 to preserve current behavior in main:

  • Was shown in the classic hamburger → ['classicSideNav', 'solutionSideNav']
  • Was shown only via the silent bypass in solution navs → ['solutionSideNav']

What I tested

Surface Method Result
Classic hamburger (default space) DOM diff branch vs main 42/42
Observability solution side nav DOM diff in oblt space 15/15
Security solution side nav (Stack Management expanded) DOM diff in security space 51/51
Search solution side nav (Stack Management + ML submenus) Visual check match
Observability serverless project Verified Overview / Alerts / Cases / SLOs / Applications group / Synthetics group all render pass

Jest, FTR, Scout: green in CI.

Follow-ups

  • 'solutionSideNav' collapses back to a single 'sideNav' once 'classicSideNav' is removed (already deprecated in security). A TODO marker is left on the type union for that future cleanup.

@paulinashakirova paulinashakirova self-assigned this May 22, 2026
@paulinashakirova paulinashakirova added release_note:skip Skip the PR/issue when compiling release notes backport:skip This PR does not require backporting ci:project-deploy-observability Create an Observability project labels May 22, 2026
@github-actions
Copy link
Copy Markdown
Contributor

🤖 GitHub comments

Expand to view the GitHub comments

Just comment with:

  • /oblt-deploy : Deploy a Kibana instance using the Observability test environments.
  • run docs-build : Re-trigger the docs validation. (use unformatted text in the comment!)

@paulinashakirova paulinashakirova added ci:project-deploy-elasticsearch Create an Elasticsearch Serverless project ci:project-deploy-security Create a Security Serverless Project and removed ci:project-deploy-elasticsearch Create an Elasticsearch Serverless project ci:project-deploy-observability Create an Observability project labels May 22, 2026
@paulinashakirova
Copy link
Copy Markdown
Contributor Author

/oblt-deploy

@kibanamachine
Copy link
Copy Markdown
Contributor

Project deployments require a Github label, please add one or more of ci:project-deploy-(elasticsearch|observability|security) and trigger the job through the checkbox again.

@paulinashakirova
Copy link
Copy Markdown
Contributor Author

/ci

…and 'solutionSideNav'

This commit modifies the visibility settings for various applications and deep links to replace 'sideNav' with 'classicSideNav' and 'solutionSideNav'. The changes ensure that links are appropriately categorized for the new navigation structure, enhancing user experience across different navigation styles.

Affected files include application registration, deep link definitions, and test cases to reflect the updated visibility settings.
@paulinashakirova paulinashakirova requested a review from Copilot May 25, 2026 16:12
@paulinashakirova
Copy link
Copy Markdown
Contributor Author

/ci

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Note

Copilot was unable to run its full agentic suite in this review.

This PR updates app/deep-link visibleIn handling to distinguish between classic (hamburger) navigation and solution navigation, and ensures solution side nav respects visibleIn settings.

Changes:

  • Replaces legacy 'sideNav' visibility with 'classicSideNav' and/or 'solutionSideNav' across apps and deep links.
  • Updates core navigation filtering to remove solution side nav links when solutionSideNav is not included in visibleIn.
  • Expands/updates tests to validate the new visibility behavior in core and multiple solution plugins.

Reviewed changes

Copilot reviewed 52 out of 52 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
x-pack/solutions/workplaceai/plugins/workplace_ai_app/public/application/register.ts Updates app visibleIn to include both classic + solution nav.
x-pack/solutions/security/plugins/security_solution/public/onboarding/links.ts Adjusts onboarding link visibility for classic + solution nav.
x-pack/solutions/security/plugins/security_solution/public/app/links/deep_links.ts Updates derived deep link visibility to classic/solution nav and adjusts unavailable link handling.
x-pack/solutions/security/plugins/security_solution/public/app/links/deep_links.test.ts Updates expectations for solution-side-nav visibility.
x-pack/solutions/search/plugins/search_synonyms/public/plugin.ts Adds solution side nav visibility to app/deeplinks; updates classic/solution nav visibility.
x-pack/solutions/search/plugins/search_query_rules/public/plugin.ts Updates app visibility to classic + solution nav.
x-pack/solutions/search/plugins/search_playground/public/plugin.ts Updates app visibility to classic + solution nav.
x-pack/solutions/search/plugins/search_homepage/public/plugin.ts Updates app visibility to classic + solution nav.
x-pack/solutions/search/plugins/search_getting_started/public/plugin.ts Updates app visibility to classic + solution nav.
x-pack/solutions/observability/plugins/uptime/public/plugin.ts Adds visibleIn to a deep link for solution nav + global search.
x-pack/solutions/observability/plugins/synthetics/public/plugin.ts Adds visibleIn to deep links for solution nav + global search.
x-pack/solutions/observability/plugins/profiling/public/plugin.ts Adds deep link visibleIn and tightens typing with satisfies AppDeepLink[].
x-pack/solutions/observability/plugins/observability_shared/public/services/update_global_navigation.tsx Updates dynamic nav link visibility to classic + solution nav.
x-pack/solutions/observability/plugins/observability_shared/public/services/update_global_navigation.test.tsx Updates tests for new visibility locations.
x-pack/solutions/observability/plugins/observability_onboarding/public/plugin.ts Adds solution side nav visibility.
x-pack/solutions/observability/plugins/observability_ai_assistant_app/public/plugin.tsx Makes AI Assistant visible in solution side nav.
x-pack/solutions/observability/plugins/observability/public/plugin.ts Updates deep link visibilities and app visibility for classic/solution nav modes.
x-pack/solutions/observability/plugins/infra/public/plugin.ts Introduces getInfraDeepLinks and sets deep link visibleIn for solution nav/global search.
x-pack/solutions/observability/plugins/infra/public/plugin.test.ts Adds unit tests for Infra deep link visibility behavior.
x-pack/solutions/observability/plugins/infra/public/pages/logs/routes.ts Adds optional visibleIn to log routes and sets it for anomalies/categories.
x-pack/solutions/observability/plugins/apm/public/plugin.ts Adds deep link visibleIn for solution nav + global search.
x-pack/platform/plugins/shared/triggers_actions_ui/public/plugin.ts Adds solution side nav visibility for Rules entry.
x-pack/platform/plugins/shared/streams_app/public/plugin.tsx Updates updater to include classic + solution nav.
x-pack/platform/plugins/shared/ml/public/register_helper/register_search_links/search_deep_links.ts Adds/updates deep link visibility rules for solution nav + global search.
x-pack/platform/plugins/shared/ml/public/register_helper/register_search_links/search_deep_links.test.ts Adds test coverage for ML deep link visibility behavior.
x-pack/platform/plugins/shared/ingest_hub/public/plugin.tsx Updates feature-flagged visibility to classic + solution nav.
x-pack/platform/plugins/shared/ingest_hub/public/plugin.test.tsx Updates test expectation for classic + solution nav visibility.
x-pack/platform/plugins/shared/inbox/public/plugin.tsx Updates Inbox visibility to classic + solution nav.
x-pack/platform/plugins/shared/inbox/public/plugin.test.ts Updates tests to assert classic + solution nav visibility.
x-pack/platform/plugins/shared/fleet/public/deep_links.ts Updates Fleet deep links to include solution side nav when authorized.
x-pack/platform/plugins/shared/fleet/public/deep_links.test.ts Adds tests for Fleet deep link visibility by authorization state.
x-pack/platform/plugins/shared/agent_builder/public/register.ts Updates app visibility to classic + solution nav.
src/platform/test/plugin_functional/test_suites/core_plugins/application_status.ts Updates functional test to use classic/solution nav locations.
src/platform/plugins/shared/workflows_management/public/plugin.ts Updates computed visibility locations and clarifies intent in comments.
src/platform/plugins/shared/workflows_management/public/plugin.test.ts Updates tests and descriptions for classic/solution nav behavior.
src/platform/plugins/shared/visualizations/public/plugin.ts Updates visibility logic to use classicSideNav instead of sideNav.
src/platform/plugins/shared/management/public/plugin_deep_links.test.ts Adds tests for Management deep link defaulting/preservation rules.
src/platform/plugins/shared/management/public/plugin.tsx Defaults management deep-link visibility to include global search + both nav modes.
src/platform/plugins/shared/discover/public/plugin.tsx Updates Discover visibility to classic + solution nav.
src/platform/plugins/shared/dev_tools/public/plugin.ts Adds solution side nav visibility for dev tools deep links.
src/platform/plugins/private/kibana_overview/public/plugin.ts Updates visibility to include classic + solution nav.
src/core/packages/chrome/browser-internal/src/services/project_navigation/utils.ts Filters solution nav nodes based on solutionSideNav in visibleIn.
src/core/packages/chrome/browser-internal/src/services/project_navigation/utils.test.ts Updates visibility defaults used in tests.
src/core/packages/chrome/browser-internal/src/services/project_navigation/project_navigation_service.test.ts Adds tests ensuring solution nav filters out links excluding solutionSideNav.
src/core/packages/chrome/browser-internal/src/services/nav_links/to_nav_link.test.ts Updates test fixtures to new nav visibility locations.
src/core/packages/chrome/browser-internal/src/services/nav_links/nav_links_service.test.ts Updates test fixtures to new nav visibility locations.
src/core/packages/chrome/browser-components/src/project/sidenav/navigation/to_navigation_items.test.tsx Updates test fixture visibility to new locations.
src/core/packages/chrome/browser-components/src/classic/collapsible_nav.tsx Switches classic nav filtering from sideNav to classicSideNav.
src/core/packages/chrome/browser-components/src/classic/collapsible_nav.test.tsx Updates test fixtures to use classic + solution nav locations.
src/core/packages/application/browser/src/application.ts Updates API docs/types: replaces sideNav with classicSideNav/solutionSideNav and default visibility.
src/core/packages/application/browser-internal/src/utils/get_app_info.test.ts Updates expected default visibilities in core app info tests.
src/core/packages/application/browser-internal/src/utils/constants.ts Updates default app visibility constant to include classic + solution nav.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread x-pack/solutions/observability/plugins/infra/public/plugin.ts
Comment thread x-pack/solutions/observability/plugins/infra/public/plugin.ts
Comment thread x-pack/solutions/observability/plugins/infra/public/plugin.ts Outdated
Three FTR failures on the latest CI run trace back to the bridge commit
that introduced 'sideNav' on deep links that previously had no explicit
visibleIn:

1. Serverless ML search_bar_features (search, security, observability)
   File upload / Index data visualizer / Data drift had ['sideNav'] in
   the bridge commit, which dropped them from globalSearch. Restored
   ['globalSearch', 'solutionSideNav'] and reset their breadcrumb-only
   "*Page" variants back to visibleIn: [] (matching main).

2. data_views feature_controls/security (read-only privileges)
3. APM feature_controls/apm_security (all privileges)
   The Management plugin's appUpdater default of
   ['globalSearch', 'classicSideNav', 'solutionSideNav'] surfaced every
   Stack Management subapp (Data Views, Content Connectors, Alerts, ...)
   as a top-level entry in the classic hamburger nav. Main never did
   that because it omitted 'sideNav' by default. Dropped 'classicSideNav'
   from the default so the classic nav behavior matches main while
   keeping 'solutionSideNav' for solution nav trees that reference
   management deep links by id (e.g. 'management:dataViews').

Unit tests updated to match new expectations.
@paulinashakirova
Copy link
Copy Markdown
Contributor Author

/ci

…SideNav'

This commit modifies the default visibility settings for management plugins to exclude 'classicSideNav', ensuring that management sub-apps do not appear as top-level entries in the classic hamburger navigation. The changes also update related unit tests to reflect the new expectations for deep link visibility, specifically for applications without an explicit 'visibleIn' setting.

Additionally, the test cases for file upload, index data visualizer, and data drift have been adjusted to confirm their visibility in both 'globalSearch' and 'solutionSideNav', while breadcrumb-only page variants are now correctly set to be hidden everywhere.
@paulinashakirova
Copy link
Copy Markdown
Contributor Author

/ci

id: tool.id,
title: tool.title as string,
path: `#/${tool.id}`,
visibleIn: ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this line these deep links default to ['globalSearch'] (deep-link default, not the app one). On main that still worked in solution navs because the resolver was silently ignoring visibleIn — this PR makes it actually respect it, so without 'solutionSideNav' here the Console / Grok Debugger / Painless Lab / Search Profiler entries would disappear from any solution nav that references them.

Skipping 'classicSideNav' on purpose: the classic hamburger already has the single "Dev Tools" app entry. Adding it here would surface all four tools as separate top-level hamburger items, which isn't what main shows.

// top-level entries in the classic hamburger nav (the "Stack Management" app
// is the entry point there). 'solutionSideNav' is included so solution
// navigation trees can keep referencing them by id (e.g. 'management:dataViews').
visibleIn: mgmtApp.visibleIn ?? ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Default excludes 'classicSideNav' so management sub-apps do not surface as top-level entries in the classic nav.
'solutionSideNav' is included so solution navigation trees can keep referencing them by id (e.g. 'management:dataViews').

title: i18n.translate('xpack.fleet.deepLinks.agents.title', { defaultMessage: 'Agents' }),
path: FLEET_ROUTING_PATHS.agents,
visibleIn: !authz?.fleet.readAgents ? [] : ['globalSearch'],
visibleIn: !authz?.fleet.readAgents ? [] : ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding 'solutionSideNav' here keeps these Fleet sub-links visible in solution navs that reference them by id (e.g. Stack Management in the Search solution). On main they rendered there only because the resolver was bypassing visibleIn; without this they'd disappear.

defaultMessage: 'Overview',
}),
path: `/${ML_PAGES.OVERVIEW}`,
visibleIn: ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this line these deep links default to ['globalSearch'] (deep-link default, not the app one). On main that still worked in solution navs because the resolver was silently ignoring visibleIn — this PR makes it actually respect it, so without 'solutionSideNav' here, all deep link entries would disappear from any solution nav that references them.

defaultMessage: 'Rules',
}),
visibleIn: ['globalSearch'],
visibleIn: ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On main that still worked in solution nav implicitly because the resolver was silently ignoring visibleIn — this PR makes it actually respect it, so without 'solutionSideNav' here sub menu entries would disappear from any solution nav that references them.

id: 'service-groups-list',
title: serviceGroupsTitle,
path: '/service-groups',
visibleIn: ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this line these deep links default to ['globalSearch'] (deep-link default, not the app one). On main that still worked in solution navs because the resolver was silently ignoring visibleIn — this PR makes it actually respect it, so without 'solutionSideNav' here, all deep link entries would disappear from any solution nav that references them.

id: 'anomalies',
title: logsAnomaliesTitle,
path: '/anomalies',
visibleIn: ['globalSearch', 'solutionSideNav'],
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Without this line these deep links default to ['globalSearch'] (deep-link default, not the app one). On main that still worked in solution navs because the resolver was silently ignoring visibleIn — this PR makes it actually respect it, so without 'solutionSideNav' here, all deep link entries would disappear from any solution nav that references them.

@botelastic botelastic Bot added the Team:One Workflow Team label for One Workflow (Workflow automation) label May 27, 2026
@infra-vault-gh-plugin-prod
Copy link
Copy Markdown

Pinging @elastic/obs-presentation-team (Team:obs-presentation)

@infra-vault-gh-plugin-prod
Copy link
Copy Markdown

Pinging @elastic/fleet (Team:Fleet)

@github-actions
Copy link
Copy Markdown
Contributor

🤖 GitHub comments

Expand to view the GitHub comments

Just comment with:

  • /oblt-deploy : Deploy a Kibana instance using the Observability test environments.
  • run docs-build : Re-trigger the docs validation. (use unformatted text in the comment!)

Copy link
Copy Markdown
Member

@jennypavlova jennypavlova left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

obs-presentation code changes LGTM

Copy link
Copy Markdown
Contributor

@semd semd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! ❤️

@rbrtj rbrtj self-requested a review May 27, 2026 14:46
Copy link
Copy Markdown
Contributor

@cauemarcondes cauemarcondes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OBS exploration changes LGTM

Copy link
Copy Markdown
Contributor

@jen-huang jen-huang left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fleet changes LGTM

Copy link
Copy Markdown
Contributor

@TattdCodeMonkey TattdCodeMonkey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

search app changes LGTM

Copy link
Copy Markdown
Contributor

@rbrtj rbrtj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ML changes LGTM

@kibanamachine
Copy link
Copy Markdown
Contributor

kibanamachine commented May 29, 2026

💛 Build succeeded, but was flaky

Failed CI Steps

Test Failures

  • [job] [logs] FTR Configs #47 / Cloud Security Posture - Group 5 (KSPM + Flyouts) Security Alerts Page - Graph visualization expanded flyout - filter by node

Metrics [docs]

Async chunks

Total size of all lazy-loaded chunks that will be downloaded as the user navigates the app

id before after diff
ml 5.6MB 5.6MB +528.0B
securitySolution 12.1MB 12.1MB +21.0B
total +549.0B

Page load bundle

Size of the bundles that are downloaded on every page load. Target size is below 100kb

id before after diff
agentBuilder 54.8KB 54.8KB +24.0B
apm 48.4KB 48.7KB +264.0B
core 539.5KB 539.5KB +78.0B
devTools 7.2KB 7.2KB +44.0B
discover 28.9KB 28.9KB +24.0B
fleet 212.0KB 212.1KB +85.0B
inbox 5.1KB 5.1KB +24.0B
infra 53.8KB 53.9KB +147.0B
ingestHub 13.1KB 13.1KB +24.0B
kibanaOverview 5.6KB 5.7KB +24.0B
management 13.1KB 13.2KB +51.0B
observability 102.1KB 102.2KB +105.0B
observabilityAIAssistantApp 16.2KB 16.2KB +16.0B
observabilityOnboarding 12.7KB 12.7KB +17.0B
observabilityShared 69.5KB 69.6KB +72.0B
profiling 18.5KB 18.6KB +132.0B
searchGettingStarted 6.7KB 6.7KB +24.0B
searchHomepage 8.1KB 8.1KB +24.0B
searchPlayground 10.8KB 10.8KB +24.0B
searchQueryRules 6.0KB 6.1KB +24.0B
searchSynonyms 5.8KB 5.8KB +41.0B
securitySolution 159.7KB 159.8KB +24.0B
streamsApp 26.5KB 26.5KB +24.0B
synthetics 29.5KB 29.6KB +88.0B
triggersActionsUi 115.8KB 115.8KB +17.0B
uptime 42.9KB 42.9KB +44.0B
visualizations 46.3KB 46.3KB +7.0B
workflowsManagement 36.3KB 36.4KB +48.0B
workplaceAIApp 5.5KB 5.6KB +24.0B
total +1.5KB

History

cc @paulinashakirova

@elastic-vault-github-plugin-prod
Copy link
Copy Markdown
Contributor

Kibana Exploratory Testing — execution report

Run Metadata

  • Triggered by: Issue #453
  • Elasticsearch image tag: 9.5.0-SNAPSHOT
  • Kibana image: docker.elastic.co/kibana-ci/kibana-serverless:pr-270634-3cc553ed1f6b
  • Date: 2026-05-29
  • PR: elastic/kibana#270634 — [SideNav] Make solutions navigation respect 'visibleIn': ['sideNav']
  • Mode: PR-targeted (journeys generated from PR diff)
  • Journeys executed: 8
  • Passed: 8
  • Errored: 0
  • Findings: 0 bugs, 0 warnings, 0 info

Findings

No findings -- all journeys completed without issues.

Additional details

Screenshots

Screenshots are available in the workflow artifacts.

Workflow run: View workflow run

Copy link
Copy Markdown
Contributor

@ana-davydova ana-davydova left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable-obs changes look good, tested. No regressions found.

Copy link
Copy Markdown
Contributor

@ElenaStoeva ElenaStoeva left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changes in dev tools and management plugins lgtm

Copy link
Copy Markdown
Contributor

@yuliia-fryshko yuliia-fryshko left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@paulinashakirova
Copy link
Copy Markdown
Contributor Author

@elasticmachine merge upstream

Copy link
Copy Markdown
Contributor

@tonyghiani tonyghiani left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, code review only

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport:skip This PR does not require backporting ci:project-deploy-observability Create an Observability project ci:project-deploy-security Create a Security Serverless Project release_note:skip Skip the PR/issue when compiling release notes Team:Fleet Team label for Observability Data Collection Fleet team Team:obs-presentation Focus: APM UI, Infra UI, Hosts UI, Universal Profiling, Obs Overview and left Navigation Team:One Workflow Team label for One Workflow (Workflow automation)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[SharedUx] Project nav ignores "sideNav" entry in visibleIn setting