From 2a68e00293f2c8851c48bbace192467d589c16d7 Mon Sep 17 00:00:00 2001 From: Conduction Release Bot Date: Tue, 1 Sep 2026 06:56:42 +0200 Subject: [PATCH 1/2] chore(icons): adopt the Tier B vocabulary in full MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit gate-60 reported 8 Tier B warnings, four concepts duplicated across the real and mock register. All adopted. 8 -> 0. Vulnerability ShieldAlert -> ShieldAlertOutline Contract FileDocumentEdit -> FileSign Connection Link -> TransitConnectionVariant View Eye -> EyeOutline Contract is the substantive one: FileDocumentEdit is a document being EDITED, which is the opposite of what a signed contract is. FileSign says signed. ⚠️ TransitConnectionVariant and EyeOutline had to be REGISTERED in src/icons.js in the same commit. Neither was there, and an icon a manifest names but the registry does not hold renders as NOTHING, not a fallback. --- lib/Settings/softwarecatalogus_register.json | 8 ++++---- lib/Settings/stackiq_mock_register.json | 8 ++++---- src/icons.js | 4 ++++ 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/Settings/softwarecatalogus_register.json b/lib/Settings/softwarecatalogus_register.json index a119c23c..f785464c 100644 --- a/lib/Settings/softwarecatalogus_register.json +++ b/lib/Settings/softwarecatalogus_register.json @@ -1638,7 +1638,7 @@ "description": "Schema voor kwetsbaarheden. Dit schema is onderdeel van het vastgestelde datamodel maar wordt niet daadwerkelijk in de applicatie gebruikt.", "version": "1.0.20", "omschrijving": "", - "icon": "ShieldAlert", + "icon": "ShieldAlertOutline", "required": [ "name", "shortDescription", @@ -3261,7 +3261,7 @@ "description": "Een formele overeenkomst voor het inzetten van een Dienst op een Gebruik. Beschrijft de inkooprelatie achter een Gebruik (welke organisatie welke module onder welke voorwaarden gebruikt): looptijd, kosten, contracttype en status.", "version": "0.1.1", "omschrijving": "", - "icon": "FileDocumentEdit", + "icon": "FileSign", "required": [ "service", "usage", @@ -3552,7 +3552,7 @@ "description": "Schema voor koppelingen tussen applicaties en systemen. ApplicatieB is voor koppelingen met andere applicaties. BuitengemeentelijkVoorziening is voor koppelingen met externe voorzieningen.", "version": "0.3.1", "omschrijving": "", - "icon": "Link", + "icon": "TransitConnectionVariant", "required": [ "name" ], @@ -5264,7 +5264,7 @@ "description": "AMEF View - Architectuur views en diagrammen uit het ArchiMate model", "version": "0.0.7", "omschrijving": "", - "icon": "Eye", + "icon": "EyeOutline", "required": [ "identifier", "type", diff --git a/lib/Settings/stackiq_mock_register.json b/lib/Settings/stackiq_mock_register.json index 03cc09ae..64cc2513 100644 --- a/lib/Settings/stackiq_mock_register.json +++ b/lib/Settings/stackiq_mock_register.json @@ -513,7 +513,7 @@ "description": "Schema voor koppelingen tussen applicaties en systemen. ApplicatieB is voor koppelingen met andere applicaties. BuitengemeentelijkVoorziening is voor koppelingen met externe voorzieningen.", "version": "0.3.1", "omschrijving": "", - "icon": "Link", + "icon": "TransitConnectionVariant", "required": [ "name" ], @@ -1389,7 +1389,7 @@ "description": "Een formele overeenkomst voor het inzetten van een Dienst op een Gebruik. Beschrijft de inkooprelatie achter een Gebruik (welke organisatie welke module onder welke voorwaarden gebruikt): looptijd, kosten, contracttype en status.", "version": "0.1.1", "omschrijving": "", - "icon": "FileDocumentEdit", + "icon": "FileSign", "archive": [], "source": "internal", "hardValidation": false, @@ -6735,7 +6735,7 @@ "description": "AMEF View - Architectuur views en diagrammen uit het ArchiMate model", "version": "0.0.7", "omschrijving": "", - "icon": "Eye", + "icon": "EyeOutline", "required": [ "identifier", "type", @@ -7153,7 +7153,7 @@ "description": "Schema voor kwetsbaarheden. Dit schema is onderdeel van het vastgestelde datamodel maar wordt niet daadwerkelijk in de applicatie gebruikt.", "version": "1.0.20", "omschrijving": "", - "icon": "ShieldAlert", + "icon": "ShieldAlertOutline", "required": [ "name", "shortDescription", diff --git a/src/icons.js b/src/icons.js index 27f3f7d6..b97dd68e 100644 --- a/src/icons.js +++ b/src/icons.js @@ -33,6 +33,7 @@ import CurrencyEur from 'vue-material-design-icons/CurrencyEur.vue' import Database from 'vue-material-design-icons/Database.vue' import Domain from 'vue-material-design-icons/Domain.vue' import Eye from 'vue-material-design-icons/Eye.vue' +import EyeOutline from 'vue-material-design-icons/EyeOutline.vue' import FileDocumentEdit from 'vue-material-design-icons/FileDocumentEdit.vue' import FileSign from 'vue-material-design-icons/FileSign.vue' import FolderOutline from 'vue-material-design-icons/FolderOutline.vue' @@ -60,6 +61,7 @@ import ShieldOutline from 'vue-material-design-icons/ShieldOutline.vue' import Sitemap from 'vue-material-design-icons/Sitemap.vue' import SourceBranch from 'vue-material-design-icons/SourceBranch.vue' import Star from 'vue-material-design-icons/Star.vue' +import TransitConnectionVariant from 'vue-material-design-icons/TransitConnectionVariant.vue' import ViewDashboardOutline from 'vue-material-design-icons/ViewDashboardOutline.vue' import ViewGridOutline from 'vue-material-design-icons/ViewGridOutline.vue' import ViewModule from 'vue-material-design-icons/ViewModule.vue' @@ -86,6 +88,7 @@ export default { Database, Domain, Eye, + EyeOutline, FileDocumentEdit, FileSign, FolderOutline, @@ -113,6 +116,7 @@ export default { Sitemap, SourceBranch, Star, + TransitConnectionVariant, ViewDashboardOutline, ViewGridOutline, ViewModule, From 28b7412545cfe86d9c15547aab29d517e1ce1768 Mon Sep 17 00:00:00 2001 From: Conduction Release Bot Date: Tue, 1 Sep 2026 07:23:45 +0200 Subject: [PATCH 2/2] fix(quality): clear the three failures development was already carrying MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The icon PR could not go green because stackiq development is red on its own account. All three are pre-existing, not introduced here. 1. Frontend Check (format): prettier flagged src/components/CatalogPanels.vue, a file this PR never touched. It has been failing on development since #892. Reformatted with the repo own config; the whole tree now reports "All matched files use Prettier code style!". 2. gate-60 icon-vocabulary FAILED, not warned: FileDocument and Web are named by src/manifest.json but were absent from src/icons.js, so both rendered as NOTHING. Registered. 3. gate-102 manifest-l10n-coverage: three manifest strings had no nl.json key, so they rendered English to a Dutch user. Two of them were the opposite problem, hardcoded DUTCH in a manifest whose menu labels are all English (Dashboard, Organisations, Applications, Suites, Services), so an English user saw Dutch: "Diensten" -> "Services" nl.json already had Services: Diensten "Object statistieken" -> "Object statistics" + new key "Modules" + new key, same word either way Only title and label were touched. The id, route and name values keep "Diensten" because they are identifiers, not copy. ⚠️ The keys were added to BOTH l10n/nl.json and l10n/nl.js. The browser reads the .js; a key in the .json alone is invisible to the user and check:l10n would still call the two in sync. Verified by loading nl.js and diffing the key sets: 760 each, 0 in one and not the other. Sentence case per the Conduction voice rules, not Title Case. --- l10n/nl.js | 4 +++- l10n/nl.json | 4 +++- src/components/CatalogPanels.vue | 7 +++---- src/icons.js | 4 ++++ src/manifest.json | 6 +++--- 5 files changed, 16 insertions(+), 9 deletions(-) diff --git a/l10n/nl.js b/l10n/nl.js index 106951d9..b98ef066 100644 --- a/l10n/nl.js +++ b/l10n/nl.js @@ -758,7 +758,9 @@ OC.L10N.register( "Flow": "Flow", "Where the automation lives": "Waar de automatisering zit", "Flows are what happens without anyone clicking: a reminder before a deadline passes, a confirmation sent on submission. This is where you read and edit them. Nothing to build now.": "Flows zijn wat er gebeurt zonder dat iemand klikt: een herinnering voordat een termijn verstrijkt, een bevestiging bij indiening. Hier lees en bewerk je ze. Je hoeft nu niets te bouwen.", - "Open Flows in the menu": "Open Flows in het menu" + "Open Flows in the menu": "Open Flows in het menu", + "Modules": "Modules", + "Object statistics": "Object statistieken" }, "nplurals=2; plural=(n != 1);" ) diff --git a/l10n/nl.json b/l10n/nl.json index 00ea2be2..0cf317d6 100644 --- a/l10n/nl.json +++ b/l10n/nl.json @@ -757,6 +757,8 @@ "Flow": "Flow", "Where the automation lives": "Waar de automatisering zit", "Flows are what happens without anyone clicking: a reminder before a deadline passes, a confirmation sent on submission. This is where you read and edit them. Nothing to build now.": "Flows zijn wat er gebeurt zonder dat iemand klikt: een herinnering voordat een termijn verstrijkt, een bevestiging bij indiening. Hier lees en bewerk je ze. Je hoeft nu niets te bouwen.", - "Open Flows in the menu": "Open Flows in het menu" + "Open Flows in the menu": "Open Flows in het menu", + "Modules": "Modules", + "Object statistics": "Object statistieken" } } diff --git a/src/components/CatalogPanels.vue b/src/components/CatalogPanels.vue index 3b8c0095..457040c2 100644 --- a/src/components/CatalogPanels.vue +++ b/src/components/CatalogPanels.vue @@ -5,9 +5,9 @@

Beheer van Organisaties

Organisaties kunnen worden geaccepteerd en beheerd via de - organisaties pagina. Het aanmaken en bewerken van gebruikers - gaat ook via de organisatie pagina, omdat deze onderdeel zijn - van organisaties. + organisaties pagina. Het aanmaken en bewerken van gebruikers gaat + ook via de organisatie pagina, omdat deze onderdeel zijn van + organisaties.

@@ -171,7 +171,6 @@ export default { }, computed: { - /** * Get object statistics for the table display * diff --git a/src/icons.js b/src/icons.js index b97dd68e..e0a52e58 100644 --- a/src/icons.js +++ b/src/icons.js @@ -34,6 +34,7 @@ import Database from 'vue-material-design-icons/Database.vue' import Domain from 'vue-material-design-icons/Domain.vue' import Eye from 'vue-material-design-icons/Eye.vue' import EyeOutline from 'vue-material-design-icons/EyeOutline.vue' +import FileDocument from 'vue-material-design-icons/FileDocument.vue' import FileDocumentEdit from 'vue-material-design-icons/FileDocumentEdit.vue' import FileSign from 'vue-material-design-icons/FileSign.vue' import FolderOutline from 'vue-material-design-icons/FolderOutline.vue' @@ -65,6 +66,7 @@ import TransitConnectionVariant from 'vue-material-design-icons/TransitConnectio import ViewDashboardOutline from 'vue-material-design-icons/ViewDashboardOutline.vue' import ViewGridOutline from 'vue-material-design-icons/ViewGridOutline.vue' import ViewModule from 'vue-material-design-icons/ViewModule.vue' +import Web from 'vue-material-design-icons/Web.vue' export default { AccountBoxOutline, @@ -89,6 +91,7 @@ export default { Domain, Eye, EyeOutline, + FileDocument, FileDocumentEdit, FileSign, FolderOutline, @@ -120,4 +123,5 @@ export default { ViewDashboardOutline, ViewGridOutline, ViewModule, + Web, } diff --git a/src/manifest.json b/src/manifest.json index 727c1f12..b3f99949 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -246,9 +246,9 @@ { "id": "kpi-services", "type": "stat", - "title": "Diensten", + "title": "Services", "content": { - "label": "Diensten", + "label": "Services", "icon": "Web", "route": { "name": "Diensten" @@ -288,7 +288,7 @@ { "id": "catalog-panels", "type": "catalog-panels", - "title": "Object statistieken", + "title": "Object statistics", "_note": "The management info-box and the two per-object-type statistics tables, moved out of the former hand-written Dashboard view into src/components/CatalogPanels.vue. Registered as a widget TYPE via registerDashboardWidget() in main.js: CnDashboardPage resolves a widget's type against the LIBRARY catalog, not the app registry, and an unregistered type renders 'Widget not available' silently." } ],