收口桌面壳角标诊断日志

桌面壳角标失败只记录固定阶段标签

扩展桌面壳配置门禁禁止角标日志输出 Tauri 错误细节

补充宿主壳方案和共享决策中的角标诊断边界
This commit is contained in:
2026-06-21 03:29:31 +08:00
parent dbfe743046
commit 6a686e6ed8
4 changed files with 21 additions and 21 deletions
+7 -4
View File
@@ -2874,14 +2874,15 @@ for (const snippet of [
'set_desktop_app_badge_count',
'badge_unavailable_response',
'log_desktop_badge_failure',
'desktop app badge failed for {label}: {error}',
'log_desktop_badge_failure("window", "main window unavailable")',
'log_desktop_badge_failure("set", &error.to_string())',
'desktop app badge failed for {label}',
'log_desktop_badge_failure("window")',
'log_desktop_badge_failure("set")',
'ok(request.id.clone(), json!(true))',
'"count must be an integer between 0 and 99999"',
'"badge unavailable"',
'badge_unavailable_response_is_stable',
'badge_failures_are_logged_without_exposing_native_detail',
'badge_failures_log_stable_label_only',
]) {
if (!desktopHostBridgeBadgeSource.includes(snippet)) {
throw new Error(`desktop shell badge module is missing ${snippet}`);
@@ -2889,7 +2890,9 @@ for (const snippet of [
}
if (
desktopHostBridgeBadgeSource.includes('failed(request.id.clone(), "host_error", error.to_string())') ||
desktopHostBridgeBadgeSource.includes('"main window not found"')
desktopHostBridgeBadgeSource.includes('"main window not found"') ||
desktopHostBridgeBadgeSource.includes('desktop app badge failed for {label}: {error}') ||
desktopHostBridgeBadgeSource.includes('&error.to_string()')
) {
throw new Error('desktop shell badge module must hide native window errors');
}
@@ -39,14 +39,14 @@ pub(crate) fn set_desktop_app_badge_count(
Err(response) => return response,
};
let Some(window) = app.get_webview_window("main") else {
log_desktop_badge_failure("window", "main window unavailable");
log_desktop_badge_failure("window");
return badge_unavailable_response(request);
};
match window.set_badge_count(count) {
Ok(()) => ok(request.id.clone(), json!(true)),
Err(error) => {
log_desktop_badge_failure("set", &error.to_string());
Err(_error) => {
log_desktop_badge_failure("set");
badge_unavailable_response(request)
}
}
@@ -56,11 +56,8 @@ fn badge_unavailable_response(request: &HostBridgeRequest) -> HostBridgeResponse
failed(request.id.clone(), "host_error", "badge unavailable")
}
fn log_desktop_badge_failure(label: &str, error: &str) -> bool {
if !error.is_empty() {
eprintln!("desktop app badge failed for {label}: {error}");
}
fn log_desktop_badge_failure(label: &str) -> bool {
eprintln!("desktop app badge failed for {label}");
false
}
@@ -109,13 +106,12 @@ mod tests {
#[test]
fn badge_failures_are_logged_without_exposing_native_detail() {
assert!(!log_desktop_badge_failure(
"set",
"private badge detail"
));
assert!(!log_desktop_badge_failure(
"window",
"main window unavailable"
));
assert!(!log_desktop_badge_failure("set"));
assert!(!log_desktop_badge_failure("window"));
}
#[test]
fn badge_failures_log_stable_label_only() {
assert!(!log_desktop_badge_failure("set"));
}
}
@@ -3162,6 +3162,7 @@
- 背景:Tauri 桌面壳的外观、角标和窗口标题能力都依赖主窗口和平台系统 API;这些能力对 H5 必须保持稳定错误语义,但开发侧也需要知道是主窗口缺失、主题读取失败还是系统 API 调用失败。
- 决策:`apps/desktop-shell/src-tauri/src/host_bridge/appearance.rs``apps/desktop-shell/src-tauri/src/host_bridge/badge.rs``apps/desktop-shell/src-tauri/src/host_bridge/title.rs` 必须在主窗口缺失、主题读取失败、角标设置失败和窗口标题设置失败时分别记录 `desktop appearance failed for ...``desktop app badge failed for ...``desktop window title failed for ...` 日志。HostBridge 对 H5 仍只返回稳定 `appearance unavailable``badge unavailable``window title unavailable`,不透传系统错误、窗口内部信息或平台细节。
- 2026-06-21 调整:桌面角标能力失败日志只记录 `desktop app badge failed for <stage>` 固定标签,不输出主窗口缺失文本、Tauri `set_badge_count` 错误或其它平台细节;配置检查拒绝 `badge.rs` 重新拼接 `: {error}``&error.to_string()`
- 验证方式:`cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml host_bridge::appearance``cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml host_bridge::badge``cargo test --manifest-path apps/desktop-shell/src-tauri/Cargo.toml host_bridge::title``npm run desktop-shell:typecheck``npm run check:native-shells``npm run check:encoding``git diff --check`
## 2026-06-20 桌面壳导航系统异常必须可观测
@@ -354,7 +354,7 @@ GameBridge 禁止:
2026-06-20 追加:桌面壳文件导入导出的系统异常必须可观测。Tauri dialog 路径转换失败、后台文件读写任务失败或任务 join 失败时,桌面壳必须分别记录 `desktop file export failed for ...``desktop file import failed for ...` 日志;HostBridge 回包仍只暴露稳定 `file export unavailable``file import unavailable` 语义,不透传本地路径、系统错误或线程细节。用户取消系统文件对话框仍返回 `cancelled`,不记录为异常。
2026-06-20 追加:桌面壳窗口状态小能力的系统异常必须可观测。Tauri 主窗口缺失、主题读取失败、角标设置失败或窗口标题设置失败时,桌面壳必须分别记录 `desktop appearance failed for ...``desktop app badge failed for ...``desktop window title failed for ...` 日志;HostBridge 回包仍只暴露稳定 `appearance unavailable``badge unavailable``window title unavailable` 语义,不透传系统错误、窗口内部信息或平台细节。
2026-06-20 追加:桌面壳窗口状态小能力的系统异常必须可观测。Tauri 主窗口缺失、主题读取失败、角标设置失败或窗口标题设置失败时,桌面壳必须分别记录 `desktop appearance failed for ...``desktop app badge failed for ...``desktop window title failed for ...` 日志;HostBridge 回包仍只暴露稳定 `appearance unavailable``badge unavailable``window title unavailable` 语义,不透传系统错误、窗口内部信息或平台细节。2026-06-21 调整:桌面角标失败日志只记录 `desktop app badge failed for <stage>` 固定标签,不把 Tauri `set_badge_count` 错误详情或主窗口缺失细节写入 stderr。
2026-06-20 追加:桌面壳导航系统异常必须可观测。Tauri 外链打开失败、同源 H5 route 导航失败、WebView reload 失败或主窗口缺失时,桌面壳必须记录 `desktop navigation failed for ...` 日志;HostBridge 回包仍只暴露稳定 `external URL cannot be opened``native page unavailable``webview reload unavailable` 语义,不透传系统错误、窗口内部信息或平台细节。