# 安全模型

BRB 能驱动浏览器、发送消息、执行本地工作流；无法确认时停止操作。

1. **副作用登记表（SideEffect Registry）**：每个可观察的外部操作都必须先登记。调用方必须持有对应 capability。未登记的操作默认拒绝。
2. **同意与额度闸门**：创建 ChatGPT 会话需要明确意图、一次性授权和每日额度。只读观察与诊断不需要授权。
3. **发送前目标校验**：每次发送前，BRB 重新解析目标会话，并在页面中核对位置；不会凭旧的进程内存快照发送。
4. **交付对账**：结果不明确时，BRB 不会盲目重发。只有确认上一次没有送达后，才可能进行唯一一次重试。
5. **账号身份匹配（A17）**：绑定记录已验证的账号 principal。每次执行远端副作用前，BRB 重新观察当前主账号；账号不匹配时停止操作，也不会自动解绑。
6. **有界恢复（A13/A3）**：恢复可以增加检查，但不能增加权限。重试和重启都受全局预算限制。give-up 是终态，必须由人工显式重新发起。
7. **会话绑定**：一个 ChatGPT 会话只能由一个 Pi 线程拥有。冲突会被拒绝。BRB 不会通过切换当前标签页绕过所有权检查。
8. **治理边界**：BRB 不会代填密码、不保存凭据，也不会处理验证码。Git push 和 remote 变更默认不自动执行。首次使用引导不能绕过 capability、同意或额度闸门。
9. **诊断净化**：诊断输出经过脱敏，不含 capability 内容、令牌、正文或 cookie。

---

## 平台边界（Platform boundaries）

BRB 不设计用于绕过第三方平台（ChatGPT / OpenAI）的限制或安全措施。具体不做：

- 不自动解决或绕过 CAPTCHA / 验证码（Google Chrome / Microsoft Edge 的 CDP 支持是浏览器厂商能力，不代表被自动化服务允许这种用法）
- 不绕过使用额度、速率限制或模型限制
- 不绕过账号限制、登录要求或安全挑战
- 不在页面明确禁用某操作时强行启用它
- 不通过隐藏或私有接口绕过正常产品流程
- 不使用 stealth、浏览器指纹伪装或其他反检测机制规避平台控制
- 不在账号身份无法确认时继续执行远端操作
- 不对结果不明确的消息盲目重发
- 不自动切换账号以规避限制

遇到上述情况，BRB 停止自动操作、报告原因，把下一步交还给用户。

### English

BRB is not designed to bypass restrictions or security controls imposed by third-party
services. BRB does not: solve or bypass CAPTCHAs; bypass usage quotas, rate limits or model
restrictions; bypass account restrictions, authentication requirements or security
challenges; force-enable actions the page has explicitly disabled; use hidden or private
endpoints to bypass normal product flows; use stealth, fingerprint spoofing or
anti-detection mechanisms; continue remote actions while account identity is unverified;
blindly resend messages when delivery is ambiguous; or switch accounts to evade limits.
When it meets one of these, BRB stops, reports the reason, and returns control to the user.

### 代码强制点（不靠自觉）

| 边界 | 强制位置 | 验证 |
| --- | --- | --- |
| 阻断识别（CAPTCHA / 安全挑战 / 限流 / 额度 / 登录态） | `runtime/guards.ts` 单张模式表 → `detectBlocker` + `detectPlatformBlock` | `tests/protocol-test.mjs`（分类 + 两视图一致性） |
| 发送前检查 | `ChatGptPage.ask()`：副作用前 `platformBlock` 非空即拒绝，不重试 | 结构断言；`platformBlockMessage` 文案测试 |
| 建会话检查 | `ChatGptPage.createConversation()`：新页落地后、交回前检查 | 同上 |
| doctor 上报 | `doctor()` 把 `platformBlock` 写入「问题」 | 实测：blocked 页面不再报健康 |
| 自动重试 | 交付对账 + stall 阶梯：`blocked` 类永不重试 | `tests/cycle`/stall 既有测试 |
| 账号身份 | A17：每次远端副作用前重新观察，MISMATCH/UNKNOWN → STOP | 既有 A17 测试 |
| 私有接口与规避签名静态扫描 | `scripts/release/check-imports.mjs` C13 段扫描 `src/` | 套件（`npm test`） |
| 宣传语防火墙 | `scripts/release/check-docs.mjs` DOC-GATE-10 | 套件（`npm test`） |

用户可见文案遵守「事实 + BRB 已停止什么 + 用户可以做什么」（`platformBlockMessage`），不写「正在尝试其他方法」类措辞。

遇到安全阻断，先运行 `/brb status`；要做环境诊断，再运行 `/brb doctor`。
