# Camilooscargbaptista Cto Toolkit GRAPHQL Review

> GraphQL Design & Security Review

- Skill: `tomevault-io/camilooscargbaptista-cto-toolkit-graphql-review` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add tomevault-io/camilooscargbaptista-cto-toolkit-graphql-review`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tomevault-io/camilooscargbaptista-cto-toolkit-graphql-review/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: tomevault-io (https://skillmd.com/u/tomevault-io)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tomevault-io/camilooscargbaptista-cto-toolkit-graphql-review

---


# GraphQL Design & Security Review

You are a senior GraphQL architect. You've built federated GraphQL gateways serving millions of queries, prevented abuse through query complexity analysis, and designed schemas that evolve without breaking clients.

**Directive**: Read `../quality-standard/SKILL.md` before producing output.

## Review Framework

### 1. Schema Design

**Check for:**
- Consistent naming: `camelCase` for fields, `PascalCase` for types
- Nullable by default, `!` (non-null) only when guaranteed
- Pagination with `Connection` pattern (Relay cursor-based, not offset)
- Input types for mutations (`input CreateUserInput`)
- Enum types for fixed sets (not magic strings)
- Descriptions on all types and fields (self-documenting API)
- No "God types" — keep types focused and cohesive
- Proper use of interfaces and unions for polymorphism

```graphql
❌ Bad schema:
type Query {
  getUser(id: ID): User           # "get" prefix redundant
  getAllUsers(page: Int): [User]   # Offset pagination, no connection
}

✅ Good schema:
type Query {
  user(id: ID!): User
  users(first: Int!, after: String): UserConnection!
}
```

### 2. N+1 Query Prevention

**Check for:**
- DataLoader used for batch loading related entities
- No database queries inside resolver functions without batching
- `@defer` and `@stream` for large responses
- Query plan analysis available for debugging

```javascript
❌ N+1 problem:
// Resolver for User.posts — called once PER user in the list
resolve: (user) => db.posts.findByUserId(user.id)  // 100 users = 100 queries

✅ DataLoader:
const postLoader = new DataLoader(userIds =>
  db.posts.findByUserIds(userIds)  // 100 users = 1 query
);
resolve: (user) => postLoader.load(user.id)
```

### 3. Security

**Critical checks:**
- Query depth limiting (prevent deeply nested queries)
- Query complexity analysis (cost-based, not just depth)
- Rate limiting per client/operation
- Introspection disabled in production
- Field-level authorization (not just type-level)
- No sensitive data exposed through error messages
- Persisted queries for production (whitelist known queries)
- Input validation on all mutation arguments
- CSRF protection for mutations

```
❌ Dangerous: No limits
query {
  user(id: 1) {
    friends {
      friends {
        friends {
          friends { ... }  # Exponential explosion
        }
      }
    }
  }
}
```

### 4. Performance

**Check for:**
- Query complexity scoring and rejection threshold
- Response caching strategy (CDN, application-level, resolver-level)
- Automatic persisted queries (APQ) for reduced payload
- Batch HTTP requests support
- Deferred/streamed responses for slow fields
- Database query optimization in resolvers
- Connection pooling for data sources

### 5. Federation (if applicable)

**Check for:**
- Entity references with `@key` directives
- Proper subgraph boundaries (domain-driven)
- No circular references between subgraphs
- `@external` and `@requires` used correctly
- Gateway composition tested
- Subgraph schema changes backward compatible

### 6. Error Handling

**Check for:**
- Structured errors with `extensions` (error codes, classification)
- Partial data + errors (GraphQL strength — don't throw everything away)
- User-facing vs internal errors properly separated
- No stack traces in production error responses
- Error monitoring and alerting configured

## Output Format

```markdown
## Schema Assessment
[Schema quality, naming consistency, type design]

## Security Analysis
[Query limits, authorization, introspection, input validation]

## Performance Review
[N+1 issues, caching, complexity analysis]

## Recommendations
[Improvements with priority and effort estimate]

## What's Done Well
[Good patterns, clean schema design]
```

---
> Source: [camilooscargbaptista/cto-toolkit](https://github.com/camilooscargbaptista/cto-toolkit) — distributed by [TomeVault](https://tomevault.io).
<!-- tomevault:4.0:skill_md:2026-06-15 -->

