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:
+5
-5
@@ -1,7 +1,10 @@
|
||||
"""会话目录(cases/<case_id>):MCP 工具与上传收件器共用的唯一实现
|
||||
|
||||
阶段不存状态机,全部由目录里的产物推导:
|
||||
empty -> extracted -> matched -> info_ready -> docs_ready -> previewed -> submitted
|
||||
empty -> extracted -> matched -> info_ready -> docs_ready -> previewed
|
||||
|
||||
没有 submitted 阶段:提交由人类在财务系统里做,本项目的产物推不出「已提交」这个事实,
|
||||
所以不假装知道。要知道提交结果,去列表页看单据状态。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
@@ -224,7 +227,6 @@ class CaseStore:
|
||||
sorted(p.name for p in (d / ARTIFACTS_DIR_NAME).glob("*")) if (d / ARTIFACTS_DIR_NAME).is_dir() else []
|
||||
)
|
||||
preview = (d / "submit_preview.json").exists()
|
||||
submitted = bool(self.meta(d).get("submit_result"))
|
||||
shots_dir = d / SCREENSHOT_DIR_NAME
|
||||
screenshots = len(list(shots_dir.glob("*.png"))) if shots_dir.is_dir() else 0
|
||||
browser = self.browser_lock_state(d)
|
||||
@@ -242,9 +244,7 @@ class CaseStore:
|
||||
"不要另开窗口,等它释放或心跳过期"
|
||||
)
|
||||
stage = "empty"
|
||||
if submitted:
|
||||
stage = "submitted"
|
||||
elif preview:
|
||||
if preview:
|
||||
stage = "previewed"
|
||||
elif artifacts:
|
||||
stage = "docs_ready"
|
||||
|
||||
@@ -42,10 +42,14 @@ Playwright 操作财务报销系统:登录信息门户、进入报销系统、
|
||||
`concurrent.futures.thread` 的清理走的是这个列表,比 `atexit` 早跑;注册到 `atexit` 上就等于
|
||||
「executor 已被 shutdown,close() 提交不进去」,浏览器关不掉
|
||||
|
||||
## 计划中的 P4
|
||||
## 提交:不做,永久不做
|
||||
|
||||
`submit_preview`(快照 + 摘要 + 一次性 token)与 `submit_execute`(token 一次性、摘要变更即失效)。
|
||||
在那之前,填报完成必须停下交人工核对提交。
|
||||
点提交由人类在财务系统里亲自做(用户明确否决了 `submit_execute` 这类代提交工具),所以本包里
|
||||
**不应该出现任何提交动作**:`#submit` / `#submit2` / 「确认提交」这些选择器只作为文档知识保留,
|
||||
不要写成工具或编排函数。删除(`#delete`)、撤回同理。
|
||||
|
||||
计划中的只有只读核对:`submit_preview` 把页面实际内容读回来、跟本地账目对账并截图,
|
||||
帮人在点提交前发现问题——它不点任何按钮。
|
||||
|
||||
## 注意
|
||||
|
||||
|
||||
+5
-2
@@ -46,8 +46,11 @@ INSTRUCTIONS = """财务报销自动化工具集(发票抽取交接 → 匹配
|
||||
浏览器归属写在 cases/<id>/.browser.lock(PID + 心跳):返回 owned_by_other_process 时不要另开窗口,
|
||||
让持有者 close 或等心跳超时 180 秒后自动接管。截图按 001-步骤名.png 落在 cases/<id>/screenshots/。
|
||||
|
||||
尚未实现(**现在不要调用,也不要在回答里承诺**):提交预览与提交执行(submit_preview / submit_execute)。
|
||||
填报完成后必须停下:把 browser_page_state 的截图与已填内容报给用户,由用户在财务系统里核对并亲自点提交。
|
||||
**提交由人类执行**:本项目不提供、也不计划提供点提交的工具(submit_execute 已被用户明确否决)。
|
||||
填报完成就是终点:把 browser_page_state 的截图与已填内容报给用户,由本人在财务系统里核对后亲自点提交。
|
||||
删除(#delete)、撤回同理:都在财务系统里手工做,工具层不会给这类动作开口子。
|
||||
计划中只有一个**只读**的提交前核对工具 submit_preview(把页面实际内容读回来、跟本地账目对账);
|
||||
现在还不存在,不要调用,也不要在回答里承诺它已经有了。
|
||||
Word 出库单功能已下线(模板自 2026-08 起不在仓库),不要再提;Excel 申购单见第 6 条。
|
||||
|
||||
硬约束:不得回显密码;不得臆造财务数据,拿不准的字段标出来问用户;产物只写 cases/<case_id>/。
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"""分步浏览器填报工具
|
||||
|
||||
取代旧的「一把梭」run_bot:Agent 可以开浏览器、登录、建单、按步填、看页面、关,
|
||||
每步都有截图与明确状态,中途失败不必从头再来。提交不在这里——提交不可逆,属于 P4 的
|
||||
submit_preview / submit_execute(带一次性 token)。
|
||||
每步都有截图与明确状态,中途失败不必从头再来。**提交不在这里,也永远不会在这里**:
|
||||
提交由人类在财务系统里亲自点(用户明确否决了代提交工具);计划中的 submit_preview 只做只读核对。
|
||||
|
||||
所有 Playwright 调用都在 src/infra/browser/actor.py 的单线程上执行;浏览器归属用
|
||||
cases/<id>/.browser.lock 记录(PID + 心跳),防止多代 MCP 子进程各开一个 Chromium。
|
||||
@@ -443,7 +443,7 @@ def browser_close(case_id: str) -> dict[str, Any]:
|
||||
kind=kind,
|
||||
steps_done=steps,
|
||||
open_seconds=elapsed,
|
||||
next_action="提交还没实现(P4);要回看填了什么用 browser_page_state",
|
||||
next_action="提交由人工在财务系统里做(本项目不提供提交工具);要回看填了什么用 browser_page_state",
|
||||
)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user