Repository: elastic/kibana
Pull request #214687: [8.x] [scout] enable eslint plugin playwright (#210666)
Author: login: dmlemeshko
Labels: name: backport
description: This PR is a backport of another PR
Created: 2025-03-15T11:35:04Z | Merged: 2025-03-18T20:30:42Z

# Backport

This will backport the following commits from `main` to `8.x`:
 - [[scout] enable eslint plugin playwright (#210666)](https://github.com/elastic/kibana/pull/210666)

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

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

<!--BACKPORT [{"author":{"name":"Dzmitry Lemechko","email":"dzmitry.lemechko@elastic.co"},"sourceCommit":{"committedDate":"2025-02-14T09:21:49Z","message":"[scout] enable eslint plugin playwright (#210666)\n\n## Summary\r\n\r\nCloses https://github.com/elastic/kibana/issues/21030\r\n\r\nIt was a quick work to do while we don't have many tests yet. \r\n\r\nFor reviewers: we most likely will review and update the rules to align\r\nbetter with final test design for Scout before GA. I don't think we have\r\nto deep dive into what rules are missing, but just to make sure I didn't\r\nrestrict something important from your perspective.\r\n\r\nRules are described in\r\nhttps://github.com/playwright-community/eslint-plugin-playwright?tab=readme-ov-file#rules\r\n\r\n---------\r\n\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"ddd0fdb4794b71f7c500f5d7d03a846bf21174b9","branchLabelMapping":{"^v9.1.0$":"main","^v8.19.0$":"8.x","^v(\\d+).(\\d+).\\d+$":"$1.$2"}},"sourcePullRequest":{"labels":["release_note:skip","v9.0.0","backport:version","test:scout","v9.1.0","v8.19.0"],"title":"[scout] enable eslint plugin playwright","number":210666,"url":"https://github.com/elastic/kibana/pull/210666","mergeCommit":{"message":"[scout] enable eslint plugin playwright (#210666)\n\n## Summary\r\n\r\nCloses https://github.com/elastic/kibana/issues/21030\r\n\r\nIt was a quick work to do while we don't have many tests yet. \r\n\r\nFor reviewers: we most likely will review and update the rules to align\r\nbetter with final test design for Scout before GA. I don't think we have\r\nto deep dive into what rules are missing, but just to make sure I didn't\r\nrestrict something important from your perspective.\r\n\r\nRules are described in\r\nhttps://github.com/playwright-community/eslint-plugin-playwright?tab=readme-ov-file#rules\r\n\r\n---------\r\n\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"ddd0fdb4794b71f7c500f5d7d03a846bf21174b9"}},"sourceBranch":"main","suggestedTargetBranches":["8.x"],"targetPullRequestStates":[{"branch":"9.0","label":"v9.0.0","branchLabelMappingKey":"^v(\\d+).(\\d+).\\d+$","isSourceBranch":false,"url":"https://github.com/elastic/kibana/pull/211172","number":211172,"state":"MERGED","mergeCommit":{"sha":"c6ae8292a1a8d80a29966234e98f341ff489a89d","message":"[9.0] [scout] enable eslint plugin playwright (#210666) (#211172)\n\n# Backport\n\nThis will backport the following commits from `main` to `9.0`:\n- [[scout] enable eslint plugin playwright\n(#210666)](https://github.com/elastic/kibana/pull/210666)\n\n\n\n### Questions ?\nPlease refer to the [Backport tool\ndocumentation](https://github.com/sqren/backport)\n\n\n\nCo-authored-by: Dzmitry Lemechko <dzmitry.lemechko@elastic.co>"}},{"branch":"main","label":"v9.1.0","branchLabelMappingKey":"^v9.1.0$","isSourceBranch":true,"state":"MERGED","url":"https://github.com/elastic/kibana/pull/210666","number":210666,"mergeCommit":{"message":"[scout] enable eslint plugin playwright (#210666)\n\n## Summary\r\n\r\nCloses https://github.com/elastic/kibana/issues/21030\r\n\r\nIt was a quick work to do while we don't have many tests yet. \r\n\r\nFor reviewers: we most likely will review and update the rules to align\r\nbetter with final test design for Scout before GA. I don't think we have\r\nto deep dive into what rules are missing, but just to make sure I didn't\r\nrestrict something important from your perspective.\r\n\r\nRules are described in\r\nhttps://github.com/playwright-community/eslint-plugin-playwright?tab=readme-ov-file#rules\r\n\r\n---------\r\n\r\nCo-authored-by: kibanamachine <42973632+kibanamachine@users.noreply.github.com>","sha":"ddd0fdb4794b71f7c500f5d7d03a846bf21174b9"}},{"branch":"8.x","label":"v8.19.0","branchLabelMappingKey":"^v8.19.0$","isSourceBranch":false,"state":"NOT_CREATED"}]}] BACKPORT-->


Diff:
diff --git a/.eslintrc.js b/.eslintrc.js
index e2b0117e8cf2c..8bbd1086c1360 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -1445,6 +1445,54 @@ module.exports = {
         'mocha/no-skipped-tests': 'off',
       },
     },
+    {
+      files: [
+        'packages/kbn-scout/src/playwright/**/*.ts',
+        'x-pack/solutions/observability/packages/kbn-scout-oblt/src/playwright/**/*.ts',
+        'src/platform/plugins/**/ui_tests/**/*.ts',
+        'x-pack/platform/plugins/**/ui_tests/**/*.ts',
+        'x-pack/solutions/**/plugins/**/ui_tests/**/*.ts',
+      ],
+      excludedFiles: ['packages/kbn-scout/src/playwright/**/*.test.ts'],
+      extends: ['plugin:playwright/recommended'],
+      plugins: ['playwright'],
+      settings: {
+        playwright: {
+          globalAliases: {
+            test: ['test', 'spaceTest'],
+          },
+        },
+      },
+      rules: {
+        'playwright/no-commented-out-tests': 'error',
+        'playwright/no-conditional-expect': 'error',
+        'playwright/no-conditional-in-test': 'warn',
+        'playwright/no-duplicate-hooks': 'error',
+        'playwright/no-focused-test': 'error',
+        'playwright/no-get-by-title': 'error',
+        'playwright/no-nth-methods': 'error',
+        'playwright/no-page-pause': 'error',
+        'playwright/no-restricted-matchers': 'error',
+        'playwright/no-slowed-test': 'error',
+        'playwright/no-standalone-expect': 'error',
+        'playwright/no-unsafe-references': 'error',
+        'playwright/no-wait-for-selector': 'warn',
+        'playwright/max-nested-describe': ['error', { max: 1 }],
+        'playwright/missing-playwright-await': 'error',
+        'playwright/prefer-comparison-matcher': 'error',
+        'playwright/prefer-equality-matcher': 'error',
+        'playwright/prefer-hooks-in-order': 'error',
+        'playwright/prefer-hooks-on-top': 'error',
+        'playwright/prefer-strict-equal': 'error',
+        'playwright/prefer-to-be': 'error',
+        'playwright/prefer-to-contain': 'error',
+        'playwright/prefer-to-have-count': 'error',
+        'playwright/prefer-to-have-length': 'error',
+        'playwright/prefer-web-first-assertions': 'error',
+        'playwright/require-to-throw-message': 'error',
+        'playwright/require-top-level-describe': 'error',
+      },
+    },
     {
       files: ['x-pack/solutions/security/plugins/lists/public/**/!(*.test).{js,mjs,ts,tsx}'],
       plugins: ['react-perf'],
diff --git a/package.json b/package.json
index fe488cf911b10..9b0f5b519a3e8 100644
--- a/package.json
+++ b/package.json
@@ -1760,6 +1760,7 @@
     "eslint-plugin-mocha": "^10.1.0",
     "eslint-plugin-no-unsanitized": "^4.0.2",
     "eslint-plugin-node": "^11.1.0",
+    "eslint-plugin-playwright": "^2.2.0",
     "eslint-plugin-prettier": "^4.2.1",
     "eslint-plugin-react": "^7.32.2",
     "eslint-plugin-react-hooks": "^4.6.0",
diff --git a/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/scout_page/single_thread.ts b/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/scout_page/single_thread.ts
index 12a50ee925815..e76d73f66e9cd 100644
--- a/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/scout_page/single_thread.ts
+++ b/src/platform/packages/shared/kbn-scout/src/playwright/fixtures/test/scout_page/single_thread.ts
@@ -59,6 +59,8 @@ function extendPageWithTestSubject(page: Page): ScoutPage['testSubj'] {
     await page.locator(testSubjSelector).click();
     for (const char of text) {
       await page.keyboard.insertText(char);
+      // it is important to delay characters input to avoid flakiness, default is 25 ms
+
       await page.waitForTimeout(delay);
     }
   };
diff --git a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/error_handling.spec.ts b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/error_handling.spec.ts
index 97c4e18f7f2dc..81dc8ffad925c 100644
--- a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/error_handling.spec.ts
+++ b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/error_handling.spec.ts
@@ -18,15 +18,15 @@ spaceTest.describe('Discover app - errors', { tag: tags.ESS_ONLY }, () => {
     });
   });
 
-  spaceTest.afterAll(async ({ scoutSpace }) => {
-    await scoutSpace.savedObjects.cleanStandardList();
-  });
-
   spaceTest.beforeEach(async ({ browserAuth, pageObjects }) => {
     await browserAuth.loginAsViewer();
     await pageObjects.discover.goto();
   });
 
+  spaceTest.afterAll(async ({ scoutSpace }) => {
+    await scoutSpace.savedObjects.cleanStandardList();
+  });
+
   spaceTest('should render invalid scripted field error', async ({ page }) => {
     await page.testSubj.locator('discoverErrorCalloutTitle').waitFor({ state: 'visible' });
     await expect(
diff --git a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/saved_searches.spec.ts b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/saved_searches.spec.ts
index 24130c6ec5e5d..83368b86e466f 100644
--- a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/saved_searches.spec.ts
+++ b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/saved_searches.spec.ts
@@ -54,15 +54,15 @@ spaceTest.describe(
       await scoutSpace.uiSettings.setDefaultTime({ from: START_TIME, to: END_TIME });
     });
 
+    spaceTest.beforeEach(async ({ browserAuth }) => {
+      await browserAuth.loginAsPrivilegedUser();
+    });
+
     spaceTest.afterAll(async ({ scoutSpace }) => {
       await scoutSpace.uiSettings.unset('defaultIndex', 'timepicker:timeDefaults');
       await scoutSpace.savedObjects.cleanStandardList();
     });
 
-    spaceTest.beforeEach(async ({ browserAuth }) => {
-      await browserAuth.loginAsPrivilegedUser();
-    });
-
     spaceTest('should customize time range on dashboards', async ({ pageObjects, page }) => {
       await pageObjects.dashboard.goto();
       await pageObjects.dashboard.openNewDashboard();
diff --git a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts
index a6d060fb502a8..c54a486f5e022 100644
--- a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts
+++ b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts
@@ -22,6 +22,11 @@ spaceTest.describe(
       });
     });
 
+    spaceTest.beforeEach(async ({ browserAuth, pageObjects }) => {
+      await browserAuth.loginAsViewer();
+      await pageObjects.discover.goto();
+    });
+
     spaceTest.afterAll(async ({ scoutSpace }) => {
       await scoutSpace.uiSettings.unset(
         'doc_table:legacy',
@@ -31,11 +36,6 @@ spaceTest.describe(
       await scoutSpace.savedObjects.cleanStandardList();
     });
 
-    spaceTest.beforeEach(async ({ browserAuth, pageObjects }) => {
-      await browserAuth.loginAsViewer();
-      await pageObjects.discover.goto();
-    });
-
     spaceTest('dont show up if outside of range', async ({ page, pageObjects }) => {
       await pageObjects.datePicker.setAbsoluteRange(testData.LOGSTASH_OUT_OF_RANGE_DATES);
       await page.testSubj.fill('queryInput', 'extension.raw : ');
diff --git a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_non_time_based.spec.ts b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_non_time_based.spec.ts
index 6bed83254f003..b4b6e76dbe8ac 100644
--- a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_non_time_based.spec.ts
+++ b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_non_time_based.spec.ts
@@ -19,16 +19,16 @@ spaceTest.describe(
       await scoutSpace.uiSettings.setDefaultIndex(testData.DATA_VIEW_NAME.NO_TIME_FIELD);
     });
 
-    spaceTest.afterAll(async ({ scoutSpace }) => {
-      await scoutSpace.uiSettings.unset('defaultIndex');
-      await scoutSpace.savedObjects.cleanStandardList();
-    });
-
     spaceTest.beforeEach(async ({ browserAuth, pageObjects }) => {
       await browserAuth.loginAsViewer();
       await pageObjects.discover.goto();
     });
 
+    spaceTest.afterAll(async ({ scoutSpace }) => {
+      await scoutSpace.uiSettings.unset('defaultIndex');
+      await scoutSpace.savedObjects.cleanStandardList();
+    });
+
     spaceTest(
       'shows all auto-suggest options for a filter in discover context app',
       async ({ page }) => {
diff --git a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_use_time_range_disabled.spec.ts b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_use_time_range_disabled.spec.ts
index 57246dff19517..106a9b625dbee 100644
--- a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_use_time_range_disabled.spec.ts
+++ b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions_use_time_range_disabled.spec.ts
@@ -23,6 +23,11 @@ spaceTest.describe(
       await scoutSpace.uiSettings.set({ 'autocomplete:useTimeRange': false });
     });
 
+    spaceTest.beforeEach(async ({ browserAuth, pageObjects }) => {
+      await browserAuth.loginAsViewer();
+      await pageObjects.discover.goto();
+    });
+
     spaceTest.afterAll(async ({ scoutSpace }) => {
       await scoutSpace.uiSettings.unset(
         'doc_table:legacy',
@@ -33,11 +38,6 @@ spaceTest.describe(
       await scoutSpace.savedObjects.cleanStandardList();
     });
 
-    spaceTest.beforeEach(async ({ browserAuth, pageObjects }) => {
-      await browserAuth.loginAsViewer();
-      await pageObjects.discover.goto();
-    });
-
     spaceTest('show up if outside of range', async ({ page, pageObjects }) => {
       await pageObjects.datePicker.setAbsoluteRange(testData.LOGSTASH_OUT_OF_RANGE_DATES);
       await page.testSubj.fill('queryInput', 'extension.raw : ');
diff --git a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/saved_search_embeddable.spec.ts b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/saved_search_embeddable.spec.ts
index 6c37611dbc202..e6a77e970809a 100644
--- a/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/saved_search_embeddable.spec.ts
+++ b/x-pack/platform/plugins/private/discover_enhanced/ui_tests/tests/saved_search_embeddable.spec.ts
@@ -40,6 +40,7 @@ const createSavedSearch = async (
 test.describe('Discover app - saved search embeddable', { tag: tags.DEPLOYMENT_AGNOSTIC }, () => {
   const SAVED_SEARCH_TITLE = 'TempSearch';
   const SAVED_SEARCH_ID = '90943e30-9a47-11e8-b64d-95841ca0b247';
+
   test.beforeAll(async ({ esArchiver, kbnClient, uiSettings }) => {
     await esArchiver.loadIfNeeded(testData.ES_ARCHIVES.LOGSTASH);
     await kbnClient.importExport.load(testData.KBN_ARCHIVES.DASHBOARD_DRILLDOWNS);
@@ -49,16 +50,16 @@ test.describe('Discover app - saved search embeddable', { tag: tags.DEPLOYMENT_A
     });
   });
 
-  test.afterAll(async ({ kbnClient, uiSettings }) => {
-    await uiSettings.unset('defaultIndex', 'timepicker:timeDefaults');
-    await kbnClient.savedObjects.cleanStandardList();
-  });
-
   test.beforeEach(async ({ browserAuth, pageObjects }) => {
     await browserAuth.loginAsPrivilegedUser();
     await pageObjects.dashboard.goto();
   });
 
+  test.afterAll(async ({ kbnClient, uiSettings }) => {
+    await uiSettings.unset('defaultIndex', 'timepicker:timeDefaults');
+    await kbnClient.savedObjects.cleanStandardList();
+  });
+
   test('should allow removing the dashboard panel after the underlying saved search has been deleted', async ({
     kbnClient,
     page,
diff --git a/x-pack/platform/plugins/shared/maps/ui_tests/tests/full_screen_mode.spec.ts b/x-pack/platform/plugins/shared/maps/ui_tests/tests/full_screen_mode.spec.ts
index 920b7eff4f138..07a179ad5116a 100644
--- a/x-pack/platform/plugins/shared/maps/ui_tests/tests/full_screen_mode.spec.ts
+++ b/x-pack/platform/plugins/shared/maps/ui_tests/tests/full_screen_mode.spec.ts
@@ -33,16 +33,16 @@ test.describe(
       const baseMapBtn = page.getByRole('button', { name: 'Basemap' });
 
       await expect(fullScreenBtn).toBeVisible();
-      await expect(exitFullScreenBtn).not.toBeVisible();
+      await expect(exitFullScreenBtn).toBeHidden();
       await expect(visibleChrome).toBeVisible();
-      await expect(hiddenChrome).not.toBeVisible();
+      await expect(hiddenChrome).toBeHidden();
       await expect(baseMapBtn).toBeVisible();
 
       await fullScreenBtn.click();
 
-      await expect(fullScreenBtn).not.toBeVisible();
+      await expect(fullScreenBtn).toBeHidden();
       await expect(exitFullScreenBtn).toBeVisible();
-      await expect(visibleChrome).not.toBeVisible();
+      await expect(visibleChrome).toBeHidden();
       await expect(hiddenChrome).toBeVisible();
       await expect(baseMapBtn).toBeVisible();
 
diff --git a/x-pack/solutions/observability/packages/kbn-scout-oblt/src/playwright/page_objects/custom_logs.ts b/x-pack/solutions/observability/packages/kbn-scout-oblt/src/playwright/page_objects/custom_logs.ts
index 6001bf086fed3..825d8475ce64a 100644
--- a/x-pack/solutions/observability/packages/kbn-scout-oblt/src/playwright/page_objects/custom_logs.ts
+++ b/x-pack/solutions/observability/packages/kbn-scout-oblt/src/playwright/page_objects/custom_logs.ts
@@ -104,8 +104,7 @@ export class CustomLogsPage {
   async clickAdvancedSettingsButton() {
     return this.page.testSubj
       .locator('obltOnboardingCustomLogsAdvancedSettings')
-      .getByRole('button')
-      .first()
+      .locator('button.euiAccordion__button')
       .click();
   }
 
diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/add_custom_integration.spec.ts b/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/add_custom_integration.spec.ts
index ad22d72cbe34b..e04abdec5e5cf 100644
--- a/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/add_custom_integration.spec.ts
+++ b/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/add_custom_integration.spec.ts
@@ -56,7 +56,7 @@ test.describe(
       await customLogs.selectPlatform('windows');
       await expect(customLogs.autoDownloadConfigurationToggle).toBeDisabled();
       await expect(customLogs.windowsInstallElasticAgentDocLink).toBeVisible();
-      await expect(customLogs.installCodeSnippet).not.toBeVisible();
+      await expect(customLogs.installCodeSnippet).toBeHidden();
       await expect(
         customLogs.configureElasticAgentStep.getByText('Step 2 is disabled')
       ).toBeVisible();
diff --git a/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/configuration.spec.ts b/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/configuration.spec.ts
index c3cd104b461a8..d3bbff71d7eca 100644
--- a/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/configuration.spec.ts
+++ b/x-pack/solutions/observability/plugins/observability_onboarding/ui_tests/parallel_tests/custom_logs/configuration.spec.ts
@@ -47,7 +47,7 @@ test.describe(
 
     test(`should allow updating Advanced Settings`, async ({ pageObjects: { customLogs } }) => {
       await customLogs.getLogFilePathInputField(0).fill(logsFilePath);
-      await expect(customLogs.advancedSettingsContent).not.toBeVisible();
+      await expect(customLogs.advancedSettingsContent).toBeHidden();
       await customLogs.clickAdvancedSettingsButton();
       await expect(
         customLogs.advancedSettingsContent,
@@ -63,13 +63,13 @@ test.describe(
 
       await customLogs.namespaceInput.fill('default');
       await expect(customLogs.customConfigInput).toHaveValue('');
-      await expect(customLogs.continueButton).not.toBeDisabled();
+      await expect(customLogs.continueButton).toBeEnabled();
 
       await customLogs.clickAdvancedSettingsButton();
       await expect(
         customLogs.advancedSettingsContent,
         'Advanced Settings should be closed'
-      ).not.toBeVisible();
+      ).toBeHidden();
     });
 
     test('should validate Integration Name field', async ({
diff --git a/yarn.lock b/yarn.lock
index cb6f92fd00b23..625fc46f71c6b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -18727,6 +18727,13 @@ eslint-plugin-node@^11.1.0:
     resolve "^1.10.1"
     semver "^6.1.0"
 
+eslint-plugin-playwright@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/eslint-plugin-playwright/-/eslint-plugin-playwright-2.2.0.tgz#d7eda21e670274fc0c006e11ba5cc2c8417b2a6e"
+  integrity sha512-qSQpAw7RcSzE3zPp8FMGkthaCWovHZ/BsXtpmnGax9vQLIovlh1bsZHEa2+j2lv9DWhnyeLM/qZmp7ffQZfQvg==
+  dependencies:
+    globals "^13.23.0"
+
 eslint-plugin-prettier@^4.2.1:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b"
@@ -20413,10 +20420,10 @@ globals@^11.1.0:
   resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
   integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
 
-globals@^13.19.0, globals@^13.20.0:
-  version "13.20.0"
-  resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82"
-  integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==
+globals@^13.19.0, globals@^13.20.0, globals@^13.23.0:
+  version "13.24.0"
+  resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171"
+  integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==
   dependencies:
     type-fest "^0.20.2"
 


Reviews:
user: login: pheyos
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-18T14:13:03Z
user: login: dmlemeshko
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-18T14:27:30Z
user: login: pheyos
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-18T14:29:50Z
user: login: pheyos
body: LGTM
state: APPROVED
author_association: MEMBER
submitted_at: 2025-03-18T16:10:32Z

Review comments:
diff_hunk: @@ -22,20 +22,16 @@ spaceTest.describe(
       });
     });
 
-    spaceTest.afterAll(async ({ scoutSpace }) => {
-      await scoutSpace.uiSettings.unset(
-        'doc_table:legacy',
path: x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts
user: login: pheyos
body: I see that this `doc_table` setting has not been taken over (doesn't exist on `main`). Was that an intentional change?
created_at: 2025-03-18T14:12:55Z
author_association: MEMBER
diff_hunk: @@ -22,20 +22,16 @@ spaceTest.describe(
       });
     });
 
-    spaceTest.afterAll(async ({ scoutSpace }) => {
-      await scoutSpace.uiSettings.unset(
-        'doc_table:legacy',
path: x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts
user: login: dmlemeshko
body: good catch, I was trying to avoid a change here.
created_at: 2025-03-18T14:27:30Z
author_association: CONTRIBUTOR
diff_hunk: @@ -6,7 +6,7 @@
  */
 
 import { expect, tags } from '@kbn/scout';
-import { spaceTest, testData, assertionMessages } from '../fixtures';
+import { assertionMessages, spaceTest, testData } from '../fixtures';
path: x-pack/platform/plugins/private/discover_enhanced/ui_tests/parallel_tests/value_suggestions.spec.ts
user: login: pheyos
body: Also wondering about the changed import order. We don't have that in main, so it might cause conflicts in future backports?
created_at: 2025-03-18T14:29:47Z
author_association: MEMBER

PR comments:
user: login: elasticmachine
created_at: 2025-03-18T20:31:27Z
body: ## :yellow_heart: Build succeeded, but was flaky
* [Buildkite Build](https://buildkite.com/elastic/kibana-pull-request/builds/285024)
* Commit: b706792f62f0d7257599fe70427b494d6b8de55f

### Failed CI Steps
* [Post-Build](https://buildkite.com/elastic/kibana-pull-request/builds/285024#0195a9ac-ec8e-4300-acca-4f9a1c640089)
* [Post-Build](https://buildkite.com/elastic/kibana-pull-request/builds/285024#0195aa30-d83b-456a-a7b9-4681f5ea7a09)

### History
* :yellow_heart: [Build #284851](https://buildkite.com/elastic/kibana-pull-request/builds/284851) was flaky b1723b3f42fde8f36e31964b19c47c6f40063546
* :broken_heart: [Build #284384](https://buildkite.com/elastic/kibana-pull-request/builds/284384) failed 731094c814c81e67ea9b4b7d8cd41f6940e65b87

<!--buildkite-pr-comment-kibana-pull-request
{"builds":[{"buildStatus":{"state":"passed","success":true,"hasRetries":true,"hasNonPreemptionRetries":true},"url":"https://buildkite.com/elastic/kibana-pull-request/builds/285024","number":285024,"commit":"b706792f62f0d7257599fe70427b494d6b8de55f"},{"buildStatus":{"state":"passed","success":true,"hasRetries":true,"hasNonPreemptionRetries":true},"url":"https://buildkite.com/elastic/kibana-pull-request/builds/284851","number":284851,"commit":"b1723b3f42fde8f36e31964b19c47c6f40063546"},{"buildStatus":{"state":"failed","success":false,"hasRetries":false,"hasNonPreemptionRetries":false},"url":"https://buildkite.com/elastic/kibana-pull-request/builds/284384","number":284384,"commit":"731094c814c81e67ea9b4b7d8cd41f6940e65b87"}],"number":285024}
buildkite-pr-comment-->
author_association: CONTRIBUTOR