# 判定语义与信任边界

## 输入是观察历史

事件按输入顺序回放，不自动排序。同一会话的 `seq` 严格递增、`at_ms` 不递减；不同会话可以交错，同一时刻的操作仍按 seq 区分。全局事件 ID 不可重复。发现任何轨迹或策略错误时，整次分析失败，不输出部分放行结果。

分析器不执行任何工具。`decision=deny` 表示“该策略会拒绝此历史调用”；该调用实际上已发生，所以其费用、成功输出、标签和审批使用仍影响后续观察。两套策略均从空状态独立回放同一条轨迹。新增拒绝不能推导被拦截后 Agent 会采取什么其他行为。

## 规则组合

每条规则同时匹配 `tool` 与 `resource`。匹配的 allow 仅取消默认拒绝；所有匹配 guard 均需通过，任何 deny 或违规 finding 都导致拒绝。规则不短路，从而保留多项原因。默认 allow 与默认 deny 必须显式选择。

Glob 为区分大小写的全字符串匹配：`*` 可跨目录/斜线匹配任意长度，`?` 匹配一个 UTF-16 单元；反斜线为普通字符。它不是文件系统路径策略或 DNS 匹配器。不进行路径、URL、域名、符号链接或 Unicode 规范化。采集器必须提供已规范化的资源标识；不能直接用未经规范化的字符串建立操作系统安全边界。

## 敏感数据与来源

一个 call 的 taints 是所有 `inputs` artifact 的标签并集，加上本次 `labels`。标签只增不减，没有隐式解密或脱敏操作。每个标签保留首次声明它的来源事件 ID；菱形依赖去重。成功 call 的 `output` 继承该并集。失败 call 不能输出 artifact；未知、跨会话、前向引用和覆盖已有 artifact 都是输入错误。

不相关的先前读取不会污染当前调用。传播只沿显式依赖发生，因此采集器遗漏 `inputs`、`labels`、真实副作用或事件时，引擎无法发现对应风险。`labels` 同时声明当前调用内容的敏感性和成功输出的敏感性；它不是内容分类结果。所有记录必须来自受信采集通道。

## 审批

approve 的事件 ID 就是 grant ID。它精确绑定 `session`、`tool`、`resource`，不使用 glob。`call.approval` 引用此 ID。`call.at_ms < expires_ms` 时才有效；等于失效时间已经无效。

匹配且有效的审批，在第一次引用它的工具尝试时消耗，不论尝试成功或失败、其他策略是否拒绝、是否有 require_approval 规则；范围不匹配的引用不消耗审批。多个 guard 共享同一次判定，不会一条规则消耗一次。revoke 永久撤销当前会话中已经存在的 grant。

approve 不携带审批者身份或签名。必须由宿主认证真实的审批来源，不能允许被监控的 Agent 自行伪造 approve/revoke 事件。引擎只验证记录中审批的生命周期，不提供身份鉴别。

## 预算、频率与前置步骤

cost 是非负整数 microcredits，单事件最大 2147483647；总计以 Int64 计算。预算与频率只计匹配相应规则的 call，各会话隔离。预算包含失败、假设被拒绝的观察调用。累计预算从会话第一条匹配调用起计；窗口规则采用 `(now - window_ms, now]`，左开右闭。总额/次数等于 limit 时放行。

require_before 查找本会话此前最近一次成功、工具匹配 prerequisite glob 的调用，可限定同样的左开窗口。它不要求同一资源，不消费前置步骤，也不保证“测试覆盖当前部署内容”。需要内容版本级约束时，应由采集器/上层工作流增加可信绑定。当前调用不能满足自己的前置条件。

## 限制与报告

- 输入每份至多 8 Mi UTF-16 单元；嵌套至多 32 层。CLI/浏览器文件入口另限 16 MiB。
- 数字 token 至多 64 单元，按原始十进制内容验证确为整数，避免浮点舍入/下溢绕过。允许精确的整数指数写法，例如 10e-1；拒绝 1e-999 等小数。
- 一条轨迹至多 10000 条事件；策略至多 128 条规则。
- 标识符/工具/标签至多 256 UTF-16 单元、资源至多 1024；均不允许控制字符。
- 每事件 inputs/labels 至多 64 项且不可重复；每会话至多 16 种敏感标签，每标签至多 64 个声明来源。超过限制明确报错，绝不静默截断证据。
- 回归用例集至多 64 个用例；每个 call 恰好需要一项期望，违规码集合精确比较。
- JSON 重复键（包括转义后相同的键）、未知字段、错误类型、不适用的规则选项均拒绝。null 仅用于可选字段；缺省值见 FORMAT。
- 报告省略 resource 和原始输入内容，保留事件 ID、会话、工具、标签和来源。不要将秘密写入这些标识符。
- 浏览器时间线最多渲染前 200 条筛选结果，完整分析和导出仍包含全部事件。

模块是可复用的离线分析组件。它不替代操作系统隔离、可信日志、认证、真正的工具调用门禁或部署前安全审查。
