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:
python -m py_compile openjiuwen/
Phase 2 — Type Check
make type-check
Address all error: messages. warning: messages are acceptable but
should be reduced over time.
Phase 3 — Lint
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
make test
If any test fails, fix the test or the implementation before proceeding.
For @pytest.mark.slow tests, run selectively:
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
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
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:
# 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.