ASP.NET Core project structure — minimal APIs vs controllers, layer
95
93%
Does it follow best practices?
Impact
100%
2.50xAverage score across 5 eval scenarios
Passed
No known issues
{
"context": "Tests whether the agent proactively applies the full ASP.NET Core project structure with IOptions for configurable page size, environment-specific config, typed configuration classes, and all standard patterns. The task mentions configurable page size and config files but does NOT name IOptions, records, From() factories, IServiceCollection extensions, or health checks.",
"type": "weighted_checklist",
"checklist": [
{
"name": "DTOs folder with records",
"description": "A DTOs/ directory exists inside RecipeApi/ containing at least one file that declares a C# record (uses 'record' keyword). The agent was NOT asked to use records.",
"max_score": 10
},
{
"name": "DTO From() factory method",
"description": "At least one response DTO record includes a static From() method mapping from a model/entity type. The agent was NOT asked for factory methods.",
"max_score": 10
},
{
"name": "Models vs DTOs separation",
"description": "Entity classes in Models/ use 'class' with database properties; DTOs in DTOs/ use 'record'. They are distinct types not mixed together.",
"max_score": 8
},
{
"name": "Services with interfaces",
"description": "A Services/ directory contains service classes with corresponding interfaces. Controllers delegate business logic to services.",
"max_score": 10
},
{
"name": "No business logic in controllers",
"description": "Controller action methods do NOT contain inline EF Core queries or business logic. They delegate to services.",
"max_score": 8
},
{
"name": "IOptions for page size config",
"description": "The configurable page size uses the IOptions<T> pattern with a typed settings class (not reading directly from IConfiguration in service code). The agent was NOT asked about IOptions.",
"max_score": 10
},
{
"name": "appsettings.json with all config",
"description": "An appsettings.json exists containing ConnectionStrings section and the page size setting. Connection string is read from config.",
"max_score": 8
},
{
"name": "appsettings.Development.json",
"description": "An appsettings.Development.json file exists with environment-specific overrides. The agent was NOT asked for environment-specific config.",
"max_score": 6
},
{
"name": "IServiceCollection extension methods",
"description": "DI registration is organized into IServiceCollection extension methods in an Extensions/ folder rather than inline in Program.cs. The agent was NOT asked about DI organization.",
"max_score": 8
},
{
"name": "Typed exceptions with middleware",
"description": "Exceptions/ folder with typed exception classes and Middleware/ folder with centralized exception handling. The agent was NOT asked about exception patterns.",
"max_score": 8
},
{
"name": "Health checks registered",
"description": "Health checks are registered (AddHealthChecks) with a /health endpoint. The agent was NOT asked about health checks.",
"max_score": 6
},
{
"name": "Separate test project",
"description": "A RecipeApi.Tests/ directory exists with its own .csproj file.",
"max_score": 8
}
]
}evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
skills
aspnet-project-structure
verifiers