From e378db6af9ca973e5d99d0a4b2bc3a2bb6d9ef78 Mon Sep 17 00:00:00 2001 From: maogeigei Date: Wed, 7 Oct 2026 21:07:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A3=80=E6=9F=A5=E4=BB=BB=E5=8A=A1=E8=A6=81?= =?UTF-8?q?=E3=80=8C=E7=A1=AE=E8=AE=A4=E5=B9=B6=E5=86=99=E5=9B=9E=E9=AA=8C?= =?UTF-8?q?=E6=94=B6=E3=80=8D=EF=BC=88=E7=94=A8=E6=88=B7=E4=BB=A4=EF=BC=9A?= =?UTF-8?q?=E4=B8=8D=E6=98=AF=E6=8B=A6=E6=88=AA=EF=BC=89=EF=BC=8B=20?= =?UTF-8?q?=E6=96=B0=E5=88=A4=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 一、用户令(逐字) 「不是拦截 是检查任务要确认这种情况」—— 否掉了「加闸拦住『验收未过却标已完成』」那条路, 改成把**确认责任**落到检查任务本身。 二、病根(前置排查结论,见当日日志 §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。 --- session-mechanism/references/manifest.md | 6 +++--- session-mechanism/scripts/collabd.py | 14 ++++++++++++-- session-mechanism/scripts/selftest.py | 24 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/session-mechanism/references/manifest.md b/session-mechanism/references/manifest.md index ca266f2..d22f8da 100644 --- a/session-mechanism/references/manifest.md +++ b/session-mechanism/references/manifest.md @@ -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 | diff --git a/session-mechanism/scripts/collabd.py b/session-mechanism/scripts/collabd.py index 2a61be7..e049bec 100644 --- a/session-mechanism/scripts/collabd.py +++ b/session-mechanism/scripts/collabd.py @@ -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" diff --git a/session-mechanism/scripts/selftest.py b/session-mechanism/scripts/selftest.py index a8b3cb2..93f778f 100644 --- a/session-mechanism/scripts/selftest.py +++ b/session-mechanism/scripts/selftest.py @@ -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()) \ No newline at end of file