Skip to content

Overridden secrets have no persistent visual indicator in the UI #929

Description

@tomaskir

Is your feature request related to a problem?

When a secret has an active personal override, the UI gives almost no indication of it. The only cue is the Override button's icon turning amber (text-amber-500) - and that button lives in the secret row's action zone, so it's effectively only noticeable on hover. On screens smaller than 2xl there isn't even a text label, just the colored icon.

The indicator is the amber Override button in frontend/components/environments/secrets/OverrideDialog.tsx:

<FaUserEdit className={clsx('shrink-0', activeOverride && 'text-amber-500')} />
<span className={clsx('hidden 2xl:block text-xs', activeOverride && 'text-amber-500')}>
  Override
</span>

There is no row-level badge, no row styling change, no filter, and no count. As a result:

  • You can't tell at a glance which secrets in an environment are overridden.
  • There's no way to filter or count overridden secrets.
  • The override value is never shown inline - you have to open the dialog per-secret to see it.

For a feature whose whole purpose is "you are running a different value than your team," the active state is too easy to miss.

Describe the solution you'd like

Some combination of:

  1. A persistent badge/indicator on overridden secret rows (always visible, not hover-gated).
  2. A filter / toggle to show only overridden secrets in the environment view.
  3. A count of active overrides somewhere in the environment header.
  4. Optionally, an inline hint that the displayed value differs from your personal override.

The data is already available client-side - GetSecrets returns override { value isActive } (frontend/graphql/queries/secrets/getSecrets.gql) and it's decrypted on the environment page. So this is largely a frontend surfacing change; no schema/API work needed for the indicator/filter/count.

Describe alternatives you've considered

Keeping the current amber-on-hover button as the sole indicator. It works once you know to look for it, but it's not discoverable and doesn't scale to "which of these 40 secrets am I overriding?"

Metadata

Metadata

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions