# Verification Loop

> Formalizes agent-core's make check/type-check/test/fix pipeline into a structured 6-phase verification skill.

- Skill: `openjiuwen-ai/verification-loop` (Agent Skill)
- Install (CLI): `npx skillmds@latest add openjiuwen-ai/verification-loop`
- Raw SKILL.md: https://api.skillmd.com/api/skills/openjiuwen-ai/verification-loop/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra, Coding & Dev Tools
- Author: openJiuwen-ai (https://skillmd.com/u/openjiuwen-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/openjiuwen-ai/verification-loop

---


# Verification Loop

Runs the full verification pipeline before every meaningful commit.
Use this skill whenever you have completed a feature, fixed a bug, or
are about to submit a PR.

## When to Run

- Before every commit (or `git push`)
- After any significant change spanning multiple modules
- After dependency changes (`pyproject.toml`, `requirements*.txt`)
- Before marking a PR as ready for review

## 6-Phase Verification

Run each phase in order. Stop immediately on failure.

### Phase 1 — Build Check

Verify all modules compile without syntax errors:

```bash
python -m py_compile openjiuwen/
```

### Phase 2 — Type Check

```bash
make type-check
```

Address all `error:` messages. `warning:` messages are acceptable but
should be reduced over time.

### Phase 3 — Lint

```bash
make check
```

Fix Ruff violations. If a rule is a false positive, add a per-line
suppression comment, not a blanket disable in the config.

### Phase 4 — Tests + Coverage

```bash
make test
```

If any test fails, fix the test or the implementation before proceeding.
For `@pytest.mark.slow` tests, run selectively:

```bash
pytest -m "not slow"
```

Verify coverage stays above 80% for all modules under `openjiuwen/core/`
and `openjiuwen/harness/`. If coverage dropped, add tests for the
missing paths.

### Phase 5 — Security Scan

```bash
bandit -r openjiuwen/ -ll
```

Address all HIGH and CRITICAL findings. SECURITY-level findings require
a code change, not a suppression. Only suppress with a documented reason.

### Phase 6 — Diff Review

```bash
git diff --stat
git diff openjiuwen/
```

Review every changed line. Check for:
- No unintended changes (stale debug code, accidental formatting changes)
- All new public APIs have corresponding tests
- Commit message accurately describes the change

## Structured Verification Report

After running the full loop, report the result:

```
Verification Report
==================
Build:     PASS
TypeCheck: PASS (2 warnings)
Lint:      PASS (0 errors)
Tests:     PASS (142 passed, 3 skipped)
Coverage:  PASS (84.3% overall)
Security:  PASS (0 HIGH/CRITICAL)
Diff:      3 files changed, +47 -12
Status:    READY
```

## Continuous Mode (CI)

In CI pipelines, run the full loop without stopping on the first failure.
Collect all failures and report them together:

```bash
# CI mode: run all phases, report all failures at the end
set +e
make type-check 2>&1 | tee /tmp/typecheck.log
make check      2>&1 | tee /tmp/lint.log
make test       2>&1 | tee /tmp/test.log
bandit -r openjiuwen/ -ll 2>&1 | tee /tmp/bandit.log
set -e

# Report consolidated results
```

## Partial Verification

For small, isolated changes, you may skip phases 1-2 if they are clearly
unaffected. Use judgment:

| Change type | Can skip phase 1-2? |
|-------------|---------------------|
| Doc-only change | Yes (phases 3, 4, 5, 6) |
| Test-only change | Yes (phases 3, 4, 6) |
| Source code change | No (all phases) |
| Dependency change | No (all phases, especially 5) |

When skipping phases, state which ones were skipped and why in the
verification report.

