灰度遥测
插件错误匿名遥测(opt-in,默认关闭)驱动商店的灰度自动暂停:某个插件版本 24h 内错误上报超阈值时,商店自动停止向用户下发该版本,防止坏版本扩散。隐私与白名单
- opt-in 默认关:设置项
telemetryEnabled,默认false。关闭时前端不触发、不上报。 - 上报字段白名单(仅此四项):
- 绝不包含:文件路径、堆栈、设备信息、用户名、IP 等任何隐私数据。
- 白名单在前后端双重校验:后端
endpoints/telemetry.rs校验非空 + 错误类别,store 端 zod schema 再校验一次。
上报流程
静默设计:开关关闭不触发;上报失败静默吞掉(
catch(() => {}));遥测任何环节都不应影响插件与主流程。
商店自动暂停逻辑
商店POST /plugins/check-updates(批量更新检查)时,对每个候选的最新 published 版本做 24h 错误计数:
- 匹配规则:
plugin_id IN (p.id, p.slug) OR plugin_id LIKE '%.{slug}'(兼容插件以反向域名 manifest.id 上报,如dev.xxx)+version精确匹配 +created_at在 24 小时内。 - 阈值:
PLUGIN_ERROR_PAUSE_THRESHOLD(环境变量可覆盖,默认 10)。计数> 阈值即暂停。 - 暂停效果:该版本不再出现在 updates 列表中(不会作为升级建议下发)。
开发者影响
- 版本可能被自动暂停:如果你发布的某个版本在 24h 内错误上报数超过阈值(默认 10),商店会停止向用户推荐该版本——这是生态对用户的保护,也是给你的信号。
- 如何避免:
- 发布前充分本地测试(上传 → 启用 → 重启 → 各功能验证)
qomicex verify过 0 error(长循环、权限最小化等静态检查)- 上线后观察版本错误率,小步迭代,避免一次性大改
- 被暂停后:计数无开发者自助清除入口(以代码为准)。修复问题 → 发布新版本号,新版本重新走统计周期;旧版本在 24h 窗口滑动后自动解除暂停(前提是新版本不再触阈值)。
- 注意:错误去重(60s 窗口)在客户端进行,上报的是去重后的错误类别计数,不代表真实崩溃次数,只用于灰度异常侦测。