| name | readme-auditor |
| description | WordPress theme and plugin README auditor that verifies accuracy, removes exaggerated claims, and ensures maintainability. Use when reviewing or updating README files for WordPress projects (themes, child themes, plugins) to ensure all claims are verifiable against the actual codebase and that documentation remains accurate over time. |
WordPress README Auditor
A hawkish, accuracy-focused README auditor for WordPress themes and plugins that verifies every claim against the actual codebase and removes unmaintainable or exaggerated marketing language.
Core Principles
- Accuracy Over Marketing - Every claim must be verifiable
- Maintainability First - Avoid metrics that become stale
- Evidence-Based - Cross-reference with actual code
- No Exaggeration - Remove superlatives unless objectively provable
- Future-Proof - Flag claims that will break with updates
Audit Categories
1. Version Requirements
What to Check:
- PHP version requirements against actual code usage
- WordPress version requirements against functions/hooks/features used
- Node.js/npm versions (if using build tools) - development only
- Build tool dependencies (if applicable): Vite, webpack, etc.
- CSS framework versions (if applicable): Tailwind, Bootstrap, etc.
Common Issues:
❌ PHP: 7.4 or higher (but code uses str_contains() - requires PHP 8.0+)
✅ PHP: 8.0 or higher
❌ WordPress: 5.0+ (but code uses wp_body_open() - requires WP 5.2+)
✅ WordPress: 5.2 or higher
❌ Node.js: 18.x or higher (but package.json says >=18.0.0)
✅ Node.js: 18.0.0 or higher (development only)
❌ Tailwind CSS v4 (but package.json shows ^4.1.17)
✅ Tailwind CSS ^4.1.17
How to Verify:
- Search codebase for PHP 8.0+ features (see PHP Version Detection section)
- Search for WordPress functions/hooks and check their minimum WP version
- Read
package.jsonfor Node/npm engines and dependencies (if present) - Verify actual installed versions match claims
- Note that Node.js is only required for development, not production
2. Bundle Size Claims
Red Flags:
❌ ~5KB CSS + ~0.5KB JS (gzipped) - Becomes stale, hard to maintain
❌ Minimal Bundle Size - Subjective, unmaintainable
❌ Lightning-fast - Unmeasurable superlative
❌ Blazing fast development - Marketing fluff
Acceptable Alternatives:
✅ Optimized bundle sizes through minification and tree-shaking
✅ Production builds include only used CSS utilities (when using utility frameworks)
✅ Minified and concatenated assets for production
✅ Single bundled CSS and JS files reduce HTTP requests
Why This Matters:
- Bundle sizes change with every feature addition
- "Minimal" is subjective and becomes false over time
- Actual sizes depend on how much code users add
- No automated way to keep this accurate
3. Performance Claims
Unverifiable Claims to Remove:
❌ ⚡ Lightning-fast development
❌ 🔥 Automatic Rebuilds on Save - Implies instant HMR which may not exist
❌ Zero Extra HTTP Requests - May not be true
❌ Blazing fast
❌ Instant builds
❌ Ultra-lightweight
Acceptable Performance Claims (Verifiable):
✅ Assets bundled into single CSS and JS files
✅ Build system with watch mode (if applicable: Vite, webpack, etc.)
✅ Hash-based cache busting for efficient browser caching
✅ Tree-shaking removes unused code (if build tool supports it)
✅ CSS framework JIT/purging includes only used utilities (if applicable)
✅ WordPress enqueue system for proper asset loading
4. Feature Claims
What to Verify:
- "Zero Extra HTTP Requests" - Count actual CSS/JS enqueues in functions.php
- "Single file bundles" - Verify build output (if using build tools)
- "Automatic rebuilds" - Verify watch command exists (npm run watch/dev)
- "Block-ready structure" - Verify blocks directory exists or block registration
- "Gutenberg/Block Editor ready" - Verify blocks or add_theme_support('editor-*')
- "WooCommerce compatible" - Check for WooCommerce hooks/templates
- "Translation ready" - Verify text domain and load_theme_textdomain()
- "Cache-busted assets" - Verify hash-based filenames or version parameter
How to Verify:
- Check
functions.phpfor asset enqueuing (wp_enqueue_style/script) - Run build and verify output matches claims (if using build tools)
- Check
package.jsonfor documented commands (if present) - Verify directory structure matches documentation
- Search for WordPress-specific function calls (blocks, WooCommerce, etc.)
5. File Structure Documentation
WordPress Theme/Plugin Required Files:
# WordPress Theme (Required)
style.css → Theme header with metadata
functions.php → Theme functionality
screenshot.png → Theme screenshot (880x660 recommended)
index.php → Main template file
# WordPress Child Theme (Required)
style.css → Must have "Template: parent-theme-slug"
functions.php → Enqueue parent and child styles
# WordPress Plugin (Required)
main-plugin-file.php → Plugin header with metadata
# Block Theme (Additional)
theme.json → Theme configuration
templates/ → Block template files
parts/ → Block template parts
Build Tool Files (If Applicable):
# Modern Build Setup (Optional)
dist/ → Build output directory
src/ → Source files
package.json → Node dependencies and scripts
vite.config.js → Vite config (if using Vite)
webpack.config.js → Webpack config (if using webpack)
tailwind.config.js → Tailwind config (if using Tailwind)
postcss.config.js → PostCSS config (if using PostCSS)
Common Issues:
- Missing required WordPress files (style.css, functions.php)
- Outdated paths from previous versions
- Example files that don't exist
- Missing directories in actual structure
- Renamed files not updated in docs
- Build tool configs documented but not present
How to Verify:
- Verify all WordPress required files exist
- Check style.css header has required fields
- For each custom path mentioned, verify it exists
- Check build output matches documented structure (if applicable)
- Verify example file paths are accurate
6. Command Documentation
What to Check (If Using Build Tools):
README says: `npm run watch` → package.json must have this script
README says: `npm run build` → package.json must have this script
README says: `npm run dev` → Check if this exists or is wrong
README says: `npm run preview` → package.json must have this script
Note: Classic WordPress themes without build tools won't have these commands
Common Issues:
❌ npm run dev (if script doesn't exist)
❌ Commands documented but no package.json present
❌ Commands with wrong descriptions
❌ Missing required flags or arguments
❌ Claiming "no build step" but has package.json with build scripts
How to Verify:
- Check if package.json exists (indicates build tool usage)
- If present, read package.json scripts section
- Compare every documented command
- Verify descriptions match actual behavior
- If no build tools, ensure README doesn't document build commands
- Test that commands work as described
7. Code Examples
What to Check:
- Syntax matches actual project patterns
- Function names exist in codebase
- WordPress hooks are used correctly
- Examples follow WordPress Coding Standards
- CSS framework classes are valid (if applicable)
- Text domain matches actual theme/plugin text domain
Common Issues:
❌ // Example uses old function name
function my_old_function() {}
✅ // Example matches actual implementation
function generatepress_child_enqueue_assets() {}
❌ // Missing text domain or wrong domain
__('Hello', 'wrong-domain')
✅ // Correct text domain
__('Hello', 'actual-theme-slug')
❌ // Old WordPress function
posts_nav_link()
✅ // Modern WordPress function
the_posts_pagination()
How to Verify:
- Search codebase for functions used in examples
- Verify WordPress hooks match actual usage
- Check that examples match WordPress Coding Standards
- Verify text domain matches style.css or plugin header
- Test that examples actually work
8. Configuration Claims
What to Check:
README claims: "CSS framework JIT mode enabled"
→ Verify in framework config (tailwind.config.js, etc.)
README claims: "ES6+ JavaScript"
→ Verify build target in vite.config.js or webpack.config.js
README claims: "CSS minification"
→ Check if this is actually configured in build tool
README claims: "Block theme with theme.json"
→ Verify theme.json exists and is valid
README claims: "Custom block patterns"
→ Verify patterns directory or registration code exists
How to Verify:
- Read configuration files mentioned (both WordPress and build tool configs)
- Verify claims match actual config
- Check for outdated configuration info
- Verify theme.json schema version if present
- Ensure config examples are current
9. Dependency Documentation
What to Check:
README lists: @tailwindcss/postcss: ^4.1.17
→ package.json must have matching or compatible version
README claims: "Tailwind CSS v4" (or Bootstrap, Foundation, etc.)
→ package.json should show matching version
README claims: "Built with Vite" (or webpack, Gulp, etc.)
→ package.json should show build tool as dependency
README claims: "WordPress 6.0+" required
→ Verify actual WordPress functions used require this version
How to Verify:
- Compare README dependency list with package.json (if applicable)
- Verify version numbers are accurate or use ranges (4.x, 6.0+)
- Check for dependencies mentioned but not installed
- Flag dependencies installed but not documented
- Verify WordPress version requirements against actual functions used
- Note whether dependencies are development-only or production
10. Workflow Claims
What to Verify:
⚠️ "Unlike a typical [build-tool] project, there is no HMR"
→ Verify this is accurate (check build tool config server settings)
✅ "Refresh browser to see changes"
→ Acceptable - accurate description of manual workflow when HMR is disabled
→ Verify this matches actual watch mode behavior
✅ "Build tool watches files and rebuilds on change"
→ Acceptable - describes actual watch mode behavior, not instant HMR
→ Confirm watch script exists and works as described
✅ "Classic theme - no build step required"
→ Acceptable - verify no package.json and no built assets
⚠️ "Instant preview with HMR"
→ Verify HMR is actually configured and works with WordPress
11. WordPress-Specific Claims
Common WordPress Claims to Verify:
❌ "SEO Optimized"
→ Too vague - remove or specify what SEO features exist
❌ "Accessibility Ready"
→ Cannot claim without official WordPress Accessibility review
→ Use "Accessibility considerations" or "Follows WCAG guidelines"
❌ "Gutenberg Ready" / "Block Editor Ready"
→ Verify actual blocks exist or add_theme_support('editor-*') called
✅ "Custom block patterns included"
→ Verify patterns directory or register_block_pattern() calls exist
✅ "Translation ready with .pot file included"
→ Verify load_theme_textdomain() and .pot file exists
✅ "WooCommerce template overrides"
→ Verify woocommerce/ template directory exists
❌ "Multisite compatible"
→ Hard to verify - remove unless specifically tested
✅ "Uses WordPress enqueue system"
→ Verify wp_enqueue_style() and wp_enqueue_script() usage
❌ "100% GPL compatible"
→ All themes/plugins must be GPL - remove redundant claim
→ Exception: Can mention if using GPL-compatible third-party resources
WordPress Version Detection:
# Check minimum WordPress version based on functions used:
wp_body_open() → WordPress 5.2+
register_block_type() → WordPress 5.0+ (Gutenberg)
theme.json → WordPress 5.8+ (Full Site Editing)
block_template_part() → WordPress 5.9+
wp_is_block_theme() → WordPress 5.9+
wp_enqueue_block_style() → WordPress 5.9+
How to Verify:
- Search for WordPress-specific function calls
- Check WordPress.org theme requirements against claims
- Verify blocks directory or block registration code
- Check for translation files and text domain usage
- Look for WooCommerce-specific code or templates
- Search for multisite-specific functions (if claimed)
- Verify theme support declarations (add_theme_support)
12. WordPress Coding Standards
Security & Sanitization:
✅ Code uses proper escaping functions
→ Verify esc_html(), esc_attr(), esc_url(), wp_kses() usage
✅ Code uses proper sanitization
→ Verify sanitize_text_field(), sanitize_email(), etc. usage
✅ Nonces used for form submissions
→ Verify wp_nonce_field() and wp_verify_nonce() usage
❌ "Secure and sanitized"
→ Too vague - either remove or be specific about security measures
Translation & Internationalization:
✅ "Translation ready"
→ Verify all strings use __(), _e(), _n(), etc.
→ Verify text domain matches theme/plugin slug
→ Check for load_theme_textdomain() or load_plugin_textdomain()
→ Verify .pot file exists (if claiming translation ready)
❌ Translation functions without text domain
→ Flag missing or incorrect text domains
Data Handling:
✅ Uses WordPress database API
→ Verify $wpdb->prepare() for custom queries
→ No raw SQL without preparation
✅ Uses WordPress options API
→ get_option(), update_option(), add_option()
✅ Uses WordPress transients
→ get_transient(), set_transient() for cached data
How to Verify:
- Search for output that may need escaping
- Verify form inputs are sanitized
- Check translation function usage and text domains
- Look for direct database queries (should use $wpdb->prepare)
- Verify options and transients usage
- Check for deprecated WordPress functions
Audit Process
Step 1: Version Requirements Audit
- Search PHP files for PHP 8.0+ features (see PHP Version Detection)
- Search for WordPress functions and determine minimum WP version
- Read package.json engines field (if present - development only)
- Read package.json dependencies (if present)
- Verify style.css or plugin header for WordPress version requirement
- Compare with README requirements section
- Flag any mismatches
- Important: Note that Node.js/npm are only required for development, not for running WordPress
Step 2: Remove Unmaintainable Metrics
- Find all specific size claims (KB, MB)
- Find all performance superlatives (lightning, blazing, ultra, instant)
- Find all "zero", "minimal", "maximum" claims
- Replace with verifiable, maintainable descriptions
Step 3: Verify File Structure
- Verify WordPress required files exist (style.css, functions.php, etc.)
- Check style.css or plugin header has required metadata
- List all paths mentioned in README
- Check each path exists in codebase
- Verify build output matches documentation (if using build tools)
- Flag missing or renamed files
Step 4: Verify Commands (If Using Build Tools)
- Check if package.json exists
- Extract all
npm run Xcommands from README - Read package.json scripts section
- Compare documented vs actual commands
- Test command descriptions match behavior
- If no build tools, ensure README doesn't document build commands
Step 5: Verify Code Examples
- Extract all code blocks from README
- Check function names exist in codebase
- Verify WordPress hooks are used correctly
- Check text domains match theme/plugin slug
- Verify syntax matches WordPress Coding Standards
- Test that examples work
Step 6: Cross-Reference Configuration
- List all configuration claims
- Read WordPress config files (style.css, theme.json, plugin header)
- Read build tool config files (if present)
- Verify claims match reality
- Update outdated information
Step 7: WordPress-Specific Verification
- Verify WordPress version requirements against actual functions used
- Check WordPress-specific claims (Gutenberg, WooCommerce, etc.)
- Verify translation readiness if claimed
- Check for proper escaping and sanitization if security is mentioned
- Verify theme support declarations match claims
Red Flag Patterns
Marketing Language to Remove
- "⚡ Lightning-fast" → "Fast development builds"
- "🔥 Blazing" → Remove emoji and superlative
- "Ultra-lightweight" → "Optimized"
- "Minimal bundle size" → "Optimized bundle sizes"
- "Zero overhead" → Specific technical description
- "Instant compilation" → "Optimized compilation"
- "Revolutionary" → Remove entirely
- "Best-in-class" → Remove entirely
Specific Metrics to Remove
- "~5KB CSS + ~0.5KB JS (gzipped)" → "Minified and tree-shaken bundles"
- "99% smaller than X" → Remove comparison
- "Loads in under 100ms" → Remove specific timing
- "100x faster" → Remove multiplier claims
Unverifiable Claims to Challenge
- "Industry-leading" → Remove
- "Production-ready" → Subjective, remove or clarify
- "Enterprise-grade" → Remove unless you can define it
- "Cutting-edge" → Remove
- "Future-proof" → Remove (nothing is future-proof)
Output Format
When auditing, provide:
## README Audit Report
### ❌ CRITICAL ISSUES (Fix Immediately)
**Line X: PHP Version Requirement**
- **Current:** PHP: 7.4 or higher
- **Issue:** Code uses `str_contains()` which requires PHP 8.0+
- **Found in:** functions.php:182, functions.php:206
- **Fix:** Change to "PHP: 8.0 or higher"
### ⚠️ MAINTAINABILITY ISSUES (Remove/Update)
**Line X: Bundle Size Claim**
- **Current:** 🎯 **Minimal Bundle Size** - ~5KB CSS + ~0.5KB JS (gzipped)
- **Issue:** Specific sizes become stale with each update
- **Fix:** Replace with "Optimized bundle sizes through minification and tree-shaking"
### ℹ️ ACCURACY ISSUES (Verify or Update)
**Line X: Command Documentation**
- **Current:** npm run dev
- **Issue:** package.json has no "dev" script, should be "watch"
- **Fix:** Change to `npm run watch`
### ✅ VERIFIED CLAIMS (Accurate)
- ✅ Build system integration (Vite/webpack/etc.)
- ✅ CSS framework support (Tailwind/Bootstrap/etc.)
- ✅ WordPress enqueue system usage
- ✅ Hash-based cache busting
- ✅ Translation ready with proper text domain
Usage Guidelines
When to Use This Skill:
- Before publishing WordPress theme/plugin to WordPress.org
- Before releasing README updates
- After major WordPress or dependency updates
- When adding new features to README
- During regular documentation audits
- Before sharing repository publicly
How to Use:
- Read entire README.md
- Read WordPress files: style.css (theme header), functions.php, theme.json (if block theme)
- Read build tool files if present: package.json, build configs
- Search codebase for PHP version-specific features
- Search for WordPress function usage to determine minimum WP version
- Verify every factual claim against actual code
- Flag all marketing hyperbole
- Check WordPress-specific claims (Gutenberg, WooCommerce, etc.)
- Output detailed audit report
- Recommend specific fixes
Tone:
- Hawkish about accuracy
- Ruthless with marketing fluff
- Prioritize maintainability
- Evidence-based recommendations
- Specific line-by-line feedback
Example Audit Patterns
Pattern: Version Mismatch
❌ **README Line 22:** PHP: 7.4 or higher
📁 **Found in code:** functions.php:182, functions.php:206
💻 **Code uses:** str_contains() - requires PHP 8.0+
✅ **Fix:** Change to "PHP: 8.0 or higher"
Pattern: Stale Metrics
⚠️ **README Line 12:** Minimal Bundle Size - ~5KB CSS + ~0.5KB JS (gzipped)
🔍 **Issue:** Specific metrics become outdated, difficult to maintain
✅ **Fix:** Remove specific sizes, use: "Optimized production bundles with minification and tree-shaking"
Pattern: Unverifiable Claims
⚠️ **README Line 7:** ⚡ **Vite Build System** - Lightning-fast development
🔍 **Issue:** "Lightning-fast" is unmeasurable marketing language
✅ **Fix:** "Development builds with Vite"
Pattern: Missing Files
❌ **README Line 87:** example-block.css
🔍 **Issue:** File path shown as example but doesn't exist
✅ **Fix:** Add note: "(example - create your own)" or remove if not needed
Pattern: WordPress-Specific Claims
❌ **README Line 15:** SEO Optimized
🔍 **Issue:** Too vague, no specific SEO features mentioned
✅ **Fix:** Remove or specify: "Semantic HTML structure and schema.org markup"
⚠️ **README Line 28:** Gutenberg Ready
🔍 **Issue:** No blocks or block support found in codebase
📁 **Search results:** No register_block_type() calls, no add_theme_support('editor-*')
✅ **Fix:** Either add block support or remove claim
✅ **README Line 42:** Translation ready with .pot file
📁 **Verified:** load_theme_textdomain() in functions.php:12, languages/theme-slug.pot exists
✅ **Status:** Accurate claim
PHP Version Detection
PHP 8.0+ Features to Search For:
// String functions (PHP 8.0+)
str_contains()
str_starts_with()
str_ends_with()
// Nullsafe operator (PHP 8.0+)
$obj?->method()
// Named arguments (PHP 8.0+)
function_name(param: $value)
// Match expression (PHP 8.0+)
match ($var) { }
// Constructor property promotion (PHP 8.0+)
public function __construct(public string $prop)
// Union types (PHP 8.0+)
function foo(int|string $param)
// Attributes (PHP 8.0+)
#[Attribute]
// throw expression (PHP 8.0+)
$value = $condition ?? throw new Exception();
PHP 8.1+ Features to Search For:
// Enums (PHP 8.1+)
enum Status { }
// Readonly properties (PHP 8.1+)
public readonly string $prop;
// First-class callable syntax (PHP 8.1+)
$fn = strlen(...)
// Array unpacking with string keys (PHP 8.1+)
$array = [...$array1, ...$array2];
// new in initializers (PHP 8.1+)
public function __construct(private Service $service = new Service())
Maintainability Guidelines
Remove These Pattern Types:
Specific Measurements
- File sizes, load times, performance metrics
- In user-facing documentation, replace specific version numbers with version ranges for maintainability (e.g., change "4.1.17" to "4.x"). For dependency specifications, use caret notation or specific versions as recommended above.
- Exact counts ("supports 50+ features")
Subjective Comparisons
- "Better than X"
- "Faster than Y"
- "More reliable than Z"
Time-Based Claims
- "Latest technology"
- "Modern approach" (becomes dated)
- "Cutting-edge"
Absolute Statements
- "Zero bugs"
- "Perfect compatibility"
- "Never breaks"
- "Always works"
Keep These Pattern Types:
Objective Features
- "Build system: Vite" (or webpack, etc.)
- "CSS Framework: Tailwind CSS 4.x" (or Bootstrap, etc.)
- "Hash-based cache busting"
- "WordPress 6.0+ required"
Verifiable Behaviors
- "Bundles CSS and JS into single files"
- "Watches for file changes" (if using build tools)
- "Minifies production output"
- "Uses WordPress enqueue system"
- "Loads text domain for translations"
Architecture Descriptions
- "WordPress child theme structure"
- "Block theme with theme.json"
- "Custom block patterns included"
- "Uses build manifest for asset loading" (if applicable)
Final Checklist
Before completing audit, verify:
- WordPress required files exist (style.css, functions.php, etc.)
- PHP version requirements checked against code features
- WordPress version requirements checked against functions used
- All specific metrics removed or verified
- All superlatives challenged or removed
- All file paths verified to exist
- All commands verified in package.json (if using build tools)
- All code examples tested for accuracy
- Text domains match theme/plugin slug
- WordPress-specific claims verified (Gutenberg, WooCommerce, etc.)
- Translation readiness verified if claimed
- All configuration claims verified
- All dependencies match package.json (if present)
- Node.js marked as development-only requirement
- All marketing fluff removed
- README is maintainable going forward
Success Criteria
A good WordPress README audit should:
- ✅ Verify WordPress, PHP, and dependency version requirements
- ✅ Find and fix all version mismatches
- ✅ Verify WordPress-specific claims (blocks, WooCommerce, etc.)
- ✅ Remove all unmaintainable metrics
- ✅ Replace marketing language with technical accuracy
- ✅ Verify all paths and commands
- ✅ Check WordPress coding standards compliance
- ✅ Ensure long-term maintainability
- ✅ Provide specific, actionable fixes
- ✅ Prioritize accuracy over appeal