diff --git a/application/i18n/locales/en/core.ts b/application/i18n/locales/en/core.ts index 768951324..310e2ba65 100644 --- a/application/i18n/locales/en/core.ts +++ b/application/i18n/locales/en/core.ts @@ -1357,7 +1357,7 @@ Highlight the focused split pane: "settings.plugins.market.sourceOnly": "First-party source example. Build with the local CLI and import the .ncpkg; no downloadable release has been published.", "settings.plugins.market.readmeNote": "Pinned to the commit above. HTML is inert and remote images are not loaded. Written by the plugin author.", "settings.plugins.manager.noVault": "System key storage is unavailable. Secret and credential operations are blocked; browsing and non-secret plugins still work.", - "settings.plugins.manager.sensitive": "Sensitive access: review the data and resource scope before granting.", + "settings.plugins.manager.sensitive": "Sensitive access: this capability may expose private data. Its mode can be changed in permission settings.", "settings.plugins.manager.dual": "Browser is the default runtime. This package also includes a Node entrypoint with full device authority; developer mode only.", "settings.plugins.manager.advancedDeclaration": "Browser entrypoint with advanced permission declarations. Not eligible for normal browser-only mode; review every declared permission.", "settings.plugins.market.retry": "Retry", @@ -1366,7 +1366,7 @@ Highlight the focused split pane: "settings.plugins.market.search": "Search name, author or description", "settings.plugins.market.noResults": "No matching plugins. Try another search.", "settings.plugins.market.manifest": "Compatibility and permissions", - "settings.plugins.manager.unbounded": "No narrower resource scope is declared. Check the actual scope in the permission prompt.", + "settings.plugins.manager.unbounded": "No narrower resource scope is declared. Host validation and the selected permission mode still apply.", "settings.plugins.openView": "Open", "settings.plugins.openManager": "Open plugin manager", "settings.plugins.sources.conflict": "This ID is installed from another source. Uninstall and explicitly reset its private data before switching. Existing source:", diff --git a/application/i18n/locales/es/core.ts b/application/i18n/locales/es/core.ts index f24b414d3..2c7775290 100644 --- a/application/i18n/locales/es/core.ts +++ b/application/i18n/locales/es/core.ts @@ -1357,7 +1357,7 @@ Resalta el panel dividido enfocado: "settings.plugins.market.sourceOnly": "Ejemplo propio con código fuente. Compílalo con la CLI local e importa el .ncpkg; no hay versión publicada para descargar.", "settings.plugins.market.readmeNote": "Fijado al commit indicado. El HTML no se ejecuta y las imágenes remotas no se cargan. Contenido del autor.", "settings.plugins.manager.noVault": "El almacén de claves del sistema no está disponible. Se bloquean secretos y credenciales; el catálogo y los plugins que no los usan siguen disponibles.", - "settings.plugins.manager.sensitive": "Acceso sensible: revisa los datos y el alcance antes de autorizar.", + "settings.plugins.manager.sensitive": "Acceso sensible: esta capacidad puede exponer datos privados. Su modo se puede cambiar en los ajustes de permisos.", "settings.plugins.manager.dual": "El navegador es la opción predeterminada. El paquete también incluye una entrada Node con acceso completo al dispositivo; solo para desarrollo.", "settings.plugins.manager.advancedDeclaration": "Entrada de navegador con permisos avanzados declarados. No se admite en el modo normal; revisa cada permiso.", "settings.plugins.market.retry": "Reintentar", @@ -1366,7 +1366,7 @@ Resalta el panel dividido enfocado: "settings.plugins.market.search": "Buscar nombre, autor o descripción", "settings.plugins.market.noResults": "No hay plugins coincidentes. Prueba otra búsqueda.", "settings.plugins.market.manifest": "Compatibilidad y permisos", - "settings.plugins.manager.unbounded": "No se declara un alcance de recursos más limitado. Revisa el alcance real en la solicitud de permiso.", + "settings.plugins.manager.unbounded": "No se declara un alcance de recursos más limitado. Se siguen aplicando la validación del anfitrión y el modo de permiso seleccionado.", "settings.plugins.openView": "Abrir", "settings.plugins.openManager": "Abrir gestor de plugins", "settings.plugins.sources.conflict": "This ID is installed from another source. Uninstall and explicitly reset its private data before switching. Existing source:", diff --git a/application/i18n/locales/ru/core.ts b/application/i18n/locales/ru/core.ts index 4fbb5725e..33adfbd5e 100644 --- a/application/i18n/locales/ru/core.ts +++ b/application/i18n/locales/ru/core.ts @@ -1179,7 +1179,7 @@ export const ruCoreMessages: Messages = { "settings.plugins.permissions.revokeNote": "Плагин будет отключён, его задачи отменены, а сохранённые разрешения удалены. Включите его для нового запроса доступа.", "settings.plugins.permissions.unavailable": "Управление разрешениями недоступно", "settings.plugins.manager.permissions": "Заявленные разрешения", - "settings.plugins.manager.permissionNote": "Из манифеста, а не предоставленные права. Включение допускает отложенную активацию; обязательные разрешения запрашиваются перед ней, необязательные — при использовании. Чувствительные операции проверяются приложением.", + "settings.plugins.manager.permissionNote": "Заявленные поддерживаемые возможности по умолчанию разрешены. Для каждой можно выбрать запрос или запрет в настройках разрешений. Проверки приложения и область ресурсов действуют всегда.", "settings.plugins.manager.noPermissions": "Привилегированные разрешения не заявлены.", "settings.plugins.manager.required": "Обязательно", "settings.plugins.manager.optional": "Необязательно", @@ -1222,7 +1222,7 @@ export const ruCoreMessages: Messages = { "settings.plugins.market.sourceOnly": "Пример из этого проекта. Соберите локальной CLI и импортируйте .ncpkg; готовый пакет для скачивания не опубликован.", "settings.plugins.market.readmeNote": "Зафиксирован указанный коммит. HTML не выполняется, внешние изображения не загружаются. Текст автора плагина.", "settings.plugins.manager.noVault": "Системное хранилище ключей недоступно. Операции с секретами и учётными данными заблокированы; каталог и плагины без секретов доступны.", - "settings.plugins.manager.sensitive": "Чувствительный доступ: проверьте данные и область ресурсов перед разрешением.", + "settings.plugins.manager.sensitive": "Чувствительный доступ: эта возможность может раскрыть личные данные. Её режим можно изменить в настройках разрешений.", "settings.plugins.manager.dual": "По умолчанию используется браузерная среда. Пакет также содержит вход Node с полным доступом к устройству; только для разработчиков.", "settings.plugins.manager.advancedDeclaration": "Браузерная точка входа с заявленными расширенными разрешениями. Не допускается в обычном режиме; проверьте все разрешения.", "settings.plugins.market.retry": "Повторить", @@ -1231,7 +1231,7 @@ export const ruCoreMessages: Messages = { "settings.plugins.market.search": "Поиск по имени, автору или описанию", "settings.plugins.market.noResults": "Совпадений нет. Измените запрос.", "settings.plugins.market.manifest": "Совместимость и разрешения", - "settings.plugins.manager.unbounded": "Более узкая область ресурсов не заявлена. Проверьте фактическую область в запросе разрешения.", + "settings.plugins.manager.unbounded": "Более узкая область ресурсов не заявлена. Проверки приложения и выбранный режим разрешений продолжают действовать.", "settings.plugins.openView": "Открыть", "settings.plugins.openManager": "Открыть управление плагинами", "settings.plugins.sources.conflict": "This ID is installed from another source. Uninstall and explicitly reset its private data before switching. Existing source:", diff --git a/application/i18n/locales/zh-CN/core.ts b/application/i18n/locales/zh-CN/core.ts index 5f6b42897..da8d927e1 100644 --- a/application/i18n/locales/zh-CN/core.ts +++ b/application/i18n/locales/zh-CN/core.ts @@ -1272,7 +1272,7 @@ Vaults 标签保持扁平,不使用这块背景。 "settings.plugins.market.sourceOnly": "第一方源码示例。请用本地 CLI 构建并导入 .ncpkg;尚未发布可下载发行包。", "settings.plugins.market.readmeNote": "固定到上面的提交。HTML 不执行,远程图片不加载。内容由插件作者提供。", "settings.plugins.manager.noVault": "系统密钥存储不可用。秘密和凭据操作被阻止;浏览市场和不使用秘密的插件仍可使用。", - "settings.plugins.manager.sensitive": "敏感访问:授权前请检查涉及的数据和资源范围。", + "settings.plugins.manager.sensitive": "敏感访问:此能力可能涉及私密数据,可在权限设置中调整其模式。", "settings.plugins.manager.dual": "默认使用浏览器运行时,但包中还包含拥有完整设备权限的 Node 入口;仅限开发者模式。", "settings.plugins.manager.advancedDeclaration": "浏览器入口声明了高级权限。不适用于普通浏览器插件模式;请逐项检查声明权限。", "settings.plugins.market.retry": "重试", @@ -1281,7 +1281,7 @@ Vaults 标签保持扁平,不使用这块背景。 "settings.plugins.market.search": "搜索名称、作者或描述", "settings.plugins.market.noResults": "没有匹配插件,请尝试其他关键词。", "settings.plugins.market.manifest": "兼容性与权限", - "settings.plugins.manager.unbounded": "未声明更细的资源范围。请在权限提示中检查实际授权范围。", + "settings.plugins.manager.unbounded": "未声明更细的资源范围,仍受应用校验和所选权限模式约束。", "settings.plugins.openView": "打开", "settings.plugins.openManager": "打开插件管理", "settings.plugins.sources.conflict": "此 ID 已从其他来源安装。请先卸载并明确清理旧来源数据,再换源重装。原来源:", diff --git a/application/i18n/locales/zh-TW/core.ts b/application/i18n/locales/zh-TW/core.ts index e98108dd6..d93967df8 100644 --- a/application/i18n/locales/zh-TW/core.ts +++ b/application/i18n/locales/zh-TW/core.ts @@ -1252,7 +1252,7 @@ Vaults 分頁維持扁平,不使用這塊背景。 "settings.plugins.manager.browser": "瀏覽器運行時:特權訪問通過宿主權限代理。", "settings.plugins.manager.advanced": "高級運行時:擁有完整 Node 文件系統和網絡能力,代理權限無法限制這些訪問。僅供開發預覽。", "settings.plugins.manager.data": "本地 KV 僅保留在此設備。只有明確標記為同步的非秘密設置進入加密雲 sidecar。插件包和權限授權不參與同步。", - "settings.plugins.manager.unbounded": "未宣告更細的資源範圍。請在權限提示中檢查實際授權範圍。", + "settings.plugins.manager.unbounded": "未宣告更細的資源範圍,仍受應用程式驗證和所選權限模式約束。", "settings.plugins.openView": "開啟", "settings.plugins.openManager": "開啟插件管理", "settings.plugins.sources.conflict": "此 ID 已从其他来源安装。请先卸载并明确清理旧来源数据,再换源重装。原来源:", @@ -1300,7 +1300,7 @@ Vaults 分頁維持扁平,不使用這塊背景。 "settings.plugins.market.sourceOnly": "第一方源碼示例。請用本地 CLI 構建並導入 .ncpkg;尚未發佈可下載發行包。", "settings.plugins.market.readmeNote": "固定到上面的提交。HTML 不執行,遠程圖片不加載。內容由插件作者提供。", "settings.plugins.manager.noVault": "系統密鑰存儲不可用。秘密和憑據操作被阻止;瀏覽市場和不使用秘密的插件仍可使用。", - "settings.plugins.manager.sensitive": "敏感訪問:授權前請檢查涉及的數據和資源範圍。", + "settings.plugins.manager.sensitive": "敏感存取:此能力可能涉及私密資料,可在權限設定中調整其模式。", "settings.plugins.manager.dual": "默認使用瀏覽器運行時,但包中還包含擁有完整設備權限的 Node 入口;僅限開發者模式。", "settings.plugins.manager.advancedDeclaration": "瀏覽器入口聲明瞭高級權限。不適用於普通瀏覽器插件模式;請逐項檢查聲明權限。", "settings.plugins.market.retry": "重試", diff --git a/components/settings/tabs/PluginMarketplace.interaction.test.tsx b/components/settings/tabs/PluginMarketplace.interaction.test.tsx index 2ed9e85dd..2f65f6d46 100644 --- a/components/settings/tabs/PluginMarketplace.interaction.test.tsx +++ b/components/settings/tabs/PluginMarketplace.interaction.test.tsx @@ -91,6 +91,8 @@ test('README failure leaves the permissions and source visible, before the failu assert.match(html, /Declared supported capabilities default to Allow/); assert.match(html, /Ask or Deny/); assert.match(html, /Host validation and resource scope always apply/); + assert.match(html, /Host validation and the selected permission mode still apply/); + assert.doesNotMatch(html, /Check the actual scope in the permission prompt/); assert.match(html, /Source example/); assert.ok(html.indexOf('settings.read') < html.indexOf('Network unavailable')); assert.match(html, /Retry/); diff --git a/components/settings/tabs/PluginPackageManager.test.tsx b/components/settings/tabs/PluginPackageManager.test.tsx index 7fb977d7f..59c2d0454 100644 --- a/components/settings/tabs/PluginPackageManager.test.tsx +++ b/components/settings/tabs/PluginPackageManager.test.tsx @@ -27,5 +27,8 @@ test('package detail renders manifest resources as text and explains advanced au assert.match(html, /Declared supported capabilities default to Allow/); assert.match(html, /Ask or Deny/); assert.match(html, /Host validation and resource scope always apply/); + assert.match(html, /this capability may expose private data/); + assert.match(html, /mode can be changed in permission settings/); + assert.doesNotMatch(html, /before granting/); assert.match(html, /aaaaaaaaaaaaaaaa/); }); diff --git a/docs/plugin-platform/permission-modes-acceptance.md b/docs/plugin-platform/permission-modes-acceptance.md index 940569726..501815495 100644 --- a/docs/plugin-platform/permission-modes-acceptance.md +++ b/docs/plugin-platform/permission-modes-acceptance.md @@ -85,6 +85,20 @@ initial-checkpoint evidence. ## Latest checks and remaining environment blockers +- Subsequent exact `da4e809` workflows **40444934631** (tests) and + **40444934738** (packages) passed. The full suite reports **15,392 tests: + 15,342 passed, 50 skipped, zero failures/cancellations**. The runtime group + reports 694 passed/one native skip, and package settings 35 passed. All four + platform package jobs passed; release jobs were skipped. This does not replace + manual plugin native acceptance or erase the local failures below. +- A focused wording follow-up removes the implication of mandatory prompts from + the package detail's sensitive/unbounded scope text in English, Spanish, + Russian and both Chinese locales. The Russian declaration note now also + reflects default Allow instead of pre-activation permission ceremonies. + The complete local CI boundary command passes after this copy change: + contract generation is current, runtime 694 passed/one skip, examples five + passed/one skip, and package settings 35 passed. Locale parity six passed; + changed-file lint has no errors/warnings. - Exact `2eee561` packaging workflow **40443396402 passed** on Linux x64, Linux arm64, macOS and Windows; release jobs were skipped. Its first Linux test job **121988800130** stopped on a runner shutdown signal, with no observed