gitextract_mbe2tl_w/ ├── .claude/ │ └── skills/ │ └── stove/ │ ├── SKILL.md │ ├── container.md │ ├── custom-systems.md │ ├── go-setup.md │ ├── gradle-config.md │ ├── mcp.md │ ├── other-languages.md │ ├── system-setup.md │ ├── tracing.md │ └── writing-tests.md ├── .editorconfig ├── .gitattributes ├── .github/ │ └── workflows/ │ ├── build-jvm-recipes.yml │ ├── build-process-recipes.yml │ ├── build.yml │ ├── gradle-publish-release.yml │ ├── gradle-publish-snapshot.yml │ ├── publish-to-ghpages.yml │ ├── scorecard.yml │ ├── stove-cli-ci.yml │ └── stove-cli-release.yml ├── .gitignore ├── LICENSE ├── README.md ├── api/ │ └── stove.api ├── build.gradle.kts ├── buildSrc/ │ ├── build.gradle.kts │ ├── settings.gradle.kts │ └── src/ │ └── main/ │ └── kotlin/ │ ├── BuildConstants.kt │ ├── CI.kt │ ├── GenerateDashboardVersionSourceTask.kt │ ├── Helpers.kt │ ├── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── gradle/ │ │ └── StoveTracingConfiguration.kt │ └── stove-publishing.gradle.kts ├── codecov.yml ├── detekt.yml ├── docs/ │ ├── Components/ │ │ ├── 01-couchbase.md │ │ ├── 02-kafka.md │ │ ├── 03-elasticsearch.md │ │ ├── 04-wiremock.md │ │ ├── 05-http.md │ │ ├── 06-postgresql.md │ │ ├── 07-mongodb.md │ │ ├── 08-mssql.md │ │ ├── 09-redis.md │ │ ├── 10-bridge.md │ │ ├── 11-provided-instances.md │ │ ├── 12-grpc.md │ │ ├── 13-reporting.md │ │ ├── 14-grpc-mock.md │ │ ├── 15-tracing.md │ │ ├── 16-mysql.md │ │ ├── 17-cassandra.md │ │ ├── 18-dashboard.md │ │ ├── 19-provided-application.md │ │ ├── 20-multiple-systems.md │ │ ├── 21-mcp.md │ │ ├── 22-container.md │ │ └── index.md │ ├── assets/ │ │ ├── rough-notation.iife.js │ │ └── stove_dashboard.webm │ ├── best-practices.md │ ├── blog/ │ │ ├── dashboard-0.23.0.md │ │ ├── polyglot-0.24.0.md │ │ └── tracing-0.21.0.md │ ├── css/ │ │ └── custom.css │ ├── frameworks/ │ │ ├── index.md │ │ ├── ktor.md │ │ ├── micronaut.md │ │ ├── quarkus.md │ │ └── spring-boot.md │ ├── getting-started.md │ ├── index.md │ ├── js/ │ │ └── rough-notation-mkdocs.js │ ├── other-languages/ │ │ ├── go-container.md │ │ ├── go-process.md │ │ ├── go.md │ │ └── index.md │ ├── release-notes/ │ │ ├── 0.15.0.md │ │ ├── 0.19.0.md │ │ ├── 0.20.0.md │ │ ├── 0.21.0.md │ │ ├── 0.21.2.md │ │ ├── 0.22.2.md │ │ ├── 0.23.0.md │ │ └── 0.24.0.md │ ├── troubleshooting.md │ └── writing-custom-systems.md ├── examples/ │ ├── build.gradle.kts │ ├── ktor-example/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── stove/ │ │ │ │ └── ktor/ │ │ │ │ └── example/ │ │ │ │ ├── Application.kt │ │ │ │ ├── app/ │ │ │ │ │ ├── app.kt │ │ │ │ │ ├── configuration.kt │ │ │ │ │ ├── database.kt │ │ │ │ │ ├── kafka.kt │ │ │ │ │ └── routing.kt │ │ │ │ ├── application/ │ │ │ │ │ ├── ExampleAppConsumer.kt │ │ │ │ │ ├── LockProvider.kt │ │ │ │ │ ├── ProductService.kt │ │ │ │ │ └── UpdateProductRequest.kt │ │ │ │ ├── domain/ │ │ │ │ │ ├── Product.kt │ │ │ │ │ └── ProductRepository.kt │ │ │ │ └── infrastructure/ │ │ │ │ ├── FeatureToggleClient.kt │ │ │ │ └── PricingClient.kt │ │ │ ├── proto/ │ │ │ │ ├── feature_toggle.proto │ │ │ │ └── pricing.proto │ │ │ └── resources/ │ │ │ ├── application.yaml │ │ │ └── logback.xml │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── stove/ │ │ │ └── ktor/ │ │ │ └── example/ │ │ │ └── e2e/ │ │ │ ├── ExampleTest.kt │ │ │ ├── StoveConfig.kt │ │ │ └── TestStub.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── micronaut-example/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── stove/ │ │ │ │ └── micronaut/ │ │ │ │ └── example/ │ │ │ │ ├── Application.kt │ │ │ │ ├── application/ │ │ │ │ │ ├── domain/ │ │ │ │ │ │ └── Product.kt │ │ │ │ │ ├── repository/ │ │ │ │ │ │ └── ProductRepository.kt │ │ │ │ │ └── services/ │ │ │ │ │ ├── ProductService.kt │ │ │ │ │ └── SupplierService.kt │ │ │ │ └── infrastructure/ │ │ │ │ ├── ObjectMapperConfig.kt │ │ │ │ ├── api/ │ │ │ │ │ ├── ProductController.kt │ │ │ │ │ └── model/ │ │ │ │ │ └── request/ │ │ │ │ │ └── CreateProductRequest.kt │ │ │ │ ├── http/ │ │ │ │ │ └── SupplierHttpService.kt │ │ │ │ ├── persistence/ │ │ │ │ │ └── ProductJdbcRepository.kt │ │ │ │ └── postgres/ │ │ │ │ └── PostgresConfiguration.kt │ │ │ └── resources/ │ │ │ ├── application.yml │ │ │ └── logback.xml │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── stove/ │ │ │ └── micronaut/ │ │ │ └── example/ │ │ │ └── e2e/ │ │ │ ├── CreateProductsTableMigration.kt │ │ │ ├── ProductControllerTest.kt │ │ │ └── StoveConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── quarkus-example/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── stove/ │ │ │ │ └── quarkus/ │ │ │ │ └── example/ │ │ │ │ ├── QuarkusMainApp.kt │ │ │ │ ├── StoveStartupSignal.kt │ │ │ │ ├── api/ │ │ │ │ │ └── ProductResource.kt │ │ │ │ ├── application/ │ │ │ │ │ ├── Models.kt │ │ │ │ │ └── ProductCreator.kt │ │ │ │ └── infrastructure/ │ │ │ │ ├── http/ │ │ │ │ │ └── SupplierHttpService.kt │ │ │ │ ├── kafka/ │ │ │ │ │ ├── CustomProducerInterceptor.kt │ │ │ │ │ ├── KafkaClientConfiguration.kt │ │ │ │ │ ├── KafkaSerde.kt │ │ │ │ │ ├── ProductCommandConsumer.kt │ │ │ │ │ └── ProductEventPublisher.kt │ │ │ │ └── postgres/ │ │ │ │ └── ProductRepository.kt │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── db/ │ │ │ └── migration/ │ │ │ └── V1__create_products.sql │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── stove/ │ │ │ └── quarkus/ │ │ │ └── example/ │ │ │ └── e2e/ │ │ │ ├── ExampleTest.kt │ │ │ └── StoveConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-4x-example/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── stove/ │ │ │ │ └── spring/ │ │ │ │ └── example4x/ │ │ │ │ ├── ExampleApp.kt │ │ │ │ ├── application/ │ │ │ │ │ └── handlers/ │ │ │ │ │ └── ProductCreator.kt │ │ │ │ └── infrastructure/ │ │ │ │ ├── api/ │ │ │ │ │ └── ProductController.kt │ │ │ │ └── messaging/ │ │ │ │ └── kafka/ │ │ │ │ ├── KafkaConfiguration.kt │ │ │ │ ├── KafkaProducer.kt │ │ │ │ └── ProductCreateConsumer.kt │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── stove/ │ │ │ └── spring/ │ │ │ └── example4x/ │ │ │ └── e2e/ │ │ │ ├── ExampleTest.kt │ │ │ ├── StoveConfig.kt │ │ │ └── jackson3.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-example/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── stove/ │ │ │ │ └── spring/ │ │ │ │ └── example/ │ │ │ │ ├── ExampleApp.kt │ │ │ │ ├── application/ │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ └── ProductCreator.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── SupplierService.kt │ │ │ │ ├── domain/ │ │ │ │ │ └── ProductTable.kt │ │ │ │ └── infrastructure/ │ │ │ │ ├── Constants.kt │ │ │ │ ├── ObjectMapperConfig.kt │ │ │ │ ├── api/ │ │ │ │ │ └── ProductController.kt │ │ │ │ ├── http/ │ │ │ │ │ ├── SupplierHttpService.kt │ │ │ │ │ ├── WebClientConfiguration.kt │ │ │ │ │ └── WebClientConfigurationProperties.kt │ │ │ │ ├── messaging/ │ │ │ │ │ └── kafka/ │ │ │ │ │ ├── KafkaProducer.kt │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ ├── ConsumerSettings.kt │ │ │ │ │ │ ├── KafkaConsumerConfiguration.kt │ │ │ │ │ │ ├── KafkaProducerConfiguration.kt │ │ │ │ │ │ ├── KafkaProperties.kt │ │ │ │ │ │ ├── MapBasedSettings.kt │ │ │ │ │ │ └── ProducerSettings.kt │ │ │ │ │ ├── consumers/ │ │ │ │ │ │ ├── FailingProductCreateConsumer.kt │ │ │ │ │ │ ├── JobTopicConfig.kt │ │ │ │ │ │ └── ProductCreateConsumers.kt │ │ │ │ │ └── interceptors/ │ │ │ │ │ ├── CustomConsumerInterceptor.kt │ │ │ │ │ └── CustomProducerInterceptor.kt │ │ │ │ └── postgres/ │ │ │ │ └── ExposedConfiguration.kt │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── stove/ │ │ │ └── spring/ │ │ │ └── example/ │ │ │ └── e2e/ │ │ │ ├── CreateProductsTableMigration.kt │ │ │ ├── ExampleTest.kt │ │ │ ├── StoveConfig.kt │ │ │ ├── TestSystemInitializer.kt │ │ │ ├── TracingValidationTest.kt │ │ │ └── hierarchy/ │ │ │ ├── BehaviorSpecHierarchyTest.kt │ │ │ ├── DescribeSpecHierarchyTest.kt │ │ │ ├── FunSpecContextHierarchyTest.kt │ │ │ ├── NestedJunitHierarchyTest.kt │ │ │ └── StringSpecHierarchyTest.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-standalone-example/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── stove/ │ │ │ │ └── spring/ │ │ │ │ └── standalone/ │ │ │ │ └── example/ │ │ │ │ ├── ExampleApp.kt │ │ │ │ ├── application/ │ │ │ │ │ ├── handlers/ │ │ │ │ │ │ └── ProductCreator.kt │ │ │ │ │ └── services/ │ │ │ │ │ └── SupplierService.kt │ │ │ │ ├── domain/ │ │ │ │ │ └── ProductTable.kt │ │ │ │ └── infrastructure/ │ │ │ │ ├── Constants.kt │ │ │ │ ├── ObjectMapperConfig.kt │ │ │ │ ├── api/ │ │ │ │ │ └── ProductController.kt │ │ │ │ ├── http/ │ │ │ │ │ ├── SupplierHttpService.kt │ │ │ │ │ ├── WebClientConfiguration.kt │ │ │ │ │ └── WebClientConfigurationProperties.kt │ │ │ │ ├── messaging/ │ │ │ │ │ └── kafka/ │ │ │ │ │ ├── KafkaProducer.kt │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ ├── ConsumerSettings.kt │ │ │ │ │ │ ├── KafkaConsumerConfiguration.kt │ │ │ │ │ │ ├── KafkaProducerConfiguration.kt │ │ │ │ │ │ ├── KafkaProperties.kt │ │ │ │ │ │ ├── MapBasedSettings.kt │ │ │ │ │ │ └── ProducerSettings.kt │ │ │ │ │ ├── consumers/ │ │ │ │ │ │ ├── FailingProductCreateConsumer.kt │ │ │ │ │ │ ├── JobTopicConfig.kt │ │ │ │ │ │ └── ProductCreateConsumers.kt │ │ │ │ │ └── interceptors/ │ │ │ │ │ ├── CustomConsumerInterceptor.kt │ │ │ │ │ └── CustomProducerInterceptor.kt │ │ │ │ └── postgres/ │ │ │ │ └── ExposedConfiguration.kt │ │ │ └── resources/ │ │ │ └── application.yml │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── stove/ │ │ │ └── spring/ │ │ │ └── standalone/ │ │ │ └── example/ │ │ │ └── e2e/ │ │ │ ├── CreateProductsTableMigration.kt │ │ │ ├── ExampleTest.kt │ │ │ ├── ReportingIntegrationTest.kt │ │ │ └── StoveConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ └── spring-streams-example/ │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ ├── kotlin/ │ │ │ └── stove/ │ │ │ └── spring/ │ │ │ └── streams/ │ │ │ └── example/ │ │ │ ├── ExampleApp.kt │ │ │ └── kafka/ │ │ │ ├── CustomDeserializationExceptionHandler.kt │ │ │ ├── CustomProductionExceptionHandler.kt │ │ │ ├── CustomSerDe.kt │ │ │ ├── StreamsConfig.kt │ │ │ └── application/ │ │ │ └── processor/ │ │ │ └── ExampleJoin.kt │ │ ├── proto/ │ │ │ ├── Input1-value.proto │ │ │ ├── Input2-value.proto │ │ │ └── Output-value.proto │ │ └── resources/ │ │ └── application.properties │ └── test/ │ ├── kotlin/ │ │ └── com/ │ │ └── stove/ │ │ └── spring/ │ │ └── streams/ │ │ └── example/ │ │ └── e2e/ │ │ ├── ExampleTest.kt │ │ ├── StoveConfig.kt │ │ └── TestHelper.kt │ └── resources/ │ ├── kotest.properties │ └── logback-test.xml ├── go/ │ └── stove-kafka/ │ ├── bridge.go │ ├── bridge_test.go │ ├── franz/ │ │ ├── hooks.go │ │ └── hooks_test.go │ ├── go.mod │ ├── go.sum │ ├── sarama/ │ │ ├── interceptors.go │ │ └── interceptors_test.go │ ├── segmentio/ │ │ ├── bridge.go │ │ └── bridge_test.go │ └── stoveobserver/ │ ├── messages.pb.go │ └── messages_grpc.pb.go ├── gradle/ │ ├── libs.versions.toml │ └── wrapper/ │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradle.properties ├── gradlew ├── gradlew.bat ├── jreleaser.yml ├── lib/ │ ├── stove/ │ │ ├── api/ │ │ │ └── stove.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ ├── containers/ │ │ │ │ ├── ContainerOptions.kt │ │ │ │ ├── ProvidedRegistry.kt │ │ │ │ └── StoveContainer.kt │ │ │ ├── database/ │ │ │ │ └── migrations/ │ │ │ │ ├── DatabaseMigration.kt │ │ │ │ ├── MigrationCollection.kt │ │ │ │ └── SupportsMigrations.kt │ │ │ ├── functional/ │ │ │ │ ├── Extensions.kt │ │ │ │ ├── Reflect.kt │ │ │ │ └── Try.kt │ │ │ ├── http/ │ │ │ │ └── StoveHttpResponse.kt │ │ │ ├── messaging/ │ │ │ │ └── Observation.kt │ │ │ ├── reporting/ │ │ │ │ ├── JsonReportRenderer.kt │ │ │ │ ├── PrettyConsoleRenderer.kt │ │ │ │ ├── ReportEntry.kt │ │ │ │ ├── ReportEventListener.kt │ │ │ │ ├── ReportRenderer.kt │ │ │ │ ├── Reports.kt │ │ │ │ ├── SpanEventListener.kt │ │ │ │ ├── SpanListenerRegistry.kt │ │ │ │ ├── StoveReporter.kt │ │ │ │ ├── StoveTestContext.kt │ │ │ │ ├── StoveTestContextHolder.kt │ │ │ │ ├── StoveTestExceptions.kt │ │ │ │ ├── SystemSnapshot.kt │ │ │ │ ├── TestReport.kt │ │ │ │ └── TraceProvider.kt │ │ │ ├── serialization/ │ │ │ │ ├── gson.kt │ │ │ │ ├── jackson.kt │ │ │ │ ├── kotlinx.kt │ │ │ │ └── serialization.kt │ │ │ ├── system/ │ │ │ │ ├── BridgeSystem.kt │ │ │ │ ├── PortFinder.kt │ │ │ │ ├── PropertiesFile.kt │ │ │ │ ├── ProvidedApplicationUnderTest.kt │ │ │ │ ├── ReadinessChecker.kt │ │ │ │ ├── ReadinessStrategy.kt │ │ │ │ ├── Runner.kt │ │ │ │ ├── Stove.kt │ │ │ │ ├── StoveOptions.kt │ │ │ │ ├── StoveOptionsDsl.kt │ │ │ │ ├── ValidationDsl.kt │ │ │ │ ├── WithDsl.kt │ │ │ │ ├── abstractions/ │ │ │ │ │ ├── ApplicationUnderTest.kt │ │ │ │ │ ├── Exceptions.kt │ │ │ │ │ ├── ExposesConfiguration.kt │ │ │ │ │ ├── PluggedSystem.kt │ │ │ │ │ ├── ReadyStove.kt │ │ │ │ │ ├── RunnableSystemWithContext.kt │ │ │ │ │ ├── StateStorage.kt │ │ │ │ │ ├── SystemKey.kt │ │ │ │ │ ├── SystemOptions.kt │ │ │ │ │ ├── SystemRuntime.kt │ │ │ │ │ ├── ThenSystemContinuation.kt │ │ │ │ │ └── ValidatedSystem.kt │ │ │ │ ├── annotations/ │ │ │ │ │ └── StoveDsl.kt │ │ │ │ └── application/ │ │ │ │ ├── ApplicationConfigurations.kt │ │ │ │ ├── ArgsProvider.kt │ │ │ │ └── EnvProvider.kt │ │ │ └── tracing/ │ │ │ ├── SpanInfo.kt │ │ │ ├── SpanTree.kt │ │ │ ├── TraceContext.kt │ │ │ ├── TraceTreeRenderer.kt │ │ │ └── TraceVisualization.kt │ │ ├── test/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ ├── containers/ │ │ │ │ │ ├── ContainerOptionsTest.kt │ │ │ │ │ ├── ProvidedRegistryTest.kt │ │ │ │ │ └── StoveContainerTest.kt │ │ │ │ ├── database/ │ │ │ │ │ └── migrations/ │ │ │ │ │ ├── MigrationCollectionTest.kt │ │ │ │ │ └── SupportsMigrationsTest.kt │ │ │ │ ├── http/ │ │ │ │ │ └── StoveHttpResponseTest.kt │ │ │ │ ├── messaging/ │ │ │ │ │ └── ObservationTest.kt │ │ │ │ ├── reporting/ │ │ │ │ │ ├── JsonReportRendererTest.kt │ │ │ │ │ ├── PrettyConsoleRendererTest.kt │ │ │ │ │ ├── ReportEntryTest.kt │ │ │ │ │ ├── ReportEventListenerTest.kt │ │ │ │ │ ├── ReportsTest.kt │ │ │ │ │ ├── StoveReporterTest.kt │ │ │ │ │ ├── StoveTestContextTest.kt │ │ │ │ │ ├── StoveTestExceptionsTest.kt │ │ │ │ │ ├── SystemSnapshotTest.kt │ │ │ │ │ ├── TestReportTest.kt │ │ │ │ │ └── TraceProviderTest.kt │ │ │ │ ├── serialization/ │ │ │ │ │ └── SerializationTests.kt │ │ │ │ ├── system/ │ │ │ │ │ ├── BridgeSystemGuardTest.kt │ │ │ │ │ ├── BridgeSystemTest.kt │ │ │ │ │ ├── KeyedSystemTest.kt │ │ │ │ │ ├── PortFinderTest.kt │ │ │ │ │ ├── ProvidedApplicationUnderTestTest.kt │ │ │ │ │ ├── ReadinessCheckerTest.kt │ │ │ │ │ ├── StoveOptionsDslTest.kt │ │ │ │ │ ├── StoveTest.kt │ │ │ │ │ ├── ValidationDslTest.kt │ │ │ │ │ └── abstractions/ │ │ │ │ │ ├── ProvidedSystemOptionsTest.kt │ │ │ │ │ ├── StateStorageKeyTest.kt │ │ │ │ │ └── SystemKeyTest.kt │ │ │ │ └── tracing/ │ │ │ │ ├── SpanInfoTest.kt │ │ │ │ ├── SpanTreeTest.kt │ │ │ │ ├── TraceContextTest.kt │ │ │ │ ├── TraceTreeRendererTest.kt │ │ │ │ └── TraceVisualizationTest.kt │ │ │ └── resources/ │ │ │ └── logback.xml │ │ └── testFixtures/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── CapturedOutput.kt │ ├── stove-bom/ │ │ └── build.gradle.kts │ ├── stove-cassandra/ │ │ ├── api/ │ │ │ └── stove-cassandra.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── cassandra/ │ │ │ ├── CassandraDsl.kt │ │ │ ├── CassandraSystem.kt │ │ │ ├── CassandraSystemOptions.kt │ │ │ └── Options.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── cassandra/ │ │ │ ├── CassandraOptionsTests.kt │ │ │ └── CassandraSystemTests.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback.xml │ ├── stove-couchbase/ │ │ ├── api/ │ │ │ └── stove-couchbase.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── couchbase/ │ │ │ ├── CouchbaseDsl.kt │ │ │ ├── CouchbaseSystem.kt │ │ │ ├── Options.kt │ │ │ ├── StoveCouchbaseContainer.kt │ │ │ └── util.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── couchbase/ │ │ │ ├── CouchbaseOptionsTest.kt │ │ │ ├── CouchbaseTestSystemTests.kt │ │ │ └── TestSystemConfig.kt │ │ └── resources/ │ │ └── kotest.properties │ ├── stove-dashboard/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── dashboard/ │ │ │ ├── DashboardDsl.kt │ │ │ ├── DashboardEmitter.kt │ │ │ ├── DashboardOptions.kt │ │ │ └── DashboardSystem.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── dashboard/ │ │ ├── DashboardEmitterTest.kt │ │ └── DashboardSystemTest.kt │ ├── stove-dashboard-api/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ └── proto/ │ │ └── stove/ │ │ └── dashboard/ │ │ └── v1/ │ │ ├── dashboard_events.proto │ │ └── dashboard_service.proto │ ├── stove-elasticsearch/ │ │ ├── api/ │ │ │ └── stove-elasticsearch.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── elasticsearch/ │ │ │ ├── ElasticsearchExposedCertificate.kt │ │ │ ├── ElasticsearchSystem.kt │ │ │ ├── Extensions.kt │ │ │ ├── Options.kt │ │ │ └── util.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── elasticsearch/ │ │ │ ├── ElasticsearchExposedCertificateTest.kt │ │ │ ├── ElasticsearchOptionsTest.kt │ │ │ └── ElasticsearchTestSystemTests.kt │ │ └── resources/ │ │ └── kotest.properties │ ├── stove-grpc/ │ │ ├── api/ │ │ │ └── stove-grpc.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── grpc/ │ │ │ ├── GrpcDsl.kt │ │ │ ├── GrpcSystem.kt │ │ │ └── GrpcSystemOptions.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── grpc/ │ │ │ ├── GrpcAuthInterceptorTest.kt │ │ │ ├── GrpcSystemStubTest.kt │ │ │ ├── GrpcSystemWireTest.kt │ │ │ ├── StoveConfig.kt │ │ │ └── TestGrpcServer.kt │ │ ├── proto/ │ │ │ └── test_service.proto │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── stove-grpc-mock/ │ │ ├── api/ │ │ │ └── stove-grpc-mock.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── testing/ │ │ │ └── grpcmock/ │ │ │ ├── GrpcMockDsl.kt │ │ │ ├── GrpcMockSystem.kt │ │ │ ├── GrpcMockSystemOptions.kt │ │ │ └── StubDefinition.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── testing/ │ │ │ └── grpcmock/ │ │ │ ├── GrpcMockSystemTest.kt │ │ │ └── StoveConfig.kt │ │ ├── proto/ │ │ │ └── test_service.proto │ │ └── resources/ │ │ └── kotest.properties │ ├── stove-http/ │ │ ├── api/ │ │ │ └── stove-http.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── http/ │ │ │ ├── HttpClientFactory.kt │ │ │ ├── HttpDsl.kt │ │ │ ├── HttpSystem.kt │ │ │ ├── StoveMultiPartContent.kt │ │ │ ├── streaming.kt │ │ │ └── websocket.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── http/ │ │ │ ├── HttpSystemTests.kt │ │ │ └── WebSocketTests.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── stove-kafka/ │ │ ├── api/ │ │ │ └── stove-kafka.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── kafka/ │ │ │ │ ├── Caching.kt │ │ │ │ ├── Extensions.kt │ │ │ │ ├── KafkaContainerOptions.kt │ │ │ │ ├── KafkaContext.kt │ │ │ │ ├── KafkaExposedConfiguration.kt │ │ │ │ ├── KafkaSystem.kt │ │ │ │ ├── KafkaSystemOptions.kt │ │ │ │ ├── SerDe.kt │ │ │ │ ├── coroutines.kt │ │ │ │ ├── intercepting/ │ │ │ │ │ ├── CommonOps.kt │ │ │ │ │ ├── GrpcUtils.kt │ │ │ │ │ ├── MessageSinkOps.kt │ │ │ │ │ ├── MessageSinkPublishOps.kt │ │ │ │ │ ├── MessageStore.kt │ │ │ │ │ ├── StoveKafkaBridge.kt │ │ │ │ │ ├── StoveKafkaObserverGrpcServer.kt │ │ │ │ │ └── StoveMessageSink.kt │ │ │ │ └── messages.kt │ │ │ └── proto/ │ │ │ └── messages.proto │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── kafka/ │ │ │ ├── setup/ │ │ │ │ ├── TestSystemConfig.kt │ │ │ │ └── example/ │ │ │ │ ├── DomainEvents.kt │ │ │ │ ├── KafkaTestShared.kt │ │ │ │ ├── StoveListener.kt │ │ │ │ └── consumers/ │ │ │ │ ├── ProductConsumer.kt │ │ │ │ └── ProductFailingConsumer.kt │ │ │ └── tests/ │ │ │ ├── CoroutineExecutorServiceTests.kt │ │ │ ├── KafkaOptionsTests.kt │ │ │ ├── KafkaSystemTests.kt │ │ │ ├── MessageStoreTests.kt │ │ │ └── TopicSuffixesTests.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── stove-mongodb/ │ │ ├── api/ │ │ │ └── stove-mongodb.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── mongodb/ │ │ │ ├── MongoDsl.kt │ │ │ ├── MongodbSystem.kt │ │ │ ├── MongodbSystemOptions.kt │ │ │ ├── ObjectIdJsonOperations.kt │ │ │ └── Options.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── mongodb/ │ │ │ ├── MongodbOptionsTests.kt │ │ │ ├── MongodbTestSystemTests.kt │ │ │ └── ObjectIdJsonOperationsTest.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── stove-mssql/ │ │ ├── api/ │ │ │ └── stove-mssql.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── mssql/ │ │ │ ├── MsSqlOptions.kt │ │ │ └── MsSqlSystem.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── mssql/ │ │ │ ├── MsSqlOptionsTest.kt │ │ │ └── MssqlSystemTest.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── stove-mysql/ │ │ ├── api/ │ │ │ └── stove-mysql.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── mysql/ │ │ │ ├── MySqlSystem.kt │ │ │ └── Options.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── mysql/ │ │ │ ├── MySqlOptionsTest.kt │ │ │ ├── MySqlSystemTests.kt │ │ │ └── TestSystemConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback.xml │ ├── stove-postgres/ │ │ ├── api/ │ │ │ └── stove-postgres.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── postgres/ │ │ │ ├── Options.kt │ │ │ └── PostgresqlSystem.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── postgres/ │ │ │ ├── PostgresqlOptionsTest.kt │ │ │ ├── PostgresqlSystemTest.kt │ │ │ └── TestSystemConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback.xml │ ├── stove-rdbms/ │ │ ├── api/ │ │ │ └── stove-rdbms.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── rdbms/ │ │ │ ├── NativeSqlOperations.kt │ │ │ ├── RelationalDatabaseContext.kt │ │ │ ├── RelationalDatabaseExposedConfiguration.kt │ │ │ └── RelationalDatabaseSystem.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── rdbms/ │ │ ├── RelationalDatabaseContextTest.kt │ │ └── RelationalDatabaseSystemTest.kt │ ├── stove-redis/ │ │ ├── api/ │ │ │ └── stove-redis.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── redis/ │ │ │ ├── RedisOptions.kt │ │ │ └── RedisSystem.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── redis/ │ │ │ ├── RedisOptionsTest.kt │ │ │ └── RedisSystemTests.kt │ │ └── resources/ │ │ └── kotest.properties │ ├── stove-tracing/ │ │ ├── api/ │ │ │ └── stove-tracing.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── tracing/ │ │ │ ├── Constants.kt │ │ │ ├── OTLPSpanReceiver.kt │ │ │ ├── StoveTraceCollector.kt │ │ │ ├── TraceReportBuilder.kt │ │ │ ├── TraceValidation.kt │ │ │ ├── TracingOptions.kt │ │ │ └── TracingSystem.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── tracing/ │ │ ├── OtlpSpanReceiverTest.kt │ │ ├── SpanEventListenerTest.kt │ │ ├── SpanInfoTest.kt │ │ ├── SpanTreeTest.kt │ │ ├── StoveTraceCollectorTest.kt │ │ ├── TraceReportBuilderTest.kt │ │ ├── TraceTreeRendererTest.kt │ │ ├── TraceValidationTest.kt │ │ ├── TracingDslTest.kt │ │ ├── TracingOptionsTest.kt │ │ ├── TracingSystemTest.kt │ │ └── TracingValidationScopeTest.kt │ └── stove-wiremock/ │ ├── api/ │ │ └── stove-wiremock.api │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── wiremock/ │ │ ├── Extensions.kt │ │ ├── Options.kt │ │ ├── WireMockBodyMatching.kt │ │ ├── WireMockCallJournal.kt │ │ ├── WireMockReportConstants.kt │ │ ├── WireMockRequestListener.kt │ │ ├── WireMockSnapshot.kt │ │ ├── WireMockSystem.kt │ │ ├── WireMockVacuumCleaner.kt │ │ ├── WireMockVerification.kt │ │ ├── WiremockDsl.kt │ │ └── stubbing.kt │ └── test/ │ ├── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── wiremock/ │ │ ├── ExtensionsTest.kt │ │ ├── StoveConfig.kt │ │ ├── WireMockDeletionTest.kt │ │ ├── WireMockExposedConfigurationTest.kt │ │ ├── WireMockOperationsTest.kt │ │ ├── WireMockPartialMockingTest.kt │ │ ├── WireMockSystemTests.kt │ │ └── WireMockVerificationTest.kt │ └── resources/ │ └── kotest.properties ├── lint.sh ├── mkdocs.yml ├── plugins/ │ └── stove-tracing-gradle-plugin/ │ ├── build.gradle.kts │ ├── gradle/ │ │ └── libs.versions.toml │ ├── gradle.properties │ ├── settings.gradle.kts │ └── src/ │ ├── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── gradle/ │ │ ├── StoveTracingExtension.kt │ │ ├── StoveTracingPlugin.kt │ │ └── internal/ │ │ ├── JvmArgsBuilder.kt │ │ ├── TestTaskConfigurator.kt │ │ └── TracingDefaults.kt │ └── test/ │ └── kotlin/ │ └── com/ │ └── trendyol/ │ └── stove/ │ └── gradle/ │ └── StoveTracingPluginFunctionalTest.kt ├── pre-commit.sh ├── recipes/ │ ├── jvm/ │ │ ├── .editorconfig │ │ ├── .gitattributes │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── buildSrc/ │ │ │ ├── build.gradle.kts │ │ │ ├── settings.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── kotlin/ │ │ │ └── TestFolders.kt │ │ ├── detekt.yml │ │ ├── gradle/ │ │ │ ├── libs.versions.toml │ │ │ └── wrapper/ │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ │ ├── gradle.properties │ │ ├── gradlew │ │ ├── gradlew.bat │ │ ├── java-recipes/ │ │ │ ├── build.gradle.kts │ │ │ ├── quarkus-basic-recipe/ │ │ │ │ ├── build.gradle.kts │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ ├── java/ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ └── trendyol/ │ │ │ │ │ │ └── stove/ │ │ │ │ │ │ └── recipes/ │ │ │ │ │ │ └── quarkus/ │ │ │ │ │ │ ├── EnglishGreetingService.java │ │ │ │ │ │ ├── GreetingResource.java │ │ │ │ │ │ ├── GreetingService.java │ │ │ │ │ │ ├── HelloService.java │ │ │ │ │ │ ├── HelloServiceImpl.java │ │ │ │ │ │ ├── InMemoryItemRepository.java │ │ │ │ │ │ ├── Item.java │ │ │ │ │ │ ├── ItemRepository.java │ │ │ │ │ │ ├── QuarkusMainApp.java │ │ │ │ │ │ ├── SpanishGreetingService.java │ │ │ │ │ │ ├── StoveStartupSignal.java │ │ │ │ │ │ └── TurkishGreetingService.java │ │ │ │ │ └── resources/ │ │ │ │ │ └── application.properties │ │ │ │ └── test-e2e/ │ │ │ │ ├── kotlin/ │ │ │ │ │ └── com/ │ │ │ │ │ └── trendyol/ │ │ │ │ │ └── stove/ │ │ │ │ │ └── recipes/ │ │ │ │ │ └── quarkus/ │ │ │ │ │ └── e2e/ │ │ │ │ │ ├── setup/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ └── StoveConfig.kt │ │ │ │ │ └── tests/ │ │ │ │ │ └── IndexTests.kt │ │ │ │ └── resources/ │ │ │ │ ├── kotest.properties │ │ │ │ └── logback-test.xml │ │ │ └── spring-boot-postgres-recipe/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── com/ │ │ │ │ │ └── trendyol/ │ │ │ │ │ └── stove/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── java/ │ │ │ │ │ └── spring/ │ │ │ │ │ ├── ExampleSpringBootApp.java │ │ │ │ │ ├── application/ │ │ │ │ │ │ ├── external/ │ │ │ │ │ │ │ └── category/ │ │ │ │ │ │ │ ├── CategoryApiSpringConfiguration.java │ │ │ │ │ │ │ ├── CategoryHttpApi.java │ │ │ │ │ │ │ ├── CategoryHttpApiConfiguration.java │ │ │ │ │ │ │ └── CategoryHttpApiImpl.java │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── command/ │ │ │ │ │ │ │ └── ProductApplicationService.java │ │ │ │ │ │ └── messaging/ │ │ │ │ │ │ └── ProductEventHandlerListener.java │ │ │ │ │ ├── domain/ │ │ │ │ │ │ └── ProductReactiveRepository.java │ │ │ │ │ └── infra/ │ │ │ │ │ ├── boilerplate/ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ └── ControllerAdvice.java │ │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ │ ├── KafkaBeanConfiguration.java │ │ │ │ │ │ │ ├── KafkaConfiguration.java │ │ │ │ │ │ │ ├── KafkaDomainEventPublisher.java │ │ │ │ │ │ │ ├── Topic.java │ │ │ │ │ │ │ └── TopicResolver.java │ │ │ │ │ │ ├── postgres/ │ │ │ │ │ │ │ └── PostgresConfiguration.java │ │ │ │ │ │ └── serialization/ │ │ │ │ │ │ └── JacksonConfiguration.java │ │ │ │ │ └── components/ │ │ │ │ │ ├── index/ │ │ │ │ │ │ └── IndexController.java │ │ │ │ │ └── product/ │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── ProductController.java │ │ │ │ │ │ └── ProductCreateRequest.java │ │ │ │ │ └── persistency/ │ │ │ │ │ └── JdbcProductRepository.java │ │ │ │ └── resources/ │ │ │ │ └── application.yml │ │ │ └── test-e2e/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── example/ │ │ │ │ └── java/ │ │ │ │ └── spring/ │ │ │ │ └── e2e/ │ │ │ │ ├── setup/ │ │ │ │ │ ├── CreateProductsTableMigration.kt │ │ │ │ │ ├── Stove.kt │ │ │ │ │ └── TestData.kt │ │ │ │ └── tests/ │ │ │ │ ├── IndexTests.kt │ │ │ │ └── product/ │ │ │ │ └── CreateTests.kt │ │ │ └── resources/ │ │ │ ├── kotest.properties │ │ │ └── logback-test.xml │ │ ├── kotlin-recipes/ │ │ │ ├── build.gradle.kts │ │ │ ├── ktor-mongo-recipe/ │ │ │ │ ├── build.gradle.kts │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ ├── kotlin/ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ └── trendyol/ │ │ │ │ │ │ └── stove/ │ │ │ │ │ │ └── examples/ │ │ │ │ │ │ └── kotlin/ │ │ │ │ │ │ └── ktor/ │ │ │ │ │ │ ├── ExampleStoveKtorApp.kt │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ ├── RecipeAppConfig.kt │ │ │ │ │ │ │ ├── external/ │ │ │ │ │ │ │ │ ├── CategoryHttpApi.kt │ │ │ │ │ │ │ │ └── CategoryHttpApiImpl.kt │ │ │ │ │ │ │ └── product/ │ │ │ │ │ │ │ └── command/ │ │ │ │ │ │ │ ├── ProductCommandHandler.kt │ │ │ │ │ │ │ └── handling.kt │ │ │ │ │ │ ├── domain/ │ │ │ │ │ │ │ └── product/ │ │ │ │ │ │ │ └── ProductRepository.kt │ │ │ │ │ │ └── infra/ │ │ │ │ │ │ ├── boilerplate/ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ └── http.kt │ │ │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ │ │ ├── ConsumerEngine.kt │ │ │ │ │ │ │ │ ├── ConsumerSupervisor.kt │ │ │ │ │ │ │ │ ├── KafkaDomainEventPublisher.kt │ │ │ │ │ │ │ │ ├── SerDe.kt │ │ │ │ │ │ │ │ ├── Topic.kt │ │ │ │ │ │ │ │ ├── TopicResolver.kt │ │ │ │ │ │ │ │ └── kafka.kt │ │ │ │ │ │ │ ├── kediatr/ │ │ │ │ │ │ │ │ └── kediatr.kt │ │ │ │ │ │ │ ├── mongo/ │ │ │ │ │ │ │ │ └── mongo.kt │ │ │ │ │ │ │ ├── serialization/ │ │ │ │ │ │ │ │ └── JacksonConfiguration.kt │ │ │ │ │ │ │ └── util.kt │ │ │ │ │ │ └── components/ │ │ │ │ │ │ ├── external/ │ │ │ │ │ │ │ └── category.kt │ │ │ │ │ │ └── product/ │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ └── routing.kt │ │ │ │ │ │ ├── defs.kt │ │ │ │ │ │ ├── messaging/ │ │ │ │ │ │ │ └── ProductAggregateRootEventsConsumer.kt │ │ │ │ │ │ └── persistency/ │ │ │ │ │ │ └── MongoProductRepository.kt │ │ │ │ │ └── resources/ │ │ │ │ │ └── application.yaml │ │ │ │ └── test-e2e/ │ │ │ │ ├── kotlin/ │ │ │ │ │ └── com/ │ │ │ │ │ └── trendyol/ │ │ │ │ │ └── stove/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── kotlin/ │ │ │ │ │ └── ktor/ │ │ │ │ │ └── e2e/ │ │ │ │ │ ├── setup/ │ │ │ │ │ │ ├── StoveConfig.kt │ │ │ │ │ │ └── TestData.kt │ │ │ │ │ └── tests/ │ │ │ │ │ ├── IndexTests.kt │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ └── ConfigurationTests.kt │ │ │ │ │ └── product/ │ │ │ │ │ └── CreateTests.kt │ │ │ │ └── resources/ │ │ │ │ ├── kotest.properties │ │ │ │ └── logback-test.xml │ │ │ ├── ktor-postgres-recipe/ │ │ │ │ ├── build.gradle.kts │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ ├── kotlin/ │ │ │ │ │ │ └── com/ │ │ │ │ │ │ └── trendyol/ │ │ │ │ │ │ └── stove/ │ │ │ │ │ │ └── examples/ │ │ │ │ │ │ └── kotlin/ │ │ │ │ │ │ └── ktor/ │ │ │ │ │ │ ├── ExampleStoveKtorApp.kt │ │ │ │ │ │ ├── application/ │ │ │ │ │ │ │ ├── RecipeAppConfig.kt │ │ │ │ │ │ │ ├── external/ │ │ │ │ │ │ │ │ ├── CategoryHttpApi.kt │ │ │ │ │ │ │ │ └── CategoryHttpApiImpl.kt │ │ │ │ │ │ │ └── product/ │ │ │ │ │ │ │ └── command/ │ │ │ │ │ │ │ ├── ProductCommandHandler.kt │ │ │ │ │ │ │ └── handling.kt │ │ │ │ │ │ ├── domain/ │ │ │ │ │ │ │ └── product/ │ │ │ │ │ │ │ └── ProductRepository.kt │ │ │ │ │ │ └── infra/ │ │ │ │ │ │ ├── boilerplate/ │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ └── http.kt │ │ │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ │ │ ├── ConsumerEngine.kt │ │ │ │ │ │ │ │ ├── ConsumerSupervisor.kt │ │ │ │ │ │ │ │ ├── KafkaDomainEventPublisher.kt │ │ │ │ │ │ │ │ ├── SerDe.kt │ │ │ │ │ │ │ │ ├── Topic.kt │ │ │ │ │ │ │ │ ├── TopicResolver.kt │ │ │ │ │ │ │ │ └── kafka.kt │ │ │ │ │ │ │ ├── kediatr/ │ │ │ │ │ │ │ │ └── kediatr.kt │ │ │ │ │ │ │ ├── serialization/ │ │ │ │ │ │ │ │ └── JacksonConfiguration.kt │ │ │ │ │ │ │ └── util.kt │ │ │ │ │ │ ├── components/ │ │ │ │ │ │ │ ├── external/ │ │ │ │ │ │ │ │ └── category.kt │ │ │ │ │ │ │ └── product/ │ │ │ │ │ │ │ ├── api/ │ │ │ │ │ │ │ │ └── routing.kt │ │ │ │ │ │ │ ├── defs.kt │ │ │ │ │ │ │ ├── messaging/ │ │ │ │ │ │ │ │ └── ProductAggregateRootEventsConsumer.kt │ │ │ │ │ │ │ └── persistency/ │ │ │ │ │ │ │ ├── PostgresProductRepository.kt │ │ │ │ │ │ │ └── Product.kt │ │ │ │ │ │ └── postgres/ │ │ │ │ │ │ ├── flyway.kt │ │ │ │ │ │ └── postgres.kt │ │ │ │ │ └── resources/ │ │ │ │ │ ├── application.yaml │ │ │ │ │ └── db/ │ │ │ │ │ └── migration/ │ │ │ │ │ └── V1__init.sql │ │ │ │ └── test-e2e/ │ │ │ │ ├── kotlin/ │ │ │ │ │ └── com/ │ │ │ │ │ └── trendyol/ │ │ │ │ │ └── stove/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── kotlin/ │ │ │ │ │ └── ktor/ │ │ │ │ │ └── e2e/ │ │ │ │ │ ├── setup/ │ │ │ │ │ │ ├── StoveConfig.kt │ │ │ │ │ │ └── TestData.kt │ │ │ │ │ └── tests/ │ │ │ │ │ ├── IndexTests.kt │ │ │ │ │ ├── configuration/ │ │ │ │ │ │ └── ConfigurationTests.kt │ │ │ │ │ └── product/ │ │ │ │ │ └── CreateTests.kt │ │ │ │ └── resources/ │ │ │ │ ├── kotest.properties │ │ │ │ └── logback-test.xml │ │ │ └── spring-showcase/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── kotlin/ │ │ │ │ │ └── com/ │ │ │ │ │ └── trendyol/ │ │ │ │ │ └── stove/ │ │ │ │ │ └── examples/ │ │ │ │ │ └── kotlin/ │ │ │ │ │ └── spring/ │ │ │ │ │ ├── ExampleStoveSpringBootApp.kt │ │ │ │ │ ├── domain/ │ │ │ │ │ │ ├── order/ │ │ │ │ │ │ │ ├── Order.kt │ │ │ │ │ │ │ ├── OrderController.kt │ │ │ │ │ │ │ ├── OrderRepository.kt │ │ │ │ │ │ │ └── OrderService.kt │ │ │ │ │ │ └── statistics/ │ │ │ │ │ │ └── UserOrderStatistics.kt │ │ │ │ │ ├── events/ │ │ │ │ │ │ ├── OrderCreatedEvent.kt │ │ │ │ │ │ └── PaymentProcessedEvent.kt │ │ │ │ │ └── infra/ │ │ │ │ │ ├── GlobalErrorHandler.kt │ │ │ │ │ ├── clients/ │ │ │ │ │ │ ├── FraudDetectionClient.kt │ │ │ │ │ │ ├── InventoryClient.kt │ │ │ │ │ │ └── PaymentClient.kt │ │ │ │ │ ├── grpc/ │ │ │ │ │ │ ├── GrpcErrorSpanInterceptor.kt │ │ │ │ │ │ ├── GrpcServerConfig.kt │ │ │ │ │ │ └── OrderQueryGrpcService.kt │ │ │ │ │ ├── kafka/ │ │ │ │ │ │ ├── KafkaConfig.kt │ │ │ │ │ │ ├── OrderCreatedEventListener.kt │ │ │ │ │ │ └── OrderEventPublisher.kt │ │ │ │ │ ├── persistence/ │ │ │ │ │ │ ├── DataSourceConfig.kt │ │ │ │ │ │ ├── PostgresOrderRepository.kt │ │ │ │ │ │ └── PostgresUserOrderStatisticsRepository.kt │ │ │ │ │ └── scheduling/ │ │ │ │ │ ├── DbSchedulerConfig.kt │ │ │ │ │ ├── EmailSchedulerService.kt │ │ │ │ │ └── SendOrderEmailTask.kt │ │ │ │ ├── proto/ │ │ │ │ │ ├── fraud_detection.proto │ │ │ │ │ └── order_query.proto │ │ │ │ └── resources/ │ │ │ │ └── application.yml │ │ │ └── test-e2e/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── examples/ │ │ │ │ └── kotlin/ │ │ │ │ └── spring/ │ │ │ │ └── e2e/ │ │ │ │ ├── painful/ │ │ │ │ │ └── BaseIntegrationTest.kt │ │ │ │ ├── setup/ │ │ │ │ │ ├── DbSchedulerSystem.kt │ │ │ │ │ ├── OrderExampleInitialMigration.kt │ │ │ │ │ └── StoveConfig.kt │ │ │ │ └── tests/ │ │ │ │ ├── StreamingTests.kt │ │ │ │ └── TheShowcase.kt │ │ │ └── resources/ │ │ │ ├── kotest.properties │ │ │ └── logback-test.xml │ │ ├── scala-recipes/ │ │ │ ├── build.gradle.kts │ │ │ └── spring-boot-basic-recipe/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── scala/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── recipes/ │ │ │ │ └── scala/ │ │ │ │ └── spring/ │ │ │ │ └── SpringBootRecipeApp.scala │ │ │ └── test-e2e/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── recipes/ │ │ │ │ └── scala/ │ │ │ │ └── spring/ │ │ │ │ └── e2e/ │ │ │ │ ├── setup/ │ │ │ │ │ └── StoveConfig.kt │ │ │ │ └── tests/ │ │ │ │ └── IndexTests.kt │ │ │ └── resources/ │ │ │ └── kotest.properties │ │ ├── settings.gradle.kts │ │ └── shared/ │ │ ├── application/ │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── recipes/ │ │ │ └── shared/ │ │ │ └── application/ │ │ │ ├── BusinessException.java │ │ │ ├── ErrorResponse.java │ │ │ ├── ExternalApiConfiguration.java │ │ │ └── category/ │ │ │ ├── CategoryApiConfiguration.java │ │ │ └── CategoryApiResponse.java │ │ └── domain/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── examples/ │ │ │ └── domain/ │ │ │ ├── ddd/ │ │ │ │ ├── AggregateRoot.java │ │ │ │ ├── DomainEvent.java │ │ │ │ ├── Entity.java │ │ │ │ ├── EventPublisher.java │ │ │ │ ├── EventRecorder.java │ │ │ │ └── EventRouter.java │ │ │ └── product/ │ │ │ ├── Product.java │ │ │ └── events/ │ │ │ ├── ProductCreatedEvent.java │ │ │ ├── ProductNameChangedEvent.java │ │ │ └── ProductPriceChangedEvent.java │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── examples/ │ │ └── domain/ │ │ ├── ProductTests.kt │ │ └── testing/ │ │ └── aggregateroot/ │ │ └── AggregateRootAssertion.kt │ └── process/ │ └── golang/ │ └── go-showcase/ │ ├── .dockerignore │ ├── .editorconfig │ ├── .gitignore │ ├── Dockerfile.container │ ├── build.gradle.kts │ ├── db.go │ ├── go.mod │ ├── go.sum │ ├── gradle/ │ │ ├── libs.versions.toml │ │ └── wrapper/ │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradle.properties │ ├── gradlew │ ├── gradlew.bat │ ├── handlers.go │ ├── kafka.go │ ├── kafka_franz.go │ ├── kafka_sarama.go │ ├── kafka_segmentio.go │ ├── main.go │ ├── settings.gradle.kts │ ├── stovetests/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── examples/ │ │ │ └── go/ │ │ │ └── e2e/ │ │ │ ├── setup/ │ │ │ │ ├── ProductMigration.kt │ │ │ │ └── StoveConfig.kt │ │ │ └── tests/ │ │ │ └── GoShowcaseTest.kt │ │ └── resources/ │ │ └── kotest.properties │ └── tracing.go ├── renovate.json ├── settings.gradle.kts ├── starters/ │ ├── container/ │ │ └── stove-container/ │ │ ├── api/ │ │ │ └── stove-container.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── container/ │ │ │ ├── ContainerApplicationUnderTest.kt │ │ │ ├── ContainerDsl.kt │ │ │ └── ContainerTarget.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── container/ │ │ ├── ContainerApplicationUnderTestTest.kt │ │ ├── ContainerDslTest.kt │ │ └── ContainerTargetTest.kt │ ├── ktor/ │ │ ├── stove-ktor/ │ │ │ ├── api/ │ │ │ │ └── stove-ktor.api │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ └── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── ktor/ │ │ │ │ ├── DependencyResolvers.kt │ │ │ │ ├── KtorApplicationUnderTest.kt │ │ │ │ ├── KtorBridgeSystem.kt │ │ │ │ └── KtorDiCheck.kt │ │ │ └── test/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── ktor/ │ │ │ ├── DependencyResolversLinkageTest.kt │ │ │ └── KtorDiCheckTest.kt │ │ └── tests/ │ │ ├── ktor-di-tests/ │ │ │ ├── api/ │ │ │ │ └── ktor-di-tests.api │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── test/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── ktor/ │ │ │ │ ├── AutoDetectRuntimeStateTest.kt │ │ │ │ ├── StoveConfig.kt │ │ │ │ └── app.kt │ │ │ └── resources/ │ │ │ └── simplelogger.properties │ │ ├── ktor-koin-tests/ │ │ │ ├── api/ │ │ │ │ └── ktor-koin-tests.api │ │ │ ├── build.gradle.kts │ │ │ └── src/ │ │ │ └── test/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── ktor/ │ │ │ │ ├── AutoDetectRuntimeSelectionTest.kt │ │ │ │ ├── StoveConfig.kt │ │ │ │ └── app.kt │ │ │ └── resources/ │ │ │ └── simplelogger.properties │ │ └── ktor-test-fixtures/ │ │ ├── api/ │ │ │ └── ktor-test-fixtures.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── testFixtures/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── ktor/ │ │ ├── BridgeSystemTests.kt │ │ └── TestDomain.kt │ ├── micronaut/ │ │ └── stove-micronaut/ │ │ ├── api/ │ │ │ └── stove-micronaut.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ ├── kotlin/ │ │ │ │ └── com/ │ │ │ │ └── trendyol/ │ │ │ │ └── stove/ │ │ │ │ └── micronaut/ │ │ │ │ ├── MicronautApplicationUnderTest.kt │ │ │ │ └── MicronautBridgeSystem.kt │ │ │ └── resources/ │ │ │ ├── application.properties │ │ │ └── logback.xml │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── BridgeSystemTestConfig.kt │ │ └── resources/ │ │ └── kotest.properties │ ├── process/ │ │ └── stove-process/ │ │ ├── api/ │ │ │ └── stove-process.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── process/ │ │ │ ├── ArgsProvider.kt │ │ │ ├── EnvProvider.kt │ │ │ ├── ProcessApplicationOptions.kt │ │ │ ├── ProcessApplicationUnderTest.kt │ │ │ └── ProcessDsl.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── process/ │ │ ├── ArgsProviderTest.kt │ │ ├── EnvProviderTest.kt │ │ └── ProcessApplicationUnderTestTest.kt │ ├── quarkus/ │ │ └── stove-quarkus/ │ │ ├── api/ │ │ │ └── stove-quarkus.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── quarkus/ │ │ └── QuarkusApplicationUnderTest.kt │ └── spring/ │ ├── stove-spring/ │ │ ├── api/ │ │ │ ├── stove-spring-common.api │ │ │ └── stove-spring.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── spring/ │ │ │ ├── BridgeSystem.kt │ │ │ ├── SpringApplicationUnderTest.kt │ │ │ ├── SpringBootVersionCheck.kt │ │ │ └── registrar.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ ├── SpringApplicationUnderTestTests.kt │ │ ├── SpringBridgeSystemTests.kt │ │ └── spring/ │ │ └── SpringBootVersionCheckTest.kt │ ├── stove-spring-kafka/ │ │ ├── api/ │ │ │ ├── stove-spring-kafka-common.api │ │ │ └── stove-spring-kafka.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── kafka/ │ │ │ ├── Caching.kt │ │ │ ├── Extensions.kt │ │ │ ├── KafkaDsl.kt │ │ │ ├── KafkaSystem.kt │ │ │ ├── KafkaTemplateCompatibility.kt │ │ │ ├── MessageStore.kt │ │ │ ├── Options.kt │ │ │ ├── SpringKafkaVersionCheck.kt │ │ │ ├── StoveMessage.kt │ │ │ └── TestSystemKafkaInterceptor.kt │ │ └── test/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── kafka/ │ │ ├── CachingTests.kt │ │ ├── ExtensionsTests.kt │ │ ├── KafkaOptionsTest.kt │ │ ├── MessageStoreTests.kt │ │ ├── SpringKafkaVersionCheckTest.kt │ │ └── StoveMessageTests.kt │ └── tests/ │ ├── spring-2x-kafka-tests/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── kafka/ │ │ │ ├── protobufserde/ │ │ │ │ ├── ProtobufSerdeKafkaSystemTest.kt │ │ │ │ └── app.kt │ │ │ ├── shared.kt │ │ │ └── stringserde/ │ │ │ ├── StringSerdeKafkaSystemTest.kt │ │ │ └── app.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-2x-tests/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── StoveConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-3x-kafka-tests/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── kafka/ │ │ │ ├── protobufserde/ │ │ │ │ ├── ProtobufSerdeKafkaSystemTest.kt │ │ │ │ └── app.kt │ │ │ ├── shared.kt │ │ │ └── stringserde/ │ │ │ ├── StringSerdeKafkaSystemTest.kt │ │ │ └── app.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-3x-tests/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── StoveConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-4x-kafka-tests/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── kafka/ │ │ │ ├── protobufserde/ │ │ │ │ ├── ProtobufSerdeKafkaSystemTest.kt │ │ │ │ └── app.kt │ │ │ ├── shared.kt │ │ │ └── stringserde/ │ │ │ ├── StringSerdeKafkaSystemTest.kt │ │ │ └── app.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ ├── spring-4x-tests/ │ │ ├── build.gradle.kts │ │ └── src/ │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── StoveConfig.kt │ │ └── resources/ │ │ ├── kotest.properties │ │ └── logback-test.xml │ └── spring-test-fixtures/ │ ├── build.gradle.kts │ └── src/ │ └── testFixtures/ │ ├── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ ├── BridgeSystemTests.kt │ │ ├── TestDomain.kt │ │ └── kafka/ │ │ ├── KafkaTestDomain.kt │ │ ├── ProtobufSerdeKafkaSystemTests.kt │ │ ├── ProtobufTestUtils.kt │ │ └── StringSerdeKafkaSystemTests.kt │ └── proto/ │ └── example.proto ├── test-extensions/ │ ├── stove-extensions-junit/ │ │ ├── api/ │ │ │ └── stove-extensions-junit.api │ │ ├── build.gradle.kts │ │ └── src/ │ │ ├── main/ │ │ │ └── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── extensions/ │ │ │ └── junit/ │ │ │ └── StoveJUnitExtension.kt │ │ └── test/ │ │ ├── kotlin/ │ │ │ └── com/ │ │ │ └── trendyol/ │ │ │ └── stove/ │ │ │ └── extensions/ │ │ │ └── junit/ │ │ │ └── StoveJUnitExtensionTest.kt │ │ └── resources/ │ │ └── logback-test.xml │ └── stove-extensions-kotest/ │ ├── api/ │ │ └── stove-extensions-kotest.api │ ├── build.gradle.kts │ └── src/ │ ├── main/ │ │ └── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── extensions/ │ │ └── kotest/ │ │ └── StoveKotestExtension.kt │ └── test/ │ ├── kotlin/ │ │ └── com/ │ │ └── trendyol/ │ │ └── stove/ │ │ └── extensions/ │ │ └── kotest/ │ │ ├── KotestHierarchyExplorationTest.kt │ │ └── StoveKotestExtensionTest.kt │ └── resources/ │ ├── kotest.properties │ └── logback-test.xml └── tools/ └── stove-cli/ ├── .gitignore ├── .idea/ │ ├── .gitignore │ ├── copilot.data.migration.ask2agent.xml │ ├── inspectionProfiles/ │ │ └── Project_Default.xml │ ├── modules.xml │ └── vcs.xml ├── Cargo.toml ├── Formula/ │ └── stove.rb ├── build.rs ├── clippy.toml ├── install.sh ├── rustfmt.toml ├── spa/ │ ├── biome.json │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── src/ │ │ ├── App.tsx │ │ ├── api/ │ │ │ ├── client.ts │ │ │ ├── live-cache.ts │ │ │ ├── sse.ts │ │ │ └── types.ts │ │ ├── components/ │ │ │ ├── Badge.tsx │ │ │ ├── CapturedStateLane.tsx │ │ │ ├── Detail.tsx │ │ │ ├── DurationEdge.tsx │ │ │ ├── EntryDetails.tsx │ │ │ ├── EntryRow.tsx │ │ │ ├── FlowDag.tsx │ │ │ ├── FlowTab.tsx │ │ │ ├── GapNode.tsx │ │ │ ├── JsonTree.tsx │ │ │ ├── NodePopup.tsx │ │ │ ├── ResultIcon.tsx │ │ │ ├── SnapshotCards.tsx │ │ │ ├── SnapshotMetricTiles.tsx │ │ │ ├── SnapshotStateDialog.tsx │ │ │ ├── SpanTree.tsx │ │ │ ├── SysBadge.tsx │ │ │ ├── SystemNode.tsx │ │ │ └── VersionMismatchBanner.tsx │ │ ├── hooks/ │ │ │ ├── useAppData.ts │ │ │ └── useTheme.tsx │ │ ├── index.css │ │ ├── layout/ │ │ │ ├── Header.tsx │ │ │ ├── Sidebar.tsx │ │ │ ├── TestDetail.tsx │ │ │ ├── detail/ │ │ │ │ ├── TabBar.tsx │ │ │ │ └── TestHeader.tsx │ │ │ └── sidebar/ │ │ │ ├── AppPicker.tsx │ │ │ ├── RunSummary.tsx │ │ │ ├── TestFilters.tsx │ │ │ ├── TestListItem.tsx │ │ │ └── TestTree.tsx │ │ ├── main.tsx │ │ ├── utils/ │ │ │ ├── filters.ts │ │ │ ├── flow.ts │ │ │ ├── format.ts │ │ │ ├── json.ts │ │ │ ├── result.ts │ │ │ ├── snapshot-state.ts │ │ │ ├── status.ts │ │ │ ├── systems.ts │ │ │ └── version-mismatch.ts │ │ └── vite-env.d.ts │ ├── test/ │ │ ├── api-client.test.mjs │ │ ├── flow.test.mjs │ │ ├── json.test.mjs │ │ ├── live-cache.test.mjs │ │ ├── snapshot-state.test.mjs │ │ └── version-mismatch.test.mjs │ ├── tsconfig.json │ └── vite.config.ts ├── src/ │ ├── config.rs │ ├── error.rs │ ├── grpc/ │ │ ├── mod.rs │ │ └── service.rs │ ├── http/ │ │ ├── mod.rs │ │ ├── routes/ │ │ │ ├── meta.rs │ │ │ ├── mod.rs │ │ │ ├── runs.rs │ │ │ ├── sse.rs │ │ │ ├── static_files.rs │ │ │ ├── tests.rs │ │ │ └── traces.rs │ │ └── server.rs │ ├── ingest.rs │ ├── lib.rs │ ├── main.rs │ ├── mcp/ │ │ ├── analysis/ │ │ │ └── evidence.rs │ │ ├── analysis.rs │ │ ├── args.rs │ │ ├── contract.rs │ │ ├── mod.rs │ │ ├── protocol.rs │ │ ├── security.rs │ │ └── tools.rs │ ├── skills.rs │ ├── sse/ │ │ ├── manager.rs │ │ └── mod.rs │ └── storage/ │ ├── database.rs │ ├── migrations/ │ │ ├── V1__initial_schema.sql │ │ ├── V2__run_stove_version.sql │ │ └── V3__test_path.sql │ ├── mod.rs │ ├── models.rs │ └── repository.rs └── tests/ ├── api_e2e.rs ├── common/ │ └── mod.rs └── mcp_e2e.rs