mcpField
P
php-modernization

php-modernization

github.com/dirnbauerDevelopment3399 installsUpdated 14w ago
Repository

About php-modernization

A PHP modernization skill for agents that guides project inspection, finding-level triage, and a dry-run modernization loop. It includes version-specific references and guardrails for migrations, analysis, and testing.

Key features

  1. 01Project introspection scripts
  2. 02Finding-level checks
  3. 03Dry-run modernization loop
  4. 04PHP version reference routing
  5. 05Migration and testing guardrails

Use cases

  1. 01Assessing modernization work in a PHP project
  2. 02Reviewing individual modernization findings
  3. 03Planning safe PHP and test-suite upgrades

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/dirnbauer/webconsulting-skills --skill php-modernization

After installing, type/php-modernizationin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

checkpoints.yaml
references/
adapter-registry-pattern.md
api-platform-edges.md
contracts-and-invariants.md
core-rules.md
doctrine-modernization-edges.md
immutability-boundaries.md
migration-strategies.md
multi-agent-pitfalls.md
multi-version-adapters.md
mutation-testing.md
php-8.4.md
php-8.5.md
php-cs-fixer-deprecations.md
php8-features.md
phpstan-compliance.md
phpunit-modernization.md
psr-per-compliance.md
psr15-middleware-architecture.md
request-dtos.md
static-analysis-tools.md
symfony-patterns.md
type-safety.md
scripts/
_common.py
introspect.py
modernize_loop.py
verify_php_project.py
verify-php-project.sh
templates/
composer-scripts.json
templates/github-actions/
php-modernization.yml

Details

From the project README

PHP Modernization

Agent contract

  1. Discover: uv run ${CLAUDE_SKILL_DIR}/scripts/introspect.py (cheap), or verify_php_project.py --summary (full, with agent_actions[]).
  2. Drill: ... --check PM-XX per finding. Full output when triaging >3.
  3. Apply: uv run ${CLAUDE_SKILL_DIR}/scripts/modernize_loop.py --mode dry-run. Review transcript before applying.
  4. References: load on demand; do not pre-load.

Reference routing

NeedRead
PHP 8.0-8.3 baselinereferences/php8-features.md
PHP 8.4references/php-8.4.md
PHP 8.5references/php-8.5.md
PSR / PER-CSreferences/psr-per-compliance.md
PHPStan configreferences/phpstan-compliance.md
Static analysisreferences/static-analysis-tools.md
PHP-CS-Fixer deprecationsreferences/php-cs-fixer-deprecations.md
DTOs / VOs / inputsreferences/type-safety.md, references/request-dtos.md
Adapter / registryreferences/adapter-registry-pattern.md
Multi-version compatreferences/multi-version-adapters.md
Symfony patternsreferences/symfony-patterns.md
PSR-15 middlewarereferences/psr15-middleware-architecture.md
Doctrine edgesreferences/doctrine-modernization-edges.md
API Platformreferences/api-platform-edges.md
Immutabilityreferences/immutability-boundaries.md
Contracts & invariantsreferences/contracts-and-invariants.md
Mutation testingreferences/mutation-testing.md
Migration planningreferences/migration-strategies.md
PHPUnit 12→13, mock vs stubreferences/phpunit-modernization.md
Multi-agent dispatch hazardsreferences/multi-agent-pitfalls.md

Hard guardrails

  • Never apply readonly to Doctrine entities or mapped-superclasses (embeddables: see references/doctrine-modernization-edges.md).
  • Never run Rector without --dry-run. Invoke vendor/bin/rector directly — composer script aliases can drop ---forwarded flags depending on configuration.
  • Never raise PHPStan level without regenerating + committing the baseline. Shrink, never delete.
  • Never apply blanket final to mock targets or extension points without confirmation.
  • Never edit @generated files or files under var/cache/, vendor/, node_modules/, .Build/.
  • Never git checkout -- files outside your scope in shared trees — use git stash / git diff.
  • Never trust a warm PHPStan cache after vendor change: rm -rf /tmp/phpstan-* var/cache/phpstan first.
  • Never mass-substitute createMock → createStub — promote to expects(...)->method(...)->with(...).

Migration checklist

  • declare(strict_types=1) everywhere
  • @PER-CS, no deprecated aliases
  • PHPStan ≥9 (treatPhpDocTypesAsCertain: false); 10 for new
  • PHPat for layer boundaries
  • Return + parameter types on all methods
  • DTOs over arrays; backed enums over constants
  • PSR interfaces in type-hints
  • #[Override] (8.3+), #[SensitiveParameter] (8.2+), typed constants (8.3+)
  • readonly on DTOs/VOs/events only
  • Property hooks (8.4); array_find/any/all (8.4); pipe |> (8.5)
  • PHPUnit 12+: stubs use createStub, mocks createMock + expects (no self::any() in 13)
  • Rector withComposerBased(symfony: true) (per-version SymfonySetList::SYMFONY_* are @deprecated)

Credits & Attribution

This skill is based on the excellent work by Netresearch DTT GmbH.

Original repository: https://github.com/netresearch/php-modernization-skill

Copyright (c) Netresearch DTT GmbH — Methodology and best practices (MIT / CC-BY-SA-4.0)

Special thanks to Netresearch DTT GmbH for their generous open-source contributions to the TYPO3 community, which helped shape this skill collection. Adapted by webconsulting.at for this skill collection

Comments

Markdown supported