文档:AGC认证失败ADR修正为不改变用户可见行为
- 删除「后果与边界」里不再准确的「用户可见行为」一行(系统失败不是只进错误池) - 该节改为说明系统变体先按载荷原始事实给一行可见反馈,再原样抛出
This commit is contained in:
@@ -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`,上报文案落回调用方给的默认值。
|
||||
|
||||
Reference in New Issue
Block a user