Release: merge development into beta#2
Conversation
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (215 total)
PHPUnit TestsPHPUnit tests were not enabled for this run. Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (215 total)
PHPUnit TestsPHPUnit tests were not enabled for this run. Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (215 total)
PHPUnit TestsPHPUnit tests were not enabled for this run. Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (215 total)
PHPUnit TestsPHPUnit tests were not enabled for this run. Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (215 total)
PHPUnit TestsPHPUnit tests were not enabled for this run. Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (215 total)
PHPUnit TestsPHPUnit tests were not enabled for this run. Integration Tests (Newman)Newman integration tests were not enabled for this run. E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)
Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report
Summary
PHP Quality
Vue Quality
Security
License Compliance
composer dependencies (100 total)
npm dependencies (416 total)
PHPUnit Tests
Code coverage: 0% (0 / 3 statements) Integration Tests (Newman)
E2E Tests (Playwright)Playwright E2E tests were not enabled for this run. Generated automatically by the Quality workflow.
|
Quality Report — ConductionNL/decidesk @
|
| Check | Result |
|---|---|
| PHP lint | ✅ |
| PHP phpcs | ✅ |
| PHP phpmd | ✅ |
| PHP psalm | ✅ |
| PHP phpstan | ✅ |
| PHP phpmetrics | ✅ |
| eslint | ✅ |
| stylelint | ✅ |
| Security (composer) | ✅ |
| Security (npm) | ✅ |
| License (composer) | ✅ 100/100 |
| License (npm) | ✅ 416/416 |
| PHPUnit | ✅ |
| Newman | ✅ |
| Playwright | ⏭️ |
Coverage: 0% (0/3 statements)
Quality workflow — 2026-04-13 18:03 UTC
Download the full PDF report from the workflow artifacts.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ❌ | |||
| PHPUnit | ❌ | ||||
| Newman | ❌ | ||||
| Playwright | ❌ |
Quality workflow — 2026-04-13 18:11 UTC
Download the full PDF report from the workflow artifacts.
App.vue's `async created() { await initializeStores() }` was insufficient
to guarantee the lib's shared object store had its types registered
before child components run. Vue doesn't wait for an async `created()`
hook to resolve before mounting children — so a child like LiveMeeting
ran its own `created()` (which calls `fetchObject('meeting', this.id)`
and three `subscribe(...)` calls) BEFORE App.vue's awaited
`initializeStores()` had a chance to call `registerObjectType('meeting',
...)`. The lib correctly threw "Object type 'meeting' is not registered"
and the page rendered with empty `meeting = {}` + fallback header.
Awaiting `initializeStores()` in main.js before `$mount('#content')`
guarantees the store is hot by the time any child's `created()` fires.
The App.vue call stays in place — `initializeStores()` is documented
idempotent, and the second await harmlessly resolves immediately.
Surfaced while running the canonical decidesk LiveMeeting two-browser
demo against the live notify_push stack: browser-1 received the
authenticated WS frame for `or-object-{meetingUuid}` correctly, but
the page couldn't react because the store wasn't initialised.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-10 11:41 UTC
Download the full PDF report from the workflow artifacts.
… dataSource Move register/schema/filter from props into a manifest 'dataSource' block alongside aggregate: 'count'. The lib's CnStatsBlockWidget (landing in nextcloud-vue#186) builds a totalCount GraphQL query from the shorthand and forwards the resolved count to CnStatsBlock. Reactivity comes for free via the liveUpdatesPlugin: when a minute / decision / action-item is created or deleted, the collection cache is invalidated and the widget re-fetches its count. Note: 'action-item' becomes 'actionItem' in dataSource.schema because the OpenRegister GraphQL schema generator sanitizes slugs to camelCase to satisfy the GraphQL field-name regex.
feat(dashboard): wire stats-block widgets to OR GraphQL via dataSource
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-10 15:08 UTC
Download the full PDF report from the workflow artifacts.
Pulls in lib v2 wave: form/wiki/map page types, OR-availability guard, dynamic menu, @resolve: sentinels, named-view sidebar, chart widget, settings tabs, cardComponent on index, actions[].handler dispatch. - package.json: ^1.0.0-beta.12 -> ^1.0.0-beta.30 - package-lock.json: 1.0.0-beta.13 -> 1.0.0-beta.30 Note on the npm semver gotcha: caret on a 1.0.0-beta.X pin does NOT slide forward across prereleases, so a plain `npm install` against the existing pin would have stayed on beta.13. The pin had to be bumped explicitly. No code changes needed: - App.vue is already on the manifest pattern (CnAppRoot + manifest + customComponents + pageTypes); the OR-guard becomes active automatically because CnAppRoot defaults requiresApps to ['openregister'] and decidesk already declares OR as a manifest dependency. - No hand-rolled OR-availability logic in App.vue to remove. Gates vs origin/development baseline: - npm install --legacy-peer-deps: green - npm run lint: pre-existing failure on both branches (eslint-plugin-import not installed via @nextcloud/eslint-config) - npm run build: pre-existing failure on both branches (node-polyfill-webpack-plugin missing from @nextcloud/webpack-vue-config dep tree) - npm test: no test script defined Pre-existing baseline failures are not introduced by this bump and are out of scope for a dependency-version PR.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ❌ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ❌ | ❌ | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-10 19:19 UTC
Download the full PDF report from the workflow artifacts.
…#169) * chore: add missing @nextcloud/* peer dependencies to fix dev baseline @nextcloud/eslint-config@8.4.1 and @nextcloud/webpack-vue-config@6.0.1 declare these as peerDependencies but consumers must install them explicitly. Without them, both `npm run lint` and `npm run build` fail on a clean checkout of `development`, which is what PR #168 surfaced as a "pre-existing baseline failure". Added (devDependencies, no source changes): For @nextcloud/eslint-config (extends `@nextcloud` -> base.js plugins): - eslint-plugin-import ^2.32.0 - eslint-plugin-n ^16.6.2 - eslint-plugin-jsdoc ^46.10.1 - eslint-plugin-promise ^6.6.0 - eslint-config-standard ^17.1.0 - @nextcloud/eslint-plugin ^2.2.1 - @babel/eslint-parser ^7.28.6 (parser declared in base.js) - @babel/core ^7.29.0 (peer of @babel/eslint-parser) - @vue/eslint-config-typescript ^13.0.0 (referenced from index.js) - typescript ^5.9.3 (peer of the TS configs) - eslint-import-resolver-exports ^1.0.0-beta.5 (used by base.js settings) For @nextcloud/webpack-vue-config (eager require in webpack.config.js): - node-polyfill-webpack-plugin 3.0.0 Gates before: npm run lint -> ESLint couldn't find the plugin "eslint-plugin-import" npm run build -> Cannot find module 'node-polyfill-webpack-plugin' Gates after: npm run lint -> 0 errors, 17 pre-existing warnings (deprecated OC.* helpers, vue/order-in-components) - exit 0 npm run build -> webpack 5.105.4 compiled with 4 pre-existing warnings (asset size, upstream nextcloud-vue sourcemap-only refs) - exit 0 This brings decidesk's CI gates to green so future PRs can rely on them rather than hide behind "pre-existing on dev". * ci(npm): add .npmrc with legacy-peer-deps=true so npm ci works CI runs `npm ci` (strict) which doesn't accept --legacy-peer-deps as a flag. Without an .npmrc, the new @nextcloud/eslint-config peer chain fails on a @typescript-eslint/utils peerOptional conflict (eslint-plugin-import-x wants ^8.56.0; @nextcloud/eslint-config pulls 7.18.0). Setting legacy-peer-deps=true via .npmrc makes npm ci respect the same resolution that npm install --legacy-peer-deps does locally, so CI's Vue Quality (eslint) job stops failing at the install step.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ❌ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/115 statements)
Quality workflow — 2026-05-10 21:08 UTC
Download the full PDF report from the workflow artifacts.
…170) Mirrors pipelinq #333. @nextcloud/stylelint-config declares its shared configs as peerDependencies, which npm install --legacy-peer-deps does not auto-install — so npm run stylelint fails to load stylelint-config-recommended-scss. Adds postcss-html, stylelint-config-recommended-scss, and stylelint-config-recommended-vue to devDependencies. No source changes. Before: npm run stylelint -> "Could not find stylelint-config-recommended-scss" After: npm run stylelint -> 0 errors (only upstream deprecation warnings)
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/115 statements)
Quality workflow — 2026-05-10 21:26 UTC
Download the full PDF report from the workflow artifacts.
…173) Applies the openspec change for p3-citizen-participation. NOTE: i18n keys deferred to a follow-up — the apply agent stalled mid-i18n update. Changes: - decidesk_register.json: +7 schemas (BudgetProposal, CitizenPanel, CitizenVote, Deliberation, Notification, ParticipatoryBudget, PublicConsultation); Decision.isPublished promoted to enum (internal | public | confidential). - DecisionController/LiveDecisionService: handle isPublished enum (treats legacy boolean true as already-published for backward compat). - Tests updated: 24 schemas expected; publish() tests use enum values. i18n update for new schemas/strings is deferred to a follow-up PR.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/115 statements)
Quality workflow — 2026-05-11 06:09 UTC
Download the full PDF report from the workflow artifacts.
Applies the p4-integration openspec change for decidesk. New ApiController, HealthController, OriController + register schema updates + routes.php wiring. NOTE: i18n keys deferred to a follow-up — the apply agent stalled mid-i18n update. All PHP files validated via php -l and JSON files validated via jq.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-11 07:07 UTC
Download the full PDF report from the workflow artifacts.
…174) Massive backend implementation for the p4-collaboration openspec change. Adds 8 controllers (Comment, Delegation, EmailLink, Engagement, MotionCoauthor, NotificationPreference, Task, Workspace) + matching Services + register schema additions. 1172 inserts across 22 files. All PHP files validated via php -l. JSON files validated via jq. NOTE: strict composer gates (psalm, phpstan) flagged ~5 named-arg cleanup issues mid-recovery that need a follow-up. i18n keys also deferred — apply agent stalled there.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-11 07:15 UTC
Download the full PDF report from the workflow artifacts.
…175) Migrates partially-authored specs.md files into the canonical specs/<capability-name>/spec.md layout for 5 decidesk legislative and governance changes. No code generated — spec structural completion only. Migrated: - p2-meeting-management-other-t1: specs.md -> specs/digital-meetings-and-recurrence/spec.md (19 REQs + 7 NFR) - p2-motion-and-voting-core-t1: specs.md -> specs/motion-and-voting/spec.md (38 REQs + 6 NFR) - p2-motion-and-voting-core-t3: specs.md -> specs/motion-execution-and-anonymisation/spec.md (20 REQs) - p2-meeting-management-other-t2: specs.md -> specs/meeting-management-extensions/spec.md (21 REQs) - p2-minutes-and-decisions-other-t2: specs.md -> specs/decision-evolution-and-cascade/spec.md (14 REQs)
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-11 07:18 UTC
Download the full PDF report from the workflow artifacts.
…changes (#176) Author the missing capability spec.md files for four ADR-031 / quorum refactor changes. Spec completion only — no code changes in this PR. - actionitem-analytics-declarative-migration: 6 REQs covering the Meeting schema's cross-schema action-item aggregations, the actionItemCompletionRate calculation, removal of ActionItemAnalyticsService::getCompletionRates, AnalyticsController wiring, frontend wire-shape preservation, and retain-imperative rationale for getSummary / getMyItems. - quorum-declarative-migration: 6 REQs covering the umbrella migration — participant aggregations, quorumPercentage / quorumMet calculations, MeetingTransitionGuard reading the derived field, QuorumService deletion, external read-only visibility, and the ADR-031 exception-1 engine-dependency gate. - quorum-guard-rewrite (chain spec 2 of 3): 5 REQs scoped to the guard rewire — dropping the QuorumService dependency, reading meeting.quorumMet on the open transition, DI cleanup in Application.php, test fixture changes, and the sole-caller regression scan. - quorum-service-deletion (chain spec 3 of 3): 5 REQs scoped to deletion — removing the service file, its test, its DI registration, ensuring zero remaining references, and gating deletion on a pre-deletion regression scan. Capability names match each change folder; specs live at openspec/changes/<name>/specs/<name>/spec.md per the established decidesk pattern (decidesk-manifest-v1, decidesk-store-migration).
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-11 07:37 UTC
Download the full PDF report from the workflow artifacts.
#177) p2-minutes-and-decisions-core-t1: - Move specs.md to canonical openspec path specs/<cap>/spec.md (specs/p2-minutes-and-decisions-core-t1/spec.md) matching the convention used by sibling p2-* changes (motion-and-voting, agenda-management, meeting-management). Spec content is unchanged — pure relocation. decidesk-legacy-quality-cleanup: - Add design.md (~560 words) covering cleanup scope (phpcs excludes, phpmd baseline, phpstan first-run, CI wiring, docs), sequential execution order across 6 phases, relationship to the quorum-* declarative-migration series (inverse scope — no file overlap, safe to run in parallel), risk assessment, and success criteria.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ❌ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ⏭️ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ |
Quality workflow — 2026-05-11 08:09 UTC
Download the full PDF report from the workflow artifacts.
First per-app implementation of OCA\OpenRegister\Mcp\IMcpToolProvider
(interface defined in openregister PR #1466). Exposes 5 governance
tools to the AI chat companion:
Reads:
- decidesk.listOpenActionItems — open action items, optionally
scoped to the current user (via OR ObjectService.findAll).
- decidesk.listRecentMeetings — last N meetings ordered by
createdAt desc, optional statusFilter.
- decidesk.getMeetingDetails — single meeting with agenda +
decisions + action items inlined as sub-sources.
Actions (lifecycle + mutation):
- decidesk.startMeeting — MeetingService.transition($uuid,
'open', $userId). Auth flowthrough enforced inside transition()
via ObjectService.saveObject (existing chair/admin guard).
- decidesk.addActionItem — TaskService.saveTask([...]) with
participant/admin auth check.
Architecture (per hydra ADR-034 + this change's design.md):
- Single DecideskToolProvider class at lib/Mcp/ delegates to existing
services via DI (MeetingService, TaskService, OR ObjectService).
- Tool ids namespaced as decidesk.{toolName}; OR's McpToolsService
rejects mismatches mechanically.
- Tool visibility: always expose; per-object auth enforced in
invokeTool() returning {isError: true, error: 'forbidden'} so the
LLM can explain.
- Every successful result includes a `sources` array (deep links)
capped at 20 for inline citation rendering in the widget.
- Six error codes: forbidden, not_found, invalid_state,
invalid_input, unknown_tool, internal_error.
Service container registration:
- Application.php registers alias
`OCA\OpenRegister\Mcp\IMcpToolProvider::decidesk` → the provider
class; OR's McpToolsService enumerates by alias prefix.
- No new composer dep — OR autoloads at runtime when installed,
same way decidesk's existing controllers already use
OCA\OpenRegister\Service\ObjectService.
Tests:
- 26 unit tests (tests/Unit/Mcp/DecideskToolProviderTest.php)
covering tool list shape, namespace enforcement, each tool happy
path, each tool's forbidden/not_found/invalid_state/invalid_input
paths, sources truncation at 20.
- Self-skipping integration tests (tests/Integration/Mcp/) for
end-to-end DI + service round-trips; require live Nextcloud +
OpenRegister.
- tests/Stubs/Mcp/IMcpToolProvider.php — interface stub loaded
by bootstrap-unit.php when the real interface isn't autoloadable
(i.e. CI without openregister installed).
- composer check:strict: ALL CHECKS PASSED (183 tests, 950
assertions, 37 skipped integration tests).
Static analysis suppressions:
- phpmd.baseline.xml: 12 entries for DecideskToolProvider complexity
(single-class design per D1; mitigation: extensive unit tests).
- phpstan.neon, psalm.xml: suppress `Undefined class` warnings for
the IMcpToolProvider interface (lives in openregister PR #1466,
not yet merged). Remove once openregister is bumped to a tag
shipping the interface.
Depends on openregister/ai-chat-companion-orchestrator (PR #1466).
feat(mcp-tools): DecideskToolProvider — first per-app IMcpToolProvider
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/115 statements)
Quality workflow — 2026-05-11 15:52 UTC
Download the full PDF report from the workflow artifacts.
Deferred-recovery bookkeeping pass on openspec/changes/. Marked 16 already-applied changes with builds/build.json (status=applied, marker=deferred-recovery): decidesk-manifest-v1, decidesk-store-migration, actionitem-analytics-declarative-migration, quorum-declarative-migration, quorum-guard-rewrite, quorum-service-deletion, p2-meeting-management-core-t2, p2-meeting-management-core-t3, p2-meeting-management-other-t1, p2-meeting-management-other-t2, p2-minutes-and-decisions-other-t2, p2-motion-and-voting-other-t1, p2-motion-and-voting-other-t3, p3-citizen-participation, p4-collaboration, p4-integration. Deleted openspec/changes/spec/ — a directory-naming typo duplicating quorum-guard-rewrite content. Archived 5 strategic deferrals (empty shells / no specs deltas) to archive/2026-05-11-<name>-deferred: - p3-document-management, p3-governance-bodies, p4-reporting-and-analytics, p4-standards-hardening (context-brief only, no specs/proposal/tasks) - decidesk-legacy-quality-cleanup (no specs/ delta) Archived 8 cleanly-validating applied changes to archive/2026-05-11-<name>: - p1-crud-operations, p1-dashboard-and-navigation, p1-schemas-and-data-model, p2-agenda-management, p2-meeting-management-core-t1, p2-motion-and-voting, p2-motion-and-voting-core-t2, p2-motion-and-voting-other-t1 Left open (validation warnings/errors blocking archive): everything in the quorum-* chain plus various p2-*/p3-citizen-participation/ p4-* with malformed deltas or missing specs directories. These need spec-content fixes before they can archive.
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/115 statements)
Quality workflow — 2026-05-11 17:00 UTC
Download the full PDF report from the workflow artifacts.
…180) Normalize 22 OpenSpec changes to the canonical Hydra strict format (per ADR-024 + ADR-032) and archive them to openspec/changes/archive/ under date prefix 2026-05-11-*. Normalization fixes: - Strip HTML comments that masked the requirement body - Convert `### REQ-XXX-N: title` / `### REQ-XXX-N — title` to `### Requirement: REQ-XXX-N — title` - Convert per-capability `## REQ-XXX: section` headers to a single top-level `## ADDED Requirements` per spec - Unwrap line-wrapped first paragraphs so SHALL/MUST is on line 1 of the requirement body (parser only inspects first body line) - Move flat `specs/spec.md` and root `specs.md` files into `specs/<capability>/spec.md` capability subfolders - Inject minimal `specs/<id>/spec.md` for manifest-version-bump and quorum-schema-declaration (proposals had no spec.md) - Convert `**GIVEN**`/`**WHEN**`/`**THEN**` paragraph scenarios into `#### Scenario:` blocks with bullet GWT lines Counts: - 22 changes normalized to strict format - 22 changes newly archived - 4 changes still failing (no specs at all — only context-brief.md + hydra.json scaffolding stubs; pipeline never produced spec content): - p2-meeting-management-core-t2 - p2-meeting-management-core-t3 - p2-motion-and-voting-other-t2 - p2-motion-and-voting-other-t3
Quality Report — ConductionNL/decidesk @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| composer | ✅ | ✅ 100/100 | |||
| npm | ✅ | ✅ 469/469 | |||
| PHPUnit | ✅ | ||||
| Newman | ✅ | ||||
| Playwright | ⏭️ |
Coverage: 0% (0/115 statements)
Quality workflow — 2026-05-11 17:49 UTC
Download the full PDF report from the workflow artifacts.
Automated PR to sync development changes to beta for beta release.
Merging this PR will trigger the beta release workflow.