decision-rules-hook: 注入补「两个停止点」+「技术方案排序轴」

起因(2026-10-06 用户问):能自决的问题为什么还要问。
复盘发现注入的判据里**缺动作**:
- 缺「十步」的两个停止点 → ① 判类型(方案请求 vs 直接执行)② 判方向(扩大/收窄/中性);
- 缺「自主裁决顺序」的排序轴 → 更小改动 → 更少新增形态 → **不扩大可见面**。
⇒ 前者导致「会扩大可见面」时不停手;后者导致排完仍把已定项混进待拍板清单(=变相征询)。
本次只补这两条动作骨架(1459 → 1906 字符),⛔ 不塞十步全文(避免稀释)。
This commit is contained in:
admin committed 2026-10-06 22:39:51 +08:00
1 parent 64dd82073b
commit 433d43af54
8 files changed
+195 -273

No files matched your search

+5 -7
View File
@@ -1,13 +1,13 @@
# manifest · 包内文件清单
> 生成方式:逐文件 `compile()` / `json.loads` + md5 | **最近一次全量重算:2026-10-06 05:10 (补 P0-85(工作区解析静默错归属)+P0-84 已修尾注)**
> 生成方式:逐文件 `compile()` / `json.loads` + md5 | **最近一次全量重算:2026-10-06 22:35 (P0-74 二次收口:任务名统一 + `init_workspace.py` 旁路清除 + 删 `assets/start-supervise.ps1.tpl`)**
> ⚠️ **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`(自引用,写完即失真)。
> ⚠️ **provenance 列里的 `skills/multi-session-collab/…`、`skills/workbuddy-session-forensics/…` 已是历史路径**
> —— 那两个目录 2026-10-01 已移到 `<工作区>/归档/技能-退役-20261001/`(⛔ 不在技能根了)。
文件总数:**56** | 语法 / 结构检查失败:**0**
文件总数:**55** | 语法 / 结构检查失败:**0**
## ✅ 已完成 · 2026-10-05 「目标唯一性 + 换目标需确认」(用户口径落地)
@@ -56,7 +56,6 @@
- `references/01-文档索引.md` — 3604 B |md5 `825999a411e2a4f6b740063f81c01b03`
- `scripts/judge_audit.py` — 13562 B |md5 `8f14a973fa5709a3b9a60b065dc22d7d`
- `scripts/workspace_mirror.py` — 17263 B |md5 `60f104b37df3133785abb13f686eea4f`
- `assets/start-supervise.ps1.tpl` — 5360 B |md5 `3805f1a82a1747269212287e9dfde369`
- `assets/design-tokens.css` — 6364 B |md5 `0668feb3a4729f1022e579ac0c5d2569`
## 最近改动(⛔ 只记「什么时候改了什么」,不写流水账)
@@ -119,7 +118,6 @@
| `assets/board-render-probe.js` | 14398 | `a21bd1905b34537436ce778c6bfbc288` | — |
| `assets/board.html` | 151811 | `c597cd7f21543542e9cdbe486c5ccd79` | — |
| `assets/design-tokens.css` | 6364 | `0668feb3a4729f1022e579ac0c5d2569` | — |
| `assets/start-supervise.ps1.tpl` | 5778 | `4eae189c7c850e4748a0a62024f48127` | — |
| `install.py` | 33311 | `ee11283cbcdbb4f821f021e86cff4498` | ok |
| `references/00-动手前必过.md` | 7181 | `33bc86e442ccd4fcbb930c79c4ad0641` | — |
| `references/01-文档索引.md` | 3604 | `825999a411e2a4f6b740063f81c01b03` | — |
@@ -141,7 +139,7 @@
| `scripts/board_ext.py` | 45655 | `2319fb9d2d21bf961e03a42da9a1ad4b` | ok |
| `scripts/collabctl.py` | 28124 | `827fe07da25b86b773a3f701e86db351` | ok |
| `scripts/collabd.config.example.json` | 1158 | `6655c15c411a84e3ca12fd136dbe2c60` | ok |
| `scripts/collabd.py` | 431355 | `955bd92009d7cd0cccc53d867f591b49` | ok |
| `scripts/collabd.py` | 433099 | `f177baed038b7ef90ae17d0abd175399` | ok |
| `scripts/deliver-gateway-token.py` | 5685 | `cbba9648d404ecd2683061e19dbdb24a` | ok |
| `scripts/deploy_code.py` | 5325 | `a79cf5e5ffb3e8c60a31b4d0d8845f40` | ok |
| `scripts/forensics/proc-parent.py` | 2347 | `8cdfff2dbb88303298752c3777da7b20` | ok |
@@ -156,7 +154,7 @@
| `scripts/hooks/stop-dialog-guard.py` | 40247 | `4e5f9889717d4ed37a6384c643b4d05e` | ok |
| `scripts/hooks/supervise-ensure-hook.py` | 14308 | `dc6f62584a8384baba0a1f2460828013` | ok |
| `scripts/hooks/wb-result-hook.py` | 37199 | `2d4f694acd031222bf03b98a859b6e90` | ok |
| `scripts/init_workspace.py` | 35817 | `c8b6bbbae01f21939ea2fd8d294d2726` | ok |
| `scripts/init_workspace.py` | 24042 | `dda53acd24bcc66d509bbdab3ebc0488` | ok |
| `scripts/judge_audit.py` | 13562 | `8f14a973fa5709a3b9a60b065dc22d7d` | ok |
| `scripts/keepalive.py` | 12265 | `b84c753917e0a34cf40800bda953e7a4` | ok |
| `scripts/lock/handoff-guard.sh` | 34616 | `f38b2ec92fdc1dab9abdaca0e0bb001a` | — |
@@ -164,7 +162,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` | 469482 | `dc0f4801b2e4fa76e71f649b03f2ed50` | ok |
| `scripts/selftest.py` | 481254 | `eb86a9165b77b63714ce948553088d72` | ok |
| `scripts/session-rules-check.py` | 37640 | `552c90b93a051d775299170d5ff49b56` | ok |
| `scripts/stop-collab.py` | 10462 | `d8043bedd23b52b6642aaf7ec8b8c980` | ok |
| `scripts/supervise-launch.py` | 2503 | `f416a2f197e5524a8859c1d227ba1d05` | ok |
+36 -1
View File
@@ -2480,9 +2480,44 @@ INBOX = '…\ai1net-dsh-server\tmp\supervise-inbox'
(删掉 `_find_keeper_tpl()` 前置门槛 —— 否则缺模板就直接"没建",与启动器形态无关了)。
2. 任务动作改指 **`pythonw.exe` + `<区>/.workbuddy/collab/supervise-launch.py`**
(`-WorkingDirectory` =**工作区根**;pythonw 是 **GUI 子系统 ⇒ 零控制台 ⇒ 不闪窗**)。
3. **任务名保持** `collabd-supervise-<区>`(⛔ 不改名 ⇒ `collabctl` 的名单不用动)。
3. ~~**任务名保持** `collabd-supervise-<区>`(⛔ 不改名 ⇒ `collabctl` 的名单不用动)~~。
🔴 **2026-10-06 订正 —— 这条结论是错的,已改**:
当时以为"不改名就不用动 `collabctl` 的名单",但**正好反过来** ——
`collabctl.py` 的 `SCHED_TASKS` 里列的 `collabd-supervise-<区>` 是**"旧形态 ⇒ 一律禁用"**的名单,
⇒ 保留旧名的后果是:**`_escalate_to_keeper()` 自愈建起来的常驻,会被下一次 `collabctl off` 当旧形态干掉**。
✅ 现行口径:**统一用 `collabd-keepalive-<区>`**(与 `KEEPALIVE_TASKS` 同名)——
这样 `off` 认得它、`on` 会重建它,**开关才真正管得住这条自愈路径**。
⚠️ **教训**:判"改不改名"时,⛔ 不能只看"改名的成本",要**查这个名字在别处被怎么用**
—— 这里它同时是"检查名单"和"禁用名单"的键。
4. `_escalate_to_keeper` 里**被删段**用 `~~删除线~~` 在 docstring 里标注(⛔ 别留下与实现不符的说明)。
### 三·补、🔴 2026-10-06 二次收口(第一次只改了动作,没改名字、也没扫旁路)
**三个漏网**(本轮实测抓到,`selftest` 探针一度只扫 `collabd.py` ⇒ 全都没报警):
1、**任务名两套并存** —— 见上面第 3 条的订正。现已统一 `collabd-keepalive-<区>`;
触发形态也对齐(`-AtLogOn` → **每 5 分钟重复触发**;去掉 `RestartCount 999/1min` ——
每 5 分钟重复本身就提供重拉,每分钟重启是多余抖动)。本区遗留的旧名任务已 `Disable`。
2、**`init_workspace.py` 是第二个建任务者** —— 自带 `_register_keeper_task()` + `_keeper_task_state()`,
动作写 `powershell.exe -File start-supervise.ps1`、还要铺 `assets/start-supervise.ps1.tpl`、
自检里有 `_ps_check()`(验 ps1 语法)。**整份删掉**(含 `--with-keeper` / `--no-task` 两个开关),
改为只检查 `supervise-launch.py` 在位并指向唯一入口 `collabctl.py`。
⛔ **建任务只许有一处实现** = `collabctl.py`(受 `supervise.switch` 总电闸管辖);
自己建就绕过开关,是"第二条起法"。模板文件一并删除。
3、**守形态的探针打偏** —— `t_keeper_legacy_ps1_form_gone` 原来只 `read_text("collabd.py")`。
✅ 已扩成扫**全族**(`collabd.py` / `init_workspace.py` / `collabctl.py`),并新增两条判据:
「**任务名口径唯一**」、「`init_workspace.py` 旧形态死代码已清」。
⚠️ **探针本身的坑**:新增的"任务名唯一"判据**扫文本**,第一版**误红** ——
它命中了 `collabctl.py` 里 `SCHED_TASKS = [...]` 那段(那是**故意**列旧名去禁用的)。
⇒ 必须先 `re.sub` 剥掉该块再扫。**这是本项目第三次踩"判据扫到自己的否定句"**
(前两次:查"PRD 有没有视觉词"命中免责声明、查"有没有六份旧产出"命中 PRD 里的禁令文本)。
⚠️ **另一条我自己的操作坑**:用 python 脚本读写 `init_workspace.py` / `collabd.py` 后,
行尾从**纯 LF 被转成纯 CRLF**(技能包其余 7 个同族文件都是 LF)—— 已用 `write_bytes` 还原为 LF。
⇒ **凡用脚本改技能源码,改完要核行尾**(否则 diff 里整个文件显示为"全改",审不出真改动)。
### 四、✅ 验收(2026-10-05 12:42 实测)
- 跑一次 `_escalate_to_keeper()` ⇒ 回读任务动作:
@@ -1,5 +1,16 @@
# 常驻程序长期在线(Windows)
> 🔴🔴 **2026-10-06 过期警告 · 读之前必看**
> 本档 §一(包装脚本)、§三(铺脚本步骤)等节描述的 **`start-supervise.ps1` 形态已整套废弃**。
> 现行形态见 `SKILL.md`「两个启动器」表 + `pitfalls.md` **P0-74**:
> **计划任务 → `pythonw.exe` → `supervise-launch.py`**(GUI 子系统 ⇒ 零控制台 ⇒ **不闪窗**)。
> ⛔ 凡本档出现 `start-supervise.ps1`、`assets/start-supervise.ps1.tpl`(**该模板已删除**)、
> 或 `New-ScheduledTaskAction ... -File` 的段落,**一律按历史留痕读,⛔ 不许照着做**。
> ⚠️ 另:本档所说"载体是可选需求、常态用不着计划任务"的**2026-10-04 口径已被推翻** ——
> 2026-10-05 用户拍板「**常驻崩了,拉起来这个事儿,你不能也用计划任务起个程序吗?**」
> ⇒ 计划任务现在是**既定形态**(每 5 分钟兜底),开关是 `supervise.switch`(`collabctl.py on|off`)。
> 📌 **整份重写待办**(本轮只加了本警告块,未重写正文)。
> 📌 **本档=「想让目标检查程序长期在线」时的可选做法**(2026-10-03 夜里整理)。
> 🔴 **注意:常态用不着它** —— 常态是「调用技能完成目标时起后台任务 + 检查程序」,
> 那套一直好好在跑(见下面那段口径)。