Skip to content

Conversation

@ashleyshaw
Copy link
Member

@ashleyshaw ashleyshaw commented Dec 17, 2025


name: "Pull Request"
about: "General changes, refactors, and maintenance"
title: "PR: {short summary}"
labels: ["status:needs-review"]

Summary

This PR consolidates the project structure and adds comprehensive testing infrastructure through 5 phases:

  • Phase 1: Added logger, schema validation, and initial test infrastructure
  • Phase 2: Integrated logging system and cleanup into theme generator
  • Phase 3: Enforced heading-based markdown reference checks for *.instructions.md files with audit reports
  • Phase 4: Added npm scripts for validation workflows
  • Phase 5: Final consolidation of project structure with comprehensive refactoring

Key Changes

  • Reorganized agent scripts into scripts/agents/ directory with proper structure
  • Added comprehensive test infrastructure with Jest configuration and helpers
  • Created schema files for frontmatter validation, plugin config, and theme validation
  • Added test documentation for Jest, PHPUnit, and Playwright
  • Implemented dry-run testing configuration and utilities
  • Created GitHub test infrastructure in .github/tests/
  • Added frontmatter audit reports in .github/reports/analysis/
  • Updated all agent files with corrected markdown references
  • Cleaned up legacy test files and consolidated project structure

Changes Overview

  • 496 files changed: 68,547 insertions(+), 10,756 deletions(-)
  • Major refactoring focused on organization and testing infrastructure
  • No breaking changes to existing functionality

Test Plan

  • Verify all agent scripts run correctly from new locations
  • Run Jest tests to ensure test infrastructure works
  • Validate schema files against example configurations
  • Test dry-run configuration
  • Verify markdown reference validation works correctly
  • Check that all documentation links are valid

🤖 Generated with Claude Code

Summary by CodeRabbit

  • Testing

    • Enhanced Jest test configuration with localStorage support and improved setup.
    • Added comprehensive testing documentation for Jest, Playwright, and PHPUnit.
    • Introduced shared test helper utilities for logging and retry operations.
  • Documentation

    • Added development instruction index and reference guides.
    • Documented frontmatter schema for agent specifications.
    • Created release process guidelines with placeholder support.
  • Configuration

    • Added JSON schema validation for theme configuration, block definitions, and mustache variables.
    • Enhanced ESLint configuration with Jest environment support.
  • Build & Release

    • Improved release validation workflow for generated themes.
    • Added schema validation steps to release process.

✏️ Tip: You can customize this high-level summary in your review settings.

ashleyshaw and others added 6 commits December 15, 2025 16:00
This plan breaks down the design into 35 tasks across 6 phases:
- Phase 1: Core infrastructure (logger + schema)
- Phase 2: Generator integration (logging + Phase 1 cleanup)
- Phase 3: Documentation updates (4 files)
- Phase 4: Release scaffold enhancement
- Phase 5: Workflow cleanup + npm scripts
- Phase 6: Integration testing (5 test scenarios)

Includes dependencies, testing steps, and validation criteria for each task.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…ons.md link checks, update docs, and add latest audit report

- Restricts forbidden *.instructions.md link checks to ## References/See Also headings in scripts/check-markdown-references.js
- Updates screenshot.png.md to comply with new guardrail
- Adds README.md and _index.instructions.md to .github/instructions/
- Includes only the latest audit report (2025-12-15-154025-frontmatter-audit.csv) per reporting policy
- All tests and checks pass
Implements Phase 1 of logging and schema validation system:

- Logger module (scripts/lib/logger.js): JSON logging to logs/generate-theme-{{slug}}.log
- Mustache variables schema: Documents all 89 template variables with validation
- Schema validation test: 3-level validation (structure, known vars, registry sync)

All validation checks pass:
✓ Schema structure valid (JSON Schema draft-07)
✓ All known variables documented
✓ Registry synced with codebase (89 variables)

Related to implementation plan in docs/plans/2025-12-15-implementation-plan.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implements Phase 2 of logging system:

**Logging Integration:**
- Start log: Created when generation begins (status: 'started')
- Success log: Created after successful generation (status: 'success')
- Error log: Created in catch block for failures (status: 'failure')
- Logs written to logs/generate-theme-{{slug}}.log

**Phase 1 Cleanup:**
- Automatically deletes scaffold-specific release files after generation:
  - .github/agents/release-scaffold.agent.md
  - .github/prompts/release-scaffold.prompt.md
  - .github/instructions/release-scaffold.instructions.md
  - docs/RELEASE_PROCESS_SCAFFOLD.md
- Generated themes are clean and ready for independent release process

**Error Handling:**
- Graceful fallback if logging fails (doesn't break generation)
- Uses optional chaining for placeholders in error scenarios

Related to implementation plan in docs/plans/2025-12-15-implementation-plan.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Implements Phase 5 of implementation plan:

**NPM Scripts Added:**
- `npm run test:schema` - Run mustache schema validation
- `npm run validate:mustache` - Alias for schema validation

**Workflow Cleanup:**
- Deleted `.github/workflows/agent-generate-theme.yml`
- Generation is local-only, no CI workflow needed

**Testing:**
✓ npm run test:schema passes all 3 validation levels
✓ Schema structure valid
✓ Known variables documented
✓ Registry synced with codebase (89 variables)

Related to implementation plan in docs/plans/2025-12-15-implementation-plan.md

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
…rastructure

Major refactoring to improve project organization and testing:

- Reorganized agent scripts into scripts/agents/ directory
- Added comprehensive test infrastructure with Jest setup
- Created new schema files for frontmatter, plugin config, and theme validation
- Added test documentation for Jest, PHPUnit, and Playwright
- Implemented dry-run testing configuration
- Added validation utilities and helpers
- Created GitHub test infrastructure in .github/tests/
- Added frontmatter audit reports
- Updated all agent files with corrected markdown references
- Cleaned up legacy test files and consolidated structure

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@chatgpt-codex-connector
Copy link

Codex usage limits have been reached for code reviews. Please check with the admins of this repo to increase the limits by adding credits.
Credits must be used to enable repository wide code reviews.

@coderabbitai
Copy link

coderabbitai bot commented Dec 17, 2025

Caution

Review failed

The pull request is closed.

Note

.coderabbit.yml has unrecognized properties

CodeRabbit is using all valid settings from your configuration. Unrecognized properties (listed below) have been ignored and may indicate typos or deprecated fields that can be removed.

⚠️ Parsing warnings (1)
Validation error: Unrecognized key(s) in object: '$schema', 'path_filters', 'auto_review', 'path_instructions'
⚙️ Configuration instructions
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json
📝 Walkthrough

Walkthrough

This pull request introduces comprehensive testing infrastructure, reorganizes agent scripts into a dedicated directory, adds schema validation, implements mustache variable handling for templating, establishes release-scaffold workflow separation, and updates documentation with testing guidelines and frontmatter specifications. Multiple npm scripts are reorganized and new workflows are added for validation and theme generation.

Changes

Cohort / File(s) Summary
Configuration & Formatting
.babelrc.json, .devcontainer/devcontainer.json, .eslintrc.js, .lighthouserc.js, .npmpackagejsonlintrc.json, .npmrc, .stylelintignore, .wp-env.json, phpcs.xml
Minor formatting updates (spacing normalization), removed resolution-mode=highest from .npmrc, expanded exclusion patterns in phpcs.xml, added .stylelintignore with coverage/build/vendor patterns
Jest Configuration
jest.config.js, scripts/__tests__/jest.config.js, .github/tests/jest.setup.localstorage.js
Introduced localStorage setup, added moduleNameMapper for CSS/asset imports, extended setupFilesAfterEnv with new setup files, added output-theme and .github to testPathIgnorePatterns
Schema Files (New)
.github/schemas/frontmatter.schema.json, .github/schemas/mustache-variables-registry.schema.json, .github/schemas/plugin-config.schema.json, .github/schemas/theme.6.9.json, .github/instructions/block-json.schema.json
Introduced JSON schemas for agent frontmatter (with permissions enum), WordPress block theme definitions, plugin configuration, mustache variables registry, and block.json validation
Test Infrastructure & Helpers
.github/__tests__/test-helper.js, .github/__tests__/README.md, .github/tests/setup.js, .github/tests/test-utils.js, .github/tests/README.md, .github/tests/test-logger.js
New test helpers for Playwright (activateTheme, renderBlock), shared test utilities (retryOperation, assertWithLog, measureExecutionTime, createTestContext), and centralized logging infrastructure for Jest/PHPUnit/E2E
Test Suites (Agents)
scripts/agents/__tests__/*
Comprehensive test suites for agents: block-theme-build, config, development-assistant, gemini, generate-theme, mustache-vars, release-scaffold, release, reporting, template
Test Suites (Core)
scripts/__tests__/agent-script.test.js, scripts/__tests__/audit-frontmatter.test.js, scripts/__tests__/generate-theme.test.js, scripts/__tests__/theme-schema.test.js, .test-temp/localstorage/localstorage.json, scripts/__tests__/test-audit/test.md
Updated test files with formatting, new theme schema validation tests, removed audit-frontmatter test suite, deleted test-audit content
Agent Scripts Reorganization
scripts/agents/*.js, scripts/agents/README.md
Reorganized into scripts/agents/ directory: generate-theme.agent.js (interactive CLI for theme generation), release-scaffold.agent.js (validation workflow), block-theme-build.agent.js (build orchestration), release.agent.js (release automation), reporting.agent.js (report generation), gemini.agent.js (Gemini AI integration), development-assistant.agent.js, template.agent.js
Removed Scripts
scripts/block-theme-build.agent.js, scripts/build.js, scripts/check-markdown-references.js, scripts/clean-github-references.js, scripts/dry-run-test.js
Removed legacy agent, build orchestrator, reference validators, and dry-run test runner (functionality reorganized into agents)
New Utilities
scripts/dry-run-config.js, scripts/agent-script.js, scripts/agents/find-duplicates.js
Introduced dry-run configuration system with mustache variable handling, agent script wrapper with environment masking, file duplicate detection utility
Workflow Updates
.github/workflows/agent-build.yml, .github/workflows/agent-release.yml, .github/workflows/agent-reporting.yml, .github/workflows/release-scaffold.yml (new), .github/workflows/agent-generate-theme.yml (removed), .github/workflows/theme-json-validate.yml (new)
Added release-scaffold and theme-json-validate workflows, updated script paths to agents/ directory, added preflight guard in agent-release to prevent scaffold workflows in generated themes, removed agent-generate-theme workflow
Agent Specs
.github/agents/*.agent.md
Added permissions array and metadata.guardrails to all agent specs (a11y, block-theme-build, development-assistant, gemini, generate-theme, release, release-scaffold, reporting, task-planner, task-researcher, template); expanded release-scaffold and release specs with detailed workflow sections
Instructions & Documentation
.github/instructions/README.md, .github/instructions/_index.instructions.md, .github/instructions/agent-spec.instructions.md, .github/instructions/jest-tests.instructions.md, .github/instructions/phpunit-tests.instructions.md, .github/instructions/playwright-tests.instructions.md, .github/instructions/copilot-ai-agent.instructions.md (removed)
Introduced comprehensive testing guides (Jest, PHPUnit, Playwright), agent specification guidelines, instruction indexing, and removed copilot AI agent documentation
Schema Documentation
.github/schemas/README.md, .github/schemas/examples/README.md, .github/schemas/examples/theme-config.example.json
Added frontmatter.schema.json documentation, updated example schema paths, normalized whitespace in examples
Package Management
package.json
Version bumped to 1.2.0, reorganized npm scripts to route through scripts/agents/, added new test:schema and validate:mustache scripts, added devDependencies (ajv-formats, jest, webpack, loaders), added WordPress packages (@wordpress/block-editor, @wordpress/block-library)
Release & Process Documentation
docs/RELEASE_PROCESS.md, docs/RELEASE_PROCESS_SCAFFOLD.md, docs/GENERATE_THEME.md, docs/FRONTMATTER_SCHEMA.md
Converted release docs to use mustache templates, added scaffold-specific process documentation with schema validation and phase-1 cleanup steps, updated paths to example schemas, introduced frontmatter schema documentation
Repository Configuration
.gitignore
Added output-theme/ ignore, added logs/.gitkeep tracking, updated example schema tracking, changed from template to examples schema references
Planning & Changelog
CHANGELOG.md, docs/plans/2025-12-15-implementation-plan.md, README.md, screenshot.png.md
Updated changelog with testing, logging, and scaffold workflow additions; added implementation plan with logger module and schema validation; updated README with script helpers testing info; removed references section from screenshot documentation

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120+ minutes

Areas requiring extra attention:

  • scripts/agents/release-scaffold.agent.js — 300+ line agent with multiple validation workflows (version consistency, placeholders, schema, quality gates, documentation, generation smoke test, security audit, reporting); requires understanding of scaffold release validation logic and error handling paths
  • .github/workflows/release-scaffold.yml — New 200+ line workflow with complex validation logic including placeholder verification, schema validation, dry-run quality gates, smoke tests, and release notes generation
  • scripts/__tests__/jest.config.js — Significant restructuring of Jest configuration with localStorage setup, new module mappers, and test path patterns; impacts test execution environment
  • package.json — Major reorganization of npm scripts with agent paths, new test commands, and dependency additions; version bump and public API surface changes
  • Agent script reorganization (scripts/agents/)— Multiple new agent scripts with complex CLI parsing, config validation, and public API exports; test coverage for each agent must be verified
  • Schema files (.github/schemas/*.json) — Multiple new JSON schemas with validation rules for frontmatter, mustache variables, plugins, and themes; schema correctness is critical for downstream validation
  • Workflow interdependencies.github/workflows/agent-release.yml, release-scaffold.yml, and release.yml have interdependent job ordering and conditional logic; preflight guards for scaffold detection require careful review
  • Testing infrastructure (.github/tests/*, .github/__tests__/*) — New test helpers and setup files; verify localStorage initialization, test utilities (retryOperation, assertWithLog), and logger integration work correctly across Jest/PHPUnit/E2E contexts
  • Mustache variable handling (scripts/dry-run-config.js, tests) — New templating system with file discovery and variable replacement; verify glob patterns, replacement logic, and DRY_RUN_VALUES completeness
  • Documentation updates — Multiple instruction files with specific guidance on testing, agent specs, and release processes; ensure consistency with actual implementation and tooling
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/markdown-reference-guardrail

📜 Recent review details

Configuration used: Path: .coderabbit.yml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 78adf5f and 990f556.

⛔ Files ignored due to path filters (3)
  • .github/reports/analysis/2025-12-15-153948-frontmatter-audit.csv is excluded by !**/*.csv
  • .github/reports/analysis/2025-12-15-154025-frontmatter-audit.csv is excluded by !**/*.csv
  • .github/reports/analysis/2025-12-15-174022-frontmatter-audit.csv is excluded by !**/*.csv
📒 Files selected for processing (107)
  • .babelrc.json (1 hunks)
  • .devcontainer/devcontainer.json (2 hunks)
  • .eslintrc.js (1 hunks)
  • .github/__tests__/README.md (1 hunks)
  • .github/__tests__/test-helper.js (1 hunks)
  • .github/agents/a11y.agent.md (1 hunks)
  • .github/agents/block-theme-build.agent.md (1 hunks)
  • .github/agents/development-assistant.agent.md (1 hunks)
  • .github/agents/gemini.agent.md (1 hunks)
  • .github/agents/generate-theme.agent.md (1 hunks)
  • .github/agents/release-scaffold.agent.md (5 hunks)
  • .github/agents/release.agent.md (2 hunks)
  • .github/agents/reporting.agent.md (1 hunks)
  • .github/agents/task-planner.agent.md (1 hunks)
  • .github/agents/task-researcher.agent.md (1 hunks)
  • .github/agents/template.agent.md (1 hunks)
  • .github/instructions/README.md (1 hunks)
  • .github/instructions/_index.instructions.md (1 hunks)
  • .github/instructions/agent-spec.instructions.md (3 hunks)
  • .github/instructions/block-json.schema.json (1 hunks)
  • .github/instructions/copilot-ai-agent.instructions.md (0 hunks)
  • .github/instructions/jest-tests.instructions.md (1 hunks)
  • .github/instructions/phpunit-tests.instructions.md (1 hunks)
  • .github/instructions/playwright-tests.instructions.md (1 hunks)
  • .github/schemas/README.md (1 hunks)
  • .github/schemas/examples/README.md (1 hunks)
  • .github/schemas/examples/theme-config.example.json (1 hunks)
  • .github/schemas/frontmatter.schema.json (1 hunks)
  • .github/schemas/mustache-variables-registry.schema.json (1 hunks)
  • .github/schemas/plugin-config.schema.json (1 hunks)
  • .github/schemas/theme-config.schema.json (17 hunks)
  • .github/schemas/theme.6.9.json (1 hunks)
  • .github/tests/README.md (1 hunks)
  • .github/tests/jest.setup.localstorage.js (1 hunks)
  • .github/tests/setup.js (1 hunks)
  • .github/tests/test-logger.js (1 hunks)
  • .github/tests/test-utils.js (1 hunks)
  • .github/workflows/agent-build.yml (1 hunks)
  • .github/workflows/agent-generate-theme.yml (0 hunks)
  • .github/workflows/agent-release.yml (2 hunks)
  • .github/workflows/agent-reporting.yml (1 hunks)
  • .github/workflows/release-scaffold.yml (1 hunks)
  • .github/workflows/release.yml (6 hunks)
  • .github/workflows/theme-json-validate.yml (1 hunks)
  • .gitignore (2 hunks)
  • .lighthouserc.js (1 hunks)
  • .npmpackagejsonlintrc.json (1 hunks)
  • .npmrc (0 hunks)
  • .stylelintignore (1 hunks)
  • .test-temp/localstorage/localstorage.json (1 hunks)
  • .wp-env.json (1 hunks)
  • CHANGELOG.md (1 hunks)
  • README.md (1 hunks)
  • docs/FRONTMATTER_SCHEMA.md (1 hunks)
  • docs/GENERATE_THEME.md (2 hunks)
  • docs/RELEASE_PROCESS.md (11 hunks)
  • docs/RELEASE_PROCESS_SCAFFOLD.md (4 hunks)
  • docs/plans/2025-12-15-implementation-plan.md (1 hunks)
  • jest.config.js (1 hunks)
  • package.json (5 hunks)
  • phpcs.xml (1 hunks)
  • screenshot.png.md (0 hunks)
  • scripts/__tests__/.github/tests/jest.setup.localstorage.js (1 hunks)
  • scripts/__tests__/.test-temp/localstorage/localstorage.json (1 hunks)
  • scripts/__tests__/agent-script.test.js (1 hunks)
  • scripts/__tests__/audit-frontmatter.test.js (3 hunks)
  • scripts/__tests__/block-theme-build.agent.test.js (0 hunks)
  • scripts/__tests__/generate-theme.test.js (1 hunks)
  • scripts/__tests__/jest.config.js (1 hunks)
  • scripts/__tests__/test-audit/test.md (0 hunks)
  • scripts/__tests__/theme-schema.test.js (1 hunks)
  • scripts/agent-script.js (1 hunks)
  • scripts/agents/README.md (1 hunks)
  • scripts/agents/__tests__/block-theme-build.agent.test.js (1 hunks)
  • scripts/agents/__tests__/config.test.js (1 hunks)
  • scripts/agents/__tests__/development-assistant.agent.test.js (1 hunks)
  • scripts/agents/__tests__/gemini.agent.test.js (1 hunks)
  • scripts/agents/__tests__/generate-theme.agent.test.js (1 hunks)
  • scripts/agents/__tests__/mustache-vars.test.js (1 hunks)
  • scripts/agents/__tests__/release-scaffold.agent.test.js (1 hunks)
  • scripts/agents/__tests__/release.agent.test.js (1 hunks)
  • scripts/agents/__tests__/reporting.agent.test.js (1 hunks)
  • scripts/agents/__tests__/template.agent.test.js (1 hunks)
  • scripts/agents/block-theme-build.agent.js (1 hunks)
  • scripts/agents/development-assistant.agent.js (11 hunks)
  • scripts/agents/find-duplicates.js (1 hunks)
  • scripts/agents/gemini.agent.js (1 hunks)
  • scripts/agents/generate-theme.agent.js (1 hunks)
  • scripts/agents/release-scaffold.agent.js (1 hunks)
  • scripts/agents/release.agent.js (12 hunks)
  • scripts/agents/reporting.agent.js (23 hunks)
  • scripts/agents/template.agent.js (1 hunks)
  • scripts/agents/template.agent.test.js (1 hunks)
  • scripts/block-theme-build.agent.js (0 hunks)
  • scripts/build.js (0 hunks)
  • scripts/check-markdown-references.js (0 hunks)
  • scripts/clean-github-references.js (0 hunks)
  • scripts/dry-run-config.js (1 hunks)
  • scripts/dry-run-test.js (0 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/__tests__/config.test.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/dry-run-config.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/__tests__/config.test.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/__tests__/dry-run-config.test.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/__tests__/dry-run-mustache-vars.test.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/__tests__/mustache-vars.test.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/dry-run-config.js (1 hunks)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/__tests__/config.test.js (1 hunks)
⛔ Files not processed due to max files limit (21)
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/dry-run-config.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/dry-run-config.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/dry-run-config.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/mustache-vars.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/dry-run-config.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/config.test.js
  • scripts/dry-run/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/.dry-run-backup/tests/dry-run-config.test.js

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@ashleyshaw ashleyshaw merged commit f58d13b into develop Dec 17, 2025
0 of 13 checks passed
@ashleyshaw ashleyshaw deleted the feature/markdown-reference-guardrail branch December 17, 2025 08:08
@gemini-code-assist
Copy link

Summary of Changes

Hello @ashleyshaw, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors and enhances the project's development and release processes by introducing a robust testing infrastructure, a more organized project structure, and comprehensive validation mechanisms. The changes aim to improve code quality, maintainability, and the reliability of theme generation and release workflows, ensuring consistency and preventing common issues like undocumented variables or circular documentation references. This is a foundational update that streamlines development and prepares the project for future growth.

Highlights

  • Comprehensive Testing Infrastructure: Introduced Jest, PHPUnit, and Playwright testing frameworks with dedicated documentation and helper utilities to ensure code quality and reliability across JavaScript, PHP, and end-to-end flows.
  • Enhanced Project Structure: Reorganized agent scripts into a new scripts/agents/ directory and consolidated various configuration and schema files into logical locations, improving project maintainability and discoverability.
  • Schema Validation: Implemented robust schema validation for agent frontmatter, plugin configuration, and theme validation, including a new Mustache Variables Registry to ensure consistency and prevent undocumented variables.
  • Markdown Reference Guardrails: Enforced heading-based markdown reference checks for *.instructions.md files with audit reports to prevent circular references and maintain a clean documentation hierarchy.
  • Dedicated Release Workflows: Separated release processes for the scaffold repository and generated themes, introducing new validation steps and safeguards to prevent accidental use of incorrect workflows.
  • Improved Logging: Integrated a new logging system into the theme generator for tracking generation status, variables, and validation results, enhancing observability and debugging capabilities.
Ignored Files
  • Ignored by pattern: .github/workflows/** (7)
    • .github/workflows/agent-build.yml
    • .github/workflows/agent-generate-theme.yml
    • .github/workflows/agent-release.yml
    • .github/workflows/agent-reporting.yml
    • .github/workflows/release-scaffold.yml
    • .github/workflows/release.yml
    • .github/workflows/theme-json-validate.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This is a massive and impressive pull request that significantly refactors the project structure and introduces a robust testing and validation infrastructure. The addition of schemas, detailed instruction files, and agent scripts is a huge step forward for maintainability and developer experience. The separation of scaffold release logic from generated theme release logic is a particularly welcome change.

I've identified a few critical issues that need to be addressed, primarily related to incorrect file paths in test helpers, a YAML syntax error, and a misconfiguration in phpcs.xml that disables PHP linting. There are also some misplaced files and directories that seem to be artifacts of the refactoring process and should be cleaned up.

Specifically, there appears to be a deeply nested backup directory structure under scripts/dry-run/ which should be removed.

Once these issues are resolved, this will be an excellent contribution to the project.

I am having trouble creating individual review comments. Click here to see my feedback.

.github/tests/test-helper.js (11-12)

critical

The required paths for TestLogger and retryOperation are incorrect, and one of the required modules is not implemented.

  1. TestLogger: The path ../.github/tests/test-logger is incorrect. It should be ../tests/test-logger. More importantly, the target file .github/tests/test-logger.js is a placeholder with no implementation. This will cause a runtime error. The logger needs to be implemented and export TestLogger.
  2. retryOperation: The path ../scripts/utils/test-utils is incorrect. This utility is now in .github/tests/test-utils.js. The path should be ../tests/test-utils.

These issues will prevent this helper module from working.

const TestLogger = require('../tests/test-logger');
const { retryOperation } = require('../tests/test-utils');

.github/agents/development-assistant.agent.md (4)

critical

The tools array contains unquoted values (file_search, run_in_terminal) at the end, which is a YAML syntax error. All items in the array should be double-quoted strings. Additionally, there are several duplicate tool entries (e.g., grep_search, file_search, run_in_terminal) which should be consolidated for clarity and correctness.

tools: ["search", "edit", "fetch", "semantic_search", "read_file", "grep_search", "file_search", "run_in_terminal"]

phpcs.xml (49-54)

critical

Numerous <exclude-pattern> entries have been added that seem to exclude all of the theme's PHP files from being linted by PHPCS (e.g., functions.php, inc/*, patterns/*). This effectively disables PHP code style checking for the entire theme, which is a significant regression in code quality enforcement. These exclusions should be removed to ensure PHP files are properly linted.

phpcs.xml (34-38)

high

The PHPCompatibilityWP rule and the minimum_supported_wp_version configuration have been removed. These are important for ensuring the theme is compatible with different PHP and WordPress versions. Was their removal intentional? If not, they should be restored.

scripts/tests/.github/tests/jest.setup.localstorage.js (1-27)

medium

This file seems to be misplaced. A .github directory inside scripts/__tests__ is highly unconventional. This file should likely be located at the root .github/tests/ directory. Please verify the correct location for this setup file and move it accordingly to maintain a clean project structure.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants