chore: sync canonical root configs + mechanical phpmd cleanup#849
Merged
Conversation
Phase 2 fleet root-config consolidation. Pattern from shillinq#300 and decidesk#243. Canonical files synced from nextcloud-app-template: - phpcs.xml (cosmetic name → OpenConnector) - phpmd.xml (cosmetic name → OpenConnector) - psalm.xml (replaces 20-line stub with full 127-line ruleset) - phpstan.neon, phpstan-bootstrap.php (new — phpstan was previously not running here) - phpcs-custom-sniffs/CustomSniffs/Sniffs/Commenting/SpecTagSniff.php (new) Composer fleet-consistency fix: - composer.json config.platform.php: "8.3" → "8.2" (the rest of the fleet pins 8.1; openconnector requires 8.2+ via php-soap, so 8.2 is the floor). composer.lock regenerated; rolls azjezz/psl back off its 8.3-only typed-class-constant syntax. Mechanical phpmd fixes: - PdokConnector::suggest/free $q → $query (internal helpers; controller route bindings left intact since Nextcloud binds query params by name). - PdokConnector::orLookup/writeThrough $or → $objectService. - IBabsConnectorService::pushVoorstel removed UnusedLocalVariable $organisatieId from placeholder body. - ExportService::export unreachable `return new JSONResponse()` after `#[NoReturn] $this->download()` — JetBrains attribute not natively understood by phpstan. phpcbf auto-fix: 575 violations across 64 files (brace placement, spacing, comment style — categories the previous ~30 silent `<severity>0</severity>` PEAR overrides were masking). Gate counts after sync: - PHPCS: 4 756 errors / 798 warnings (was 5 406 / 806) - PHPMD: 17 lines (was 22) - PSALM: 150 errors + 520 other issues (canonical ruleset landed cold) - PHPSTAN: 0 errors with 818-entry baseline (was 820 raw) Burndown tracked: #848 Notable: openconnector is the only fleet app where phpstan is turned on for the first time by this PR; the baseline therefore carries the full pre-existing static-analysis debt of `lib/` as tracked items rather than newly-introduced regressions.
Contributor
Quality Report — ConductionNL/openconnector @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 148/148 | |||
| npm | ✅ | ✅ 676/676 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-21 20:48 UTC
Download the full PDF report from the workflow artifacts.
rubenvdlinde
added a commit
that referenced
this pull request
May 22, 2026
Resolves 30-file conflict between i18n's Tier-4 refactor (OR-adoption + PHPCS docblock harmonisation + manifest v2 schema URL flip) and the 9 commits dev accumulated independently (#823 LogIndex wrapper, #842 .php-cs-fixer cleanup, #849 root-config sync + phpmd cleanup, #727 cross-entity slug refs, #752 PDOK adapter, #762 brand cobalt, #767 specter spec, #703 .gitignore harmonise, #679 openspec sync workflows). Resolution strategy: - 17 DU conflicts (Db classes + ExportService) — confirmed i18n's deletions (Tier-4 OR-adoption: data moved off bespoke Db/ classes to OR-backed objects). - l10n/en.json + l10n/nl.json — took HEAD's union (translation work was done on i18n). - composer.lock — took HEAD's (i18n had it regenerated for new deps). - src/manifest.json — took HEAD (v2 schema URL + 2-space indent + the typed-primitive page shapes; whitespace-only conflict otherwise). - 8 UU conflicts on PHP controllers/services + routes.php + registry.js — took HEAD (i18n). The systematic pattern: i18n calls the new OR API (->getObject()) while dev still references the now-deleted Db classes (->jsonSerialize()). Dev's references would break at runtime against i18n's structural state; HEAD is the only internally-consistent resolution. All conflict-resolved files: 0 markers remaining, PHP syntactically valid. Manifest still validates clean against v2 schema 2.7.0.
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.
Summary
Phase 2 fleet root-config consolidation for openconnector. Pattern from shillinq#300 (merged) and decidesk#243 (merged). Canonical lives in
nextcloud-app-template.openconnector is uniquely a "phpstan turned on for the first time" PR in this rollout — see the large baseline below.
Changes
Canonical configs synced
phpcs.xml(cosmetic name → OpenConnector; ~30 silent<severity>0</severity>PEAR overrides gone)phpmd.xml(cosmetic name → OpenConnector)psalm.xml(replaces a 20-line stub with the full 127-line canonical ruleset)phpstan.neon,phpstan-bootstrap.php,phpstan-baseline.neon(new — phpstan was previously not running here at all)phpcs-custom-sniffs/CustomSniffs/Sniffs/Commenting/SpecTagSniff.php(new)Composer fleet-consistency fix
composer.jsonconfig.platform.php:"8.3"→"8.2". The rest of the fleet pins8.1, but openconnector requires8.2+viaphp-soap/ext-soap-engine—8.2is the lowest realistic floor that letscomposer installwork on the standard dev/CI hosts.composer.lockregenerated; side-effect rollsazjezz/psloff its4.3.08.3-only typed-class-constant syntax.Mechanical PHPMD cleanups
PdokConnector::suggest/free:$q→$query(5 sites). Controller route bindings deliberately left as$qbecause Nextcloud binds query params by parameter name.PdokConnector::orLookup/writeThrough:$or→$objectService.IBabsConnectorService::pushVoorstel: removedUnusedLocalVariable $organisatieIdfrom placeholder body.ExportService::export: added unreachablereturn new JSONResponse()after#[NoReturn] $this->download()(JetBrains attribute not natively understood by phpstan).Auto-fix
phpcbffixed 575 violations across 64 files (brace placement, spacing, comment style — categories the removed PEAR overrides were masking).Gate counts
ignore_warnings_on_exit=1— warnings logged not failedTracking issue
Burndown of the absorbed lint debt: #848
Test plan
./vendor/bin/phpcs --standard=phpcs.xml --report=summary— runs, 4 756/798 logged./vendor/bin/phpstan analyse --memory-limit=2G --no-progress—[OK] No errors./vendor/bin/psalm --threads=1 --no-cache --show-info=false --no-progress— completes, count noted in tracking issue./vendor/bin/phpmd lib text phpmd.xml— 17 lines, categories listed in tracking issue🤖 Generated with Claude Code