# Execution Rules Reference

本文件提供阶段 3、阶段 4 与全局约束的详细规则。

## 阶段 3 — 执行操作（Execute Gate）

通过权限验证后，执行具体业务操作。

### 提交审核（`submit`）的前置检查

调用 `contract_review` 之前必须确认四项齐备：

1. **合同文件**已上传或已指定
2. **审核立场**已说明（偏甲方 / 偏乙方 / 中性）
3. **审核模式**已选择（标准审核模式 / 深度审核模式）
4. **审核要求**已明确（关注点、重点条款等）

四项不齐 → **当前轮只输出追问文本，立即终止**，不进入权限验证，不调用任何工具。待用户下一轮补全后重新从阶段 2 开始。四项齐备 → 调用 `contract_review`（`commandName=submit`）。

### 合同文件如何进入 `submit`

- `submit` 会在插件内部处理合同文件接入：优先使用宿主转交的附件，也可根据用户明确指定的目标文件继续提交流程。
- Agent 不需要自己执行上传，也不要手工读取合同正文来替代 `submit`。
- 若当前轮没有合同文件或目标文件信息，才需要先向用户补齐，再进入 `submit`。
- 审核要求与审核立场写入本次 `submit` 的请求上下文；合同文件接入由插件提交链路处理。

### 其他操作

`status` / `followup` / `resume` / `cancel` / `result` / `rounds`：

- 直接调用 `contract_review`，传入对应 `commandName`
- `status` / `result` / `rounds` 等纯查询请求 → 只走查询路径，不变成 `submit` 或 `login`
- 查不到最近任务上下文时 → 只提示用户提供任务 ID 或重新提交，立即停止，不自动发起新流程

## 阶段 4 — 提交后跟踪（Post-Submit Subscription）

仅在 `submit` 成功返回任务 ID 后进入本阶段。本阶段分两步，**顺序不可颠倒**：

### 步骤 1 — 先输出文字（必须在工具调用之前完成）

告知用户审核任务已提交，例如："合同审核任务 #`<taskId>` 已提交，系统将自动推送进度，你也可以随时用 `/contract-review status` 查询。"

### 步骤 2 — 再调用 watch（在输出文字之后）

调用 `contract_review`（`commandName=watch, taskId=<taskId>`），启动实时进度订阅。插件将通过 SSE 流订阅审核进度（解析 → 主体核验 → 条款审核 → 风险评估 → 法律核验 → 报告生成 → 修订 → 标注 → 生成修订版），并自动将进度推送到用户 IM 渠道（如飞书）。

> **顺序约束**：文字确认消息**必须**在 `watch` 工具调用之前输出。若先调用 `watch` 再输出文字，飞书用户将先收到进度推送消息，再看到提交确认文字，顺序错乱，体验受损。严禁颠倒两步的执行顺序。

- **禁止：** 自动轮询查进度、展开合同分析、给谈判建议、替用户做决定
- **禁止：** 省略步骤 2（不调用 watch），否则进度将无法自动推送

## 全局约束

### C1 — 唯一入口

所有合同审核动作只调用 `contract_review`。不得使用通用工具读取合同文件或生成审核结论。

### C2 — 查询不漂移

`status` / `result` / `rounds` 等纯查询请求 → 只走查询路径，不变成 `submit` 或 `login`。
查不到最近任务上下文时 → 只提示用户提供任务 ID 或重新提交，立即停止，不自动发起新流程。

### C3 — 处理中安静等待

工具返回“处理中 / 已提交等待受理 / 审核中 / 产物生成中 / 稍后再查” → 只说一句“仍在处理中，进度将自动推送，也可稍后用 `/contract-review status` 查询”，立即停止。
禁止：再次调用 `contract_review`、手工分析合同、给谈判建议、自动轮询、替用户做任何决定。

### C4 — 提交成功后只做任务相关操作

提交成功后，当前轮不主动展开分析或建议。
后续只允许围绕该任务做：查状态、查结果、补充要求、取消、获取产物。无任务上下文时先追问，不自行补全。

### C5 — 禁止手工分析

除非用户明确要求，不得手工读取合同内容、输出审核结论、给谈判建议或做风险判断。

### C6 — 禁止编造

不得编造任务状态；不得编造 artifact 链接；不得编造进度百分比或任何工具未返回的信息；不暗示系统可替用户完成浏览器操作。

### C7 — 登录链接不重复展示

工具响应表明已通过飞书直推发送登录链接（plugin 已调用 `sendText` 推送）时 → 当前轮只回复“登录信息已推送到你的飞书消息，请查收并完成确认”，不在对话中再次展示登录链接或验证码。避免用户在飞书会话中看到两条内容相同的登录消息。

### C8 — 追问与工具调用必须分轮

任何阶段若需要向用户追问，**当前轮只输出追问文本，立即终止，不调用任何工具，不进入后续阶段**。这包括：

- 阶段 1：意图不明时追问
- **阶段 1 末尾（进入阶段 2 之前）：`submit` 信息预检不通过时追问**（合同文件 / 审核立场 / 审核模式 / 审核要求四项中有任一缺失）

待用户下一轮补全后，再从对应阶段重新评估并执行。严禁在同一响应轮中同时输出追问文本并调用工具，否则会导致飞书直推消息出现在追问消息之前，顺序错乱。

> **判断规则：** 只要当前轮有任何信息缺失需要追问，结论就是"输出追问文本 → 终止"。不存在"先追问、同时也调用工具"的合法路径。
>
> **特别说明：仅上传合同文件本身不构成信息齐备。** 用户上传文件但未说明立场、审核模式、审核要求时，必须追问并终止，不得调用工具，不得进入阶段 2。
