integration-test — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited integration-test (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
You are in AUTONOMOUS MODE. Do NOT ask questions. Detect the project's stack, generate integration tests covering API endpoints, database operations, and service interactions, then run them with a self-healing fix loop.
INPUT: $ARGUMENTS
If arguments are provided, focus on those specific APIs, services, or modules. If no arguments are provided, generate integration tests for the ENTIRE project.
============================================================ PHASE 1: STACK AND SERVICE DISCOVERY ============================================================
Step 1.1 -- Framework Detection
Detect the backend framework and test infrastructure:
| Indicator | Framework |
|---|---|
| package.json with fastify | Fastify |
| package.json with express | Express |
| package.json with @nestjs/core | NestJS |
| manage.py + settings.py | Django |
| requirements.txt with fastapi | FastAPI |
| requirements.txt with flask | Flask |
| go.mod + net/http or gin or echo | Go |
| Gemfile with rails | Ruby on Rails |
| pubspec.yaml with shelf or dart_frog | Dart backend |
Detect the ORM / database layer:
| Indicator | ORM |
|---|---|
| prisma/ directory or schema.prisma | Prisma |
| ormconfig.* or typeorm in package.json | TypeORM |
| sequelize in package.json | Sequelize |
| drizzle.config.* | Drizzle |
| settings.py with DATABASES | Django ORM |
| requirements.txt with sqlalchemy | SQLAlchemy |
| go.mod with gorm | GORM |
| Gemfile with activerecord | ActiveRecord |
Detect the database:
| Indicator | Database |
|---|---|
| DATABASE_URL with postgres | PostgreSQL |
| DATABASE_URL with mysql | MySQL |
| *.sqlite or DATABASE_URL with sqlite | SQLite |
| firebase.json or firebaseConfig | Firestore |
| MONGODB_URI or mongoose in deps | MongoDB |
| REDIS_URL or redis in deps | Redis |
Detect the test framework (same as /unit-test detection table).
Step 1.2 -- API Endpoint Discovery
Discover ALL API endpoints in the project:
| Framework | Discovery Method |
|---|---|
| Fastify | Read route registration files, search for fastify.get/post/put/delete |
| Express | Search for app.get/post/put/patch/delete, router.* |
| NestJS | Read *.controller.ts, find @Get/@Post/@Put/@Delete/@Patch decorators |
| Django | Read urls.py, find path() and urlpatterns |
| FastAPI | Read *.py, find @app.get/@router.post decorators |
| Flask | Read *.py, find @app.route, @blueprint.route |
| Go | Search for http.HandleFunc, r.GET/POST (gin), e.GET/POST (echo) |
| Rails | Read config/routes.rb, run rake routes if available |
Build the endpoint inventory:
| # | Method | Path | Auth | Request Body | Response | Handler File |
|---|
Step 1.3 -- Database Model Discovery
Discover ALL data models:
| ORM | Discovery Method |
|---|---|
| Prisma | Read schema.prisma for model definitions |
| TypeORM | Read *.entity.ts files |
| Sequelize | Read *.model.ts or models/ directory |
| Django | Read models.py files |
| SQLAlchemy | Read models.py, find class inheriting Base |
| GORM | Read *.go files with gorm struct tags |
| ActiveRecord | Read app/models/*.rb |
| Drizzle | Read schema.ts or drizzle/ directory |
Build the model inventory:
| Model | Fields | Relations | Unique Constraints | Validation Rules |
|---|
Step 1.4 -- External Service Discovery
Identify all external service integrations:
============================================================ PHASE 2: TEST INFRASTRUCTURE SETUP ============================================================
Step 2.1 -- Test Database Configuration
Set up an isolated test database:
FOR POSTGRESQL / MYSQL:
or a separate test database
FOR SQLITE:
FOR MONGODB:
FOR FIRESTORE:
Step 2.2 -- Test Helpers
Create shared test helpers based on the detected framework:
FOR NODE.JS (Vitest/Jest + Supertest):
Create test helpers with:
FOR PYTHON (pytest):
Create conftest.py fixtures:
FOR GO:
Create test helpers:
Step 2.3 -- Mock Setup for External Services
Create mocks/stubs for every external service discovered in Phase 1:
Each mock must:
============================================================ PHASE 3: TEST GENERATION ============================================================
Step 3.1 -- API Endpoint Tests
For EACH endpoint discovered in Phase 1, generate tests covering:
HAPPY PATH:
VALIDATION AND ERRORS:
AUTHENTICATION AND AUTHORIZATION:
RESOURCE LIFECYCLE:
QUERY AND FILTERING (for list endpoints):
Step 3.2 -- Database Operation Tests
For EACH model discovered in Phase 1, generate tests covering:
CRUD OPERATIONS:
CONSTRAINTS:
TRANSACTIONS:
QUERIES:
Step 3.3 -- Service Interaction Tests
For EACH external service integration, generate tests covering:
SUCCESS SCENARIOS:
FAILURE SCENARIOS:
MOCK VERIFICATION:
============================================================ PHASE 4: EXECUTION AND SELF-HEALING ============================================================
Step 4.1 -- Start Required Services
Start any services needed for integration tests:
Step 4.2 -- Run Tests
Execute all generated integration tests:
| Framework | Command |
|---|---|
| Vitest | npx vitest run tests/integration/ --reporter=verbose |
| Jest | npx jest tests/integration/ --verbose --forceExit --runInBand |
| pytest | pytest tests/integration/ -v --tb=short |
| go test | go test -v -count=1 ./tests/integration/... |
| RSpec | bundle exec rspec spec/integration/ --format documentation |
Note: Use --runInBand or equivalent for integration tests to avoid parallel database conflicts.
Step 4.3 -- Self-Healing Loop (max 3 iterations)
For each failure, diagnose:
TEST BUG: Wrong URL, missing mock, incorrect assertion, async timing -> Fix the test
APP BUG: Missing validation, wrong status code, broken query, unhandled error -> Fix the application code
INFRASTRUCTURE: Database not running, port conflict, migration not applied -> Fix the environment, restart services
Apply fixes, re-run ONLY failing tests. Repeat up to 3 iterations.
Never delete tests. Never weaken assertions. Never skip failures.
Step 4.4 -- Full Suite Run
After healing, run ALL tests (existing + new) to verify no regressions.
============================================================ OUTPUT ============================================================
| Method | Path | Happy Path | Validation | Auth | Edge Cases | Status |
|---|
| Model | Create | Read | Update | Delete | Constraints | Transactions | Status |
|---|
| Service | Success | Timeout | Error | Rate Limit | Status |
|---|
| Bug | File | Root Cause | Fix |
|---|
NEXT STEPS:
/e2e for full user-flow end-to-end tests."/unit-test if unit coverage is still low."/contract-test to validate API schemas against consumers."/load-test to verify endpoints handle production traffic."/test-suite to see overall test health after adding integration tests."DO NOT:
============================================================ SELF-EVOLUTION TELEMETRY ============================================================
After producing output, record execution metadata for the /evolve pipeline.
Check if a project memory directory exists:
~/.claude/projects/skill-telemetry.md in that memory directoryEntry format:
### /integration-test — {{YYYY-MM-DD}}
- Outcome: {{SUCCESS | PARTIAL | FAILED}}
- Self-healed: {{yes — what was healed | no}}
- Iterations used: {{N}} / {{N max}}
- Bottleneck: {{phase that struggled or "none"}}
- Suggestion: {{one-line improvement idea for /evolve, or "none"}}Only log if the memory directory exists. Skip silently if not found. Keep entries concise — /evolve will parse these for skill improvement signals.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.