CAI Get a survey →

The catalog

Every dimension the CAI measures.

The standard is composed of 124 dimensions across 10 lenses. Each is a definition — what it measures and how it's evaluated — pinned to a rubric version. This catalog is the standard's vocabulary; the spec documents how each folds into the score.

4 published versions · this catalog as JSON

Showing only the Code Health lens. Show all 124 dimensions →

124 dimensions

Code Health · 22 dimensions

IDDimensionWhat it measuresWhy it mattersEvaluator
D1 Cyclomatic Complexity How tangled the control flow is — methods with many branches are hard to test and change. When this is weak, the code is full of tangled, heavily branching methods that are hard to test and risky to change, so even small changes take longer and break things more often. tool
D2 Cognitive Complexity How hard the code is for a person to follow, beyond raw branching. When this is weak, the code is hard for a developer to follow, so understanding it before changing it takes longer and mistakes are more likely. tool
D3 God Classes Over-large classes that try to do too much ("god classes"). When this is weak, oversized classes try to do too much at once, making them a bottleneck that several developers cannot safely work on in parallel. tool
D4 Code Duplication Copy-pasted code that should be shared instead. When this is weak, the same logic is copy-pasted in several places, so a fix or change must be made repeatedly and it is easy to miss a copy and reintroduce a bug. tool
D17 Explicit Debt Acknowledged debt left in the code — TODOs, dead code, suppressed warnings. When this is weak, the team has left acknowledged debt in the code — TODOs, dead code and suppressed warnings — that signals unfinished work you will eventually have to pay down. tool
D18 Solution Shape Whether the solution is laid out in a sensible, conventional structure. When this is weak, the solution is not laid out in a conventional structure, so a new developer takes longer to find their way around and onboarding costs more. tool
D39 IL Efficiency IL Efficiency tool
GD1 Unfinished & placeholder codemeta Unreviewed-generation residue: shipped members still throwing NotImplementedException, and placeholder string literals left in non-test, non-generated code. Scored as a quality signature, never as a claim about authorship. When this is weak, the code still contains shipped methods that throw "not implemented" and placeholder text left in place, meaning features look present but do not actually work. tool
IC1 Incompleteness & stubsmeta Unfinished work detected by code SHAPE, not keywords: members that only throw a "not implemented" exception, methods that take inputs and return a constant, async methods that never await, dead `if (false)` / `#if false` branches, and skeleton types most of whose members are holes. A real, objective slice of technical debt. When this is weak, parts of the code are unfinished by their very shape — stubs, methods that ignore their input, async methods that never wait, dead branches — so the delivery is less complete than it appears. tool
R1 Type Safetymeta How much of the frontend is typed TypeScript vs untyped JavaScript. When this is weak, much of the frontend is untyped JavaScript rather than typed TypeScript, so whole classes of mistakes slip through to runtime instead of being caught while coding. tool
R2 Cyclomatic Complexitymeta Per-function cyclomatic/cognitive complexity from the token-level function scanner (D-386) — real branching, not a regex heuristic. When this is weak, individual frontend functions are heavily branching and tangled, so they are hard to test and risky to change. tool
R3 Large Filesmeta How many components/modules exceed the large-file threshold. When this is weak, several frontend components or modules are oversized, making them harder to understand and a bottleneck for parallel work. tool
R7 Dead Codemeta Files unreachable from every application/tooling/test entry point, and exports nothing imports (module-graph reachability, D-386). When this is weak, the frontend carries dead code — files and exports nothing else uses — that adds noise, inflates the build and slows down anyone reading the code. tool
R10 Code Duplicationmeta Copy-pasted token-identical blocks across the frontend (the D4 clone algorithm over JS/TS tokens, D-386). When this is weak, identical blocks of frontend code are copy-pasted across the codebase, so the same change has to be made in many places and copies are easily missed. tool
X1 Async correctnessmeta Whether the code avoids sync-over-async (deadlock-prone blocking on tasks) and async void. When this is weak, asynchronous code is written in deadlock-prone ways (blocking on tasks, async void), which can cause the application to hang or crash under load. tool
X2 Cancellation propagationmeta Whether async methods accept a CancellationToken so work can be cancelled (adoption curve). When this is weak, long-running operations cannot be cancelled cleanly, so the system keeps doing work no one is waiting for and is harder to shut down responsively. tool
X3 Exception handlingmeta Whether exceptions are handled rather than silently swallowed or rethrown with lost stack traces. When this is weak, errors are silently swallowed or rethrown with their origin lost, so real failures go unnoticed and are far harder to diagnose when they surface. tool
X4 Structured loggingmeta Whether log calls use message templates (queryable) rather than interpolated strings. When this is weak, log messages are built as plain interpolated strings rather than structured templates, so production logs are hard to search and filter when you are trying to find a problem. tool
X5 Nullable reference typesmeta Whether nullable reference types are enabled and not undermined by heavy `!` suppression. When this is weak, the compiler's null-safety checks are off or undermined by suppression, so null-related crashes that the language could have prevented reach production instead. tool
X6 Hand-rolled structured-format parsingmeta Whether JSON/XML is parsed with regex/string hacks while a real parser is already referenced in the same project — a classic source of silent data bugs. tool
X7 Silent fallback defaultsmeta Whether parse/lookup failure paths return hard-coded constants with no logging or throw — failures that convert data errors into silent behavior changes. tool
X8 JS interop contractmeta Whether string-named JS interop bindings resolve against the first-party JavaScript, and whether anything guards the boundary against renames. tool