Skip to content
Back to skills

Verification Loop

ASecurity

Six-phase quality gate for code changes. Runs build, typecheck, lint, test, security, and diff-review in sequence. Supports JavaScript/TypeScript, Python, and Rust with auto-detection and skip conditions.

  • 17 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 9, 2026
developmentjavascripttypescriptpythonrustgojavabashnodetestingdebugging

Works with

  • cli

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add vamseeachanta/workspace-hub --skill verification-loop --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Verification Loop?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Verification Loop
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vamseeachanta-verification-loop/badge)](https://www.skillsdirectory.com/skills/vamseeachanta-verification-loop)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: verification-loop
description: Six-phase quality gate for code changes. Runs build, typecheck, lint, test, security, and diff-review in sequence. Supports JavaScript/TypeScript, Python, and Rust with auto-detection and skip conditions.
type: reference
version: 1.0.0
category: development
last_updated: 2026-01-24
phases:
  - build
  - typecheck
  - lint
  - test
  - security
  - diff-review
supported_languages:
  - javascript
  - typescript
  - python
  - rust
related_skills:
  - testing-production
  - code-reviewer
  - systematic-debugging
capabilities: []
requires: []
see_also: []
tags: []
freedom: low
---

# Verification Loop Skill

## Overview

Six-phase quality gate validating code changes sequentially. Each phase must pass before proceeding. Auto-detects project type and adapts commands.

## When to Use

- Before committing changes
- Pre-merge validation
- CI/CD pipeline integration
- Code review preparation

## Phase Definitions

### Phase 1: Build

| Project | Command | Skip If |
|---------|---------|---------|
| Node.js | `npm run build` | No build script in package.json |
| Python | `uv build` / `python -m build` | No pyproject.toml or setup.py |
| Rust | `cargo build --release` | No Cargo.toml |

### Phase 2: Typecheck

| Project | Command | Skip If |
|---------|---------|---------|
| TypeScript | `tsc --noEmit` | No tsconfig.json |
| Python | `pyright` / `mypy .` | No type checker installed |
| Rust | (included in build) | Always (cargo handles types) |

### Phase 3: Lint

| Project | Command | Skip If |
|---------|---------|---------|
| JS/TS | `eslint . --ext .js,.jsx,.ts,.tsx` | No eslint config |
| Python | `ruff check .` / `flake8 .` | No linter config |
| Rust | `cargo clippy -- -D warnings` | No Cargo.toml |

### Phase 4: Test

| Project | Command | Skip If |
|---------|---------|---------|
| JS/TS | `npm test` / `npm run test:coverage` | No test script |
| Python | `pytest --cov` | No tests directory |
| Rust | `cargo test` | No tests |

### Phase 5: Security

| Project | Command | Skip If |
|---------|---------|---------|
| JS/TS | `npm audit` | No package-lock.json |
| Python | `safety check` / `pip-audit` / `bandit -r .` | No scanner installed |
| Rust | `cargo audit` | cargo-audit not installed |

### Phase 6: Diff Review

**Command:** `git diff HEAD~1 --stat`

Provides summary of changes for review context. Always informational, never fails.

## Detection Logic

```bash
# Project type detection
detect_project() {
  [ -f "package.json" ] && echo "node"
  [ -f "pyproject.toml" ] || [ -f "setup.py" ] && echo "python"
  [ -f "Cargo.toml" ] && echo "rust"
}

# Skip conditions per phase
should_skip_typecheck() {
  [ ! -f "tsconfig.json" ] && [ ! -f "pyproject.toml" ]
}

should_skip_lint() {
  [ ! -f ".eslintrc.js" ] && [ ! -f ".eslintrc.json" ] && \
  [ ! -f "ruff.toml" ] && [ ! -f "Cargo.toml" ]
}

should_skip_test() {
  [ ! -d "tests" ] && [ ! -d "test" ] && \
  ! find . -name "*_test.py" -o -name "test_*.py" | grep -q .
}
```

## Execution Flow

```
START -> BUILD -> TYPECHECK -> LINT -> TEST -> SECURITY -> DIFF-REVIEW -> SUCCESS
              \         \         \       \          \
               -> SKIP   -> SKIP   -> SKIP -> SKIP   -> SKIP (if conditions met)

Any phase FAIL -> STOP with error report
```

## Configuration

### Environment Variables

```bash
VERIFICATION_SKIP_PHASES="security,diff-review"  # Skip specific phases
VERIFICATION_COVERAGE_MIN=80                      # Coverage threshold
VERIFICATION_STRICT=true                          # Fail on warnings
```

### Config File (.verification-loop.yml)

```yaml
phases:
  build:
    enabled: true
    timeout: 300
  typecheck:
    enabled: true
    timeout: 120
  lint:
    enabled: true
    allow_warnings: false
  test:
    enabled: true
    coverage_threshold: 80
  security:
    enabled: true
    severity_threshold: moderate
  diff-review:
    enabled: true
    compare_ref: HEAD~1

skip_conditions:
  - pattern: "*.md"
    skip_phases: [build, typecheck, lint, test]
```

## Error Handling

| Phase | On Failure |
|-------|------------|
| Build | Stop, report compilation errors |
| Typecheck | Stop, report type errors |
| Lint | Stop, report lint violations |
| Test | Stop, report failed tests |
| Security | Report vulns, continue if below threshold |
| Diff-Review | Always succeeds (informational) |

## Integration

**CI (GitHub Actions):** Use `fetch-depth: 2` for diff-review, run each phase in sequence.

**Pre-Commit Hook:**
```bash
#!/bin/bash
./verification-loop.sh --skip=security,diff-review
[ $? -ne 0 ] && exit 1
```

## Metrics

| Metric | Target |
|--------|--------|
| Pass Rate | >95% |
| Duration | <60s |
| Test Coverage | >80% |

---

**Version 1.0.0** (2026-01-24): Initial release

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.