TypeScript project structure, strict tsconfig, module resolution, path aliases, shared types, and monorepo patterns
90
84%
Does it follow best practices?
Impact
100%
1.09xAverage score across 5 eval scenarios
Passed
No known issues
{
"context": "Tests whether the agent correctly sets up a TypeScript monorepo with workspaces, project references, composite tsconfigs, and shared types across packages. This is the most advanced project structure scenario.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Workspace configuration",
"description": "Root package.json has a workspaces field listing the package directories (e.g., \"workspaces\": [\"packages/*\"])",
"max_score": 10
},
{
"name": "Root tsconfig with references",
"description": "Root tsconfig.json uses the references field to list all packages, enabling tsc --build to compile in dependency order",
"max_score": 10
},
{
"name": "Shared package is composite",
"description": "packages/shared/tsconfig.json has \"composite\": true, which is required for project references",
"max_score": 10
},
{
"name": "Shared package has declaration: true",
"description": "packages/shared/tsconfig.json has \"declaration\": true so other packages can consume its types",
"max_score": 8
},
{
"name": "Server references shared",
"description": "packages/server/tsconfig.json has a references array including { \"path\": \"../shared\" }",
"max_score": 10
},
{
"name": "Client references shared",
"description": "packages/client/tsconfig.json has a references array including { \"path\": \"../shared\" }",
"max_score": 8
},
{
"name": "All tsconfigs have strict: true",
"description": "Every tsconfig.json in the monorepo has \"strict\": true (either directly or inherited via extends)",
"max_score": 10
},
{
"name": "Shared types defined once",
"description": "Types (User, ApiResponse, etc.) are defined only in packages/shared/ and imported by both server and client — not duplicated",
"max_score": 8
},
{
"name": "Union types not enum",
"description": "Categorical types (Permission, status types) use union types rather than TypeScript enum",
"max_score": 6
},
{
"name": "Package dependencies correct",
"description": "packages/server/package.json and packages/client/package.json declare @app/shared as a dependency (using workspace: protocol or *)",
"max_score": 8
},
{
"name": "Server uses NodeNext",
"description": "The server package tsconfig uses module/moduleResolution NodeNext for Node.js ESM",
"max_score": 6
},
{
"name": "Client uses bundler resolution",
"description": "The client package tsconfig uses moduleResolution: bundler for the React/Vite frontend",
"max_score": 6
}
]
}evals
scenario-1
scenario-2
scenario-3
scenario-4
scenario-5
skills
typescript-project-structure
verifiers