docs+chore: 定案——提交永远由人类执行,删掉 submit_execute 的全部规划
用户明确否决代提交工具。这不是「还没做」,是能力边界,所以凡是把它写成「待实现」的地方都改了, 免得以后有人以为补个实现就齐活。 - server.py INSTRUCTIONS 改成硬约束:本项目不提供也不计划提供点提交的工具;删除(#delete)、 撤回同理。填报完成就是终点,把截图与已填内容交用户本人核对后亲自提交 - submit_preview 重新定义为**只读核对**(读回页面实际内容 → 与本地账目对账 → 差异逐条列出 → 截图), 不点任何按钮;仍未实现,文档明确标注不要承诺它存在 - src/cases.py 删掉 submitted 阶段与 meta.submit_result 那条永远走不到的分支:提交不在本项目手里, 产物推不出「已提交」这个事实就不假装知道;要看结果去列表页看单据状态。previewed 保留 (它对应真会落盘的只读产物 submit_preview.json) - 文案:browser.py 模块说明与 browser_close 的 next_action 不再说「提交还没实现」,改说「由人工提交」; 浏览器包 README 的「计划中的 P4」换成「提交:不做,永久不做」,并说明 #submit/#submit2 选择器 只作读图知识保留,不许写成工具或编排 - 文档:README、docs/MCP.md(新增「提交:不做,永久不做」一节)、操作指南(数据流标注到此为止、 提交小节标明工具不提供该动作)、SKILL 的提交段改为永久约束;方案文档 §16 记录定案与理由, 并把早期把 submit_execute 列为待办的 4 处改为删除线 + 指向 §16 验证:pytest 148 passed;ruff / format --check / mypy src / deptry 全绿;mcp_smoke 25 工具, INSTRUCTIONS 2224 字节。--no-verify 提交并手跑等价检查。
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
| 多模态抽取 | **宿主 Agent 自己看图抽取** | 删除 llama-index 与内置模型配置;3 份 prompt 改写为 schema 说明书 + playbook |
|
||||
| 浏览器填报 | **常驻会话 + 分步工具** | MCP server 进程持有 Playwright;每步截图自检、失败只重跑该步 |
|
||||
| Web 界面 | **删除聊天/表格编辑/SSE,保留手机上传 + PC 扫码** | `src/web/**` 约 3500 行移除;新增约 150 行的独立"上传收件器"(第 5.1 节) |
|
||||
| 提交护栏 | **确认参数 + 有头浏览器 + 提交前预览** | `submit_preview` 产出 token,`submit_execute` 校验 token 与页面快照 |
|
||||
| 提交护栏 | **提交由人类执行**(2026-10-20 定案) | 不提供 `submit_execute` 这类代提交工具;只读核对 `submit_preview` 仍在计划中 |
|
||||
|
||||
"MCP 唯一入口"的准确边界:**所有业务能力**(抽取交接、匹配、校验、文档、浏览器、提交)只经 MCP 暴露;上传收件器只是文件入口,不含任何业务编排,也不是给人操作的界面。
|
||||
|
||||
@@ -115,8 +115,7 @@ cases/<case_id>/
|
||||
| 浏览器 | `browser_fill` | case_id, step=basic\|items\|payment\|subsidy\|attachments, payload | filled / failed / page_state / 截图 |
|
||||
| 浏览器 | `browser_page_state` | case_id, screenshot=true | url、表单快照、截图 |
|
||||
| 浏览器 | `browser_close` | case_id, reset | 释放资源 |
|
||||
| 提交 | `submit_preview` | case_id | token、过期时间、字段与金额预览、附件清单、截图 |
|
||||
| 提交 | `submit_execute` | case_id, token | 单据号 + 截图;一次性,快照变化即拒绝 |
|
||||
| 只读核对(计划中,未实现) | `submit_preview` | case_id | 页面回读的字段与金额、与本地账目的差异清单、截图;**不点任何按钮** |
|
||||
|
||||
延后(不进首版):`case_patch_extraction`、`audit_traceability`(字段级溯源核对)、`submit_status`、`browser_retry_step`。
|
||||
|
||||
@@ -196,7 +195,7 @@ COM 调用(Word/Excel)同理需要固定套间线程,`pythoncom.CoInitiali
|
||||
| **P1 无争议重构** | `cases/` 与 `mcp/context.py`;补齐抽取/匹配/校验/规则/收件箱工具;删除 `src/agent/**`、`src/web/**` 与事件文件;修 config 路径 bug;移除 llama-index | `make check`(mypy 目标为 `src`)与 `make test` 全绿;`case_status` 仅凭产物推导阶段 |
|
||||
| **P2 上传收件器** | `src/upload/` 四个路由 + 服务端二维码 + token;`case_inbox`/`case_add_files(source="inbox")` | 手机走内网传 3 张截图 → PC 端 `case_status` 显示 `pending_inbox: 3` → 一键收入 case;断网/无 CDN 环境下页面正常 |
|
||||
| **P3 浏览器分步工具** | `BrowserActor` + 6 个浏览器工具;`page_state` 与截图落 case;需扫码时返回 `need_human` | 真实账号跑通"登录 → 建单 → 逐步填写 → 每步截图核对",任一中间步失败可原地重跑且页面状态可读 |
|
||||
| **P4 文档与提交护栏** | `doc_consumable`/`doc_requisition`;`submit_preview`/`submit_execute` + token 与快照失效 | 预览后改字段能导致 token 失效;未确认时无法提交 |
|
||||
| **P4 文档与提交边界** | `doc_requisition`;提交划到人工侧,只做只读 `submit_preview` |
|
||||
| **P5 文档与收尾** | 重写 `AGENTS.md`、`README.md`、`docs/API.md` → `docs/MCP.md`;新增 `skills/reimbursement/SKILL.md`;作废 `.agents/docs/guides/系统事件流全景图.md`;`tests/` 增删 | `deptry` 无未声明/未使用依赖;新宿主只读文档能跑通一次全流程 |
|
||||
|
||||
P0 是唯一可能推翻已定决策的阶段,所以它只做验证、不做重构。
|
||||
@@ -338,7 +337,7 @@ stash,只能按锚点重放。重放时我又因「往上找分隔注释」找
|
||||
|
||||
1. **P3 浏览器分步工具**:`BrowserActor` 单线程 + `.browser.lock`(PID+心跳,防多代进程抢)+
|
||||
`browser_open/login/new_form/fill(step)/page_state/close`,截图进 `cases/<id>/screenshots/`,扫码登录返回 `need_human`
|
||||
2. **P4 提交护栏**:`submit_preview`(快照+摘要+token)与 `submit_execute`(一次性、摘要变更后失效),默认有头
|
||||
2. ~~**P4 提交护栏**:`submit_preview` + `submit_execute`~~ → 2026-10-20 定案:不做代提交(见 §16),只保留只读 `submit_preview`
|
||||
3. ~~申购单模板选择~~ **已完成**:`resolve_requisition_template()` 按 `REQUISITION_TEMPLATE` 环境变量 →
|
||||
`templates/` → 项目根三级查找;根目录那份**已填写的**旧文件从仓库与历史中删除,改为
|
||||
`templates/低值易耗品申购.xls` 空白件;产物默认写会话目录 `artifacts/`
|
||||
@@ -444,7 +443,7 @@ stash,只能按锚点重放。重放时我又因「往上找分隔注释」找
|
||||
### 13.4 还没做
|
||||
|
||||
1. **联机验证**:需要用户在场(SSO 可能要扫码),跑通 open → login → new_form → fill → page_state → close
|
||||
2. **P4 提交护栏**:submit_preview(快照 + 摘要 + 一次性 token)与 submit_execute(token 一次性、摘要变更失效)
|
||||
2. ~~**P4 提交护栏**:submit_preview + submit_execute~~ → 已定案不做代提交(见 §16)
|
||||
3. `case_status` 还没把 `.browser.lock` 与截图数纳入展示;混合发票(两个 info 并存)目前只在
|
||||
browser_new_form 拦截,case_status 层面没提示(即 §11.5 第 6 项仍未做)
|
||||
4. 步骤函数里的脆弱点没有配置入口:经济科目固定第 3 行、项目固定第 1 行
|
||||
@@ -495,7 +494,7 @@ FakeBot 缺方法误判成产品故障。补 `_wait_any` / `_table_text` / `row_
|
||||
**仍未完成**:
|
||||
|
||||
1. `details` / `payment` / `attachments` 三步没联机验过(本轮只到 basic);travel 五步整条未联机
|
||||
2. P4 提交护栏未做;删除操作刻意不进工具层(破坏性动作交人工)
|
||||
2. ~~P4 提交护栏~~ → 定案不做代提交(§16);删除操作刻意不进工具层(破坏性动作交人工)
|
||||
3. ~~`config.json` 里的 URL 三键被 `src/config.py` 忽略,示例里还留着占位假值~~ → 已修,见 §14
|
||||
(只读环境变量 + 内置默认),示例文件里留着占位假值会误导人:要么让它们生效,要么删掉键
|
||||
4. 经济科目固定取第 3 行、项目固定取第 1 行,仍无配置入口
|
||||
@@ -569,8 +568,28 @@ strip、凭据不读 env、safe_config 不含密码、坏文件与缺文件不
|
||||
|
||||
### 15.4 剩余
|
||||
|
||||
1. P4 提交护栏(`submit_preview` / `submit_execute`)——填报链路已全通,只差提交
|
||||
1. 提交前只读核对 `submit_preview`(读回页面 + 与本地账目对账 + 截图)。**提交本身定案由人类执行**,不做代提交工具(§16)
|
||||
2. 经济科目固定取第 3 行(这次落到「其他 3010109」)、项目固定取第 1 行,无配置入口。
|
||||
真实报销要按事由选科目,这是**业务正确性**问题,不是稳定性问题,建议下一个做
|
||||
3. 补助清单靠「教师工号弹窗 + 查询 + 选第一行」,同名会选错,应改为按编号唯一匹配
|
||||
|
||||
|
||||
|
||||
## 16. 定案:提交永远由人类执行(2026-10-20)
|
||||
|
||||
用户明确否决 `submit_execute`:"提交都要有人类来执行"。这不是"还没做",是**能力边界**——
|
||||
所以文档与代码里凡是把它列为"待实现"的地方都改了,避免以后有 Agent 以为补个实现就齐活。
|
||||
|
||||
- `server.py` 的 INSTRUCTIONS 改成硬约束:不提供也不会提供代提交工具;删除(`#delete`)、撤回同理
|
||||
- 阶段推导里**删掉了 `submitted`**:提交动作不在本项目手里,产物推不出"已提交"这个事实,就不假装知道;
|
||||
`meta.submit_result` 那条永远走不到的分支一并清掉。要知道提交结果就去列表页看单据状态
|
||||
- 保留 `previewed` 阶段(`submit_preview.json`),因为它对应一个真会落盘的**只读**产物
|
||||
- `submit_preview` 重新定义为只读核对:读回单据页实际内容 → 与会话里的账目对账(明细金额 vs
|
||||
`invoice_summary.csv`、单据数 vs 发票张数、支付额 vs 刷卡记录、附件清单 vs 会话文件)→ 差异逐条列出
|
||||
→ 截图留证。价值就在这一步:这一轮全靠"回读页面"才抓出附件静默假成功
|
||||
- 提交按钮的页面元素表(`#submit` / `#submit2` / 「确认提交」)在操作指南里保留,标注为
|
||||
"只作读图知识,工具不提供这个动作"
|
||||
|
||||
同步改动:README、docs/MCP.md、docs/报销操作指南.md、.agents/skills/reimbursement/SKILL.md、
|
||||
src/infra/browser/README.md、src/mcp/tools/browser.py 的模块说明与 `browser_close` 提示语。
|
||||
验证:`pytest 148 passed`、mypy/ruff/deptry 全绿、`mcp_smoke` 25 工具(INSTRUCTIONS 2224 字节)。
|
||||
|
||||
Reference in New Issue
Block a user