Agent Skillsmrgoonie/claudekit-skills › Defense-in-Depth Validation

Defense-in-Depth Validation

GitHub

实施纵深防御验证策略,通过在入口、业务逻辑、环境守卫和调试四个层面添加校验,确保数据合法性,从结构上防止缺陷产生。

.claude/skills/debugging/defense-in-depth/SKILL.md mrgoonie/claudekit-skills

Trigger Scenarios

修复因无效数据导致的Bug 设计高可靠性的数据输入处理流程

Install

npx skills add mrgoonie/claudekit-skills --skill Defense-in-Depth Validation -g -y
More Options

Non-standard path

npx skills add https://github.com/mrgoonie/claudekit-skills/tree/main/.claude/skills/debugging/defense-in-depth -g -y

Use without installing

npx skills use mrgoonie/claudekit-skills@Defense-in-Depth Validation

指定 Agent (Claude Code)

npx skills add mrgoonie/claudekit-skills --skill Defense-in-Depth Validation -a claude-code -g -y

安装 repo 全部 skill

npx skills add mrgoonie/claudekit-skills --all -g -y

预览 repo 内 skill

npx skills add mrgoonie/claudekit-skills --list

SKILL.md

Frontmatter
{
    "name": "Defense-in-Depth Validation",
    "version": "1.1.0",
    "languages": "all",
    "description": "Validate at every layer data passes through to make bugs impossible",
    "when_to_use": "when invalid data causes failures deep in execution, requiring validation at multiple system layers"
}

Defense-in-Depth Validation

Overview

When you fix a bug caused by invalid data, adding validation at one place feels sufficient. But that single check can be bypassed by different code paths, refactoring, or mocks.

Core principle: Validate at EVERY layer data passes through. Make the bug structurally impossible.

Why Multiple Layers

Single validation: "We fixed the bug" Multiple layers: "We made the bug impossible"

Different layers catch different cases:

  • Entry validation catches most bugs
  • Business logic catches edge cases
  • Environment guards prevent context-specific dangers
  • Debug logging helps when other layers fail

The Four Layers

Layer 1: Entry Point Validation

Purpose: Reject obviously invalid input at API boundary

function createProject(name: string, workingDirectory: string) {
  if (!workingDirectory || workingDirectory.trim() === '') {
    throw new Error('workingDirectory cannot be empty');
  }
  if (!existsSync(workingDirectory)) {
    throw new Error(`workingDirectory does not exist: ${workingDirectory}`);
  }
  if (!statSync(workingDirectory).isDirectory()) {
    throw new Error(`workingDirectory is not a directory: ${workingDirectory}`);
  }
  // ... proceed
}

Layer 2: Business Logic Validation

Purpose: Ensure data makes sense for this operation

function initializeWorkspace(projectDir: string, sessionId: string) {
  if (!projectDir) {
    throw new Error('projectDir required for workspace initialization');
  }
  // ... proceed
}

Layer 3: Environment Guards

Purpose: Prevent dangerous operations in specific contexts

async function gitInit(directory: string) {
  // In tests, refuse git init outside temp directories
  if (process.env.NODE_ENV === 'test') {
    const normalized = normalize(resolve(directory));
    const tmpDir = normalize(resolve(tmpdir()));

    if (!normalized.startsWith(tmpDir)) {
      throw new Error(
        `Refusing git init outside temp dir during tests: ${directory}`
      );
    }
  }
  // ... proceed
}

Layer 4: Debug Instrumentation

Purpose: Capture context for forensics

async function gitInit(directory: string) {
  const stack = new Error().stack;
  logger.debug('About to git init', {
    directory,
    cwd: process.cwd(),
    stack,
  });
  // ... proceed
}

Applying the Pattern

When you find a bug:

  1. Trace the data flow - Where does bad value originate? Where used?
  2. Map all checkpoints - List every point data passes through
  3. Add validation at each layer - Entry, business, environment, debug
  4. Test each layer - Try to bypass layer 1, verify layer 2 catches it

Example from Session

Bug: Empty projectDir caused git init in source code

Data flow:

  1. Test setup → empty string
  2. Project.create(name, '')
  3. WorkspaceManager.createWorkspace('')
  4. git init runs in process.cwd()

Four layers added:

  • Layer 1: Project.create() validates not empty/exists/writable
  • Layer 2: WorkspaceManager validates projectDir not empty
  • Layer 3: WorktreeManager refuses git init outside tmpdir in tests
  • Layer 4: Stack trace logging before git init

Result: All 1847 tests passed, bug impossible to reproduce

Key Insight

All four layers were necessary. During testing, each layer caught bugs the others missed:

  • Different code paths bypassed entry validation
  • Mocks bypassed business logic checks
  • Edge cases on different platforms needed environment guards
  • Debug logging identified structural misuse

Don't stop at one validation point. Add checks at every layer.

Version History

  • 80113d8 Current 2026-08-20 08:13

Same Skill Collection

.claude/skills/chrome-devtools/SKILL.md
.claude/skills/databases/SKILL.md
.claude/skills/debugging/root-cause-tracing/SKILL.md
.claude/skills/debugging/SKILL.md
.claude/skills/debugging/systematic-debugging/SKILL.md
.claude/skills/debugging/verification-before-completion/SKILL.md
.claude/skills/devops/SKILL.md
.claude/skills/docs-seeker/SKILL.md
.claude/skills/document-skills/docx/SKILL.md
.claude/skills/document-skills/pdf/SKILL.md
.claude/skills/document-skills/pptx/SKILL.md
.claude/skills/document-skills/xlsx/SKILL.md
.claude/skills/frontend-design/SKILL.md
.claude/skills/frontend-development/SKILL.md
.claude/skills/mcp-builder/SKILL.md
.claude/skills/mcp-management/SKILL.md
.claude/skills/mermaidjs-v11/SKILL.md
.claude/skills/payment-integration/SKILL.md
.claude/skills/problem-solving/collision-zone-thinking/SKILL.md
.claude/skills/problem-solving/inversion-exercise/SKILL.md
.claude/skills/problem-solving/meta-pattern-recognition/SKILL.md
.claude/skills/problem-solving/scale-game/SKILL.md
.claude/skills/problem-solving/simplification-cascades/SKILL.md
.claude/skills/problem-solving/SKILL.md
.claude/skills/problem-solving/when-stuck/SKILL.md
.claude/skills/sequential-thinking/SKILL.md
.claude/skills/skill-creator/SKILL.md
.claude/skills/threejs/SKILL.md
.claude/skills/ui-styling/SKILL.md
.claude/skills/web-testing/SKILL.md
.claude/skills/aesthetic/SKILL.md
.claude/skills/ai-multimodal/SKILL.md
.claude/skills/backend-development/SKILL.md
.claude/skills/better-auth/SKILL.md
.claude/skills/code-review/SKILL.md
.claude/skills/context-engineering/SKILL.md
.claude/skills/media-processing/SKILL.md
.claude/skills/repomix/SKILL.md
.claude/skills/shopify/SKILL.md
.claude/skills/web-frameworks/SKILL.md
.claude/skills/template-skill/SKILL.md

Metadata

Files
0
Version
80113d8
Hash
26b67533
Indexed
2026-08-20 08:13

- 위키
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-24 22:37
浙ICP备14020137号-1 $방문자$