docs(telemetry): the send explainer and Desktop consent window name the fresh-install note

The fresh-install receipt is kept from before the consent answer and counted
after an opt-in, so "data from before you opt in stays on this machine" was
false for it on the CLI send explainer and Desktop's consentWindow line in all
9 locales; only the pre-chat offer named the exception. Both now carry the same
"apart from the fresh-install note (noted on this machine and counted only once
you opt in)" clause. No i18n key changes; the CLI lines stay under 80 columns.
This commit is contained in:
Teknium
2026-10-06 05:18:24 -07:00
parent ce14639879
commit d3674513c8
11 changed files with 26 additions and 11 deletions

View File

@@ -20,7 +20,7 @@ export const arCommon = {
installId:
'يرفع الإرسال كل حزمة يومية إلى خدمة القياس عن بُعد لدى Nous. تحمل الحزم معرّف التثبيت لهذا الملف الشخصي: معرّف UUID عشوائي ثابت بلا معلومات شخصية، ويُعاد تعيينه بحذف مجلد المقاييس المشتركة.',
consentWindow:
'لا تُرسل إلا الحزم التي تقع فترة جمعها كاملة داخل نافذة موافقة مسجلة — تبقى البيانات السابقة لموافقتك، أو من أي فترة كان الإرسال فيها متوقفًا، على هذا الجهاز. يمكن إيقاف الإرسال مجددًا في أي وقت.',
'لا تُرسل إلا الحزم التي تقع فترة جمعها كاملة داخل نافذة موافقة مسجلة. باستثناء ملاحظة التثبيت الجديد (التي تُسجَّل على هذا الجهاز ولا تُحتسب إلا بعد موافقتك)، تبقى البيانات السابقة لموافقتك، أو من أي فترة كان الإرسال فيها متوقفًا، على هذا الجهاز. يمكن إيقاف الإرسال مجددًا في أي وقت.',
readDocs: 'اقرأ التفاصيل الكاملة',
share: 'الجمع والإرسال إلى Nous',
local: 'الجمع محليًا فقط',

View File

@@ -18,7 +18,7 @@ export const deSharedMetrics = {
installId:
'Beim Senden wird jedes Tagespaket an den Nous-Telemetriedienst hochgeladen. Pakete tragen die Installations-ID dieses Profils: eine feste zufällige UUID ohne persönliche Daten, zurückgesetzt durch Löschen des Shared-Metrics-Ordners.',
consentWindow:
'Gesendet werden nur Pakete, deren gesamter Erfassungszeitraum in ein erfasstes Zustimmungsfenster fällt – Daten von vor Ihrer Zustimmung oder aus Lücken, in denen das Senden aus war, bleiben auf diesem Rechner. Das Senden lässt sich jederzeit wieder abschalten.',
'Gesendet werden nur Pakete, deren gesamter Erfassungszeitraum in ein erfasstes Zustimmungsfenster fällt. Abgesehen vom Hinweis auf eine Neuinstallation (auf diesem Gerät festgehalten und erst nach Ihrer Zustimmung gezählt) bleiben Daten von vor Ihrer Zustimmung oder aus Lücken, in denen das Senden aus war, auf diesem Rechner. Das Senden lässt sich jederzeit wieder abschalten.',
readDocs: 'Alle Details lesen',
share: 'Erfassen und an Nous senden',
local: 'Nur lokal erfassen',

View File

@@ -19,7 +19,7 @@ export const enSharedMetrics: Translations['sharedMetrics'] = {
installId:
'Sending uploads each daily package to the Nous telemetry service. Packages carry this profile’s install ID: a stable random UUID with no personal information, reset by deleting the shared-metrics directory.',
consentWindow:
'Only packages whose entire collection period falls inside a recorded consent window are ever sent — data from before you opt in, or from any gap while sending was off, stays on this machine. Sending can be turned off again at any time.',
'Only packages whose entire collection period falls inside a recorded consent window are ever sent. Apart from the fresh-install note (noted on this machine and counted only once you opt in), data from before you opt in, or from any gap while sending was off, stays on this machine. Sending can be turned off again at any time.',
readDocs: 'Read the full details',
share: 'Collect and send to Nous',
local: 'Collect locally only',

View File

@@ -18,7 +18,7 @@ export const esSharedMetrics = {
installId:
'Al enviar, cada paquete diario se sube al servicio de telemetría de Nous. Los paquetes llevan el ID de instalación de este perfil: un UUID aleatorio y estable sin información personal, que se restablece al borrar el directorio de métricas compartidas.',
consentWindow:
'Solo se envían los paquetes cuyo periodo de recopilación completo cae dentro de una ventana de consentimiento registrada; los datos de antes de aceptar, o de cualquier intervalo con el envío desactivado, se quedan en este equipo. Puedes volver a desactivar el envío cuando quieras.',
'Solo se envían los paquetes cuyo periodo de recopilación completo cae dentro de una ventana de consentimiento registrada. Salvo el aviso de instalación nueva (registrado en este equipo y que solo se cuenta si aceptas), los datos de antes de aceptar, o de cualquier intervalo con el envío desactivado, se quedan en este equipo. Puedes volver a desactivar el envío cuando quieras.',
readDocs: 'Leer todos los detalles',
share: 'Recopilar y enviar a Nous',
local: 'Recopilar solo en local',

View File

@@ -18,7 +18,7 @@ export const frSharedMetrics = {
installId:
'L’envoi transmet chaque paquet quotidien au service de télémétrie de Nous. Les paquets portent l’identifiant d’installation de ce profil : un UUID aléatoire stable sans information personnelle, réinitialisé en supprimant le dossier des métriques partagées.',
consentWindow:
'Seuls les paquets dont toute la période de collecte tombe dans une fenêtre de consentement enregistrée sont envoyés — les données d’avant votre accord, ou de toute période où l’envoi était désactivé, restent sur cette machine. L’envoi peut être désactivé à tout moment.',
'Seuls les paquets dont toute la période de collecte tombe dans une fenêtre de consentement enregistrée sont envoyés. Hormis la note de nouvelle installation (enregistrée sur cette machine et comptée seulement après votre accord), les données d’avant votre accord, ou de toute période où l’envoi était désactivé, restent sur cette machine. L’envoi peut être désactivé à tout moment.',
readDocs: 'Lire tous les détails',
share: 'Collecter et envoyer à Nous',
local: 'Collecter en local uniquement',

View File

@@ -18,7 +18,7 @@ export const jaSharedMetrics = {
installId:
'送信すると、日次パッケージが Nous のテレメトリサービスにアップロードされます。パッケージにはこのプロファイルのインストール ID(個人情報を含まない固定のランダム UUID。共有メトリクスのディレクトリを削除するとリセット)が付きます。',
consentWindow:
'収集期間全体が記録済みの同意期間内に収まるパッケージだけが送信されます。オプトイン前のデータや、送信オフ中のデータはこのマシンに残ります。送信はいつでもオフに戻せます。',
'収集期間全体が記録済みの同意期間内に収まるパッケージだけが送信されます。新規インストールの記録(このマシンに記録され、同意後にのみ集計)を除き、オプトイン前のデータや、送信オフ中のデータはこのマシンに残ります。送信はいつでもオフに戻せます。',
readDocs: '詳細を読む',
share: '収集して Nous に送信する',
local: 'ローカルでのみ収集する',

View File

@@ -18,7 +18,7 @@ export const ruSharedMetrics = {
installId:
'При отправке ежедневный пакет загружается в сервис телеметрии Nous. Пакеты содержат идентификатор установки этого профиля — постоянный случайный UUID без личных данных; он сбрасывается удалением каталога общих метрик.',
consentWindow:
'Отправляются только пакеты, весь период сбора которых попадает в записанное окно согласия: данные до согласия и за время, когда отправка была выключена, остаются на этом компьютере. Отправку можно снова выключить в любой момент.',
'Отправляются только пакеты, весь период сбора которых попадает в записанное окно согласия. Кроме отметки о новой установке (она записывается на этом компьютере и учитывается только после вашего согласия), данные до согласия и за время, когда отправка была выключена, остаются на этом компьютере. Отправку можно снова выключить в любой момент.',
readDocs: 'Подробнее',
share: 'Собирать и отправлять в Nous',
local: 'Собирать только локально',

View File

@@ -49,7 +49,7 @@ export const zhHant = defineLocale({
installId:
'傳送會把每日資料包上傳到 Nous 遙測服務。資料包帶有此設定檔的安裝 ID:一個不含個人資訊的固定隨機 UUID,刪除共享指標目錄即可重設。',
consentWindow:
'只有整個收集期間都落在已記錄同意時段內的資料包才會被傳送——你同意之前的資料,或傳送關閉期間的資料,都會留在本機。你可以隨時再次關閉傳送。',
'只有整個收集期間都落在已記錄同意時段內的資料包才會被傳送。除全新安裝記錄(記錄在本機,僅在你同意後計入)外,你同意之前的資料,或傳送關閉期間的資料,都會留在本機。你可以隨時再次關閉傳送。',
readDocs: '查看完整說明',
share: '收集並傳送給 Nous',
local: '僅在本機收集',

View File

@@ -17,7 +17,7 @@ export const zhSharedMetrics = {
installId:
'发送会把每日数据包上传到 Nous 遥测服务。数据包带有此配置文件的安装 ID:一个不含个人信息的固定随机 UUID,删除共享指标目录即可重置。',
consentWindow:
'只有整个收集周期都落在已记录同意时段内的数据包才会被发送——你同意之前的数据,或发送关闭期间的数据,都会留在本机。你可以随时再次关闭发送。',
'只有整个收集周期都落在已记录同意时段内的数据包才会被发送。除全新安装记录(记录在本机,仅在你同意后计入)外,你同意之前的数据,或发送关闭期间的数据,都会留在本机。你可以随时再次关闭发送。',
readDocs: '查看完整说明',
share: '收集并发送给 Nous',
local: '仅在本地收集',

View File

@@ -517,8 +517,10 @@ _SEND_CONSENT_EXPLAINER = (
"(it contains no personal information and is reset by deleting",
"the shared-metrics directory). Only packages whose entire",
"collection period falls inside a recorded consent window are",
"ever sent — data from before you opt in, or from any gap",
"while sending was off, stays on this machine. Sending can be", "turned off again at any time.",
"ever sent. Apart from the fresh-install note (noted on this",
"machine and counted only once you opt in), data from before",
"you opt in, or from any gap while sending was off, stays on",
"this machine. Sending can be turned off again at any time.",
)

View File

@@ -151,3 +151,16 @@ def test_unseen_no_thanks_is_asked_once_more_and_then_settled(monkeypatch):
assert len(shown) == 1 and shown[0].startswith(consent._REASK_NOTE)
assert consent.consent_state(read_raw_config()) == {"enabled": False, "send": False, "decided": True, "reask": False}
def test_every_cli_promise_that_pre_opt_in_data_stays_local_names_the_install_note():
"""Invariant: the fresh-install note is the one record kept from before the consent answer and
counted after it, so each CLI surface stating the pre-opt-in promise names that exception, and
the explainer still fits an 80-column terminal (print_info indents by two)."""
from hermes_cli.observability.shared_metrics_consent import _OFFER_DESCRIPTION
from hermes_cli.setup import _SEND_CONSENT_EXPLAINER
explainer = " ".join(_SEND_CONSENT_EXPLAINER)
for text in (explainer, " ".join(_OFFER_DESCRIPTION.split())):
assert "before you opt in" in text and "install note" in text.split("before you opt in")[0], text
assert max(len(line) for line in _SEND_CONSENT_EXPLAINER) + 2 <= 80