# 受控浏览器 Smoke

- 真实入口、隔离 fixture、fake-server 和本地页面复现统一使用 `web-probe`：
  - 真实 node/lane 使用 YAML 解析的 `--origin internal|public`；
  - 本地或隔离 fixture 只在开发 preflight 中使用显式 custom/local 配置；
  - 禁止直接调用 Playwright、`playwright-cli`、浏览器 MCP 或一次性浏览器脚本。
- 通用判定：
  - 视口与目标 URL 必须由 owning YAML 或 typed command 显式声明；
  - 优先使用截图、DOM 断言和有界网络摘要；
  - 关闭用户入口问题时，本地和 fake-server 证据不能替代真实在线入口验证。
- 缺少高频动作时：
  - 先扩展 `web-probe observe command` 或领域 typed command；
  - 认证、Secret sourceRef、目标解析、截图、artifact 和脱敏继续复用现有合同；
  - 不新增第二浏览器 runner、wrapper 或状态目录。
- 产品配置项的真实选择与保存：
  - 使用 `web-probe product-smoke` 直接打开 owning YAML 声明的 RESTful 深链；
  - 选择后必须观察页面成功状态，发生变更时还要观察声明的保存请求；
  - 重载同一深链并确认目标选项持久化；
  - closeout 记录有界 DOM、网络 method/path/status、report SHA 和 screenshot SHA。
- xterm 使用 canvas renderer 时：
  - 不得把 `.xterm-row` 或 `textContent` 为空判定为终端无输出；
  - 视觉布局通过 `web-probe` 截图验证；
  - 终端输出语义通过页面加载前安装的只读 WebSocket message recorder 验证；
  - recorder 只采集当前测试 session 的有界 `session`、`snapshot` 和 `output` 消息；
  - recorder 不修改 WebSocket 请求、响应或业务状态；
  - 输入必须从真实终端键盘或页面虚拟按键进入；
  - 输出只返回 marker、状态、计数、进程组编号、错误布尔值和 artifact 路径；
  - 禁止回显完整终端内容、cookie、密码、API key 或认证文件。
