Friction
During a framework typing pass on FwkDistribution/shared-private/src2/Shared/1.0.0, sub-agents ran ./supertool 'phpstan:<file>' per file and got CLEAN, but the DVSI pre-push hook (PHPStan fwk level 7 — same level) blocked the push with:
Property Shared\Components\Fields\Select\SelectOptionGroup::$label (string)
overriding property Shared\Components\ComponentGroupBase::$label should not have a native type.
🪪 property.extraNativeType (non-ignorable)
Cause
The phpstan: op analyses the single file in isolation. property.extraNativeType (and similar LSP/inheritance-compat errors) require loading and comparing the parent class — which single-file scope doesn't do. So the op reports CLEAN on exactly the error class that matters most for framework base/child typing.
Impact
False "CLEAN" confidence. Agents typed dozens of framework component properties believing they were safe; the inheritance incompatibilities only surfaced at git push. For autonomous typing runs this defeats the local gate.
Ask
Make the phpstan: op catch what pre-push catches at the same level — i.e. analyse with enough context (parent classes loaded) to surface property.extraNativeType and related inheritance errors. If full parity isn't feasible per-file, document that the op cannot gate inheritance-compat and that pre-push / phpstan2_full is required for framework typing.
Repro
Type a child property native where the parent declares it untyped (e.g. any extends ComponentGroupBase class typing $label). phpstan:<file> → CLEAN; pre-push → blocked.
Friction
During a framework typing pass on
FwkDistribution/shared-private/src2/Shared/1.0.0, sub-agents ran./supertool 'phpstan:<file>'per file and got CLEAN, but the DVSI pre-push hook (PHPStan fwk level 7 — same level) blocked the push with:Cause
The
phpstan:op analyses the single file in isolation.property.extraNativeType(and similar LSP/inheritance-compat errors) require loading and comparing the parent class — which single-file scope doesn't do. So the op reports CLEAN on exactly the error class that matters most for framework base/child typing.Impact
False "CLEAN" confidence. Agents typed dozens of framework component properties believing they were safe; the inheritance incompatibilities only surfaced at
git push. For autonomous typing runs this defeats the local gate.Ask
Make the
phpstan:op catch what pre-push catches at the same level — i.e. analyse with enough context (parent classes loaded) to surfaceproperty.extraNativeTypeand related inheritance errors. If full parity isn't feasible per-file, document that the op cannot gate inheritance-compat and that pre-push /phpstan2_fullis required for framework typing.Repro
Type a child property native where the parent declares it untyped (e.g. any
extends ComponentGroupBaseclass typing$label).phpstan:<file>→ CLEAN; pre-push → blocked.