spring-runtime-mcp 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. spring_runtime_mcp/__init__.py +3 -0
  2. spring_runtime_mcp/adapters/__init__.py +1 -0
  3. spring_runtime_mcp/adapters/beans.py +159 -0
  4. spring_runtime_mcp/adapters/conditions.py +333 -0
  5. spring_runtime_mcp/adapters/config.py +295 -0
  6. spring_runtime_mcp/adapters/drift.py +790 -0
  7. spring_runtime_mcp/adapters/health.py +164 -0
  8. spring_runtime_mcp/adapters/mapping_predicates.py +201 -0
  9. spring_runtime_mcp/adapters/mappings.py +294 -0
  10. spring_runtime_mcp/adapters/migrations.py +373 -0
  11. spring_runtime_mcp/adapters/openapi.py +683 -0
  12. spring_runtime_mcp/adapters/source_catalog.py +119 -0
  13. spring_runtime_mcp/adapters/startup.py +202 -0
  14. spring_runtime_mcp/analyzers/__init__.py +1 -0
  15. spring_runtime_mcp/analyzers/bean_graph.py +172 -0
  16. spring_runtime_mcp/analyzers/condition_failures.py +359 -0
  17. spring_runtime_mcp/cli.py +248 -0
  18. spring_runtime_mcp/contracts/__init__.py +1 -0
  19. spring_runtime_mcp/contracts/definitions.py +425 -0
  20. spring_runtime_mcp/diagnostics.py +254 -0
  21. spring_runtime_mcp/models/__init__.py +1 -0
  22. spring_runtime_mcp/models/bean_graph.py +77 -0
  23. spring_runtime_mcp/models/common.py +99 -0
  24. spring_runtime_mcp/models/conditions.py +56 -0
  25. spring_runtime_mcp/models/queries.py +140 -0
  26. spring_runtime_mcp/models/source_catalog.py +35 -0
  27. spring_runtime_mcp/models/timestamps.py +71 -0
  28. spring_runtime_mcp/policy/__init__.py +1 -0
  29. spring_runtime_mcp/policy/configuration.py +32 -0
  30. spring_runtime_mcp/policy/output_guard.py +117 -0
  31. spring_runtime_mcp/policy/sanitization.py +616 -0
  32. spring_runtime_mcp/py.typed +0 -0
  33. spring_runtime_mcp/replay.py +220 -0
  34. spring_runtime_mcp/replay_data/bean_graph/README.md +26 -0
  35. spring_runtime_mcp/replay_data/bean_graph/factory-method/conditions.json +43 -0
  36. spring_runtime_mcp/replay_data/bean_graph/factory-method/source-catalog.json +54 -0
  37. spring_runtime_mcp/replay_data/bean_graph/nested-conditions/beans.json +99 -0
  38. spring_runtime_mcp/replay_data/bean_graph/nested-conditions/conditions.json +25 -0
  39. spring_runtime_mcp/replay_data/bean_graph/parent-child/beans.json +92 -0
  40. spring_runtime_mcp/replay_data/bean_graph/shape-metadata.json +32 -0
  41. spring_runtime_mcp/replay_data/bean_graph/stripe-missing/conditions.json +43 -0
  42. spring_runtime_mcp/replay_data/bean_graph/stripe-missing/source-catalog.json +54 -0
  43. spring_runtime_mcp/replay_data/conformance/README.md +41 -0
  44. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/beans.json +92 -0
  45. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/conditions.json +52 -0
  46. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/configprops.json +20 -0
  47. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/env.json +16 -0
  48. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/flyway.json +40 -0
  49. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/health-v2.json +14 -0
  50. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/health-v3.json +38 -0
  51. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/liquibase.json +30 -0
  52. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/mappings.json +40 -0
  53. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/openapi.json +54 -0
  54. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/source-catalog.json +90 -0
  55. spring_runtime_mcp/replay_data/conformance/boot-2.7-servlet/startup.json +45 -0
  56. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/beans.json +92 -0
  57. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/conditions.json +52 -0
  58. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/configprops.json +20 -0
  59. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/env.json +16 -0
  60. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/flyway.json +40 -0
  61. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/health-v3.json +38 -0
  62. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/liquibase.json +30 -0
  63. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/mappings.json +40 -0
  64. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/openapi.json +54 -0
  65. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/source-catalog.json +90 -0
  66. spring_runtime_mcp/replay_data/conformance/boot-3.4-servlet/startup.json +45 -0
  67. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/beans.json +92 -0
  68. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/conditions.json +52 -0
  69. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/configprops.json +20 -0
  70. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/env.json +16 -0
  71. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/flyway.json +40 -0
  72. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/health-v3.json +38 -0
  73. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/liquibase.json +30 -0
  74. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/mappings.json +40 -0
  75. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/openapi.json +54 -0
  76. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/servlet-namespace-comparison.json +4 -0
  77. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/source-catalog.json +90 -0
  78. spring_runtime_mcp/replay_data/conformance/boot-4.1-webflux/startup.json +45 -0
  79. spring_runtime_mcp/replay_data/conformance/contracts/springboot_analyze_startup.json +62 -0
  80. spring_runtime_mcp/replay_data/conformance/contracts/springboot_check_migrations.json +63 -0
  81. spring_runtime_mcp/replay_data/conformance/contracts/springboot_detect_drift.json +64 -0
  82. spring_runtime_mcp/replay_data/conformance/contracts/springboot_diagnose_health.json +59 -0
  83. spring_runtime_mcp/replay_data/conformance/contracts/springboot_inspect_beans.json +56 -0
  84. spring_runtime_mcp/replay_data/conformance/contracts/springboot_inspect_config.json +62 -0
  85. spring_runtime_mcp/replay_data/conformance/contracts/springboot_search_openapi.json +80 -0
  86. spring_runtime_mcp/replay_data/conformance/contracts/springboot_verify_mappings.json +58 -0
  87. spring_runtime_mcp/replay_data/conformance/faults/cases.json +63 -0
  88. spring_runtime_mcp/replay_data/conformance/faults/health-hidden.expected.json +54 -0
  89. spring_runtime_mcp/replay_data/conformance/faults/health-hidden.json +3 -0
  90. spring_runtime_mcp/replay_data/conformance/large/beans-2500.json +22506 -0
  91. spring_runtime_mcp/replay_data/conformance/manifest.json +46 -0
  92. spring_runtime_mcp/schemas/tools-contract.json +1902 -0
  93. spring_runtime_mcp/server.py +322 -0
  94. spring_runtime_mcp/services.py +44 -0
  95. spring_runtime_mcp/snapshots.py +340 -0
  96. spring_runtime_mcp/tools/__init__.py +1 -0
  97. spring_runtime_mcp/tools/analyze_startup.py +79 -0
  98. spring_runtime_mcp/tools/check_migrations.py +99 -0
  99. spring_runtime_mcp/tools/detect_drift.py +323 -0
  100. spring_runtime_mcp/tools/diagnose_health.py +88 -0
  101. spring_runtime_mcp/tools/inspect_beans.py +479 -0
  102. spring_runtime_mcp/tools/inspect_config.py +102 -0
  103. spring_runtime_mcp/tools/registry.py +48 -0
  104. spring_runtime_mcp/tools/search_openapi.py +79 -0
  105. spring_runtime_mcp/tools/support.py +166 -0
  106. spring_runtime_mcp/tools/verify_mappings.py +62 -0
  107. spring_runtime_mcp/transport/__init__.py +1 -0
  108. spring_runtime_mcp/transport/actuator_http.py +459 -0
  109. spring_runtime_mcp/transport/bounded_json.py +144 -0
  110. spring_runtime_mcp/transport/replay_files.py +71 -0
  111. spring_runtime_mcp/transport/response_gate.py +186 -0
  112. spring_runtime_mcp/transport/responses.py +82 -0
  113. spring_runtime_mcp/transport/stdio.py +44 -0
  114. spring_runtime_mcp-0.2.0.dist-info/METADATA +320 -0
  115. spring_runtime_mcp-0.2.0.dist-info/RECORD +118 -0
  116. spring_runtime_mcp-0.2.0.dist-info/WHEEL +4 -0
  117. spring_runtime_mcp-0.2.0.dist-info/entry_points.txt +2 -0
  118. spring_runtime_mcp-0.2.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,92 @@
1
+ {
2
+ "contexts": {
3
+ "infrastructure": {
4
+ "beans": {
5
+ "connectionFactory": {
6
+ "aliases": [],
7
+ "scope": "singleton",
8
+ "type": "example.ConnectionFactory",
9
+ "resource": "class path resource [example/InfrastructureConfiguration.class]",
10
+ "dependencies": []
11
+ },
12
+ "dataSource": {
13
+ "aliases": [],
14
+ "scope": "singleton",
15
+ "type": "example.DataSource",
16
+ "resource": "class path resource [example/InfrastructureConfiguration.class]",
17
+ "dependencies": [
18
+ "connectionFactory"
19
+ ]
20
+ },
21
+ "orderRepository": {
22
+ "aliases": [
23
+ "orderRepoAlias"
24
+ ],
25
+ "scope": "singleton",
26
+ "type": "example.OrderRepository",
27
+ "resource": "class path resource [example/InfrastructureConfiguration.class]",
28
+ "dependencies": [
29
+ "dataSource"
30
+ ]
31
+ },
32
+ "client": {
33
+ "aliases": [],
34
+ "scope": "singleton",
35
+ "type": "example.ParentClient",
36
+ "resource": null,
37
+ "dependencies": []
38
+ },
39
+ "auditService": {
40
+ "aliases": [],
41
+ "scope": "singleton",
42
+ "type": "example.AuditService",
43
+ "resource": null,
44
+ "dependencies": [
45
+ "client"
46
+ ]
47
+ }
48
+ },
49
+ "parentId": null
50
+ },
51
+ "application": {
52
+ "parentId": "infrastructure",
53
+ "beans": {
54
+ "client": {
55
+ "aliases": [],
56
+ "scope": "singleton",
57
+ "type": "example.ChildClient",
58
+ "resource": null,
59
+ "dependencies": []
60
+ },
61
+ "orderService": {
62
+ "aliases": [
63
+ "orders"
64
+ ],
65
+ "scope": "singleton",
66
+ "type": "example.OrderService",
67
+ "resource": null,
68
+ "dependencies": [
69
+ "orderRepoAlias",
70
+ "client"
71
+ ]
72
+ },
73
+ "orderController": {
74
+ "aliases": [],
75
+ "scope": "singleton",
76
+ "type": "example.OrderController",
77
+ "resource": null,
78
+ "dependencies": [
79
+ "orders"
80
+ ]
81
+ },
82
+ "stripeConfiguration": {
83
+ "aliases": [],
84
+ "scope": "singleton",
85
+ "type": "example.StripeConfiguration",
86
+ "resource": null,
87
+ "dependencies": []
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "contexts": {
3
+ "infrastructure": {
4
+ "positiveMatches": {},
5
+ "negativeMatches": {},
6
+ "unconditionalClasses": []
7
+ },
8
+ "application": {
9
+ "parentId": "infrastructure",
10
+ "positiveMatches": {
11
+ "example.FallbackConfiguration": [
12
+ {
13
+ "condition": "OnBeanCondition",
14
+ "message": "@ConditionalOnMissingBean (types: example.StripeClient; SearchStrategy: all) did not find any beans"
15
+ }
16
+ ]
17
+ },
18
+ "negativeMatches": {
19
+ "example.StripePaymentGateway": {
20
+ "matched": [],
21
+ "notMatched": [
22
+ {
23
+ "condition": "OnBeanCondition",
24
+ "message": "@ConditionalOnBean (types: example.StripeClient; SearchStrategy: all) did not find any beans of type example.StripeClient"
25
+ }
26
+ ]
27
+ },
28
+ "example.StripeConfiguration#stripeClient": {
29
+ "matched": [],
30
+ "notMatched": [
31
+ {
32
+ "condition": "OnPropertyCondition",
33
+ "message": "@ConditionalOnProperty (stripe.enabled=true) did not find property 'enabled'"
34
+ }
35
+ ]
36
+ },
37
+ "example.PaymentModeCondition": {
38
+ "matched": [],
39
+ "notMatched": [
40
+ {
41
+ "condition": "example.PaymentModeCondition",
42
+ "message": "AnyNestedCondition 0 matched 2 did not; NestedCondition on example.PaymentModeCondition.Card AllNestedConditions 0 matched 1 did not; NestedCondition on example.PaymentModeCondition.Card.Enabled @ConditionalOnProperty (card.enabled=true) did not find property 'enabled'; NestedCondition on example.PaymentModeCondition.Remote NoneNestedConditions 1 matched 0 did not; NestedCondition on example.PaymentModeCondition.Remote.Client @ConditionalOnBean (types: example.RemoteClient; SearchStrategy: all) found bean 'remoteClient'"
43
+ }
44
+ ]
45
+ }
46
+ },
47
+ "unconditionalClasses": [
48
+ "example.OrderConfiguration"
49
+ ]
50
+ }
51
+ }
52
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "contexts": {
3
+ "application": {
4
+ "beans": {
5
+ "spring.application-example.ApplicationProperties": {
6
+ "prefix": "spring.application",
7
+ "properties": {
8
+ "name": "orders"
9
+ },
10
+ "inputs": {
11
+ "name": {
12
+ "value": "orders",
13
+ "origin": "class path resource [application.yaml] - 2:9"
14
+ }
15
+ }
16
+ }
17
+ }
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,16 @@
1
+ {
2
+ "activeProfiles": [
3
+ "dev"
4
+ ],
5
+ "propertySources": [
6
+ {
7
+ "name": "applicationConfig: [classpath:/application.yaml]",
8
+ "properties": {
9
+ "spring.application.name": {
10
+ "value": "orders",
11
+ "origin": "class path resource [application.yaml] - 2:9"
12
+ }
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "contexts": {
3
+ "application": {
4
+ "flywayBeans": {
5
+ "ordersFlyway": {
6
+ "migrations": [
7
+ {
8
+ "type": "SQL",
9
+ "checksum": 12345,
10
+ "version": "1",
11
+ "description": "create ordersFlyway",
12
+ "script": "V1__create_tables.sql",
13
+ "state": "SUCCESS",
14
+ "installedBy": "fixture",
15
+ "installedOn": "2026-10-16T00:00:00Z",
16
+ "installedRank": 1,
17
+ "executionTime": 12
18
+ }
19
+ ]
20
+ },
21
+ "auditFlyway": {
22
+ "migrations": [
23
+ {
24
+ "type": "SQL",
25
+ "checksum": -54321,
26
+ "version": "1",
27
+ "description": "create auditFlyway",
28
+ "script": "V1__create_tables.sql",
29
+ "state": "SUCCESS",
30
+ "installedBy": "fixture",
31
+ "installedOn": "2026-10-16T00:00:00Z",
32
+ "installedRank": 1,
33
+ "executionTime": 12
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "status": "DOWN",
3
+ "components": {
4
+ "db": {
5
+ "status": "DOWN",
6
+ "details": {
7
+ "database": "H2",
8
+ "error": "java.sql.SQLException: synthetic connection unavailable"
9
+ }
10
+ },
11
+ "redis": {
12
+ "status": "UP"
13
+ },
14
+ "kafka": {
15
+ "status": "UP"
16
+ },
17
+ "rabbit": {
18
+ "status": "UP"
19
+ },
20
+ "diskSpace": {
21
+ "status": "UP"
22
+ },
23
+ "livenessState": {
24
+ "status": "UP"
25
+ },
26
+ "readinessState": {
27
+ "status": "DOWN"
28
+ },
29
+ "dependencies": {
30
+ "status": "DOWN",
31
+ "components": {
32
+ "ordersDb": {
33
+ "status": "DOWN"
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "contexts": {
3
+ "application": {
4
+ "liquibaseBeans": {
5
+ "ordersLiquibase": {
6
+ "changeSets": [
7
+ {
8
+ "author": "fixture",
9
+ "changeLog": "db/changelog/master.yaml",
10
+ "comments": "synthetic table creation",
11
+ "contexts": [],
12
+ "dateExecuted": "2026-10-16T00:00:00Z",
13
+ "deploymentId": "fixture-deployment",
14
+ "description": "createTable",
15
+ "execType": "EXECUTED",
16
+ "id": "001",
17
+ "labels": [],
18
+ "checksum": "9:0123456789abcdef0123456789abcdef",
19
+ "orderExecuted": 1,
20
+ "tag": null
21
+ }
22
+ ]
23
+ },
24
+ "auditLiquibase": {
25
+ "changeSets": []
26
+ }
27
+ }
28
+ }
29
+ }
30
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ "contexts": {
3
+ "application": {
4
+ "mappings": {
5
+ "dispatcherServlets": {
6
+ "dispatcherServlet": [
7
+ {
8
+ "handler": "example.OrderController#list",
9
+ "predicate": "{GET [/orders]}",
10
+ "details": {
11
+ "handlerMethod": {
12
+ "className": "example.OrderController",
13
+ "name": "list",
14
+ "descriptor": "(Ljakarta/servlet/http/HttpServletRequest;)Ljava/lang/String;"
15
+ },
16
+ "requestMappingConditions": {
17
+ "methods": [
18
+ "GET"
19
+ ],
20
+ "patterns": [
21
+ "/orders"
22
+ ],
23
+ "headers": [],
24
+ "params": [],
25
+ "consumes": [],
26
+ "produces": [
27
+ {
28
+ "mediaType": "application/json",
29
+ "negated": false
30
+ }
31
+ ]
32
+ }
33
+ }
34
+ }
35
+ ]
36
+ }
37
+ }
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,54 @@
1
+ {
2
+ "openapi": "3.0.3",
3
+ "info": {
4
+ "title": "Synthetic Orders",
5
+ "version": "1"
6
+ },
7
+ "paths": {
8
+ "/orders": {
9
+ "get": {
10
+ "operationId": "listOrders",
11
+ "responses": {
12
+ "200": {
13
+ "description": "Success",
14
+ "content": {
15
+ "application/json": {
16
+ "schema": {
17
+ "$ref": "#/components/schemas/Order"
18
+ }
19
+ }
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+ },
26
+ "components": {
27
+ "schemas": {
28
+ "Order": {
29
+ "type": "object",
30
+ "properties": {
31
+ "customer": {
32
+ "$ref": "#/components/schemas/Customer"
33
+ }
34
+ }
35
+ },
36
+ "Customer": {
37
+ "type": "object",
38
+ "properties": {
39
+ "address": {
40
+ "$ref": "#/components/schemas/Address"
41
+ }
42
+ }
43
+ },
44
+ "Address": {
45
+ "type": "object",
46
+ "properties": {
47
+ "city": {
48
+ "type": "string"
49
+ }
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,90 @@
1
+ {
2
+ "targetId": "local",
3
+ "sourceRevision": "workspace-a1",
4
+ "types": [
5
+ {
6
+ "name": "example.PaymentGateway",
7
+ "directSupertypes": []
8
+ },
9
+ {
10
+ "name": "example.StripePaymentGateway",
11
+ "directSupertypes": [
12
+ "example.PaymentGateway"
13
+ ]
14
+ },
15
+ {
16
+ "name": "example.StripeClient",
17
+ "directSupertypes": []
18
+ },
19
+ {
20
+ "name": "example.ConnectionFactory",
21
+ "directSupertypes": []
22
+ },
23
+ {
24
+ "name": "example.DataSource",
25
+ "directSupertypes": []
26
+ },
27
+ {
28
+ "name": "example.OrderRepository",
29
+ "directSupertypes": []
30
+ },
31
+ {
32
+ "name": "example.ParentClient",
33
+ "directSupertypes": []
34
+ },
35
+ {
36
+ "name": "example.AuditService",
37
+ "directSupertypes": []
38
+ },
39
+ {
40
+ "name": "example.ChildClient",
41
+ "directSupertypes": []
42
+ },
43
+ {
44
+ "name": "example.OrderService",
45
+ "directSupertypes": []
46
+ },
47
+ {
48
+ "name": "example.OrderController",
49
+ "directSupertypes": []
50
+ },
51
+ {
52
+ "name": "example.StripeConfiguration",
53
+ "directSupertypes": []
54
+ }
55
+ ],
56
+ "producers": [
57
+ {
58
+ "contextId": "application",
59
+ "beanName": "stripePaymentGateway",
60
+ "aliases": [
61
+ "paymentGateway"
62
+ ],
63
+ "declaredType": "example.StripePaymentGateway",
64
+ "implementationType": "example.StripePaymentGateway",
65
+ "configurationClass": "example.StripePaymentGateway",
66
+ "factoryMethod": null,
67
+ "conditionSources": [
68
+ "example.StripePaymentGateway"
69
+ ],
70
+ "sourceFile": "src/main/java/example/StripePaymentGateway.java",
71
+ "sourceLine": 12
72
+ },
73
+ {
74
+ "contextId": "application",
75
+ "beanName": "stripeClient",
76
+ "aliases": [
77
+ "stripeApiClient"
78
+ ],
79
+ "declaredType": "example.StripeClient",
80
+ "implementationType": null,
81
+ "configurationClass": "example.StripeConfiguration",
82
+ "factoryMethod": "stripeClient",
83
+ "conditionSources": [
84
+ "example.StripeConfiguration#stripeClient"
85
+ ],
86
+ "sourceFile": "src/main/java/example/StripeConfiguration.java",
87
+ "sourceLine": 18
88
+ }
89
+ ]
90
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "springBootVersion": "3.4.13",
3
+ "timeline": {
4
+ "startTime": "2026-10-16T00:00:00Z",
5
+ "events": [
6
+ {
7
+ "startTime": "2026-10-16T00:00:00.000Z",
8
+ "endTime": "2026-10-16T00:00:00.900Z",
9
+ "duration": "PT0.9S",
10
+ "startupStep": {
11
+ "id": 1,
12
+ "name": "spring.boot.application.starting",
13
+ "tags": []
14
+ }
15
+ },
16
+ {
17
+ "startTime": "2026-10-16T00:00:00.100Z",
18
+ "endTime": "2026-10-16T00:00:00.800Z",
19
+ "duration": "PT0.7S",
20
+ "startupStep": {
21
+ "id": 2,
22
+ "name": "spring.beans.instantiate",
23
+ "tags": [
24
+ {
25
+ "key": "beanName",
26
+ "value": "orderService"
27
+ }
28
+ ],
29
+ "parentId": 1
30
+ }
31
+ },
32
+ {
33
+ "startTime": "2026-10-16T00:00:00.200Z",
34
+ "endTime": "2026-10-16T00:00:00.400Z",
35
+ "duration": "PT0.2S",
36
+ "startupStep": {
37
+ "id": 3,
38
+ "name": "spring.context.base-packages.scan",
39
+ "tags": [],
40
+ "parentId": 2
41
+ }
42
+ }
43
+ ]
44
+ }
45
+ }
@@ -0,0 +1,92 @@
1
+ {
2
+ "contexts": {
3
+ "infrastructure": {
4
+ "beans": {
5
+ "connectionFactory": {
6
+ "aliases": [],
7
+ "scope": "singleton",
8
+ "type": "example.ConnectionFactory",
9
+ "resource": "class path resource [example/InfrastructureConfiguration.class]",
10
+ "dependencies": []
11
+ },
12
+ "dataSource": {
13
+ "aliases": [],
14
+ "scope": "singleton",
15
+ "type": "example.DataSource",
16
+ "resource": "class path resource [example/InfrastructureConfiguration.class]",
17
+ "dependencies": [
18
+ "connectionFactory"
19
+ ]
20
+ },
21
+ "orderRepository": {
22
+ "aliases": [
23
+ "orderRepoAlias"
24
+ ],
25
+ "scope": "singleton",
26
+ "type": "example.OrderRepository",
27
+ "resource": "class path resource [example/InfrastructureConfiguration.class]",
28
+ "dependencies": [
29
+ "dataSource"
30
+ ]
31
+ },
32
+ "client": {
33
+ "aliases": [],
34
+ "scope": "singleton",
35
+ "type": "example.ParentClient",
36
+ "resource": null,
37
+ "dependencies": []
38
+ },
39
+ "auditService": {
40
+ "aliases": [],
41
+ "scope": "singleton",
42
+ "type": "example.AuditService",
43
+ "resource": null,
44
+ "dependencies": [
45
+ "client"
46
+ ]
47
+ }
48
+ },
49
+ "parentId": null
50
+ },
51
+ "application": {
52
+ "parentId": "infrastructure",
53
+ "beans": {
54
+ "client": {
55
+ "aliases": [],
56
+ "scope": "singleton",
57
+ "type": "example.ChildClient",
58
+ "resource": null,
59
+ "dependencies": []
60
+ },
61
+ "orderService": {
62
+ "aliases": [
63
+ "orders"
64
+ ],
65
+ "scope": "singleton",
66
+ "type": "example.OrderService",
67
+ "resource": null,
68
+ "dependencies": [
69
+ "orderRepoAlias",
70
+ "client"
71
+ ]
72
+ },
73
+ "orderController": {
74
+ "aliases": [],
75
+ "scope": "singleton",
76
+ "type": "example.OrderController",
77
+ "resource": null,
78
+ "dependencies": [
79
+ "orders"
80
+ ]
81
+ },
82
+ "stripeConfiguration": {
83
+ "aliases": [],
84
+ "scope": "singleton",
85
+ "type": "example.StripeConfiguration",
86
+ "resource": null,
87
+ "dependencies": []
88
+ }
89
+ }
90
+ }
91
+ }
92
+ }
@@ -0,0 +1,52 @@
1
+ {
2
+ "contexts": {
3
+ "infrastructure": {
4
+ "positiveMatches": {},
5
+ "negativeMatches": {},
6
+ "unconditionalClasses": []
7
+ },
8
+ "application": {
9
+ "parentId": "infrastructure",
10
+ "positiveMatches": {
11
+ "example.FallbackConfiguration": [
12
+ {
13
+ "condition": "OnBeanCondition",
14
+ "message": "@ConditionalOnMissingBean (types: example.StripeClient; SearchStrategy: all) did not find any beans"
15
+ }
16
+ ]
17
+ },
18
+ "negativeMatches": {
19
+ "example.StripePaymentGateway": {
20
+ "matched": [],
21
+ "notMatched": [
22
+ {
23
+ "condition": "OnBeanCondition",
24
+ "message": "@ConditionalOnBean (types: example.StripeClient; SearchStrategy: all) did not find any beans of type example.StripeClient"
25
+ }
26
+ ]
27
+ },
28
+ "example.StripeConfiguration#stripeClient": {
29
+ "matched": [],
30
+ "notMatched": [
31
+ {
32
+ "condition": "OnPropertyCondition",
33
+ "message": "@ConditionalOnProperty (stripe.enabled=true) did not find property 'enabled'"
34
+ }
35
+ ]
36
+ },
37
+ "example.PaymentModeCondition": {
38
+ "matched": [],
39
+ "notMatched": [
40
+ {
41
+ "condition": "example.PaymentModeCondition",
42
+ "message": "AnyNestedCondition 0 matched 2 did not; NestedCondition on example.PaymentModeCondition.Card AllNestedConditions 0 matched 1 did not; NestedCondition on example.PaymentModeCondition.Card.Enabled @ConditionalOnProperty (card.enabled=true) did not find property 'enabled'; NestedCondition on example.PaymentModeCondition.Remote NoneNestedConditions 1 matched 0 did not; NestedCondition on example.PaymentModeCondition.Remote.Client @ConditionalOnBean (types: example.RemoteClient; SearchStrategy: all) found bean 'remoteClient'"
43
+ }
44
+ ]
45
+ }
46
+ },
47
+ "unconditionalClasses": [
48
+ "example.OrderConfiguration"
49
+ ]
50
+ }
51
+ }
52
+ }