From a2cf3567e90b7fc3b4c597c2aad5f77abb7c0650 Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Tue, 16 Sep 2025 23:12:12 -0400 Subject: [PATCH 1/7] use text field for phrase prefix queries --- .../current_mappings.json | 3 ++ .../server/saved_object_types/cases/cases.ts | 6 +++- .../cases/model_versions/index.ts | 1 + .../cases/model_versions/model_version_5.ts | 36 +++++++++++++++++++ .../model_versions/model_versions.test.ts | 27 +++++++++++++- .../saved_object_types/cases/schemas/index.ts | 1 + .../saved_object_types/cases/schemas/v5.ts | 24 +++++++++++++ .../cases/versioning.test.ts | 16 +++++++++ 8 files changed, 112 insertions(+), 2 deletions(-) create mode 100644 x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_version_5.ts create mode 100644 x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts diff --git a/packages/kbn-check-saved-objects-cli/current_mappings.json b/packages/kbn-check-saved-objects-cli/current_mappings.json index cb22be27c9994..b94e171be3fe7 100644 --- a/packages/kbn-check-saved-objects-cli/current_mappings.json +++ b/packages/kbn-check-saved-objects-cli/current_mappings.json @@ -624,6 +624,9 @@ "fields": { "keyword": { "type": "keyword" + }, + "text": { + "type": "text" } }, "type": "unsigned_long" diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts index 269b142c32c4b..40b152b4a5897 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts @@ -17,7 +17,7 @@ import { CASE_SAVED_OBJECT } from '../../../common/constants'; import type { CasePersistedAttributes } from '../../common/types/case'; import { handleExport } from '../import_export/export'; import { caseMigrations } from '../migrations'; -import { modelVersion1, modelVersion2, modelVersion3, modelVersion4 } from './model_versions'; +import { modelVersion1, modelVersion2, modelVersion3, modelVersion4, modelVersion5 } from './model_versions'; import { handleImport } from '../import_export/import'; export const createCaseSavedObjectType = ( @@ -245,6 +245,9 @@ export const createCaseSavedObjectType = ( keyword: { type: 'keyword', }, + text: { + type: 'text', + }, }, }, }, @@ -255,6 +258,7 @@ export const createCaseSavedObjectType = ( 2: modelVersion2, 3: modelVersion3, 4: modelVersion4, + 5: modelVersion5, }, management: { importableAndExportable: true, diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/index.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/index.ts index 1c19fb1d63b4d..623f7ff06ae77 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/index.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/index.ts @@ -9,3 +9,4 @@ export { modelVersion1 } from './model_version_1'; export { modelVersion2 } from './model_version_2'; export { modelVersion3 } from './model_version_3'; export { modelVersion4 } from './model_version_4'; +export { modelVersion5 } from './model_version_5'; diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_version_5.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_version_5.ts new file mode 100644 index 0000000000000..b0f5908a9fc45 --- /dev/null +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_version_5.ts @@ -0,0 +1,36 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import type { SavedObjectsModelVersion } from '@kbn/core-saved-objects-server'; +import { casesSchemaV5 } from '../schemas'; + +/** + * Adds the incremental_id.keyword field to the cases SO. + */ +export const modelVersion5: SavedObjectsModelVersion = { + changes: [ + { + type: 'mappings_addition', + addedMappings: { + incremental_id: { + type: 'unsigned_long', + fields: { + keyword: { + type: 'keyword', + }, + text: { + type: 'text', + }, + }, + }, + }, + }, + ], + schemas: { + forwardCompatibility: casesSchemaV5.extends({}, { unknowns: 'ignore' }), + }, +}; diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_versions.test.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_versions.test.ts index a260ebb1c5129..f5ab8083fe60c 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_versions.test.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/model_versions/model_versions.test.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { modelVersion1, modelVersion2, modelVersion3, modelVersion4 } from '.'; +import { modelVersion1, modelVersion2, modelVersion3, modelVersion4, modelVersion5 } from '.'; describe('Model versions', () => { describe('version 1', () => { @@ -120,4 +120,29 @@ describe('Model versions', () => { `); }); }); + + describe('version 5', () => { + it('returns version 5 changes correctly', () => { + expect(modelVersion5.changes).toMatchInlineSnapshot(` + Array [ + Object { + "addedMappings": Object { + "incremental_id": Object { + "fields": Object { + "keyword": Object { + "type": "keyword", + }, + "text": Object { + "type": "text", + }, + }, + "type": "unsigned_long", + }, + }, + "type": "mappings_addition", + }, + ] + `); + }); + }); }); diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/index.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/index.ts index 142d1f91e4208..b5d7f33412237 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/index.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/index.ts @@ -11,3 +11,4 @@ export { casesSchema as casesSchemaV1 } from './v1'; export { casesSchema as casesSchemaV2 } from './v2'; export { casesSchema as casesSchemaV3 } from './v3'; export { casesSchema as casesSchemaV4 } from './v4'; +export { casesSchema as casesSchemaV5 } from './v5'; diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts new file mode 100644 index 0000000000000..1c951783cb3f1 --- /dev/null +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts @@ -0,0 +1,24 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import { schema } from '@kbn/config-schema'; + +import { casesSchema as casesSchemaV4 } from './v4'; + +export const casesSchema = casesSchemaV4.extends({ + incremental_id: schema.maybe( + schema.nullable( + schema.oneOf([ + schema.number(), + schema.object({ + keyword: schema.maybe(schema.string()), + text: schema.maybe(schema.string()), + }), + ]) + ) + ), +}); diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts index b1c9ac8a4407f..cffa016cefc1b 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts @@ -73,4 +73,20 @@ describe('caseSavedObjectType model version transformations', () => { }); }); }); + + describe('Model version 4 to 5', () => { + const version4Fields = ['incremental_id.text']; + + it('by default does not add the new fields to the object', () => { + const migrated = migrator.migrate({ + document: createCaseSavedObjectResponse(), + fromVersion: 4, + toVersion: 5, + }); + + version4Fields.forEach((field) => { + expect(migrated.attributes).not.toHaveProperty(field); + }); + }); + }); }); From d68e1788cf2a4f5a1c65b0b1d668dbb816ff68bd Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Wed, 17 Sep 2025 20:45:14 -0400 Subject: [PATCH 2/7] fix type error --- .../shared/cases/server/saved_object_types/cases/cases.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts index 40b152b4a5897..37ed35c7a21f4 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/cases.ts @@ -17,7 +17,13 @@ import { CASE_SAVED_OBJECT } from '../../../common/constants'; import type { CasePersistedAttributes } from '../../common/types/case'; import { handleExport } from '../import_export/export'; import { caseMigrations } from '../migrations'; -import { modelVersion1, modelVersion2, modelVersion3, modelVersion4, modelVersion5 } from './model_versions'; +import { + modelVersion1, + modelVersion2, + modelVersion3, + modelVersion4, + modelVersion5, +} from './model_versions'; import { handleImport } from '../import_export/import'; export const createCaseSavedObjectType = ( From 14b006eec145eb2ef4b118256e6ad3e1c2528e00 Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Wed, 17 Sep 2025 20:52:13 -0400 Subject: [PATCH 3/7] fix tests --- .../saved_objects/check_registered_types.test.ts | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index e07b8d8c37b24..7d71748cccb15 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -79,7 +79,7 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-element": "288fd8d216eb49cbeb5e8f7491f207ef074b80dd", "canvas-workpad": "5cd605383a100a27941cca6cbf2d954aa96a16e2", "canvas-workpad-template": "f9a6ffab76ddfcd8fa3823002aa576c8f1d0e686", - "cases": "2377506cc9ce6506bfc1c1b04cb8aed87d3fecab", + "cases": "9f91e6f385bbc09dc16c63309363822700a1ae53", "cases-comments": "9e336aceb6a330452d1cbf0ba1b8fd542c9e3856", "cases-configure": "66d4c64d83b464f5166005b8ffa03b721fcaaf8b", "cases-connector-mappings": "877bb4d52e9821e330622bd75fba799490ec6952", @@ -405,8 +405,9 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-workpad-template|warning: The SO type owner should ensure these transform functions DO NOT mutate after they are defined.", "================================================================================================================================", "cases|global: 58923536ede82aed6c22799b52c4f51f4bf66aba", - "cases|mappings: 04e7b5c53626eb3e5e08837830697951084d9d7d", + "cases|mappings: 2ee9c5f866298b30dbdcfd22d952ebbecb6582fb", "cases|schemas: da39a3ee5e6b4b0d3255bfef95601890afd80709", + "cases|10.5.0: 77180f451abcda93081c2aef41e1ceaa284a0d5d", "cases|10.4.0: a6b78b2317fa12cf0ec1d7ac21382e6528be409b", "cases|10.3.0: 6bf633e6147007b80adfe8da94b3e57d6004a803", "cases|10.2.0: 9b3de0b9947e9d6bfb5d63ea9d5e9df9afca2601", @@ -1244,7 +1245,7 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-element": "10.0.0", "canvas-workpad": "10.0.0", "canvas-workpad-template": "10.0.0", - "cases": "10.4.0", + "cases": "10.5.0", "cases-comments": "10.0.0", "cases-configure": "10.0.0", "cases-connector-mappings": "10.0.0", @@ -1390,7 +1391,7 @@ describe('checking migration metadata changes on all registered SO types', () => "canvas-element": "8.9.0", "canvas-workpad": "8.9.0", "canvas-workpad-template": "8.9.0", - "cases": "10.4.0", + "cases": "10.5.0", "cases-comments": "8.9.0", "cases-configure": "7.15.0", "cases-connector-mappings": "7.14.0", From 2c5ab95fab8479c9138708792b5f1b6ac333733e Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Fri, 19 Sep 2025 10:13:48 -0400 Subject: [PATCH 4/7] remove unnecessary config schema fields --- .../saved_object_types/cases/schemas/latest.ts | 2 +- .../server/saved_object_types/cases/schemas/v4.ts | 11 +---------- .../server/saved_object_types/cases/schemas/v5.ts | 12 +----------- 3 files changed, 3 insertions(+), 22 deletions(-) diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/latest.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/latest.ts index 165b48adacae4..b56fab649ade5 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/latest.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/latest.ts @@ -5,4 +5,4 @@ * 2.0. */ -export * from './v4'; +export * from './v5'; diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts index a70ffad4f3427..75fa1bfcd625b 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts @@ -14,14 +14,5 @@ export const casesSchema = casesSchemaV3.extends({ time_to_acknowledge: schema.maybe(schema.nullable(schema.number())), time_to_investigate: schema.maybe(schema.nullable(schema.number())), time_to_resolve: schema.maybe(schema.nullable(schema.number())), - incremental_id: schema.maybe( - schema.nullable( - schema.oneOf([ - schema.number(), - schema.object({ - keyword: schema.maybe(schema.string()), - }), - ]) - ) - ), + incremental_id: schema.maybe(schema.nullable(schema.number())), // Added again to account for the .keyword mapping }); diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts index 1c951783cb3f1..ce3c8500879e7 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts @@ -10,15 +10,5 @@ import { schema } from '@kbn/config-schema'; import { casesSchema as casesSchemaV4 } from './v4'; export const casesSchema = casesSchemaV4.extends({ - incremental_id: schema.maybe( - schema.nullable( - schema.oneOf([ - schema.number(), - schema.object({ - keyword: schema.maybe(schema.string()), - text: schema.maybe(schema.string()), - }), - ]) - ) - ), + incremental_id: schema.maybe(schema.nullable(schema.number())), // Added to account for the .text mapping }); From 9fc6abb865064da1ebe1d01a5253962e3be90337 Mon Sep 17 00:00:00 2001 From: kibanamachine <42973632+kibanamachine@users.noreply.github.com> Date: Fri, 19 Sep 2025 15:07:18 +0000 Subject: [PATCH 5/7] [CI] Auto-commit changed files from 'node scripts/jest_integration -u src/core/server/integration_tests/ci_checks' --- .../ci_checks/saved_objects/check_registered_types.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index b514c5da62675..a144796d35b7d 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -408,8 +408,8 @@ describe('checking migration metadata changes on all registered SO types', () => "cases|global: 58923536ede82aed6c22799b52c4f51f4bf66aba", "cases|mappings: 2ee9c5f866298b30dbdcfd22d952ebbecb6582fb", "cases|schemas: da39a3ee5e6b4b0d3255bfef95601890afd80709", - "cases|10.5.0: 77180f451abcda93081c2aef41e1ceaa284a0d5d", - "cases|10.4.0: a6b78b2317fa12cf0ec1d7ac21382e6528be409b", + "cases|10.5.0: 3d1ed50ab71d41702eebcd6ad894bfc556bd4213", + "cases|10.4.0: b228632dfb5a8cae50f82c4b0fe78305fa6d1fdd", "cases|10.3.0: 6bf633e6147007b80adfe8da94b3e57d6004a803", "cases|10.2.0: 9b3de0b9947e9d6bfb5d63ea9d5e9df9afca2601", "cases|10.1.0: 932fb3a37b3346e4c6bb6ad78dc3c0fd323b858f", From 55912142eabce4def2b94383aa0cd71b98d41c10 Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Fri, 19 Sep 2025 11:25:46 -0400 Subject: [PATCH 6/7] additional pr feedback --- .../server/saved_object_types/cases/schemas/v4.ts | 2 +- .../server/saved_object_types/cases/schemas/v5.ts | 10 ++++------ .../server/saved_object_types/cases/versioning.test.ts | 4 ++-- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts index 75fa1bfcd625b..0bdb6f7edfffe 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v4.ts @@ -14,5 +14,5 @@ export const casesSchema = casesSchemaV3.extends({ time_to_acknowledge: schema.maybe(schema.nullable(schema.number())), time_to_investigate: schema.maybe(schema.nullable(schema.number())), time_to_resolve: schema.maybe(schema.nullable(schema.number())), - incremental_id: schema.maybe(schema.nullable(schema.number())), // Added again to account for the .keyword mapping + // Also updated mappings for the incremental_id field to multi-field but no declaration necessary }); diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts index ce3c8500879e7..3f82d99cff68e 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/schemas/v5.ts @@ -4,11 +4,9 @@ * 2.0; you may not use this file except in compliance with the Elastic License * 2.0. */ - -import { schema } from '@kbn/config-schema'; - import { casesSchema as casesSchemaV4 } from './v4'; -export const casesSchema = casesSchemaV4.extends({ - incremental_id: schema.maybe(schema.nullable(schema.number())), // Added to account for the .text mapping -}); +export const casesSchema = // v5 + casesSchemaV4.extends({ + /* Same fields, just added new multi-type `.text` to increment_id */ + }); diff --git a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts index cffa016cefc1b..86a837ba43545 100644 --- a/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts +++ b/x-pack/platform/plugins/shared/cases/server/saved_object_types/cases/versioning.test.ts @@ -59,7 +59,7 @@ describe('caseSavedObjectType model version transformations', () => { }); describe('Model version 3 to 4', () => { - const version4Fields = ['incremental_id.keyword']; + const version4Fields = ['incremental_id']; it('by default does not add the new fields to the object', () => { const migrated = migrator.migrate({ @@ -75,7 +75,7 @@ describe('caseSavedObjectType model version transformations', () => { }); describe('Model version 4 to 5', () => { - const version4Fields = ['incremental_id.text']; + const version4Fields = ['incremental_id']; it('by default does not add the new fields to the object', () => { const migrated = migrator.migrate({ From 0e7fc82c0340747acc92ea3e27098e6fa93510d1 Mon Sep 17 00:00:00 2001 From: Michael Olorunnisola Date: Tue, 23 Sep 2025 09:51:41 -0400 Subject: [PATCH 7/7] update tests --- .../saved_objects/check_registered_types.test.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts index 1391c0bae484a..952a5501d6164 100644 --- a/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts +++ b/src/core/server/integration_tests/ci_checks/saved_objects/check_registered_types.test.ts @@ -408,11 +408,11 @@ describe('checking migration metadata changes on all registered SO types', () => "cases|global: 58923536ede82aed6c22799b52c4f51f4bf66aba", "cases|mappings: 2ee9c5f866298b30dbdcfd22d952ebbecb6582fb", "cases|schemas: da39a3ee5e6b4b0d3255bfef95601890afd80709", - "cases|10.5.0: 3d1ed50ab71d41702eebcd6ad894bfc556bd4213", - "cases|10.4.0: b228632dfb5a8cae50f82c4b0fe78305fa6d1fdd", - "cases|10.3.0: 6bf633e6147007b80adfe8da94b3e57d6004a803", - "cases|10.2.0: 9b3de0b9947e9d6bfb5d63ea9d5e9df9afca2601", - "cases|10.1.0: 932fb3a37b3346e4c6bb6ad78dc3c0fd323b858f", + "cases|10.5.0: 96204bccc728de96e75fd5cc7d82c5990429fbf6", + "cases|10.4.0: 3b1d7eee41677f6b5e78b5d3b6108e6c12ae0222", + "cases|10.3.0: e75b333589e368f47fb160e6dd01200590e3c313", + "cases|10.2.0: bf34bde323a6d193f85d11a9ca87d52263beace6", + "cases|10.1.0: 2084c62dbe41da4fa3560ff80fe37af3bc0cc15c", "cases|8.7.0: 54c152a2584673672445346cf69d72bda587cc52", "cases|8.5.0: a2c0c0dcdbac64d71ddb583dc02e83aa760eb784", "cases|8.3.0: 09aaac909eff1a6a2d944aa6c1dd297dda05b5ce",