CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/spring-boot-4

Build Spring Boot 4.0 applications - project setup, REST controllers, dependency injection, configuration, actuator, and testing

91

1.79x
Quality

90%

Does it follow best practices?

Impact

97%

1.79x

Average score across 3 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-2/

{
  "context": "An agent is asked to set up typed configuration, correct Jackson settings, profile-based configuration, and write integration tests for a Spring Boot 4 application. The evaluation checks correct use of Boot 4 ConfigurationProperties patterns, Jackson property naming, test annotations, and OpenTelemetry starter usage.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Record-based ConfigurationProperties",
      "description": "Configuration is bound using a record annotated with @ConfigurationProperties rather than a mutable class with getters/setters",
      "max_score": 9
    },
    {
      "name": "@DefaultValue on record components",
      "description": "Default values on the configuration record use @DefaultValue annotation (not Java field initializers or constructor defaults)",
      "max_score": 7
    },
    {
      "name": "ConfigurationPropertiesScan or EnableConfigurationProperties",
      "description": "@ConfigurationPropertiesScan is on the main class OR @EnableConfigurationProperties is on a config class to register the properties bean",
      "max_score": 7
    },
    {
      "name": "Jackson json.write property path",
      "description": "Jackson write properties use the 'spring.jackson.json.write.*' namespace (e.g., spring.jackson.json.write.indent-output=true), not 'spring.jackson.write.*'",
      "max_score": 9
    },
    {
      "name": "Jackson json.read property path",
      "description": "If Jackson read configuration is set, it uses 'spring.jackson.json.read.*' namespace, not 'spring.jackson.read.*'",
      "max_score": 7
    },
    {
      "name": "Profile-specific property files",
      "description": "Profile-specific configuration uses files named application-{profile}.properties or application-{profile}.yaml",
      "max_score": 6
    },
    {
      "name": "MockitoBean in tests",
      "description": "Integration tests use @MockitoBean (not @MockBean which was removed) to mock Spring beans",
      "max_score": 10
    },
    {
      "name": "AutoConfigureMockMvc annotation",
      "description": "@AutoConfigureMockMvc is present alongside @SpringBootTest when MockMvc is autowired in tests",
      "max_score": 9
    },
    {
      "name": "OpenTelemetry starter used",
      "description": "If distributed tracing is needed, the dependency uses 'spring-boot-starter-opentelemetry' (not a manual OTel configuration or older spring-cloud-sleuth)",
      "max_score": 7
    },
    {
      "name": "tracing.export.enabled property",
      "description": "If tracing is configured, the property 'management.tracing.export.enabled' is used (not 'management.tracing.enabled')",
      "max_score": 7
    },
    {
      "name": "Constructor injection in beans",
      "description": "Beans receiving @ConfigurationProperties via injection use constructor injection without @Autowired",
      "max_score": 6
    },
    {
      "name": "Boot 4 version in build",
      "description": "The Spring Boot version in the build file is 4.0.5",
      "max_score": 5
    },
    {
      "name": "JSpecify Nullable used",
      "description": "If @Nullable is used anywhere, it imports from 'org.jspecify.annotations.Nullable'",
      "max_score": 5
    }
  ]
}

evals

tile.json