Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when optimizing test suite performance — database setup, seeder optimization, parallel testing, CI pipeline efficiency, or RefreshDatabase alternatives.
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
Use this skill when:
Before optimizing, always measure:
# Count tests per suite
find tests/ app/Modules/*/Tests/ -name "*.php" | xargs grep -l "it(" | wc -l
# Count by suite type
grep -rh "it(" tests/Unit/ app/Modules/*/Tests/Unit/ --include="*.php" | wc -l
grep -rh "it(" tests/Component/ app/Modules/*/Tests/Component/ --include="*.php" | wc -l
grep -rh "it(" tests/Integration/ app/Modules/*/Tests/Integration/ --include="*.php" | wc -l
# Count migrations
ls database/migrations/*.php | wc -l
# Count seeders
find database/seeders database/seeder-data -name "*.php" -path "*/data/*" | wc -l
The typical test lifecycle is:
Process Start → Migrate → Seed → [Test → Rollback] × N → Process End
↑ expensive (once per worker)
Check these areas in order of typical impact:
| Area | What to check | Typical impact |
|---|---|---|
| Migration count | How many CREATE TABLE statements? | High if >20 |
| Schema dump | Is database/schema/ used? | High if missing |
| Seeder INSERT method | Individual save() vs bulk insert? | Medium |
| Truncation | Per-seeder truncate vs centralized? | Low (but causes correctness issues) |
| Connection discovery | Dynamic getPdo() probing? | Low |
| Parallel worker setup | Does each worker re-migrate? | High |
Laravel's schema:dump consolidates all migrations into one SQL file.
Instead of running N individual CREATE TABLE migrations, it loads one SQL dump.
php artisan schema:dump --database=api_database
# Generates database/schema/api_database-schema.sql
Savings: 58 migrations → 1 SQL load = ~10-25s per worker.
Instead of each parallel worker running migrate+seed independently:
# Prepare template
php artisan migrate:fresh --database=template_db
php artisan db:seed --database=template_db
# Clone per worker
mysqldump template_db | mysql worker_db_test_1
Savings: Eliminate per-worker migrate+seed entirely.
Add a config flag to skip database setup when DB is already prepared:
// config/testing.php
'skip_migrate_seed' => EnvHelper::boolean('TESTING_SKIP_MIGRATE_SEED', false),
Developer workflow: make migrate-testing once, then make test-quick repeatedly.
Replace individual $model->save() with bulk insert:
// Before: N INSERT statements
foreach ($data as $row) {
$model = new MyModel($row);
$model->save();
}
// After: 1 INSERT statement
MyModel::insert($data);
$models = MyModel::whereIn('id', $ids)->get();
Per-seeder truncation is redundant after migrate:fresh and causes:
Make truncation configurable, default off:
// config/testing.php
'seed_truncate' => EnvHelper::boolean('DB_SEED_TRUNCATE', false),
Replace dynamic getPdo() probing with explicit config:
// config/testing.php
'connections_to_transact' => ['api_database', 'customer_database'],
agents/reference/docs/seeders.md — seeder conventions (if exists)--filter.The diagnosis above is PHPUnit-shaped. The method — measure before optimising,
find the slowest tests first, separate setup cost from assertion cost —
transfers; the instrument does not. Resolve the runner with
resolve_toolchain and read its ecosystems:
ecosystems | Slowest-test instrument | The usual first cause |
|---|---|---|
php | --profile / Pest's duration column | database refresh per test |
js | vitest --reporter=verbose, jest --detectOpenHandles | module transform and a leaked handle |
python | pytest --durations=20 | session-scoped fixtures rebuilt per test |
go | go test -v, -cpuprofile, -race for the slow-and-flaky pair | a TestMain that starts real I/O |
go test caches a package's result until its inputs change, so a suite that
looks fast on the second run may not have run at all — -count=1 defeats the
cache when you are measuring.
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.
The English summary is being prepared. Showing the original description.
Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.
The English summary is being prepared. Showing the original description.
Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.
The English summary is being prepared. Showing the original description.
Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.
The English summary is being prepared. Showing the original description.
Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.
The English summary is being prepared. Showing the original description.
Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.
The English summary is being prepared. Showing the original description.