chore(quality): adopt the central PHPStan base config - #480
Merged
Conversation
phpstan.neon now includes the shared base shipped in conduction/hydra-gates (quality-config/phpstan-base.neon) and keeps only what is genuinely local to this app. Requires hydra-gates v1.7.1 — v1.7.0's base declared bare relative paths, which PHPStan resolves against the file that declares them, so the run aborted before analysing anything. composer.lock is updated accordingly; no other package moved. Verified with phpstan dump-parameters before and after: level, paths, excludePaths, bootstrapFiles and scanDirectories resolve byte-identically, the same number of files is analysed on both sides, and the finding count is unchanged.
rubenvdlinde
requested review from
WilcoLouwerse,
bbrands02 and
rjzondervan
as code owners
August 12, 2026 20:58
Contributor
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| test-l10n | ✅ | ||||
| composer | ✅ | ✅ 104/104 | |||
| npm | ✅ | ✅ 548/548 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ❌ | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-12 21:32 UTC
Download the full PDF report from the workflow artifacts.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
phpstan.neonnow includes the shared base that ships inconduction/hydra-gates(
quality-config/phpstan-base.neon). Everything the base already provides — level,paths, bootstrapFiles, excludePaths, scanDirectories and the fleet-wide ignore list —
is removed from the app file. What stays is only what is genuinely local:
phpstan-baseline.neonincludeexcludePathsentries for the AppHost-delegating controllers, whose"extends unknown class" error PHPStan refuses to let
ignoreErrorssilencetests/Stubs/Mcp/IMcpToolProvider.phpentry underscanFilesstdClassNote: the app previously lacked the base's
registerRepairStepignore. Adding itcan only suppress, and the finding count is unchanged.
This is step 2b of the Nextcloud CI/CD alignment programme.
Why hydra-gates moves to v1.7.1
v1.7.0 shipped the base file with bare relative paths. PHPStan resolves a relative
path against the directory of the config that declares it, so
libthere meantvendor/conduction/hydra-gates/quality-config/liband the run aborted beforeanalysing anything. v1.7.1 prefixes every path with
%currentWorkingDirectory%/.composer.lockis regenerated for that one package; nothing else moved.How it was verified
phpstan dump-parameterswas captured on both sides in a PHP 8.3 container. The fiveload-bearing keys — level, paths, excludePaths, bootstrapFiles, scanDirectories —
resolve byte-identically, same sha256 over the extracted block. The analysis ran over
200 files before and 200 files after, with 0 findings before and 0 after.
The remaining difference in the full parameter dump is the extra ignore patterns the
base contributes (ContextChat, SystemTag, Bookmarks), which can only suppress, never
add.
The method was positive-controlled on the first app migrated: dropping an app-local
ignore makes real errors appear, and adding an entry under
pathsmoves the resolvedkey — so a byte-identical comparison here is a result, not an instrument that reports
"same" whatever it is fed.
Scope
Only PHPStan files.
phpmd.xml, stylelint and prettier are untouched here; aseparate change covers those.