检查任务要「确认并写回验收」(用户令:不是拦截)+ 新判据

一、用户令(逐字)
「不是拦截 是检查任务要确认这种情况」—— 否掉了「加闸拦住『验收未过却标已完成』」那条路,
改成把**确认责任**落到检查任务本身。

二、病根(前置排查结论,见当日日志 §24)
· 权威文档(`目标执行状态.md`)写「5 条全过」,而 `goal.json.acceptance_state` 仍是「全未过」
  ⇒ 检查会话按 prompt 指定的**文档**判「做完了」并标了「已完成」⇒ 看板按**机读副本**渲染 ⇒ 显示自相矛盾。
· 检查会话本身**没做错**(prompt 三路取并集里就有验收那一路);断点是
  **它有判验收的职责、却没有写回验收的动作**("有读者、没写手")。
· 次生:副本里写的是「未过」,**不在机制定义的取值域**(`过|…`/`🔴 不过|…`/`待重验(…)`)里
  ⇒ 机器分不出「还没判」与「判了没过」。

三、改法(只动 prompt,⛔ 不加闸、⛔ 不新增占位符)
`CHECK_PROMPT_GOAL` 第三节第 3 条改为「**做完了 ⇒ 先确认并写回验收,再改状态**」:
· 逐条读文档结论 → 与机读副本对一遍 → 不一致**以文档为准、改齐**;
· 写明写回手段=同目录 `goalctl.py declare --kpi "判据A=过|依据;判据B=过|依据"`(⚠️ **按分号切**);
· 要求**写完回读一次**(⛔ 不许「以为写成功了」—— 本项目栽过「命令不存在却 rc=0 静默放行」);
· 要求**规范取值**,⛔ 禁 `未过`/`pass` 这类域外值;
· 确认确实没过 ⇒ 继续派活,⛔ **不许标已完成**。

四、判据
新增 `selftest.py::t_checker_confirms_acceptance`(6 项,源码级):确认职责 + 写回手段 +
分号分隔 + 回读 + 取值域 + 没过不标完成。

验收:selftest.py rc=0 PASS 105 / FAIL 0(改前 104);manifest 70 份、语法失败 0。
This commit is contained in:
admin committed 2026-10-07 21:07:05 +08:00
1 parent 976abbd71a
commit e378db6af9
3 files changed
+39 -5

No files matched your search

+3 -3
View File
@@ -1,6 +1,6 @@
# manifest · 包内文件清单
> 生成方式:逐文件 `compile()` / `json.loads` + md5 | **最近一次全量重算:2026-10-07 21:03 (订正陈旧表述:agent-operating-rules 已并入删除;补记 humanizer-zh 为可选增强)**
> 生成方式:逐文件 `compile()` / `json.loads` + md5 | **最近一次全量重算:2026-10-07 21:07 (检查任务要确认并写回验收(用户令:不是拦截)+ 新判据)**
> ⚠️ **2026-10-05 局部增量**:`references/pitfalls.md`(P0-77 拆条 + P0-73/P0-77 压缩)与
> `scripts/goalctl.py`(`--switch-goal` 确认闸 + 旧目标归档)两行的 md5/大小已按当天实测值更新;**其余行仍是 10-04 基线**。
> ⛔ 本表**不含** `install.log`(运行日志)与 `references/manifest.md`(自引用,写完即失真)。
@@ -152,7 +152,7 @@
| `scripts/board_ext.py` | 45655 | `2319fb9d2d21bf961e03a42da9a1ad4b` | ok |
| `scripts/collabctl.py` | 32007 | `1c597185be099821c7b1d6dc66fadb05` | ok |
| `scripts/collabd.config.example.json` | 1158 | `6655c15c411a84e3ca12fd136dbe2c60` | ok |
| `scripts/collabd.py` | 434806 | `d4350022bbd75f37a35db63fa0472f88` | ok |
| `scripts/collabd.py` | 436057 | `590688483377cb0e0b6c34ade1798c51` | ok |
| `scripts/deliver-gateway-token.py` | 5685 | `cbba9648d404ecd2683061e19dbdb24a` | ok |
| `scripts/deploy_code.py` | 5325 | `a79cf5e5ffb3e8c60a31b4d0d8845f40` | ok |
| `scripts/forensics/proc-parent.py` | 2347 | `8cdfff2dbb88303298752c3777da7b20` | ok |
@@ -177,7 +177,7 @@
| `scripts/lock/op-lock.sh` | 4690 | `1a31eda3642e23693a65e1519860c744` | — |
| `scripts/lock/preflight-lock.sh` | 8673 | `e985ec1cb853fae4c351cd03b171355d` | — |
| `scripts/mut_run.py` | 13323 | `3bffc12e1e57d5efc743bac55e584b62` | ok |
| `scripts/selftest.py` | 490245 | `8cb5187bd927ecdecb216a6df4d855c4` | ok |
| `scripts/selftest.py` | 491896 | `c1704981f23dbf2be04bdd074cfd46b3` | ok |
| `scripts/session-rules-check.py` | 44412 | `b2b468992d80421106316eaf451e2477` | ok |
| `scripts/stop-collab.py` | 10462 | `d8043bedd23b52b6642aaf7ec8b8c980` | ok |
| `scripts/supervise-launch.py` | 2503 | `f416a2f197e5524a8859c1d227ba1d05` | ok |
+12 -2
View File
@@ -4358,8 +4358,18 @@ CHECK_PROMPT_GOAL = (
" ⚠️ 判据值是**中文写法**:`过|…`/`🔴 不过|…`/`待重验(…)` —— ⛔ 别拿「不等于 `pass`」判未过。\n"
" ⚠️ 一条**有效判据都没有**(只有 `_` 开头的说明行)⇒ **判不出来,⛔ 不许当成已完成**。\n"
"2. **没做完** ⇒ 建一条 `[执行]-<类别>-<具体>` 排期接着做。\n"
"3. **做完了** ⇒ 用 `%s --set-life 已完成 --by \"<你的会话名>\"` 把目标状态改成「已完成」,\n"
" ⛔ 不留「进行中」空转。\n"
"3. **做完了** ⇒ 先 **确认并写回验收**,再改状态(🔴 2026-10-07 用户令:「**不是拦截,是检查任务要确认这种情况**」):\n"
" · 把「二、5」那份文档里的验收结论**逐条读出来**(`过` / `🔴 不过`);\n"
" · 与 `goal.json.acceptance_state` **对一遍** —— 不一致就**以文档为准、把它改齐**:\n"
" 用与 `collabd.py` **同目录**的 `goalctl.py declare --kpi \"判据A=过|依据;判据B=过|依据\"`\n"
" (⚠️ `--kpi` **按分号切**,不是等号也不是换行);写完**必须回读一次**确认。\n"
" ⛔ 不许「以为写成功了」—— 本项目栽过「命令根本不存在、却只打用法 + rc=0 静默放行」\n"
" ⇒ 检查会话以为改成功,实际一个字没改。\n"
" ⚠️ 判据值一律用**规范写法**:`过|…` 或 `🔴 不过|…`;⛔ 别写 `未过`/`pass` 这类\n"
" **不在取值域里**的值 —— 机器分不出「还没判」与「判了没过」⇒ 看板会一直显示未过。\n"
" · 若**确认下来确实没过** ⇒ 走上面第 2 条(继续派活),⛔ **不许标已完成**。\n"
" · 确认无误后 ⇒ 用 `%s --set-life 已完成 --by \"<你的会话名>\"` 把目标状态改成「已完成」,\n"
" ⛔ 不留「进行中」空转。\n"
" 🔴 **2026-10-03 修(实测坐实)**:早前这里写的是 `goalctl.py set-life已完成`,⛔ **该命令根本不存在** ——\n"
" 实跑它只打印用法、**rc=0 静默放行** ⇒ 检查会话会**以为改成功了**,实际一个字没改。\n"
" ✅ 真源=**本文件自己的 CLI**(`--set-life` 分支 ⇒ 调 `goal_life_set()`)。\n"
+24
View File
@@ -7391,5 +7391,29 @@ def t_load_gate():
]
@case("⛔ 检查任务要「确认并写回验收」,⛔ 不是只读一遍就标完成")
def t_checker_confirms_acceptance():
"""🔴 2026-10-07 立(用户令逐字:「**不是拦截 是检查任务要确认这种情况**」)。
实测病例(`content_marketing_agent`):权威文档写「5 条全过」,而 `goal.json.acceptance_state`
仍是「全未过」⇒ 检查会话按文档判「做完了」并标了「已完成」⇒ 看板显示自相矛盾。
根因=检查会话**有判验收的职责、却没有写回验收的动作**(="有读者、没写手")。
⚠️ 用户明确否掉「加闸拦截」这条路 ⇒ 判据必须落在**检查会话的职责与动作**上。
"""
src = (HERE / "collabd.py").read_text(encoding="utf-8", errors="replace")
i = src.find("CHECK_PROMPT_GOAL = (")
p = src[i:i + 6000] if i > 0 else ""
return [
("检查任务 prompt 要求**先确认并写回验收**、再改状态", "确认并写回验收" in p),
("给了写回手段(`goalctl.py declare --kpi`),⛔ 不是只叫它「去同步一下」",
"declare --kpi" in p),
("写明 `--kpi` **按分号切**(该分隔符本项目栽过反)", "按分号切" in p),
("要求写完**回读确认**(⛔ 不许「以为写成功了」)", "必须回读一次" in p),
("写明**规范取值**、⛔ 禁 `未过`/`pass` 这类域外值(机器分不出「还没判」与「判了没过」)",
"不在取值域里" in p),
("确认确实没过 ⇒ 继续派活、⛔ 不许标已完成", "不许标已完成" in p),
]
if __name__ == "__main__":
sys.exit(main())