From 79a5707a186328f24292493bb4f102bcc827d57e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Fri, 2 Oct 2026 02:55:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=EF=BC=9AAGC=E8=AE=A4?= =?UTF-8?q?=E8=AF=81=E5=A4=B1=E8=B4=A5ADR=E4=BF=AE=E6=AD=A3=E4=B8=BA?= =?UTF-8?q?=E4=B8=8D=E6=94=B9=E5=8F=98=E7=94=A8=E6=88=B7=E5=8F=AF=E8=A7=81?= =?UTF-8?q?=E8=A1=8C=E4=B8=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除「后果与边界」里不再准确的「用户可见行为」一行(系统失败不是只进错误池) - 该节改为说明系统变体先按载荷原始事实给一行可见反馈,再原样抛出 --- ...�ADR】AGC认证失败的JS侧载体与抛出时机-2026-10-01.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/adr/【ADR】AGC认证失败的JS侧载体与抛出时机-2026-10-01.md b/docs/adr/【ADR】AGC认证失败的JS侧载体与抛出时机-2026-10-01.md index 273ddb3a6..975b4efc7 100644 --- a/docs/adr/【ADR】AGC认证失败的JS侧载体与抛出时机-2026-10-01.md +++ b/docs/adr/【ADR】AGC认证失败的JS侧载体与抛出时机-2026-10-01.md @@ -106,13 +106,15 @@ catch (error) { - **每个带载荷的业务 / 会话 `case` 用 `as` 取自己的具名载荷类型**,再读它自己的字段;字段是可枚举的 细分 `reason` 时,再 `switch (payload.reason)` 在类型化枚举上分流。无字段的 `case` 直接用本 catch 的 固定文案。不写跨变体的通用读取,也不让 Rust 预拼上下文。前缀取自当前 catch 的操作语义(登录、发码、 - 启动检查各自可以不同),等价于 Java 的 `catch (PasswordLoginRejected e)`。系统变体不读载荷(调用方 - 只负责原样抛出),但变体名必须逐个列出,`default` 的 `expectNever` 才成立。 + 启动检查各自可以不同),等价于 Java 的 `catch (PasswordLoginRejected e)`。系统变体先按载荷里的原始 + 事实(`reason` / `status` / `detail` / `serverMessage`)给一行可见反馈,再原样抛出;变体名必须逐个 + 列出,`default` 的 `expectNever` 才成立。 - 业务 / 会话变体:Rust 只给可判定事实(无字段变体连字段都没有;带载荷变体给类型化 `reason` / `serverMessage` / `status` / `detail`),调用方在自己的 catch 里补上本次操作的上下文前缀(例如 「服务器地址非法: 远程地址必须使用 https」、「登录失败: 密码长度需要在 6 到 128 位之间」)。 -- 系统变体:调用方处理不了,**原样 `throw`**。`onSubmit` / `onClick` 这类 `void` 掉的 handler - 抛出的拒绝最终以 `unhandledrejection` 结算,由全局 handler 交给错误池。 +- 系统变体:调用方处理不了,先给一行可见反馈(载荷原始事实,不建兜底文案层),再**原样 `throw`**。 + `onSubmit` / `onClick` 这类 `void` 掉的 handler 抛出的拒绝最终以 `unhandledrejection` 结算,由全局 + handler 交给错误池。 - `default: expectNever(failure)`(`expectNever(value: never)`)让"Rust 加了变体而这里 没接"变成**编译错误**。这是上一版"未识别变体上调是故意的"的替代方案:判据从运行时前移到 编译期。 @@ -135,7 +137,6 @@ catch (error) { - 新增认证命令或新增 `ClientAuthError` 变体,必须同时改两个 catch 的 switch,否则 `tsc` 失败。 - `platformSession` 续期失败继续按"网络类失败不降级身份、不标权威失败"处理 (`authoritative: false`),与旧 `failed` 分支语义一致。 -- 用户可见行为:业务拒绝仍是登录页一行提示;系统失败仍是错误池事件 + 「发现问题」通知。 - 全局 `unhandledrejection` 是系统变体的唯一出口,调用方不再直接调 `captureClientError`; 系统变体上报的 `source` 就是该 handler 的显式入参(`unhandledrejection`),载体不再携带 `action`;结构化拒绝没有 JS `Error.message`,上报文案落回调用方给的默认值。