Lead the setup telemetry choice with what the data is for

The admin-account toggle described what the daily summary contains but
not why it exists, and the welcome card said "turn it off" twice across
two screens next to a control whose default is on. Both undercut the
point of the previous commit: people keep usage statistics on when they
understand what it buys them, not when they are reminded where the exit
is. The toggle now says the summary gives priority to the features and
platforms the operator relies on, the welcome card says development
effort follows real use and that the choice is made on the next step,
and neither surface mentions turning it off. Full details and Settings
still carry the how-to-disable copy for anyone looking for it. The i18n
proof pins the purpose-first wording in every locale.

Contract-Neutral: copy-only wording change inside the telemetry consent rules already recorded by the previous commit; no contract delta
This commit is contained in:
Richard Courtman
2026-09-02 18:51:27 +01:00
parent da3ce9142c
commit 97b2a2fdf3
6 changed files with 24 additions and 37 deletions
+11 -30
View File
@@ -1,31 +1,20 @@
{
"version": 1,
"base_sha": "38ef8224e75486d378409357e31cad5f8668d725",
"verified_at": "2026-09-02T17:36:42Z",
"base_sha": "da3ce9142cd0019a3f25993f9eed7e1927ec4f85",
"verified_at": "2026-09-02T17:49:49Z",
"result": "passed",
"changed_paths": [
"frontend-modern/src/components/Settings/GeneralSettingsPanel.tsx",
"frontend-modern/src/components/Settings/Settings.tsx",
"frontend-modern/src/components/SetupWizard/steps/SecurityStep.tsx",
"frontend-modern/src/components/WhatsNewCard.tsx",
"frontend-modern/src/i18n/messages.de.ts",
"frontend-modern/src/i18n/messages.es.ts",
"frontend-modern/src/i18n/messages.ts",
"frontend-modern/src/utils/localStorage.ts"
"frontend-modern/src/i18n/messages.ts"
],
"content_sha256": {
"frontend-modern/src/components/Settings/GeneralSettingsPanel.tsx": "9512529c0e6b86ba4e1055c5009158d442bd8d4a84c2dd9f73822a053989886a",
"frontend-modern/src/components/Settings/Settings.tsx": "72682c86dd055761cbd68d4f57b684afe4d978a0b53748859d0721e711ce321a",
"frontend-modern/src/components/SetupWizard/steps/SecurityStep.tsx": "7f8ddc0c826b5abe90f40ac08ef3856d046510a7f72afe2f40f32ae72e547eba",
"frontend-modern/src/components/WhatsNewCard.tsx": "90543f19d61e9ba6d93251a7bcc9c179fa8d7ccb6ab3364e364d0ea13b2c31f0",
"frontend-modern/src/i18n/messages.de.ts": "2bf991f57916bba30a432e01957d9a1276ea8dbce0a394843a3e0336dda66bd7",
"frontend-modern/src/i18n/messages.es.ts": "5efcb236003e3b98f361135e3a4774522b7fe069f73b3786882329050b09acbc",
"frontend-modern/src/i18n/messages.ts": "2aef7e14ffca7adc28533a38dc953de098d1f26ee2d1ff46a9c4455907b3a194",
"frontend-modern/src/utils/localStorage.ts": "19a532f55271b2fc696e3ba4ae6ba098e759f0f9df207015c803f7fcc0050bd6"
"frontend-modern/src/i18n/messages.de.ts": "8970ad9d40cc51eaa2d313086fc4b6a6045937af8d49830514b1c94323865180",
"frontend-modern/src/i18n/messages.es.ts": "d384afcd35909dff7befa52088bf988bd5a710d1e806e6e3949cc99c2c920256",
"frontend-modern/src/i18n/messages.ts": "2de135e647f2120dfb131c7dbe8718f769f9acc88566fb753544ef3e71197f08"
},
"routes": [
"/ (first-run setup wizard, fresh data dir)",
"/settings/system-general#usage-telemetry (mock data, existing-install localStorage baseline)"
"/ (first-run setup wizard, fresh data dir)"
],
"viewports": [
{
@@ -38,20 +27,12 @@
}
],
"states": [
"Setup welcome step: Usage statistics card with new copy, no PULSE_TELEMETRY instruction, Full details link",
"Setup security step (bootstrap validation and quick-setup responses intercepted by Playwright, no real token): Usage statistics toggle default on",
"Setup security step: toggle off, aria-pressed false",
"Setup completion reached after Create Account with toggle off",
"Settings system-general with prior release baseline: no telemetry-payload-update-notice banner rendered",
"Settings Usage data and privacy panel: description leads with what the summary is for; Preview payload rendered as primary Button; Reset ID secondary",
"Settings panel with payload preview open at 390px: no horizontal page overflow",
"Locales: en verified live; de/es catalog copy covered by i18n and SetupWizard localization unit tests"
"Setup welcome card: purpose-first copy, \"You choose on the next step\" wording, no PULSE_TELEMETRY instruction",
"Setup security step (setup endpoints intercepted by Playwright, no real token): Usage statistics toggle description leads with the benefit, default on",
"Locales: en verified live; de/es covered by i18n and SetupWizard localization unit tests"
],
"interactions": [
"Fill bootstrap token field with a placeholder and click Verify bootstrap token (validation endpoint intercepted)",
"Click Usage statistics toggle on the security step",
"Click Create Account & Continue: observed POST /api/security/quick-setup then POST /api/system/settings/update {\"telemetryEnabled\":false}",
"Click Preview payload in Settings and read the rendered heartbeat JSON",
"Resize to 390x844 and repeat the wizard, security step, and Settings panel checks"
"Read the security-step toggle label and description at 1280 and 390 widths"
]
}
@@ -73,7 +73,7 @@ describe('WelcomeStep', () => {
).toBeInTheDocument();
expect(screen.getByText('Usage statistics')).toBeInTheDocument();
expect(
screen.getByText(/You can turn it off in the next step or at any time in Settings/),
screen.getByText(/You choose on the next step and can change it at any time in Settings/),
).toBeInTheDocument();
expect(screen.queryByText(/PULSE_TELEMETRY=false/)).not.toBeInTheDocument();
expect(screen.getByRole('link', { name: 'Full details' })).toHaveAttribute(
@@ -299,6 +299,12 @@ describe('i18n foundation', () => {
expect(telemetryNotice).not.toMatch(/anonymous/i);
expect(setupTelemetryChoice).toContain('IP');
expect(setupTelemetryChoice).not.toMatch(/anonymous/i);
// Both setup surfaces say what the summary is for before what it holds,
// and neither tells the reader how to turn it off: the toggle is the
// control, and the how-to-disable copy lives in Full details and Settings.
const purposeWording = { de: 'Prioritaet', es: 'prioridad' } as const;
expect(setupTelemetryChoice).toContain(purposeWording[locale]);
expect(telemetryNotice).not.toMatch(/ausschalten|desactivarl/i);
expect(deploymentChoice).toContain('Pulse');
expect(deploymentChoice).not.toContain('Docker');
expect(deploymentChoice).not.toContain('LXC');
+2 -2
View File
@@ -291,14 +291,14 @@ export const DE_MESSAGE_OVERRIDES = {
'setup.security.showPassword.hide': 'Ausblenden',
'setup.security.showPassword.show': 'Anzeigen',
'setup.security.telemetry.description':
'Eine kleine taegliche Nutzungszusammenfassung senden: Zaehler und An/Aus-Flags mit einer rotierenden pseudonymen Installations-ID, niemals Hostnamen, Zugangsdaten oder IP-Adressen. Jederzeit in den Einstellungen aenderbar.',
'Eine kleine taegliche Nutzungszusammenfassung senden, damit die Funktionen und Plattformen, auf die Sie sich verlassen, Prioritaet bekommen. Sie enthaelt Zaehler und An/Aus-Flags mit einer rotierenden pseudonymen Installations-ID, niemals Hostnamen, Zugangsdaten oder IP-Adressen. Jederzeit in den Einstellungen aenderbar.',
'setup.security.telemetry.title': 'Nutzungsstatistiken',
'setup.security.title': 'Admin-Konto erstellen',
'setup.step.firstSource': 'Erste Quelle',
'setup.step.security': 'Sicherheit',
'setup.step.unlockServer': 'Server entsperren',
'setup.welcome.telemetryNotice.description':
'Pulse sendet eine kleine taegliche Nutzungszusammenfassung, damit der Maintainer sehen kann, wie viele Installationen aktiv sind, welche Releases im Einsatz sind und welche Funktionen genutzt werden. Sie enthaelt Zaehler und An/Aus-Flags mit einer rotierenden pseudonymen Installations-ID, niemals Hostnamen, Zugangsdaten, IP-Adressen oder etwas, das Sie eingeben. Sie ist standardmaessig aktiviert. Sie koennen sie im naechsten Schritt oder jederzeit in den Einstellungen ausschalten.',
'Pulse sendet eine kleine taegliche Nutzungszusammenfassung, die zeigt, welche Releases im Einsatz sind und welche Funktionen und Plattformen genutzt werden, damit die Entwicklung dort ansetzt, wo Pulse tatsaechlich genutzt wird. Sie enthaelt Zaehler und An/Aus-Flags mit einer rotierenden pseudonymen Installations-ID, niemals Hostnamen, Zugangsdaten, IP-Adressen oder etwas, das Sie eingeben. Sie ist standardmaessig aktiviert. Sie entscheiden im naechsten Schritt und koennen es jederzeit in den Einstellungen aendern.',
'setup.welcome.telemetryNotice.title': 'Nutzungsstatistiken',
'setup.wizard.ariaLabel': 'Pulse-Einrichtungsassistent',
'setup.welcome.action.continueSecurity': 'Weiter zu Sicherheit',
+2 -2
View File
@@ -283,14 +283,14 @@ export const ES_MESSAGE_OVERRIDES = {
'setup.security.showPassword.hide': 'Ocultar',
'setup.security.showPassword.show': 'Mostrar',
'setup.security.telemetry.description':
'Enviar un pequeño resumen diario de uso: conteos y flags de activado/desactivado con un ID de instalación seudónimo rotativo, nunca hostnames, credenciales ni direcciones IP. Puedes cambiarlo en cualquier momento en Ajustes.',
'Enviar un pequeño resumen diario de uso para que las funciones y plataformas de las que dependes tengan prioridad. Contiene conteos y flags de activado/desactivado con un ID de instalación seudónimo rotativo, nunca hostnames, credenciales ni direcciones IP. Puedes cambiarlo en cualquier momento en Ajustes.',
'setup.security.telemetry.title': 'Estadísticas de uso',
'setup.security.title': 'Crear tu cuenta de administrador',
'setup.step.firstSource': 'Primera fuente',
'setup.step.security': 'Seguridad',
'setup.step.unlockServer': 'Desbloquear servidor',
'setup.welcome.telemetryNotice.description':
'Pulse envía un pequeño resumen diario de uso para que su mantenedor pueda ver cuántas instalaciones están activas, qué versiones están desplegadas y qué funciones se usan. Contiene conteos y flags de activado/desactivado con un ID de instalación seudónimo rotativo, nunca hostnames, credenciales, direcciones IP ni nada que escribas. Está activado por defecto. Puedes desactivarlo en el siguiente paso o en cualquier momento en Ajustes.',
'Pulse envía un pequeño resumen diario de uso que muestra qué versiones están desplegadas y qué funciones y plataformas se usan, para que el desarrollo se centre donde Pulse se usa de verdad. Contiene conteos y flags de activado/desactivado con un ID de instalación seudónimo rotativo, nunca hostnames, credenciales, direcciones IP ni nada que escribas. Está activado por defecto. Decides en el siguiente paso y puedes cambiarlo en cualquier momento en Ajustes.',
'setup.welcome.telemetryNotice.title': 'Estadísticas de uso',
'setup.wizard.ariaLabel': 'Asistente de configuración de Pulse',
'setup.welcome.action.continueSecurity': 'Continuar a Seguridad',
+2 -2
View File
@@ -102,14 +102,14 @@ export const EN_MESSAGES = {
'setup.security.showPassword.hide': 'Hide',
'setup.security.showPassword.show': 'Show',
'setup.security.telemetry.description':
'Send a small daily usage summary: counts and on/off flags with a rotating pseudonymous install ID, never hostnames, credentials, or IP addresses. Change this at any time in Settings.',
'Send a small daily usage summary so the features and platforms you rely on get priority. It holds counts and on/off flags with a rotating pseudonymous install ID, never hostnames, credentials, or IP addresses. Change this at any time in Settings.',
'setup.security.telemetry.title': 'Usage statistics',
'setup.security.title': 'Create your admin account',
'setup.step.firstSource': 'First source',
'setup.step.security': 'Security',
'setup.step.unlockServer': 'Unlock server',
'setup.welcome.telemetryNotice.description':
'Pulse sends a small daily usage summary so its maintainer can see how many installs are active, which releases are deployed, and which features are used. It holds counts and on/off flags with a rotating pseudonymous install ID, never hostnames, credentials, IP addresses, or anything you type. It is on by default. You can turn it off in the next step or at any time in Settings.',
'Pulse sends a small daily usage summary showing which releases are deployed and which features and platforms are in use, so development effort goes where Pulse is actually used. It holds counts and on/off flags with a rotating pseudonymous install ID, never hostnames, credentials, IP addresses, or anything you type. It is on by default. You choose on the next step and can change it at any time in Settings.',
'setup.welcome.telemetryNotice.title': 'Usage statistics',
'setup.wizard.ariaLabel': 'Pulse Setup Wizard',
'alerts.activation.label.enabled': 'Notifications enabled',