Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Verification loop for Laravel projects: env checks, linting, static analysis, tests with coverage, security scans, and deployment readiness.
.claude/skills/loulanyue-laravel-verification/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 83% | 0% |
| case-22 | ✓→✗ | ▼ Worse | 42% | 0% |
| case-05 | ✓→✓ | = Same ✓ | -1% | 0% |
Run before PRs, after major changes, and pre-deploy.
bashphp -v composer --version php artisan --version
.env is present and required keys existAPP_DEBUG=false for production environmentsAPP_ENV matches the target deployment (production, staging)If using Laravel Sail locally:
bash./vendor/bin/sail php -v ./vendor/bin/sail artisan --version
bashcomposer validate composer dump-autoload -o
bashvendor/bin/pint --test vendor/bin/phpstan analyse
If your project uses Psalm instead of PHPStan:
bashvendor/bin/psalm
bashphp artisan test
Coverage (CI):
bashXDEBUG_MODE=coverage php artisan test --coverage
CI example (format -> static analysis -> tests):
bashvendor/bin/pint --test vendor/bin/phpstan analyse XDEBUG_MODE=coverage php artisan test --coverage
bashcomposer audit
bashphp artisan migrate --pretend php artisan migrate:status
Y_m_d_His_* (e.g., 2025_03_14_154210_create_orders_table.php) and describe the change clearlydown() methods and avoid irreversible data loss without explicit backupsbashphp artisan optimize:clear php artisan config:cache php artisan route:cache php artisan view:cache
storage/ and bootstrap/cache/ are writable in the target environmentbashphp artisan schedule:list php artisan queue:failed
If Horizon is used:
bashphp artisan horizon:status
If queue:monitor is available, use it to check backlog without processing jobs:
bashphp artisan queue:monitor default --max=100
Active verification (staging only): dispatch a no-op job to a dedicated queue and run a single worker to process it (ensure a non-sync queue connection is configured).
bashphp artisan tinker --execute="dispatch((new App\\Jobs\\QueueHealthcheck())->onQueue('healthcheck'))" php artisan queue:work --once --queue=healthcheck
Verify the job produced the expected side effect (log entry, healthcheck table row, or metric).
Only run this on non-production environments where processing a test job is safe.
Minimal flow:
bashphp -v composer --version php artisan --version composer validate vendor/bin/pint --test vendor/bin/phpstan analyse php artisan test composer audit php artisan migrate --pretend php artisan config:cache php artisan queue:failed
CI-style pipeline:
bashcomposer validate composer dump-autoload -o vendor/bin/pint --test vendor/bin/phpstan analyse XDEBUG_MODE=coverage php artisan test --coverage composer audit php artisan migrate --pretend php artisan optimize:clear php artisan config:cache php artisan route:cache php artisan view:cache php artisan schedule:list
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 14,860 | 9,358 | -37% | 1 | 1 | 0% | 2,656 | 2,829 | +7% | 0 | 0 | — |
case-02 | fail→fail | 14,276 | 7,381 | -48% | 1 | 1 | 0% | 2,370 | 2,284 | -4% | 0 | 0 | — |
case-03 | fail→fail | 21,547 | 9,660 | -55% | 1 | 1 | 0% | 3,691 | 2,857 | -23% | 0 | 0 | — |
case-04 | fail→pass | 10,004 | 4,262 | -57% | 1 | 1 | 0% | 1,675 | 1,797 | +7% | 0 | 0 | — |
case-05 | pass→pass | 15,048 | 9,083 | -40% | 1 | 1 | 0% | 2,676 | 2,647 | -1% | 0 | 0 | — |
case-06 | pass→pass | 11,345 | 3,286 | -71% | 1 | 1 | 0% | 1,783 | 1,566 | -12% | 0 | 0 | — |
case-07 | pass→pass | 5,148 | 3,076 | -40% | 1 | 1 | 0% | 833 | 1,514 | +82% | 0 | 0 | — |
case-08 | pass→pass | 8,534 | 3,227 | -62% | 1 | 1 | 0% | 1,455 | 1,526 | +5% | 0 | 0 | — |
case-09 | pass→pass | 2,901 | 2,438 | -16% | 1 | 1 | 0% | 416 | 1,222 | +194% | 0 | 0 | — |
case-10 | pass→pass | 5,205 | 1,973 | -62% | 1 | 1 | 0% | 842 | 1,310 | +56% | 0 | 0 | — |
case-11 | pass→pass | 8,082 | 3,432 | -58% | 1 | 1 | 0% | 1,355 | 1,531 | +13% | 0 | 0 | — |
case-12 | pass→pass | 3,657 | 2,617 | -28% | 1 | 1 | 0% | 650 | 1,548 | +138% | 0 | 0 | — |
case-13 | pass→pass | 7,291 | 2,946 | -60% | 1 | 1 | 0% | 1,325 | 1,524 | +15% | 0 | 0 | — |
case-14 | pass→pass | 5,124 | 2,273 | -56% | 1 | 1 | 0% | 854 | 1,380 | +62% | 0 | 0 | — |
case-15 | pass→pass | 3,728 | 1,522 | -59% | 1 | 1 | 0% | 594 | 1,267 | +113% | 0 | 0 | — |
case-16 | fail→pass | 16,473 | 2,289 | -86% | 1 | 1 | 0% | 756 | 1,385 | +83% | 0 | 0 | — |
case-17 | pass→pass | 3,742 | 1,917 | -49% | 1 | 1 | 0% | 569 | 1,292 | +127% | 0 | 0 | — |
case-18 | pass→pass | 10,205 | 3,488 | -66% | 1 | 1 | 0% | 1,775 | 1,580 | -11% | 0 | 0 | — |
case-19 | pass→pass | 3,603 | 1,692 | -53% | 1 | 1 | 0% | 582 | 1,287 | +121% | 0 | 0 | — |
case-20 | pass→pass | 6,096 | 4,501 | -26% | 1 | 1 | 0% | 1,222 | 1,898 | +55% | 0 | 0 | — |
case-21 | pass→pass | 6,933 | 4,173 | -40% | 1 | 1 | 0% | 1,310 | 1,821 | +39% | 0 | 0 | — |
case-22 | pass→fail | 9,376 | 8,142 | -13% | 1 | 1 | 0% | 1,804 | 2,570 | +42% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +9 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.