FastForward\DevTools is a Composer plugin that aggregates multiple PHP development tools into a single unified command. It provides automated execution of tests, static analysis, code styling, refactoring, and documentation generation.
Key Technologies:
- PHP 8.3+
- Composer plugin
- PHPUnit 12.5 (testing)
- Rector 2.x (automated refactoring)
- Easy Coding Standard (code style)
- phpDocumentor (API docs)
- GrumPHP (Git hooks)
- PHPSpec/Prophecy (test doubles)
# Install as development dependency
composer require --dev fast-forward/dev-tools:dev-main
# Install dependencies
composer install# Run all standard checks (refactoring, code styling, docs, tests, reports)
composer dev-tools
# Automatically fix code standards issues
composer dev-tools:fix
# Individual commands
composer dev-tools tests # Run PHPUnit tests
composer dev-tools code-style # Check and fix code style (ECS + Composer Normalize)
composer dev-tools refactor # Refactor code using Rector
composer dev-tools phpdoc # Check and fix PHPDoc comments
composer dev-tools docs # Generate HTML API documentation
composer dev-tools wiki # Generate Markdown documentation for wiki
composer dev-tools reports # Generate docs frontpage and reports
composer dev-tools agents # Sync packaged project agents into .agents/agents
composer dev-tools:sync # Sync scripts, GitHub Actions, .editorconfig, wikiNotable Specialized Commands:
composer skills: Synchronize packaged skills into consumer.agents/skillscomposer funding: Sync funding metadata betweencomposer.jsonand.github/FUNDING.ymlcomposer codeowners: Generate.github/CODEOWNERSfrom repository metadatacomposer gitattributes: Manage export-ignore rules in.gitattributescomposer gitignore: Synchronize managed.gitignorecontentcomposer license: Generate or refresh repositoryLICENSEfilescomposer dependencies: Run dependency analysis workflowscomposer metrics: Generate PhpMetrics reports and related artifactscomposer update-composer-json: Normalize managedcomposer.jsonsettingscomposer changelog:entry|check|next-version|promote|show: Manage changelog-driven release workflows
# Run all tests with coverage
composer dev-tools tests
# Run tests matching a pattern
composer dev-tools tests -- --filter=CodeStyle
# Run with coverage report
composer dev-tools tests -- --coverage=public/coverageTest Configuration:
- PHPUnit XML config:
phpunit.xml - Test namespace:
FastForward\DevTools\Tests\ - Source namespace:
FastForward\DevTools\ - Coverage required (strict metadata enforcement)
- Coverage threshold: configured in
phpunit.xml
Test Patterns:
- Tests use PHPUnit 12.x with Prophecy for mocking
- Custom PHPUnit extension:
FastForward\DevTools\PhpUnit\Runner\Extension\DevToolsExtension
Creating/Updating Tests:
- Use skill
phpunit-testsin.agents/skills/phpunit-tests/for creating or updating PHPUnit tests with Prophecy - Run skill when: creating new test classes, adding test methods, or fixing existing tests
PHP Coding Standard: PSR-12 with Symfony style
ECS Configuration: ecs.php
- Uses Symfony, PSR-12, and Symplify rule sets
- PHPDoc alignment: left-aligned
- PHPUnit test case static methods: use
self:: - Skips: vendor, resources, public, tmp directories
File Organization:
- Source code:
src/(PSR-4:FastForward\DevTools\) - Tests:
tests/(PSR-4:FastForward\DevTools\Tests\) - Commands:
src/Console/Command/ - PHPUnit events:
src/PhpUnit/Event/ - Rector rules:
src/Rector/ - Composer plugin:
src/Composer/
Naming Conventions:
- Classes: PascalCase
- Methods: camelCase
- Properties: camelCase
- Constants: UPPER_CASE
PHPdoc Requirements:
- All classes require docblocks with
@copyrightand@license - Use RFC 2119 keywords (MUST, SHOULD, MAY, etc.)
- PHPDoc checked via dev-tools phpdoc command
- Use skill
phpdoc-code-stylein.agents/skills/phpdoc-code-style/for PHPDoc cleanup and repository-specific PHP formatting
This repository ships a Composer plugin plus the local bin/dev-tools binary,
so there is no separate frontend or asset build step. The package is published
to Packagist, while consumer repositories adopt workflows, packaged skills, and
other managed assets through composer dev-tools:sync.
Release and publishing behavior is driven primarily through
.github/workflows/changelog.yml, reports.yml, and wiki.yml, with packaged
skills living under .agents/skills/ and mirrored project-agent prompts under
.agents/agents/.
Package Details:
- Type:
composer-plugin - Class:
FastForward\DevTools\Composer\Plugin - Minimum stability:
stable
Required Checks:
composer dev-toolsBefore Submitting:
- Run full dev-tools suite
- Ensure all tests pass
- Code style must be clean (ECS)
- PHPDoc must be valid
- Coverage must meet threshold
- Rector should handle refactoring automatically
- Follow
.github/pull_request_template.mdand include issue linkage, verification notes, documentation/generated-output review, and changelog status
README.md: high-level command surface, architecture overview, and consumer-facing contextdocs/commands/: command-specific behavior and option detailsdocs/usage/anddocs/internals/: workflow, reporting, release, and implementation notes.github/workflows/: CI and release automation truth, especiallytests.yml,reports.yml,wiki.yml, andchangelog.yml.github/pull_request_template.md: expected PR structure and reviewer checklistsrc/Sync/: shared packaged-directory synchronization primitives used byskillsandagents.agents/skills/: packaged procedural skills shipped to consumer repositories.agents/agents/: repository-specific role prompts mirrored through.github/agents.github/wiki: generated or synchronized wiki content published by repo workflows
- GrumPHP: Automatically runs on pre-commit (configured in
grumphp.yml) - Rector: Custom rules in
src/Rector/for automated refactoring - Documentation: Sphinx-based docs in
docs/directory - Wiki: GitHub wiki synced via
dev-tools wikianddev-tools:sync - GitHub Actions: Workflows in
.github/workflows/(synced viadev-tools:sync) - Dependency Health CI:
.github/workflows/tests.ymlalways runs the dependency-health job, and its defaultmax-outdatedinput is-1so outdated packages are reported without failing CI on count alone - Project Agents: Packaged role prompts synchronized via
composer agentsanddev-tools:sync
- Creating/Updating Tests: Use skill
phpunit-testsin.agents/skills/phpunit-tests/for PHPUnit tests with Prophecy - Creating/Refreshing AGENTS.md: Use skill
create-agentsmdin.agents/skills/create-agentsmd/to generate or update repository-root AGENTS instructions for coding agents - Generating Documentation: Use skill
sphinx-docsin.agents/skills/sphinx-docs/for Sphinx documentation indocs/ - Updating README: Use skill
package-readmein.agents/skills/package-readme/for generating README.md files - Updating PHPDoc / PHP Style: Use skill
phpdoc-code-stylein.agents/skills/phpdoc-code-style/for PHPDoc cleanup and repository-specific PHP formatting - Drafting / Publishing GitHub Issues: Use skill
github-issuesin.agents/skills/github-issues/to transform a short feature description into a complete, production-ready GitHub issue and create or update it on GitHub when needed - Implementing Issues & PRs: Use skill
github-pull-requestin.agents/skills/github-pull-request/to iterate through open GitHub issues and implement them one by one with branching, testing, documentation, and pull requests
Packaged project-agent prompts live in .agents/agents/ for both this
repository and consumer repositories that synchronize DevTools assets. These
role prompts define behavior and ownership boundaries, while .agents/skills/
remains the procedural source of truth.
- Use
issue-editorfor issue drafting, refinement, comments, updates, and closure workflows. - Use
issue-implementerfor issue-to-branch-to-PR execution. - Delegate to
agents-maintainerwhen repositoryAGENTS.mdguidance needs to be created, refreshed, or realigned with current workflows. - Delegate to
test-guardianwhenever behavior changes, regressions, or missing coverage are involved. - Delegate to
php-style-curatorfor PHPDoc cleanup, file-header normalization, and repository style conformance. - Delegate to
readme-maintainerwhen public commands, installation, usage, links, or badges change. - Delegate to
docs-writerwhendocs/must be created or updated. - Delegate to
consumer-sync-auditorwhen packaged skills, packaged agents, sync assets, wiki, workflows, or consumer bootstrap behavior change. - Delegate to
quality-pipeline-auditorwhen a task changes command orchestration, verification flow, or quality gates. - Delegate to
changelog-maintainerwhen a task needs changelog authoring, changelog validation for PRs, release promotion, or release-note export.