PHPStan 0.10 and the level that is worth stopping at

Levels 0 to 2 are free — every finding is a name that does not resolve. Level 3 is the first that asks for information the codebase does not contain, and the character of the work changes there.

parameters:
    level: 4
    paths:
        - src
    ignoreErrors:
        - '#Access to an undefined property App\Legacy\.*#'
        - message: '#Call to an undefined method#'
          path: %currentWorkingDirectory%/src/Legacy/*

Declaring out loud that a level is not worth reaching is a better outcome than a project stalled at 4 while everyone assumes it is heading for 7. Level 6 wants a type hint on every parameter and return, which on a mature codebase is months rather than days. The per-path ignore is what keeps legacy directories from drowning the signal, and it is more honest than lowering the level for everything.