<< All versions
Detect (function calls only — match
Skill v1.0.0
currentAutomated scan100/100laraveldaily/ai-workflows-for-laravel/laraveldaily-production-readiness-audit
──Details
PublishedOctober 27, 2026 at 04:25 AM
Content Hashsha256:d5dc8cbee827e19c...
Git SHA6c7a0355ec15
──Files
Files (1 file, 7.4 KB)
SKILL.md7.4 KBactive
SKILL.md · 292 lines · 7.4 KB
version: "1.0.0" name: laraveldaily-production-readiness-audit description: Perform a comprehensive security audit of all project files in the current working directory.
Skill: laraveldaily-production-readiness-audit
Purpose
Audit a Laravel codebase for production-readiness risks using only repository contents.
This skill MUST:
- Run locally
- NOT assume anything about production environment
- NOT rely on
.envvalues - ONLY report high-confidence issues detectable from code
Core Principle
Only report issues that can be inferred from the repository with high confidence.Do NOT assume server configuration, deployment process, or runtime environment.
Output Format
Return results in this structure:
❌ Critical Findings
- ...
⚠️ Warnings
- ...
ℹ️ Notes
- ...
Severity Rules
❌ Critical
High confidence production risk or data leak.
⚠️ Warning
Strong code smell or likely issue.
ℹ️ Note
Non-blocking observation.
Audit Checks
1. Secrets & Sensitive Data (CRITICAL)
Search entire repo for:
Patterns:
.envfiles committed (NOT.env.example— that is expected)- API keys / tokens:
sk_live_AKIA-----BEGIN PRIVATE KEY------ Hardcoded credentials in code/config (literal strings, NOT
env()references) - Logs committed:
storage/logs/*.log
Exclusions (DO NOT flag):
.env.example— this is a template, not a secretenv('SOME_SECRET')orenv('API_TOKEN')insideconfig/*.php— these are config placeholders referencing environment variables, not leaked secrets- Constants or variable names containing SECRET/TOKEN (e.g.,
$tokenSecret,TOKEN_LIFETIME,CSRF_TOKEN) — flag only actual secret values, not names
Output:
- ❌ if any real secret values detected (actual keys, passwords, tokens in plaintext)
- ⚠️ if suspicious but ambiguous strings
2. Debug Code in Runtime (CRITICAL)
Search in:
app/routes/database/
Detect (function calls only — match functionName( as a standalone call):
dd(ray(var_dump(print_r(phpinfo(
Detect with care (high false-positive risk):
dump(— ONLY flag if it is a standalonedump(...)call. Do NOT flag:Dumpabletrait,shouldDump(),$dumper, or any method/variable name containing "dump".exit(— ONLY flag in controllers, middleware, jobs, and service classes. Do NOT flag in Artisan commands whereexit(0)/exit(1)is a legitimate process exit pattern.die(— ONLY flag in controllers, middleware, jobs, and service classes.
Rules:
- ❌ if inside controllers, middleware, jobs, service classes
- Ignore if inside
tests/directory - ⚠️ for
exit(in Artisan commands (legitimate but worth noting)
3. env() Misuse (CRITICAL)
Rule:
Search for env( usage outside allowed locations.
Allowed:
config/*.phpbootstrap/app.phpbootstrap/providers.php
Flag:
- anywhere else (controllers, models, services, routes, views, etc.)
Output:
- ❌ always (Laravel best-practice violation — after config caching,
env()returns null outside config files)
4. Dangerous Seed Data (CRITICAL / WARNING)
Search:
database/seedersdatabase/factories
Differentiate between factories and seeders:
Factories (expected for testing — lower severity):
Hash::make('password')orbcrypt('password')in a factory is the Laravel default and is expected. Do NOT flag as critical.- ⚠️ only if the factory uses real-looking credentials (actual email domains, non-placeholder passwords)
Seeders (may run in production — higher severity):
- ❌ if a seeder creates users with hardcoded passwords (
'password','123456','admin','secret') - ❌ if a seeder assigns admin/superadmin roles with hardcoded credentials
- ⚠️ if a seeder uses hardcoded demo emails (
admin@example.com,test@test.com) without environment guards
Output:
- ❌ if clearly usable credentials in seeders
- ⚠️ if suspicious/demo data in seeders or non-default credentials in factories
5. Dependency Integrity (WARNING)
Check:
composer.lockexists- frontend lockfile exists:
package-lock.jsonyarn.lockpnpm-lock.yaml
Detect:
- dev packages used in runtime code
Output:
- ⚠️ missing lockfiles
- ⚠️ runtime usage of dev-only packages
6. Asset Build Consistency (WARNING)
Detect mismatches:
- Blade uses:
@vite(...)but novite.config.*mix(...)but no Mix config
package.jsonexists but:- no
buildscript
- references to missing assets
Output:
- ❌ if clearly broken references
- ⚠️ if incomplete setup
7. Production-Breaking Code Patterns (WARNING)
Search for:
Warning:
abort(500)— sometimes intentional but worth reviewing- comments containing:
TODO removeorTODO: removeFIXME- Do NOT flag:
temporaryas a standalone word (matches legitimate uses liketemporaryUrl(),temporarySignedRoute()). Only flag comments explicitly saying "this is temporary" or "temporary hack/fix/workaround". - Do NOT flag:
debugas a standalone word (matchesdebugbar,debug_backtrace, log channel names). Only flag comments explicitly saying "debug code" or "remove debug".
Note:
- This check does NOT flag
dd(,die(,dump(, orexit(— those are covered in Check 2 to avoid duplicate findings.
8. Queue & Job Smells (WARNING)
Detect:
- Jobs using closures (non-serializable)
- Jobs doing heavy sync work
- Missing retry/backoff/timeout hints
Output:
- ⚠️ only (no assumptions about infra)
9. Logging & Exception Handling (WARNING)
Detect:
- empty
catchblocks - swallowed exceptions
- broad
catch (\Exception)with no logging - logs containing sensitive data patterns
Output:
- ⚠️
10. Missing Rate Limiting on Auth Routes (WARNING)
Detect:
- Login, registration, and password reset routes without
throttlemiddleware - Check
routes/web.php,routes/auth.php, and Fortify configuration - If Fortify is used, check if
limiter()is configured inFortifyServiceProvider
Output:
- ⚠️ if auth routes lack throttle/rate limiting middleware
11. Sensitive Data Exposure in Models (WARNING)
Detect:
- Models without
$hiddenproperty that have sensitive columns (check migrations or schema for:password,remember_token,two_factor_secret,two_factor_recovery_codes,secret,api_token) - Models that are returned directly in API responses (via routes or resources) without ensuring sensitive fields are hidden
- Eloquent API Resources that include sensitive fields
Output:
- ⚠️ if sensitive columns exist on a model but
$hiddendoes not cover them
Execution Strategy
- Scan file tree
- Grep for patterns
- Parse:
- composer.json
- package.json
- routes
- app code
- Classify findings by severity
- Deduplicate results (do NOT report the same issue under multiple checks)
- Output structured report
Explicit Non-Goals
DO NOT check:
.envvalues correctness- APP_ENV / APP_DEBUG values
- cache/session/queue drivers
- Redis / DB availability
- file permissions
- server config (Nginx, Apache)
- SSL / HTTPS
- cron jobs
- deployment scripts
- whether
config:cacheis run
Final Rule
If unsure → DO NOT report.
Prefer missing an issue over producing a false positive.