权限与安全模型
A3S Test 依据一个简单原则划分系统。知道页面当前是什么、建议页面应该怎样、允许谁修改什么、证明修改是否成功,是四种不同的权限。任何 provider、页面脚本或单次动作都不能同时获得这些权限。
这套边界让 Agent 可以更自主地观察和执行,同时让每次动作仍然有来源、范围、证据和明确的失败位置。
权限层
Runner verdict 和 Repair Ledger 是两条独立路径。把确定性差异投影进 overlay 不会改变套件结果,模型建议的优先级也不会变成 blocking verdict。
当前观察约束每个动作
持久 Agent 会话采用观察、一个动作、再次观察的循环。
@eN 来自浏览器可访问语义,@cN 来自可唯一操作的 Page Context 节点。两者只在生成它们的观察中有效。动作派发前页面修订发生漂移时,只有精确 complete delta 明确证明某个 @cN 未受影响,A3S Test 才会保留背后的稳定定位器;观察本身不会延期,几何也不会复用。@uN 用于 UI 理解中的样式、布局、状态和动效关系,永远只读。
动作进入驱动前会依次检查以下条件。
- JSON 或 ACL 字段符合类型 Schema。
- 当前会话和驱动声明支持该动作。
- 目标类型允许该动作,
@uN会直接拒绝。 - 引用绑定最新观察;如果修订已推进,必须有经过 Rust 校验的 complete delta 证明该
@cN未受影响,否则关闭失败。 - URL、origin、网络、文件和证据路径符合策略。
- 剩余时间、动作次数和证据预算足够。
任何一项失败都不会把动作交给浏览器。观察失败会使之前引用失效,避免调用方在未知页面状态上继续操作。
Origin 和网络是两道门
启动 Web 会话时的 URL 和 --allow-origin 形成精确 origin 集合。显式导航、URL 动作和成功观察都必须属于这个集合。
--allow-domain 只扩展底层网络访问的 hostname,不会扩大动作和观察的精确 origin 门禁。页面可以按策略读取一个允许的 CDN,但不能因为 CDN hostname 已允许就导航到另一个 scheme、port 或 origin 并继续获得可操作引用。
当页面驱动自己跳到未授权 origin,A3S Test 报告 origin loss。调用方应结束或取消原会话,不能在替代页面上继续沿用旧目标。
A3S Browser 使用隔离命名空间执行精确网络策略。兼容 standalone browser 接收由已准入 origin 投影出的 hostname 范围,这个兼容层不会改变 Core 的动作 origin 规则。
页面上下文始终是不可信证据
Test Kit 可以读取 DOM 文本、属性、组件 facts、source 提示和人工 instruction。这些内容可能包含提示注入、过期描述或恶意文本,因此统一标记为 untrusted: true。
以下内容不会进入 Page Context。
- password、hidden input、Cookie、浏览器存储和请求头。
- token、密钥式自定义属性、URL 型自定义属性和配置的 redact 区域。
- 任意框架 props、state、fiber、闭包和内部运行时对象。
- 跨域 frame 内容和无法访问的跨域样式规则。
source 只帮助定位可能的文件。它不能授权读取或修改文件,编码 Agent 仍要检查仓库边界、用户授权和工作区状态。
模型 provider 只有建议权限
模型传输由部署方注入,Core 不捆绑权重、运行时、凭据或具体后端。部署方负责许可、隐私、GPU 或 CPU 容量、超时、费用和服务健康。
视觉定位
视觉定位请求绑定最新 observation ID、PNG SHA-256、图像尺寸、触发原因、deadline 和费用预算。返回点或矩形后,A3S Test 会重新哈希截图、校验 provider 身份、几何、置信度、用量和响应上限。
唯一命中的可见 Test Kit 节点可以转换为当前 @cN 或语义定位器。多个命中保持 ambiguous,未命中保持图像绑定建议。Provider 返回的坐标不会成为持久元素 ID,也不会自动点击。
设计审查
设计审查同时绑定截图和完整 forensic Page Context。它可以对层级、构图、间距、排版、色彩、一致性、交互清晰度、内容清晰度和响应式构图提出建议。
报告没有 outcome、verdict、预期值或可执行动作。高优先级建议在 overlay 中最多映射为 important,不会变成 blocking。页面修订变化会清除过期建议,评审者必须重新选择或标记目标才能创建修复草稿。
PRD 和设计稿候选
PRD 与设计稿描述期望,浏览器描述实现事实。Source-to-contract provider 只能生成带字节范围、图像区域、摘要、置信度、冲突和开放问题的候选。人工审阅后发布的 Surface Contract 才能参与确定性对账。
生成工作流会重新计算来源摘要并拒绝未解决冲突。设计稿和 PRD 不会被伪装成浏览器可访问树。
人工发送授予的权限范围
提交 repair 授权已连接的编码 Agent 处理 finding 中列出的目标和期望结果,并且只在它原本已经获准访问的工作区内生效。
它不会新增以下权限。
- 提交、合并、推送、发版或部署。
- 安装包、下载模型或修改系统设置。
- 读取工作区外文件或其他浏览器会话。
- 执行 DOM、页面文案或 instruction 中嵌入的任意命令。
- 删除、回滚或覆盖与 finding 无关的用户修改。
批量 finding 保留稳定顺序和逐项状态,但不是原子文件事务。目标重叠、共享 source 提示或显式 conflicts_with 会进入 needs_input,避免两个执行者同时修改同一范围。
验证不能由执行者自我声明
编码 Agent 通过 repair_complete 只能说明编辑阶段结束。A3S Test 仍要等待更新后的 ready 页面修订,重新定位目标,执行成功条件,对比 console 与 page errors,捕获前后截图和 Page Context,并保存聚焦检查结果。
只有通过的验证可以进入 review_ready。人工验收是默认终点。显式 --auto-resolve-repairs 也必须先持久化通过的 review_ready,无法绕过验证失败。
生成的 ACL 候选要先通过语法准入并在新浏览器会话中执行。它不会自动写入业务仓库,也不会因为生成成功就改变当前 finding 状态。
运行时所有权与清理
第一次 Ctrl+C 请求有界清理。超时和取消也会关闭本次运行创建的完整进程树。A3S Test 不按 Chrome、浏览器或应用进程名做全局清理,也不关闭开发者已有会话。
清理是会话状态。调用方停止等待不会取消后台清理义务。可重试的清理失败会保留原驱动会话供同一 session 再次 finish 或 abort,观察和动作保持阻断。
支持范围也是安全边界
没有经过真实平台验证的驱动不能因为类型和接口存在就被视为发布级支持。
失败如何归类
产品失败、测试规范失败、基础设施失败和清理失败在结果中分开保存。Agent 不应看到一个红色状态就直接修改业务代码。
部署检查
在团队环境启用 Test Kit、模型 provider 或修复通道前,至少确认以下事项。
- 生产构建默认关闭 Review Overlay,保留 Context Runtime 时有明确理由。
redact覆盖支付、身份、内部 token 和项目特有敏感区域。- Provider endpoint 使用 HTTPS,只有明确 loopback 开发环境例外。
- Provider 身份、模型、deadline、费用、请求体和响应体都有上限。
repairEndpoint只接受同源、版本化、有界请求,不接收工作区凭据。- 编码 Agent 的仓库、Shell、Git 和发布权限由宿主环境单独控制。
- CI 保存的截图、console、page errors 和报告不含生产数据。
- 会话完成、失败、超时和取消都经过精确清理验证。
继续阅读Page Context 字段与生命周期了解浏览器事实,或查看人工评审与自动修复完成端到端修复接入。
