ln-772-error-handler-setup
npx machina-cli add skill levnikolaevich/claude-code-skills/ln-772-error-handler-setup --openclawln-772-error-handler-setup
Type: L3 Worker Category: 7XX Project Bootstrap Parent: ln-770-crosscutting-setup
Configures global error handling for .NET and Python backend applications.
Overview
| Aspect | Details |
|---|---|
| Input | Context Store from ln-770 |
| Output | Exception handling middleware and custom exceptions |
| Stacks | .NET (ASP.NET Core Middleware), Python (FastAPI exception handlers) |
Phase 1: Receive Context
Accept Context Store from coordinator.
Required Context:
STACK: .NET or PythonFRAMEWORK: ASP.NET Core or FastAPIPROJECT_ROOT: Project directory pathENVIRONMENT: Development or Production
Idempotency Check:
- .NET: Grep for
GlobalExceptionMiddlewareorUseExceptionHandler - Python: Grep for
@app.exception_handlerorexception_handlers.py - If found: Return
{ "status": "skipped" }
Phase 2: Research Error Handling Patterns
Use MCP tools to get up-to-date documentation.
For .NET:
MCP ref: "ASP.NET Core global exception handling middleware"
Context7: /dotnet/aspnetcore
For Python:
MCP ref: "FastAPI exception handlers custom exceptions"
Context7: /tiangolo/fastapi
Key Patterns to Research:
- Middleware pipeline positioning
- Exception type mapping to HTTP status codes
- ProblemDetails (RFC 7807) format
- Development vs Production error details
- Logging integration
Phase 3: Decision Points
Q1: Error Response Format
| Option | Description |
|---|---|
| ProblemDetails (RFC 7807) (Recommended) | Standardized format, widely adopted |
| Custom Format | Project-specific requirements |
Q2: Error Detail Level
| Environment | Stack Trace | Inner Exceptions | Request Details |
|---|---|---|---|
| Development | ✓ Show | ✓ Show | ✓ Show |
| Production | ✗ Hide | ✗ Hide | ✗ Hide |
Q3: Error Taxonomy
Define standard error codes:
| Code | HTTP Status | Description |
|---|---|---|
VALIDATION_ERROR | 400 | Invalid input data |
UNAUTHORIZED | 401 | Authentication required |
FORBIDDEN | 403 | Insufficient permissions |
NOT_FOUND | 404 | Resource not found |
CONFLICT | 409 | Resource state conflict |
INTERNAL_ERROR | 500 | Unexpected server error |
Phase 4: Generate Configuration
.NET Output Files
| File | Purpose |
|---|---|
Middleware/GlobalExceptionMiddleware.cs | Exception handling middleware |
Exceptions/AppException.cs | Base exception class |
Exceptions/ValidationException.cs | Validation errors |
Exceptions/NotFoundException.cs | Not found errors |
Models/ErrorResponse.cs | Error response model |
Generation Process:
- Use MCP ref to get current ASP.NET Core exception handling patterns
- Generate GlobalExceptionMiddleware with:
- Exception type to HTTP status mapping
- Logging of exceptions
- ProblemDetails response format
- Environment-aware detail level
- Generate custom exception classes
Registration Code:
app.UseMiddleware<GlobalExceptionMiddleware>();
Python Output Files
| File | Purpose |
|---|---|
exceptions/app_exceptions.py | Custom exception classes |
exceptions/handlers.py | FastAPI exception handlers |
models/error_response.py | Pydantic error models |
Generation Process:
- Use MCP ref to get current FastAPI exception handling patterns
- Generate exception handlers with:
- HTTPException handling
- Custom AppException handling
- Validation error handling
- Request validation error handling
- Generate custom exception classes
Registration Code:
app.add_exception_handler(AppException, app_exception_handler)
app.add_exception_handler(RequestValidationError, validation_exception_handler)
Phase 5: Validate
Validation Steps:
-
Syntax check:
- .NET:
dotnet build --no-restore - Python:
python -m py_compile exceptions/handlers.py
- .NET:
-
Test error handling:
- Create test endpoint that throws exception
- Verify error response format
- Check that stack trace hidden in Production
Expected Error Response (ProblemDetails):
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Validation Error",
"status": 400,
"detail": "Invalid input data",
"instance": "/api/users",
"errors": [
{ "field": "email", "message": "Invalid email format" }
],
"traceId": "abc-123-def-456"
}
Return to Coordinator
{
"status": "success",
"files_created": [
"Middleware/GlobalExceptionMiddleware.cs",
"Exceptions/AppException.cs",
"Models/ErrorResponse.cs"
],
"packages_added": [],
"registration_code": "app.UseMiddleware<GlobalExceptionMiddleware>();",
"message": "Configured global exception handling"
}
Reference Links
Critical Rules
- Use ProblemDetails (RFC 7807) by default — standardized error response format
- Hide stack traces in Production — environment-aware detail level is mandatory
- Use MCP ref for current patterns — do not hardcode middleware from memory
- Idempotent — if
GlobalExceptionMiddlewareorexception_handlers.pyexists, returnstatus: "skipped" - Map all custom exceptions to HTTP status codes — no unhandled exception types reaching the client
Definition of Done
- Context Store received (stack, framework, environment)
- Error handling patterns researched via MCP tools
- GlobalExceptionMiddleware generated (.NET) or exception handlers generated (Python)
- Custom exception classes created (AppException, ValidationException, NotFoundException)
- Error response model created (ProblemDetails format)
- Syntax validated (
dotnet buildorpy_compile) - Structured JSON response returned to ln-770 coordinator
Version: 2.0.0 Last Updated: 2026-01-10
Source
git clone https://github.com/levnikolaevich/claude-code-skills/blob/master/ln-772-error-handler-setup/SKILL.mdView on GitHub Overview
ln-772-error-handler-setup configures a global exception handling layer for both .NET (ASP.NET Core) and Python (FastAPI) backends. It outputs a unified error response format (ProblemDetails/RFC 7807) and uses environment-aware detail exposure to enable consistent error propagation and centralized logging across services.
How This Skill Works
It consumes the Context Store (STACK, FRAMEWORK, PROJECT_ROOT, ENVIRONMENT), performs an idempotency check for existing middleware, and uses MCP-guided patterns to decide on a ProblemDetails-based response with consistent HTTP status mappings. It then generates .NET and Python output files (middleware, exceptions, models) and registers them in the app pipeline (e.g., UseMiddleware for .NET or app.add_exception_handler for FastAPI).
When to Use It
- Bootstrapping a new .NET or FastAPI project and implementing standardized error responses
- Migrating legacy error handling to RFC 7807 ProblemDetails and a unified error taxonomy
- Enforcing development vs production detail levels to avoid leaking sensitive info
- Standardizing exception-to-HTTP status mappings across services (400/401/404/409/500)
- Integrating centralized error handling into CI/CD and project bootstrap processes
Quick Start
- Step 1: Provide Context (STACK, FRAMEWORK, PROJECT_ROOT, ENVIRONMENT) from the coordinator
- Step 2: Generate Middleware/Handlers and error models for .NET and Python, following MCP references
- Step 3: Register the middleware or exception handlers in your app startup (e.g., UseMiddleware or add_exception_handler) and test with sample requests
Best Practices
- Adopt RFC 7807 ProblemDetails as the standard error response format
- Map exceptions to consistent HTTP status codes (e.g., 400, 401, 403, 404, 409, 500)
- Show full error details only in Development; suppress in Production
- Centralize logging of all exceptions with correlation IDs
- Test error paths comprehensively, including validation and not-found scenarios, across .NET and Python
Example Use Cases
- ASP.NET Core app uses GlobalExceptionMiddleware to return ProblemDetails on unhandled exceptions
- FastAPI app registers app_exception_handler for AppException and RequestValidationError
- Custom NotFoundException yields 404 with a structured error payload
- Validation errors surface as 400 with field-level details in ProblemDetails
- Environment-based detail toggling prevents leaking stack traces in Production