mcpField
P
php-modernization

php-modernization

github.com/netresearchDevelopment55438 installsUpdated 3d ago
Repository

About php-modernization

A PHP modernization skill for agents, with a staged workflow to inspect a project, investigate findings, and run modernization in dry-run mode before applying changes. It includes targeted guidance for PHP versions, static analysis, frameworks, testing, and migration safety.

Key features

  1. 01Project introspection and summary reports
  2. 02Drill-down checks for individual findings
  3. 03Dry-run modernization workflow
  4. 04On-demand PHP and framework references
  5. 05Guardrails for safe migrations
  6. 06Modernization checklist for code and tests

Use cases

  1. 01Assessing a PHP project's modernization needs
  2. 02Investigating a specific reported issue
  3. 03Planning PHP version or framework upgrades
  4. 04Reviewing migration changes before application

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/netresearch/php-modernization-skill --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
composer-package-metadata.md
contracts-and-invariants.md
core-rules.md
doctrine-modernization-edges.md
immutability-boundaries.md
lexing-php-across-versions.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
public-api-inventory.md
reading-php-config-safely.md
request-dtos.md
static-analysis-tools.md
symfony-patterns.md
type-safety.md
scripts/
_common.py
introspect.py
modernize_loop.py

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, references/composer-package-metadata.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
Lexing PHP as tokens, across versionsreferences/lexing-php-across-versions.md
Migration planningreferences/migration-strategies.md
Public API inventory vs consumersreferences/public-api-inventory.md
PHPUnit 12→13, mock vs stubreferences/phpunit-modernization.md
Multi-agent dispatch hazardsreferences/multi-agent-pitfalls.md
Reading a PHP config file without running itreferences/reading-php-config-safely.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)

Comments

Markdown supported