feat(reports): one Reports page of cards, in the footer - #1583
Merged
Conversation
ADR-112. Reports was a menu PARENT at order 55, in the middle of the operational entries a case handler uses all day, with three report pages beneath it. Reports are not an operational surface: you go there deliberately, occasionally, and having them among the daily entries costs the daily entries the top of the list. It is now a leaf in the footer group at order 95, so it renders between Documentation (90) and Features & roadmap (100), and it points at one page carrying the three reports as cards: Processing time, Deadline monitoring, Process mining. A card carries what a menu item cannot — a description and a category — so a reader can tell the throughput reports from the process analysis without opening either. The three pages stay ROUTABLE. Deep links, e2e specs and the cards all address them by route name; only their menu entries go, retired in menu-layout.json under `removals` with `removalsReplacedBy` naming Reports, which is how every other placement decision in this app is declared (ADR-044 Decision 2). Verified: gate-104 reports 0 findings, gate-53 passes and raises nothing for the three new removals, and the assembled menu has no report entry left in the main nav. 🔴 BLOCKED ON nextcloud-vue#893. `type: "reports"` is not in the installed schema (2.27.0), so `npm run check:manifest` fails with "/pages/45/type must be equal to one of the allowed values". This cannot merge until that PR releases and dossiq takes the bump. Left as a draft rather than merged behind a green that would only mean the validator had not looked.
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ❌ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ❌ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 540/540 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-08-31 20:54 UTC
Download the full PDF report from the workflow artifacts.
# Conflicts: # src/menu-layout.json
…hipping Dutch as source Three things the merge with development surfaced. The manifest declared `type: reports`, and the pinned nextcloud-vue did not know that type: its schema enum stopped at `custom`, so `check:manifest` failed on the one page this branch exists to add. The range said ^2.24.3, which a fresh install could satisfy with a version that has no reports page at all. It now says ^2.28.0, the first release carrying the type in its schema, the component, and the built bundle. The four card and page descriptions had no translation keys. The l10n parity checker reads the manifest precisely because it is data rather than source, and it caught them; the Dutch is written rather than extracted. The category names were written in Dutch and used as source strings, so an English instance read `Doorlooptijd en termijnen`. They are English now, with the Dutch in nl.json where the rest of it lives. That last one only reaches the screen once nextcloud-vue#904 lands: CnReportsPage currently renders its manifest strings untranslated, so today the keys sit unused. English source is the right value either way, and the fleet checker would have flagged the Dutch the moment it learned to read this field.
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 540/540 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-09-01 08:01 UTC
Download the full PDF report from the workflow artifacts.
gate-60 failed on CalendarClockOutline: it is not registered in src/icons.js, and an unregistered icon renders as nothing at all rather than falling back to something. The deadline card would have shipped blank. The fix that is also the better design is to reuse what the retired menu entries used. Analytics carried ChartLine, TermijnDashboardMenu carried ClockAlertOutline and ProcessMiningDashboardMenu carried ChartSankey, all three already registered. A reader who knew those entries now finds the same glyph on the card that replaced each one. ChartSankey also settles a gate-60 Tier B warning on its own: the process-mining concept has a canonical icon under ADR-077, and SitemapOutline was not it.
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 540/540 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ❌ |
Quality workflow — 2026-09-01 09:14 UTC
Download the full PDF report from the workflow artifacts.
Contributor
Quality Report — ConductionNL/dossiq @
|
| Check | PHP | Vue | Security | License | Tests |
|---|---|---|---|---|---|
| lint | ✅ | ||||
| phpcs | ✅ | ||||
| phpmd | ✅ | ||||
| psalm | ✅ | ||||
| phpstan | ✅ | ||||
| phpmetrics | ✅ | ||||
| eslint | ✅ | ||||
| stylelint | ✅ | ||||
| build | ✅ | ||||
| check-manifest | ✅ | ||||
| check-vue3-compile | ✅ | ||||
| test-l10n | ✅ | ||||
| format | ✅ | ||||
| check-schema-l10n | ✅ | ||||
| check-l10n-js | ✅ | ||||
| composer | ✅ | ✅ 106/106 | |||
| npm | ✅ | ✅ 540/540 | |||
| app:check-code | ⏭️ | ||||
| info.xml | ✅ | ||||
| REUSE | ❌ | ||||
| PHPUnit | ✅ | ||||
| Newman | ⏭️ | ||||
| Playwright | ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development | ||||
| Hydra gates | ✅ |
Quality workflow — 2026-09-01 09:44 UTC
Download the full PDF report from the workflow artifacts.
rubenvdlinde
marked this pull request as ready for review
September 1, 2026 09:45
rubenvdlinde
requested review from
Rem-Dam,
SudoThijn,
WilcoLouwerse,
bbrands02,
remko48 and
rjzondervan
as code owners
September 1, 2026 09:46
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.
Implements ADR-112 (hydra#640) in dossiq. Draft: blocked on nextcloud-vue#893.
Reports was a menu parent at order 55, in the middle of the operational entries a case handler uses all day, with three report pages beneath it. Reports are not an operational surface: you go there deliberately and occasionally, so having them among the daily entries costs the daily entries the top of the list.
It is now a leaf in the footer at order 95, rendering between Documentation (90) and Features & roadmap (100), pointing at one page of cards:
A card carries what a menu item cannot — a description and a category — so a reader can tell the throughput reports from the process analysis without opening either.
The three pages stay routable. Deep links, e2e specs and the cards all address them by route name; only their menu entries go, retired in
menu-layout.jsonunderremovalswithremovalsReplacedBynaming Reports, which is how every other placement decision in this app is declared (ADR-044 D2).Verification
removalsReplacedBy → Reportsdeclarations satisfy its removals-invariant, so the ADR-112 pattern needed no change to gate-53Why this is a draft
type: "reports"is not in the installed schema.npm run check:manifestfails:The chain is: nextcloud-vue#893 merges → releases → dossiq takes the bump → this validates. Marking it draft rather than merging it behind a green that would only mean the validator had not looked at the new type.