This repository was archived by the owner on May 29, 2026. It is now read-only.
chore(canonical): promote fleetwide config extensions#48
Merged
Conversation
Lock the canonical root configs so they reflect the union of patterns already in use across the 17 PHP apps. Each addition is driven by a fleetwide concern, not a per-app preference -- per the consolidation directive, exceptions are fleetwide or they don't exist. phpcs.xml: - Add SpecTagSniff (warning) -- hydra ADR-003 fleetwide @SPEC convention. Currently enforced in decidesk/pipelinq/procest; promote so every app surfaces the gap. - Add NoLegacyServerAccessorsSniff (error) -- blocks \OC::$server->getX()/query() removed in Nextcloud 34. Already in openregister and openconnector. - Add ignore_warnings_on_exit=1 so SpecTag warnings surface in CI without failing the build. - Add vendor-bin/ exclude (bamarni/composer-bin-plugin, used by larpingapp + softwarecatalog). - Add lib/Resources/template/* exclude (apps that ship a verbatim template snapshot, e.g. openbuilt). psalm.xml -- add referencedClass entries that recur across the fleet: - OCA\OpenRegister Db (ObjectEntity, RegisterMapper, SchemaMapper), Event (Object{Creating,Created,Updating,Updated,Deleted}Event), and Service (RegisterService, FileService). - OCP infrastructure types: IBootContext, IRegistrationContext, DoesNotExistException, DB\Exception, IGroup, IUser, IRepairStep. phpstan.neon -- promote ignoreErrors families that recur in 4+ apps: - Broader OC\ + OC_App ignoreErrors (server internals not in OCP stubs). - OCA\DAV\ family (DAV server-internal). - OCA\OpenRegister\ family extras: has invalid type, implements unknown interface. - Doctrine\DBAL\ family (shipped by Nextcloud server, not stubbed). - OCP stub gaps: IRequest::getContent, IRequest::setParameter, IMessage::attachFile, Entity::jsonSerialize. - Add vendor-bin/ and lib/Resources/template/ to excludePaths. Two new custom phpcs sniff files copied verbatim from their current homes (SpecTagSniff from decidesk, NoLegacyServerAccessorsSniff from openregister). Drives Phase 2 of the fleetwide root-config consolidation: with the canonical locked, the remaining 14 apps can sync to it (the 3 already- aligned: shillinq, planix, deskdesk).
Contributor
Quality Report — ConductionNL/nextcloud-app-template @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ❌ | ✅ 100/100 | |||
| npm | ✅ | ❌ 2/684 denied | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
❌ Denied npm licenses
| Package | Version | License |
|---|---|---|
| pako | 1.0.11 | (MIT AND Zlib) |
| sha.js | 2.4.12 | (MIT AND BSD-3-Clause) |
Quality workflow — 2026-05-21 19:16 UTC
Download the full PDF report from the workflow artifacts.
4 tasks
rubenvdlinde
added a commit
that referenced
this pull request
May 21, 2026
Three follow-ups discovered during the decidesk pilot of the fleetwide canonical (#48): 1. Ship empty phpstan-baseline.neon and include it from phpstan.neon. This is the canonical tracked-debt entry point. The fleet directive forbids per-app validation rules, but baselines remain acceptable as temporary tracked-debt markers (with an open GitHub issue + removal timeline). Apps without debt ship the empty baseline file as-is. 2. Fix the JSONResponse statusCode ignoreErrors regex to match both `Parameter $statusCode` and the more common `Parameter #N $statusCode` forms that phpstan actually emits. The previous regex only matched the first form, which is why decidesk needed a per-app suppression (and several other apps too). 3. Add OCA\OpenRegister\Service\CalendarEventService to the psalm referencedClass whitelist. Currently only decidesk uses it, but it's an OpenRegister-shipped class loaded at runtime; whitelisting it fleetwide is no-op for apps that don't depend on it.
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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
Lock the canonical root configs so they reflect the union of patterns already in use across the 17 PHP apps. Each addition is driven by a fleetwide concern — per the consolidation directive, exceptions are fleetwide or they don't exist.
phpcs.xmlSpecTagSniff(warning) — hydra ADR-003 fleetwide@specconvention. Currently enforced in decidesk/pipelinq/procest; promote so every app surfaces the gap.NoLegacyServerAccessorsSniff(error) — blocks\OC::\$server->getX()/query()removed in Nextcloud 34. Already in openregister + openconnector.ignore_warnings_on_exit=1so SpecTag warnings surface in CI without failing the build.*/vendor-bin/*exclude (bamarni/composer-bin-plugin, used by larpingapp + softwarecatalog).lib/Resources/template/*exclude (apps that ship a verbatim template snapshot, e.g. openbuilt).psalm.xml— addreferencedClassentries that recur across the fleetphpstan.neon— promoteignoreErrorsfamilies that recur in 4+ appsOC\+OC_AppignoreErrors (server internals not in OCP stubs).OCA\DAV\family (DAV server-internal).OCA\OpenRegister\family extras (has invalid type,implements unknown interface).Doctrine\DBAL\family (shipped by NC server, not stubbed).IRequest::getContent,IRequest::setParameter,IMessage::attachFile,Entity::jsonSerialize.vendor-bin/andlib/Resources/template/toexcludePaths.New custom sniff files
Both copied verbatim from their current homes — they're already in production use:
SpecTagSniff.phpfrom decideskNoLegacyServerAccessorsSniff.phpfrom openregisterContext — what this unblocks
Phase 2 of a fleetwide root-config consolidation. After Phase 1 (drift-outlier cleanup) the next step was to sync canonical configs across the 17 apps. The investigation pass found that pure byte-for-byte sync would have silently disabled custom sniffs that 2–3 apps already enforce and would have lost legitimate framework-stub-gap suppressions. The user's directive — "no per-app validation rules; if we need exceptions then they are for all apps" — drives this PR: every recurring per-app extension gets promoted here once, then the per-app variants get dropped in the fleet sync.
After this lands:
Test plan
composer check:strictgreen inside the template (template's ownlib/is small; existing CI workflow will run it)