/verify
Verification loop — lint -> typecheck -> unit -> integration -> e2e
$ npx -y skills add sd0xdev/sd0x-dev-flow --skill verify --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/verify
Context preview
The summary Claude sees to decide when to auto-load this skill.
Verification loop — lint -> typecheck -> unit -> integration -> e2e
SKILL.md
verify.SKILL.mdname: verify
description: "Verification loop — lint -> typecheck -> unit -> integration -> e2e"
allowed-tools: Bash(node:*), Bash(pnpm:*), Bash(yarn:*), Bash(npm:*), Bash(npx:*), Bash(git:*), Bash(python*:*), Bash(pytest:*), Bash(ruff:*), Bash(mypy:*), Bash(cargo:*), Bash(go:*), Bash(golangci-lint:*), Bash(./gradlew:*), Bash(mvn:*), Bash(bundle:*), Read, Grep, Glob
Verification Loop
Trigger
- Keywords: verify, run tests, check, lint, typecheck, verification
When NOT to Use
- Pre-commit gate (use `/precommit` or `/precommit-fast`)
- Test coverage review (use `/codex-test-review`)
- Running a single specific test (run directly)
Workflow Steps
| Step | Goal | Safety | Skip if Missing | |------|------|--------|----------------| | lint | Check code style (read-only) | read-only | yes | | typecheck | Static type checking (full only) | read-only | yes | | test-unit | Run unit test suite | read-only | yes | | test-integration | Run integration tests (full only) | read-only | yes | | test-e2e | Run end-to-end tests (full only) | read-only | yes |
**Failure behavior**: continue-all (run all steps, report all results)
Task
Step 1: Check for runner script
Use Glob to check if `.claude/scripts/verify-runner.js` exists in the project root.
- **Found** → run: `node .claude/scripts/verify-runner.js $ARGUMENTS`
- If runner succeeds, use its output and skip to the Output section.
- If runner **fails**, treat as a real verification failure (do not silently fallback).
- **NOT found** → skip to Step 2 (do NOT attempt to run the runner).
Step 2: Fallback (no runner script)
If the runner was not found in Step 1, detect the project ecosystem to run steps manually.
**Ecosystem detection** (check project root for manifest files):
| Manifest | Ecosystem | Lint | Typecheck | Test | |----------|-----------|------|-----------|------| | `package.json` | Node.js | `{pm} lint` | `{pm} typecheck` | `{pm} test:unit` | | `pyproject.toml` | Python | `ruff check .` | `mypy .` | `pytest` | | `Cargo.toml` | Rust | `cargo clippy` | _(implicit)_ | `cargo test` | | `go.mod` | Go | `golangci-lint run` | `go vet ./...` | `go test ./...` | | `build.gradle` | Java | `./gradlew spotlessCheck` | _(implicit)_ | `./gradlew test` |
For Node.js projects, auto-detect package manager from lockfile.
**`$ARGUMENTS` == "fast"**: lint + unit only
**Otherwise (full)**: lint -> typecheck -> unit -> integration -> e2e
| Step | package.json script | If missing | |------|---------------------|------------| | lint | `lint` | Skip with note | | typecheck | `typecheck` | Skip with note | | unit | `test:unit`, fallback to `test` | Skip with note | | integration | `test:integration` | Skip (requires explicit path) | | e2e | `test:e2e` | Skip (requires explicit path) |
Graceful Skip Rules
| Scenario | Behavior | |----------|----------| | No `lint` script | Skip, log "no lint script — skipped" | | No `typecheck` script | Skip, log "no typecheck script — skipped" | | No `test:unit` or `test` script | Skip, log "no test script — skipped" | | No `package.json` | Report error, cannot run checks |
Output
For **fast** mode:
## Verify (fast)
| Step | Status | Notes |
|------|--------|-------|
| lint | ✅/❌/⏭️ | |
| unit | ✅/❌/⏭️ | |
## Overall: ✅ PASS / ❌ FAIL
For **full** mode:
## Verify (full)
| Step | Status | Notes |
|------|--------|-------|
| lint | ✅/❌/⏭️ | |
| typecheck | ✅/❌/⏭️ | |
| unit | ✅/❌/⏭️ | |
| integration | ✅/❌/⏭️ | skipped unless path specified |
| e2e | ✅/❌/⏭️ | skipped unless path specified |
## Failures (if any)
- Root cause: <first error>
- Fix: <suggestion>
## Overall: ✅ PASS / ❌ FAIL
Read more
name: verify description: "Verification loop — lint -> typecheck -> unit -> integration -> e2e" allowed-tools: Bash(node:*), Bash(pnpm:*), Bash(yarn:*), Bash(npm:*), Bash(npx:*), Bash(git:*), Bash(python*:*), Bash(pytest:*), Bash(ruff:*), Bash(mypy:*), Bash(cargo:*), Bash(go:*), Bash(golangci-lint:*), Bash(./gradlew:*), Bash(mvn:*), Bash(bundle:*), Read, Grep, Glob
Verification Loop
Trigger
- Keywords: verify, run tests, check, lint, typecheck, verification
When NOT to Use
- Pre-commit gate (use `/precommit` or `/precommit-fast`)
- Test coverage review (use `/codex-test-review`)
- Running a single specific test (run directly)
Workflow Steps
| Step | Goal | Safety | Skip if Missing | |------|------|--------|----------------| | lint | Check code style (read-only) | read-only | yes | | typecheck | Static type checking (full only) | read-only | yes | | test-unit | Run unit test suite | read-only | yes | | test-integration | Run integration tests (full only) | read-only | yes | | test-e2e | Run end-to-end tests (full only) | read-only | yes |
**Failure behavior**: continue-all (run all steps, report all results)
Task
Step 1: Check for runner script
Use Glob to check if `.claude/scripts/verify-runner.js` exists in the project root.
- **Found** → run: `node .claude/scripts/verify-runner.js $ARGUMENTS`
- If runner succeeds, use its output and skip to the Output section.
- If runner **fails**, treat as a real verification failure (do not silently fallback).
- **NOT found** → skip to Step 2 (do NOT attempt to run the runner).
Step 2: Fallback (no runner script)
If the runner was not found in Step 1, detect the project ecosystem to run steps manually.
**Ecosystem detection** (check project root for manifest files):
| Manifest | Ecosystem | Lint | Typecheck | Test | |----------|-----------|------|-----------|------| | `package.json` | Node.js | `{pm} lint` | `{pm} typecheck` | `{pm} test:unit` | | `pyproject.toml` | Python | `ruff check .` | `mypy .` | `pytest` | | `Cargo.toml` | Rust | `cargo clippy` | _(implicit)_ | `cargo test` | | `go.mod` | Go | `golangci-lint run` | `go vet ./...` | `go test ./...` | | `build.gradle` | Java | `./gradlew spotlessCheck` | _(implicit)_ | `./gradlew test` |
For Node.js projects, auto-detect package manager from lockfile.
**`$ARGUMENTS` == "fast"**: lint + unit only
**Otherwise (full)**: lint -> typecheck -> unit -> integration -> e2e
| Step | package.json script | If missing | |------|---------------------|------------| | lint | `lint` | Skip with note | | typecheck | `typecheck` | Skip with note | | unit | `test:unit`, fallback to `test` | Skip with note | | integration | `test:integration` | Skip (requires explicit path) | | e2e | `test:e2e` | Skip (requires explicit path) |
Graceful Skip Rules
| Scenario | Behavior | |----------|----------| | No `lint` script | Skip, log "no lint script — skipped" | | No `typecheck` script | Skip, log "no typecheck script — skipped" | | No `test:unit` or `test` script | Skip, log "no test script — skipped" | | No `package.json` | Report error, cannot run checks |
Output
For **fast** mode:
## Verify (fast) | Step | Status | Notes | |------|--------|-------| | lint | ✅/❌/⏭️ | | | unit | ✅/❌/⏭️ | | ## Overall: ✅ PASS / ❌ FAIL
For **full** mode:
## Verify (full) | Step | Status | Notes | |------|--------|-------| | lint | ✅/❌/⏭️ | | | typecheck | ✅/❌/⏭️ | | | unit | ✅/❌/⏭️ | | | integration | ✅/❌/⏭️ | skipped unless path specified | | e2e | ✅/❌/⏭️ | skipped unless path specified | ## Failures (if any) - Root cause: <first error> - Fix: <suggestion> ## Overall: ✅ PASS / ❌ FAIL
Language: English | 繁體中文 | 简体中文 | 日本語 | 한국어 | Español The harness layer for Claude Code. Let the model choose the path. Keep "done" verifiable. Full control plane on Claude Code. Skills-only distribution for Codex CLI and other compatible agents.
Repo: sd0xdev/sd0x-dev-flow
Other skills on sd0x-dev-flow.
- /architecture
Architecture design and documentation. Produces 3-architecture.md with component diagrams, data flow, integration points, and architecture decisions. Reads existing tech-spec as input. Use when: designing system architecture, documenting component interactions, creating
Open skill - /ask
Context-aware Q&A with auto context gathering. Use when: user has a quick question about codebase, git history, rules, docs, or skills during development. Not for: code changes (use feature-dev), code review (use codex-review-fast), deep research (use deep-research), full code
Open skill - /best-practices
Industry best practices conformance audit with mandatory adversarial debate. Produces audit artifact: verdict (OK/WARN/FAIL) + gap roadmap + debate proof. Use when: auditing current implementation against industry standards, checking compliance with best practices, benchmarking
Open skill - /bug-fix
Bug fix workflow. Use when: fixing bugs, resolving issues, regression fixes. Not for: new features (use feature-dev), understanding code (use code-explore). Output: fix + regression test + review gate.
Open skill - /bump-version
Bump package and plugin version in sync. Updates package.json, .claude-plugin/plugin.json, and install-state manifest to the same version. Use when: user says 'bump version', 'update version', '更新版本', '版本 +1', or /bump-version
Open skill - /check-coverage
Comprehensive assessment of Unit / Integration / E2E three-layer test coverage, identify gaps and provide actionable recommendations.
Open skill

