Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Specialized code quality evaluator for the Evaluate-Loop. Use this for evaluating code implementation tracks where the deliverable is functional code — features, API routes, state management, utilities. Checks build integrity, type safety, code patterns, error handling, dead code, imports, test coverage, and naming conventions. Dispatched by loop-execution-evaluator when track type is 'feature', 'refactor', or 'infrastructure'. Triggered by: 'evaluate code', 'code review', 'quality check', 'buil
.claude/skills/ibrahim-3d-eval-code-quality/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 46% | 0% |
| case-10 | ✗→✓ | ▲ Improved | -14% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 8% | 0% |
Specialized evaluator for tracks whose deliverables are functional code — features, state management, utilities, API routes.
Dispatched by loop-execution-evaluator when the track is one of:
spec.md and plan.mdtsconfig.json — TypeScript configpackage.json — dependencies and scriptsbashnpm run build # Must exit 0 npx tsc --noEmit # Must exit 0 (no type errors)
markdown### Build: PASS ✅ / FAIL ❌ - Build status: [success / X errors] - Type check: [clean / X type errors] - Errors: [list if any]
| Check | What to Look For | |-------|-----------------| | No any types | Explicit typing on all exports, function params, return types | | Generic usage | API responses typed with ApiResponse<T> | | Null safety | Optional chaining (?.) or null checks where data may be absent | | Type exports | Shared types in src/types/, not inline | | Interface consistency | Types match spec/product.md schema |
markdown### Type Safety: PASS ✅ / FAIL ❌ - `any` usage: [count] — [list files:lines] - Missing types: [list untyped exports] - Null safety issues: [list]
| Check | What to Look For | |-------|-----------------| | File structure | Files in correct directories per component architecture | | Naming | kebab-case files, PascalCase components, {Component}Props | | Imports | No circular imports, no unused imports | | DRY | No significant code duplication (>10 lines repeated) | | Single responsibility | Functions/components do one thing | | Module boundaries | Feature code in feature dirs, shared code in ui/ or lib/ | | State sync | Every client state mutation has corresponding API endpoint | | Optimistic updates | Rollback logic present on API failure | | Source of truth | Server (DB) is source of truth, client is cache |
State Sync Anti-Patterns to Flag:
typescript// ❌ BAD: State updated without API persistence const toggleLock = (id) => { set({ assets: { ...assets, [id]: { locked: true } } }); // No API call! } // ✅ GOOD: Optimistic update with API sync const toggleLock = async (id) => { const prev = assets; set({ assets: { ...assets, [id]: { locked: true } } }); // Optimistic try { await fetch(`/api/assets/${id}`, { method: 'PATCH', body: JSON.stringify({ locked: true }) }); } catch (err) { set({ assets: prev }); // Rollback throw err; } }
markdown### Code Patterns & State Sync: PASS ✅ / FAIL ❌ - Naming violations: [list] - Unused imports: [list files] - Duplication found: [describe] - **State mutations without API: [count] — [list]** - **Missing rollback logic: [count] — [list]** - **API endpoints without client updates: [count] — [list]**
| Check | What to Look For | |-------|-----------------| | API calls | try/catch or error handling on all async operations | | User feedback | Toast/inline error shown to user on failure | | Null data | Empty states handled (no data, loading, error) | | Edge cases | Invalid input, network failure, timeout | | No silent failures | Errors not swallowed without user notification |
markdown### Error Handling: PASS ✅ / FAIL ❌ - Unhandled async: [list functions] - Missing user feedback: [list scenarios] - Silent failures: [list]
| Check | What to Look For | |-------|-----------------| | Unused exports | Functions/components exported but never imported | | Commented code | Large blocks of commented-out code (should be deleted) | | Unused files | Files that exist but aren't imported anywhere | | TODO/FIXME | Unresolved TODO comments | | Console logs | console.log left in production code |
markdown### Dead Code: PASS ✅ / FAIL ❌ - Unused exports: [list] - Console logs: [list files:lines] - TODOs: [list]
| Check | Target | |-------|--------| | Overall coverage | 70% | | Business logic | 90% | | API routes | 80% | | Utility functions | 80% |
markdown### Tests: PASS ✅ / FAIL ❌ / ⚠️ NOT CONFIGURED - Coverage: [X]% overall - Business logic: [X]% - Untested critical paths: [list]
markdown## Code Quality Evaluation Report **Track**: [track-id] **Evaluator**: eval-code-quality **Date**: [YYYY-MM-DD] **Files Evaluated**: [count] ### Results | Pass | Status | Issues | |------|--------|--------| | 1. Build | PASS/FAIL | [details] | | 2. Type Safety | PASS/FAIL | [count] issues | | 3. Code Patterns | PASS/FAIL | [count] issues | | 4. Error Handling | PASS/FAIL | [count] issues | | 5. Dead Code | PASS/FAIL | [count] issues | | 6. Tests | PASS/FAIL/N/A | [coverage] | ### Verdict: PASS ✅ / FAIL ❌ [If FAIL, list specific fix actions for loop-fixer]
loop-execution-evaluator → Conductor marks completeloop-execution-evaluator → Conductor dispatches loop-fixer| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-18 | pass→pass | 13,884 | 7,037 | -49% | 1 | 1 | 0% | 2,084 | 2,656 | +27% | 0 | 0 | — |
case-08 | pass→pass | 8,381 | 6,715 | -20% | 1 | 1 | 0% | 1,324 | 2,548 | +92% | 0 | 0 | — |
case-01 | fail→fail | 6,031 | 8,215 | +36% | 1 | 1 | 0% | 974 | 2,508 | +157% | 0 | 0 | — |
case-02 | fail→pass | 22,486 | 19,478 | -13% | 1 | 1 | 0% | 3,281 | 4,760 | +45% | 0 | 0 | — |
case-03 | fail→pass | 18,903 | 18,141 | -4% | 1 | 1 | 0% | 3,303 | 4,814 | +46% | 0 | 0 | — |
case-04 | fail→fail | 4,246 | 14,891 | +251% | 1 | 1 | 0% | 581 | 3,049 | +425% | 0 | 0 | — |
case-05 | pass→pass | 22,505 | 15,329 | -32% | 1 | 1 | 0% | 3,809 | 4,147 | +9% | 0 | 0 | — |
case-06 | pass→pass | 12,618 | 16,373 | +30% | 1 | 1 | 0% | 1,843 | 4,020 | +118% | 0 | 0 | — |
case-07 | pass→pass | 11,868 | 4,524 | -62% | 1 | 1 | 0% | 1,744 | 2,189 | +26% | 0 | 0 | — |
case-09 | pass→pass | 8,143 | 5,312 | -35% | 1 | 1 | 0% | 1,199 | 2,343 | +95% | 0 | 0 | — |
case-10 | fail→pass | 14,456 | 2,416 | -83% | 1 | 1 | 0% | 2,230 | 1,910 | -14% | 0 | 0 | — |
case-11 | fail→pass | 9,513 | 6,047 | -36% | 1 | 1 | 0% | 1,536 | 2,582 | +68% | 0 | 0 | — |
case-12 | pass→pass | 12,367 | 7,381 | -40% | 1 | 1 | 0% | 1,730 | 2,593 | +50% | 0 | 0 | — |
case-13 | pass→pass | 11,710 | 6,566 | -44% | 1 | 1 | 0% | 1,778 | 2,617 | +47% | 0 | 0 | — |
case-14 | pass→pass | 8,072 | 6,562 | -19% | 1 | 1 | 0% | 1,100 | 2,556 | +132% | 0 | 0 | — |
case-15 | pass→pass | 12,937 | 8,772 | -32% | 1 | 1 | 0% | 2,100 | 2,886 | +37% | 0 | 0 | — |
case-16 | pass→pass | 10,901 | 3,847 | -65% | 1 | 1 | 0% | 1,515 | 2,095 | +38% | 0 | 0 | — |
case-17 | pass→pass | 11,847 | 7,116 | -40% | 1 | 1 | 0% | 1,874 | 2,676 | +43% | 0 | 0 | — |
case-19 | pass→pass | 13,651 | 5,905 | -57% | 1 | 1 | 0% | 2,124 | 2,415 | +14% | 0 | 0 | — |
case-20 | fail→pass | 11,766 | 1,752 | -85% | 1 | 1 | 0% | 1,715 | 1,852 | +8% | 0 | 0 | — |
case-21 | fail→pass | 10,111 | 3,407 | -66% | 1 | 1 | 0% | 1,374 | 2,020 | +47% | 0 | 0 | — |
case-22 | pass→pass | 19,410 | 13,998 | -28% | 1 | 1 | 0% | 3,028 | 3,733 | +23% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.