Skip to content

[Security Solution] Detection rule deprecation feature#259673

Merged
dplumlee merged 21 commits into
elastic:mainfrom
dplumlee:detection-rule-deprecation-feature
Apr 3, 2026
Merged

[Security Solution] Detection rule deprecation feature#259673
dplumlee merged 21 commits into
elastic:mainfrom
dplumlee:detection-rule-deprecation-feature

Conversation

@dplumlee
Copy link
Copy Markdown
Contributor

@dplumlee dplumlee commented Mar 25, 2026

Epic: https://github.com/elastic/security-team/issues/6344 (internal)
Resolves: https://github.com/elastic/security-team/issues/15791 (internal)
Resolves: https://github.com/elastic/security-team/issues/15793 (internal)
Resolves: #118942

Summary

Note

This feature is currently hidden behind the prebuiltRulesDeprecationUIEnabled feature flag

Adds UI for identifying and managing deprecated prebuilt detection rules which will be present in 9.4+ versions of the detection rules package.

  • New internal API endpoint POST /internal/detection_engine/prebuilt_rules/deprecation/_review that cross-references deprecated rule assets with installed rules
  • num_prebuilt_rules_deprecated added to the prebuilt rules status response
  • Rules management page: dismissable warning callout with rule count, "View deprecated rules" modal, and "Delete all" action
  • Rule details page: warning callout with deprecation reason (when available), "Delete rule", and "Duplicate and delete" actions
  • useTimedDismissal utility hook for dismissal that persists a custom amount of time (for when we don't want to pester users too much but just a little)

Screenshots

Deprecated rules callout on detection rules table page
Screenshot 2026-03-26 at 2 46 27 PM

Deprecated rules modal
Screenshot 2026-03-26 at 11 39 01 AM

Deprecated rules callout on rule details page
Screenshot 2026-03-26 at 11 44 08 AM

Testing this PR

Quick setup

A seed script is included that creates fake prebuilt rules and their deprecated successors so the full deprecation UI can be exercised without a real 9.4+ rules package.

Script file: seed_deprecated_rules.sh

Start Kibana with the feature flag enabled in kibana.dev.yml:

xpack.securitySolution.enableExperimental: ['prebuiltRulesDeprecationUIEnabled']

Seed test data:

bash seed_deprecated_rules.sh

This will:

  • Create non-deprecated version 1 rule asset SOs with a full rule schema
  • Install them as prebuilt rules via the internal installation API
  • Create deprecated version 2 rule asset SOs

Navigate to Security > Rules > Detection Rules (SIEM):

  • The deprecated rules callout banner should appear on the rules list page
  • Clicking into any of the seeded rules should show the deprecation callout on the rule detail page
  • The "View all deprecated rules" modal and "Delete all" flows are fully functional

Clean up when done:

bash seed_deprecated_rules.sh --clean

The script is configurable via env vars:

KIBANA_URL (default: http://localhost:5601/kbn)
KIBANA_AUTH (default: elastic:changeme)
Full integration setup (for testing with a real rules package)

Requires the detection-rules repo with a built package targeting 9.4+.

Add to kibana.dev.yml:

xpack.fleet.developer:
  bundledPackageLocation: /path/to/detection-rules/dist/bundled
xpack.securitySolution.prebuiltRulesPackageVersion: 9.4.0-beta.1

@dplumlee dplumlee self-assigned this Mar 25, 2026
@dplumlee dplumlee added backport:skip This PR does not require backporting Team:Detections and Resp Security Detection Response Team Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. release_note:feature Makes this part of the condensed release notes Team:Detection Rule Management Security Detection Rule Management Team Feature:Prebuilt Detection Rules Security Solution Prebuilt Detection Rules area v9.4.0 ci:cloud-deploy Create or update a Cloud deployment ci:project-deploy-security Create a Security Serverless Project labels Mar 25, 2026
@nikitaindik nikitaindik self-requested a review March 27, 2026 10:13
@dplumlee dplumlee marked this pull request as ready for review March 27, 2026 16:56
@dplumlee dplumlee requested review from a team as code owners March 27, 2026 16:56
@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/security-detections-response (Team:Detections and Resp)

@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/security-solution (Team: SecuritySolution)

@elasticmachine
Copy link
Copy Markdown
Contributor

Pinging @elastic/security-detection-rule-management (Team:Detection Rule Management)


const ids = request.body?.ids;

if (ids && ids.length > 0) {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Not suggesting to do it now, but in the future we might consider passing rule_ids into the endpoint, since we have them anyways. That way we can avoid branching and duplication here, because both branches would be the same, like:

  1. Fetch deprecated rules (either all or only for passed rule_ids)
  2. Fetch installed rules for these
  3. Merge

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.

Yeah I don't disagree about the duplication of logic there. The main reason we're passing in id's instead of rule_id's though is to try and protect against the case where 2 rules have the same rule_id's. We've already seen that pop up in an SDH and it's an edge case our existing prebuilt rule workflow routes don't entirely handle because of sole reliance on the rule_id field. It was discussed a bit in the API design doc deciding between the two fields, I initially had it similar to what you describe.

}

const ruleIdFilter = ruleIds
.map((id) => `${PREBUILT_RULE_ASSETS_SO_TYPE}.attributes.rule_id: "${id}"`)
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do you think we should request only the latest version of a deprecated asset here? Is it possible that TRADE folks release two versions with "deprecated: true" because they want to add / adjust deprecated_reason, for example. Seems possible.

If we return multiple results for the same rule_id here, then in UI we won't know which one is the latest.

The endpoint would return

{
    "rules": [
        {
            "id": "33cd765b-53ea-4715-92ff-3905988ad87f",
            "rule_id": "f41296b4-9975-44d6-9486-514c6f635b2d",
            "name": "Potential curl CVE-2023-38545 Exploitation"
        },
        {
            "id": "33cd765b-53ea-4715-92ff-3905988ad87f",
            "rule_id": "f41296b4-9975-44d6-9486-514c6f635b2d",
            "name": "Potential curl CVE-2023-38545 Exploitation",
            "deprecated_reason": "Yo! I'm old." // UI will ignore this message
        }
    ]
}

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.

Right now, the package building script will only include one object per deprecated rule so we should be protected against this edge case, even when deprecated reasons are added. We will begin using the version field when we integrate into the upgrade table.

* Max number of deprecated rules returned per request. Conservative limit
* to protect against unexpected package size.
*/
export const MAX_DEPRECATED_RULES_TO_RETURN = 200;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Do you think we'll need to get notified if we hit 200 prebuilt rules in the package? How realistic is this? The number can only grow, right? If it's realistic, we can update our OOM package tests later to fail if this limit is hit, so we can either bump the limit or investigate what's wrong with the package.

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.

Unless something happens like a malformed package, we shouldn't hit this number anytime soon. Right now we have 111 deprecated rule objects in total and that's accumulated over 5+ years. So at least a few years at the current pace, at which point this will be updated and in a more permanent location

type: BulkActionTypeEnum.delete,
ids: rules.map((rule) => rule.id),
});
invalidateDeprecationReview();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

As I understand, if we call invalidateDeprecationReview() in executeBulkAction anyways, we can skip calling it here and in useDeprecatedRulesTableCallout.

ids: [rule.id],
duplicatePayload: {
include_exceptions:
duplicateOption === DuplicateOptions.withExceptions ||
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

True to its name, this logic is duplicated a few times in different components. I'll create a ticket to later extract it into something like executeDuplicateRuleBulkAction.

Copy link
Copy Markdown
Contributor

@nikitaindik nikitaindik left a comment

Choose a reason for hiding this comment

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

Thanks for the PR, @dplumlee! I reviewed the code and tested it locally. Overall LGTM, but I left some comments for you to consider. Please take a look.

I tested by installing all rules from package v8.7.1, then installing the package version 9.4.0-beta.1. To check if the deprecation message is displayed, I updated one of the prebuilt rule assets in ES – no assets in the beta package seem to have a deprecation message.

Image

Also, here's a few non-critical UI things I noticed (click items below to expand).

Modal over modal – can we hide the first one before showing the second? Image
Tooltips in the modal seem redundant Image
Rules table callout padding / buttons style is a bit different from the other callout Image

<>
<EuiText size="s" data-test-subj="deprecated-rule-reason">
<p>
{i18n.DEPRECATION_REASON_LABEL} {reason}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

nit: I'd move the reason above the description, so it logically flows like:

  • This rule is deprecated
  • Here's why
  • Here's what you can do about it
  • Here are the buttons to do it

@pborgonovi
Copy link
Copy Markdown
Contributor

@dplumlee

Exploratory Test Report


Exploratory tests were executed and the following areas/flows were covered:

Deprecation Callout & Modal

  • Deprecation callout displayed correctly on Rule Management page when deprecated rules are installed
  • Modal lists all deprecated rules with correct information
  • Deprecated rules counter in callout consistent with actual quantity
  • Rules with deprecation_reason display the reason in the details callout
  • Rules without deprecation_reason correctly omit the "Deprecation reason" label

Timed Dismissal

  • Callout dismiss persists after page refresh
  • Timestamp saved correctly in localStorage
  • Callout reappears automatically after 7-day expiration (simulated via localStorage)

Bulk Actions

  • Bulk enable/disable on deprecated rules works correctly
  • Bulk duplicate on deprecated rules works correctly
  • Bulk export on deprecated rules works correctly

Editing

  • Deprecated rule editable normally, all options available

Export/Import

  • Export of deprecated rules generates valid file
  • Import maintains deprecation status
  • Callout remains visible after reimport

Cross-Feature Integration

  • Rule accessed via other features (Alerts/Cases...) maintains deprecation callout consistency

Multi-Space

  • Deprecated rules imported in custom Kibana space maintain consistent behavior with default space

Coexistence

  • Custom rules and additional prebuilt rules coexist without interference with deprecated rules
  • Deprecation UI does not affect other rule management functionalities

No unexpected behavior or errors were observed during exploratory testing.

@dplumlee dplumlee enabled auto-merge (squash) April 3, 2026 14:58
@elasticmachine
Copy link
Copy Markdown
Contributor

elasticmachine commented Apr 3, 2026

💛 Build succeeded, but was flaky

Failed CI Steps

Test Failures

  • [job] [logs] FTR Configs #116 / discover/group6 discover unsaved changes notification indicator should not show the notification indicator initially nor after changes to a draft saved search
  • [job] [logs] FTR Configs #131 / Entity Analytics - Risk Score Maintainer @ess @serverless @serverlessQA Risk Score Maintainer Resolution Scoring with test log data produces a resolution score that aggregates alerts from both target and alias

Metrics [docs]

Module Count

Fewer modules leads to a faster build time

id before after diff
securitySolution 9311 9322 +11

Async chunks

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

id before after diff
securitySolution 11.6MB 11.6MB +9.1KB

Page load bundle

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

id before after diff
securitySolution 129.2KB 129.2KB +37.0B
Unknown metric groups

References to deprecated APIs

id before after diff
securitySolution 538 539 +1

Unreferenced deprecated APIs

id before after diff
securitySolution 538 539 +1

History

cc @dplumlee

@dplumlee dplumlee merged commit 2e0011d into elastic:main Apr 3, 2026
18 checks passed
@dplumlee dplumlee deleted the detection-rule-deprecation-feature branch April 3, 2026 18:04
dplumlee added a commit that referenced this pull request Apr 9, 2026
## Summary

**Epic**: [internal
link](elastic/security-team#6344)
**Implementation PR**: #259673

Adds test plan for the prebuilt rule deprecation feature in
`/prebuilt_rule_deprecation.md` using the existing template.

New scenarios:
  - [Default exclusion from existing flows]
    - [**Scenario: Deprecated rules are excluded from install review**]
    - [**Scenario: Deprecated rules are excluded from upgrade review**]
    - [**Scenario: Deprecated rules are excluded from bootstrap**]
- [**Scenario: Deprecated rules are excluded from
fetchAssetsByVersion**]
- [**Scenario: Deprecated rules are excluded from fetchLatestAssets**]
  - [Status API: deprecated count]
- [**Scenario: Status API returns correct count of installed deprecated
rules**]
- [**Scenario: Status API returns zero when no installed rules are
deprecated**]
  - [Deprecation review API: no filter]
- [**Scenario: Review API returns all installed deprecated rules when no
ids provided**]
- [**Scenario: Review API returns installed rule name, not package
name**]
  - [Deprecation review API: with ids filter]
    - [**Scenario: Review API filters by installed rule SO ids**]
- [**Scenario: Review API returns empty when filtered rule is not
deprecated**]
- [**Scenario: Review API returns empty when filtered id does not
exist**]
  - [Deprecation review API: edge cases]
- [**Scenario: Review API respects MAX\_DEPRECATED\_RULES\_TO\_RETURN
limit**]
- [**Scenario: Review API handles package with no deprecated rules**]
  - [Rule Management page: deprecation callout]
- [**Scenario: Callout appears when user has installed deprecated
rules**]
- [**Scenario: Callout does not appear when no deprecated rules are
installed**]
  - [Rule Management page: deprecated rules modal]
- [**Scenario: Modal lists all deprecated installed rules with links**]
- [**Scenario: User can delete all deprecated rules from the modal**]
    - [**Scenario: Delete all button is disabled for read-only users**]
  - [Rule Details page: deprecation callout]
- [**Scenario: Callout appears on deprecated prebuilt rule details
page**]
- [**Scenario: Callout does not appear on non-deprecated rule details
page**]
- [**Scenario: Callout does not appear on custom rule details page**]
    - [**Scenario: Action buttons are disabled for read-only users**]
  - [Rule Details page: delete deprecated rule]
- [**Scenario: User can delete a deprecated rule from its details
page**]
  - [Rule Details page: duplicate and delete deprecated rule]
    - [**Scenario: User can duplicate and delete a deprecated rule**]
    - [**Scenario: Original rule is not deleted if duplication fails**]
dplumlee added a commit that referenced this pull request Apr 22, 2026
#263662)

## Summary

Adds unit tests, FTR integration tests, and cypress e2e tests for the
[prebuilt rule deprecation workflow
feature](#259673) in accordance to
the [test plan](#259855)

### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
kibanamachine added a commit that referenced this pull request Apr 22, 2026
…d tests (#263662) (#265134)

# Backport

This will backport the following commits from `main` to `9.4`:
- [[Security Solution] Prebuilt rule deprecation workflow automated
tests (#263662)](#263662)

<!--- Backport version: 9.6.6 -->

### Questions ?
Please refer to the [Backport tool
documentation](https://github.com/sorenlouv/backport)

<!--BACKPORT [{"author":{"name":"Davis
Plumlee","email":"56367316+dplumlee@users.noreply.github.com"},"sourceCommit":{"committedDate":"2026-04-22T18:55:44Z","message":"[Security
Solution] Prebuilt rule deprecation workflow automated tests
(#263662)\n\n## Summary\n\nAdds unit tests, FTR integration tests, and
cypress e2e tests for the\n[prebuilt rule deprecation
workflow\nfeature](#259673) in
accordance to\nthe [test
plan](https://github.com/elastic/kibana/pull/259855)\n\n###
Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers
should verify this PR satisfies this list as well.\n\n- [x] [Unit or
functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere
updated or added to match the most common scenarios\n- [x] [Flaky
Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1)
was\nused on any tests
changed","sha":"50dec3989903fc92c789332ae72e22d93d09771b","branchLabelMapping":{"^v9.5.0$":"main","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","Team:Detections
and Resp","Team: SecuritySolution","Team:Detection Rule
Management","Feature:Prebuilt Detection
Rules","backport:version","v9.4.0","v9.5.0"],"title":"[Security
Solution] Prebuilt rule deprecation workflow automated
tests","number":263662,"url":"https://github.com/elastic/kibana/pull/263662","mergeCommit":{"message":"[Security
Solution] Prebuilt rule deprecation workflow automated tests
(#263662)\n\n## Summary\n\nAdds unit tests, FTR integration tests, and
cypress e2e tests for the\n[prebuilt rule deprecation
workflow\nfeature](#259673) in
accordance to\nthe [test
plan](https://github.com/elastic/kibana/pull/259855)\n\n###
Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers
should verify this PR satisfies this list as well.\n\n- [x] [Unit or
functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere
updated or added to match the most common scenarios\n- [x] [Flaky
Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1)
was\nused on any tests
changed","sha":"50dec3989903fc92c789332ae72e22d93d09771b"}},"sourceBranch":"main","suggestedTargetBranches":["9.4"],"targetPullRequestStates":[{"branch":"9.4","label":"v9.4.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"state":"NOT_CREATED"},{"branch":"main","label":"v9.5.0","branchLabelMappingKey":"^v9.5.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/263662","number":263662,"mergeCommit":{"message":"[Security
Solution] Prebuilt rule deprecation workflow automated tests
(#263662)\n\n## Summary\n\nAdds unit tests, FTR integration tests, and
cypress e2e tests for the\n[prebuilt rule deprecation
workflow\nfeature](#259673) in
accordance to\nthe [test
plan](https://github.com/elastic/kibana/pull/259855)\n\n###
Checklist\n\nCheck the PR satisfies following conditions. \n\nReviewers
should verify this PR satisfies this list as well.\n\n- [x] [Unit or
functional\ntests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)\nwere
updated or added to match the most common scenarios\n- [x] [Flaky
Test\nRunner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1)
was\nused on any tests
changed","sha":"50dec3989903fc92c789332ae72e22d93d09771b"}}]}]
BACKPORT-->

Co-authored-by: Davis Plumlee <56367316+dplumlee@users.noreply.github.com>
dplumlee added a commit that referenced this pull request Apr 22, 2026
…es workflow (#263560)

## Summary

Turns on the `prebuiltRulesDeprecationUIEnabled` feature flag
implemented in this PR: #259673

Also makes some small UI fixes that were brought up during acceptance
testing:

- Adds different language to the duplicate and delete modal informing
the user of the deletion
 - Adds padding to the tooltips in the duplication confirm modal
 - Adds link to docs in callout components

### Screenshots



<img width="1051" height="468" alt="Screenshot 2026-04-16 at 12 33
29 PM"
src="https://github.com/user-attachments/assets/468d970d-9009-40ef-99d9-c693e46c3e1a"
/>


<img width="1744" height="321" alt="Screenshot 2026-04-20 at 4 47 45 PM"
src="https://github.com/user-attachments/assets/db580301-edb8-44b5-851c-197aab366c81"
/>
smith pushed a commit to smith/kibana that referenced this pull request Apr 23, 2026
elastic#263662)

## Summary

Adds unit tests, FTR integration tests, and cypress e2e tests for the
[prebuilt rule deprecation workflow
feature](elastic#259673) in accordance to
the [test plan](elastic#259855)

### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
smith pushed a commit to smith/kibana that referenced this pull request Apr 23, 2026
…es workflow (elastic#263560)

## Summary

Turns on the `prebuiltRulesDeprecationUIEnabled` feature flag
implemented in this PR: elastic#259673

Also makes some small UI fixes that were brought up during acceptance
testing:

- Adds different language to the duplicate and delete modal informing
the user of the deletion
 - Adds padding to the tooltips in the duplication confirm modal
 - Adds link to docs in callout components

### Screenshots



<img width="1051" height="468" alt="Screenshot 2026-04-16 at 12 33
29 PM"
src="https://github.com/user-attachments/assets/468d970d-9009-40ef-99d9-c693e46c3e1a"
/>


<img width="1744" height="321" alt="Screenshot 2026-04-20 at 4 47 45 PM"
src="https://github.com/user-attachments/assets/db580301-edb8-44b5-851c-197aab366c81"
/>
rbrtj pushed a commit to walterra/kibana that referenced this pull request Apr 27, 2026
elastic#263662)

## Summary

Adds unit tests, FTR integration tests, and cypress e2e tests for the
[prebuilt rule deprecation workflow
feature](elastic#259673) in accordance to
the [test plan](elastic#259855)

### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
rbrtj pushed a commit to walterra/kibana that referenced this pull request Apr 27, 2026
…es workflow (elastic#263560)

## Summary

Turns on the `prebuiltRulesDeprecationUIEnabled` feature flag
implemented in this PR: elastic#259673

Also makes some small UI fixes that were brought up during acceptance
testing:

- Adds different language to the duplicate and delete modal informing
the user of the deletion
 - Adds padding to the tooltips in the duplication confirm modal
 - Adds link to docs in callout components

### Screenshots



<img width="1051" height="468" alt="Screenshot 2026-04-16 at 12 33
29 PM"
src="https://github.com/user-attachments/assets/468d970d-9009-40ef-99d9-c693e46c3e1a"
/>


<img width="1744" height="321" alt="Screenshot 2026-04-20 at 4 47 45 PM"
src="https://github.com/user-attachments/assets/db580301-edb8-44b5-851c-197aab366c81"
/>
SoniaSanzV pushed a commit to SoniaSanzV/kibana that referenced this pull request Apr 27, 2026
elastic#263662)

## Summary

Adds unit tests, FTR integration tests, and cypress e2e tests for the
[prebuilt rule deprecation workflow
feature](elastic#259673) in accordance to
the [test plan](elastic#259855)

### Checklist

Check the PR satisfies following conditions. 

Reviewers should verify this PR satisfies this list as well.

- [x] [Unit or functional
tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html)
were updated or added to match the most common scenarios
- [x] [Flaky Test
Runner](https://ci-stats.kibana.dev/trigger_flaky_test_runner/1) was
used on any tests changed
SoniaSanzV pushed a commit to SoniaSanzV/kibana that referenced this pull request Apr 27, 2026
…es workflow (elastic#263560)

## Summary

Turns on the `prebuiltRulesDeprecationUIEnabled` feature flag
implemented in this PR: elastic#259673

Also makes some small UI fixes that were brought up during acceptance
testing:

- Adds different language to the duplicate and delete modal informing
the user of the deletion
 - Adds padding to the tooltips in the duplication confirm modal
 - Adds link to docs in callout components

### Screenshots



<img width="1051" height="468" alt="Screenshot 2026-04-16 at 12 33
29 PM"
src="https://github.com/user-attachments/assets/468d970d-9009-40ef-99d9-c693e46c3e1a"
/>


<img width="1744" height="321" alt="Screenshot 2026-04-20 at 4 47 45 PM"
src="https://github.com/user-attachments/assets/db580301-edb8-44b5-851c-197aab366c81"
/>
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:cloud-deploy Create or update a Cloud deployment ci:project-deploy-security Create a Security Serverless Project Feature:Prebuilt Detection Rules Security Solution Prebuilt Detection Rules area release_note:feature Makes this part of the condensed release notes Team:Detection Rule Management Security Detection Rule Management Team Team:Detections and Resp Security Detection Response Team Team: SecuritySolution Security Solutions Team working on SIEM, Endpoint, Timeline, Resolver, etc. v9.4.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Security Solution] Handle rule deprecations within Prebuilt Rule upgrade workflow

4 participants