Name the panel in the settings disclosure button

What does this MR do and why?

The settings disclosure now sits in the sidebar footer next to Help, outside the panel it configures. A bare "Settings" there doesn't say what it configures, so this MR names the panel.

How it works

Sidebars::Menu gains a disclosure_title, defaulting to title, which each settings menu overrides. It is serialized only when it differs from title, so menus that don't need a qualified label don't pay for an extra field in the payload.

The frontend uses it for the disclosure button's visible label, its aria-label, and the collapsed-sidebar tooltip, falling back to title:

disclosureTitle() {
  return this.item.disclosure_title || this.item.title;
},

Which labels are visible in this MR

This MR adds the override for four menus, but only two panels currently render a disclosure. On master, settingsAsDisclosure only applies to the panels in PANELS_WITH_HIDEABLE_UNPINNED_ITEMS — group and project. The other two labels are defined here but dormant: they become visible when the later MRs opt their panel into the disclosure.

Panel Disclosure button Visible from
Project Project settings this MR
Group Group settings this MR
Admin area Admin settings !265260 (next)
Organization admin Organization settings !265261 (merged)
User settings User settings !265262, which adds its own override

The overrides for Admin and Organization admin land here, with the mechanism they belong to, rather than being scattered across the MRs that switch each panel on.

What is deliberately not renamed

title is unchanged, so the qualified label is scoped to the disclosure button and nothing else:

  • the in-place sidebar section when the flag is off
  • the command palette
  • pinned items
  • data-qa-section-name, so QA selectors keep matching "Settings"

Project settings already existed as a translated string and is reused. gettext:regenerate adds three: Admin|Admin settings, Group settings, Organization settings.

The plain organization panel is excluded throughout the stack — it keeps its in-place settings section and renders no disclosure, so its label would never be used.

Stack (2 of 6): footer placement → this MR → Admin area → organization admin → user settings → settings pins.

References

Screenshots or screen recordings

Project

Before After
CleanShot 2026-11-12 at 8.36.15 PM@2x.png CleanShot_2026-11-12_at_8.30.57_PM_2x
CleanShot 2026-11-12 at 8.35.58 PM@2x.png CleanShot_2026-11-12_at_8.31.23_PM_2x

Group

Before After
CleanShot_2026-11-12_at_8.34.27_PM_2x CleanShot_2026-11-12_at_8.32.35_PM_2x
CleanShot_2026-11-12_at_8.34.43_PM_2x CleanShot_2026-11-12_at_8.32.15_PM_2x

How to set up and validate locally

  1. Enable the feature flag in the Rails console:

    Feature.enable(:hide_unpinned_sidebar_items)
  2. Visit a project. Confirm the button in the sidebar footer reads Project settings.

  3. Visit a group. Confirm it reads Group settings.

  4. Collapse the sidebar to icon-only. Confirm the tooltip shows the same qualified label.

  5. Visit a settings page and confirm the button shows as selected.

  6. Disable the flag and confirm the in-place Settings section is unchanged — the qualified label must not appear anywhere with the flag off.

Not testable in this MR: the Admin area and Organization admin sidebars render no settings disclosure yet, so they still show an in-place Settings section. Their labels are checked in !265260 and !265261 (merged).

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Austin Regnery

Merge request reports

Loading
Loading