Skip to content

Conversation

@meladRaouf
Copy link
Collaborator

@meladRaouf meladRaouf commented Jan 13, 2026

JIRA ticket
Will be released in: 2026.1.0

Notable changes

  1. Removed AnyPrimitiveSerializer as it did not behave as expected.
  2. Replaced intent event extras Any with String.
  3. Adopted Kotlin serialization in the infra/config-store module.

Testing guidance

  • Log in to SID, modify configuration settings—especially the custom configurations in Vulcane—and verify that SID behaves as expected.

Additional work checklist

  • Effect on other features and security has been considered
  • Design document marked as "In development" (if applicable)
  • External (Gitbook) and internal (Confluence) Documentation is up to date (or ticket created)
  • Test cases in Testiny are up to date (or ticket created)
  • Other teams notified about the changes (if applicable)

@meladRaouf meladRaouf requested a review from Copilot January 13, 2026 09:31
@cla-bot cla-bot bot added the ... label Jan 13, 2026
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

fun addInvalidIntentEvent(
action: String,
extras: Map<String, Any>,
extras: Map<String, String>,
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I am still verifying this part, as I believe using String alone should be sufficient for the extras.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Tested and it is working as expected. below an example event

{
          "id": "ebc63e69-3360-4071-a1d5-da10da55f719",
          "type": "InvalidIntent",
          "version": 2,
          "payload": {
            "startTime": {
              "unixMs": 1768329314909,
              "isUnixMsTrustworthy": true,
              "elapsedSinceBoot": 85249056
            },
            "action": "com.simprints.id.REGISTER",
            "extras": {
              "test": "newExtra",
              "projectId": "NDAdcsfcentNWOGsIkqC",
              "userId": "1",
              "oduleId": "1",
              "callerPackageName": "com.simprints.intentlauncher"
            }
          },
          "tokenizedFields": []
        }

Copy link
Contributor

Choose a reason for hiding this comment

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

I think that this might only be used in the dashboard reporting and values are only looked at in case of deep investigation, so just strings would be fine.

Copy link
Contributor

Choose a reason for hiding this comment

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

What happens if other types are passed?

Copy link
Contributor

Choose a reason for hiding this comment

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

Ah, you are explicitly converting it. Then I guess it's fine.

*/
data class ExperimentalProjectConfiguration(
private val customConfig: Map<String, Any>?,
private val customConfig: Map<String, JsonElement>?,
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

As per the design, JsonElement is sufficient here, since Vulcan only allows JSON content for custom configuration.

projectConfiguration.copy(custom = null),
)

assertThat(
Copy link
Collaborator Author

Choose a reason for hiding this comment

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

This is an invalid test case, as projectConfiguration.custom is now a Map<String, JsonElement>.

Copy link
Contributor

Choose a reason for hiding this comment

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

But the test is about handling a broken json string value in the protobuf store and has nothing to do with the type of experimental/custom config property.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The old test case was verifying whether values in custom: Map<String, Any> could be converted to a string to be stored as protopuf. Now that custom is Map<String, JsonElement>, this verification will always succeed. Every value can be converted

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@meladRaouf meladRaouf requested a review from Copilot January 13, 2026 10:17
@meladRaouf meladRaouf marked this pull request as draft January 13, 2026 10:17
@meladRaouf meladRaouf force-pushed the ks-config-store branch 4 times, most recently from 28ad523 to 9e98591 Compare January 13, 2026 12:02
@meladRaouf meladRaouf requested review from Copilot and removed request for Copilot January 13, 2026 12:27
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 35 out of 35 changed files in this pull request and generated 4 comments.

@meladRaouf meladRaouf force-pushed the ks-config-store branch 2 times, most recently from fb0ae29 to be2bf86 Compare January 13, 2026 12:45
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 35 out of 35 changed files in this pull request and generated 6 comments.

Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@meladRaouf meladRaouf marked this pull request as ready for review January 13, 2026 18:22
@meladRaouf meladRaouf force-pushed the ks-config-store branch 2 times, most recently from 22d129c to 4a74bca Compare January 13, 2026 20:06
@sonarqubecloud
Copy link

fun addInvalidIntentEvent(
action: String,
extras: Map<String, Any>,
extras: Map<String, String>,
Copy link
Contributor

Choose a reason for hiding this comment

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

I think that this might only be used in the dashboard reporting and values are only looked at in case of deep investigation, so just strings would be fine.


@Keep
@Serializable
@ExcludedFromGeneratedTestCoverageReports("Data class")
Copy link
Contributor

Choose a reason for hiding this comment

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

Is there any chance that we could get rid of this migration all together?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Once all users migrate to SID 2022.4.0

projectConfiguration.copy(custom = null),
)

assertThat(
Copy link
Contributor

Choose a reason for hiding this comment

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

But the test is about handling a broken json string value in the protobuf store and has nothing to do with the type of experimental/custom config property.

)
private val JSON_FACE_CONFIGURATION_WITH_UNEXPECTED_FIELD =
JsonHelper.fromJson<Map<String, String>>(
JsonHelper.fromJson<Map<String, JsonElement>>(
Copy link
Contributor

Choose a reason for hiding this comment

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

Should we change the type here?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Yes we had to change the type. Jackson is lenient by default. It silently coerces: numbers → strings and booleans → strings while kotlinx.serialization is strict by design. No implicit coercion. if you check the json string you will see that it contains numbers and booleans

@meladRaouf meladRaouf merged commit 0bdabfa into main Jan 14, 2026
12 checks passed
@meladRaouf meladRaouf deleted the ks-config-store branch January 14, 2026 20:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants