ワンクリックで
error-handling
Structured domain and transport errors with i18n-friendly messages
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Structured domain and transport errors with i18n-friendly messages
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
PR review triage, scoped fixes, verification, and merge workflow
Web transport boundaries and feature-layer conventions
Workflow and checks for adding a new game system
Meaningful testing strategy and coverage guardrails
Parallel-path refactor workflow for clean boundary cutovers
Go conventions for architecture-first, maintainable code
SOC 職業分類に基づく
| name | error-handling |
| description | Structured domain and transport errors with i18n-friendly messages |
| user-invocable | true |
Use structured errors (internal/platform/errors) to:
Step 1: Add an error code in internal/platform/errors/codes.go:
const (
// Group by domain (Campaign, Session, Character, etc.)
CodeMyNewError Code = "MY_DOMAIN_ERROR_NAME"
)
Code naming convention: {DOMAIN}_{SPECIFIC_ERROR} in SCREAMING_SNAKE_CASE.
Step 2: Map to gRPC code in the GRPCCode() switch:
case CodeMyNewError:
return codes.InvalidArgument // or NotFound, FailedPrecondition, etc.
Step 3: Add user-facing message in internal/platform/errors/i18n/en_us.go:
"MY_DOMAIN_ERROR_NAME": "Human-readable message with {{.Param}} support",
Step 4: Use in domain code:
import apperrors "github.com/louisbranch/fracturing.space/internal/platform/errors"
// Simple error
return apperrors.New(apperrors.CodeMyNewError, "internal: detailed message")
// Error with metadata (for templated user messages)
return apperrors.WithMetadata(
apperrors.CodeMyNewError,
"internal: transition from X to Y failed",
map[string]string{"Param": "value"},
)
// Wrapping another error
return apperrors.Wrap(apperrors.CodeMyNewError, "operation failed", underlyingErr)
Create a new code when:
Don't create a new code when:
CodeUnknown).// Check for specific error code
if apperrors.IsCode(err, apperrors.CodeNotFound) {
// Handle not found
}
// Extract error details
var appErr *apperrors.Error
if errors.As(err, &appErr) {
log.Printf("Code: %s, Message: %s", appErr.Code, appErr.Message)
}
| gRPC Code | Use For |
|---|---|
InvalidArgument | Bad user input, validation failures |
NotFound | Resource doesn't exist |
FailedPrecondition | State doesn't allow operation |
Internal | Unexpected errors (default) |