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

+24 -6
View File
@@ -744,7 +744,7 @@ def _escalate_to_keeper(detail: str = "") -> str:
`powershell.exe -WindowStyle Hidden -File start-supervise.ps1`,而 PowerShell 是
**控制台程序** ⇒ 每次触发都分配 `conhost.exe` ⇒ **闪黑窗**(用户 2026-10-05 报
「又弹了窗口」,实测抓到 `powershell.exe` + `conhost.exe` 这对进程)。
② 登记计划任务 `collabd-supervise-<区名>` —— 动作已改指
② 登记计划任务 `collabd-keepalive-<区名>` —— 动作已改指
**`pythonw.exe` + `<区>/.workbuddy/collab/supervise-launch.py`**(GUI 子系统,
**零控制台** ⇒ 不闪窗),立即启动;
③ 回读任务状态做**行为级验收**(⛔ 不满足于"命令没报错")。
@@ -777,7 +777,19 @@ def _escalate_to_keeper(detail: str = "") -> str:
if not _pyw.exists():
_cands = sorted(Path(sys.executable).parent.parent.parent.glob("*/pythonw.exe"))
_pyw = _cands[-1] if _cands else Path(sys.executable)
_task = "collabd-supervise-%s" % (Path(WS).name or "ws")
# 🔴🔴 2026-10-06 二次收口:**任务名与触发形态都对齐 `collabctl.py`**。
# 原因(第三处「同一种东西有第二条起法」,本轮实测抓到):
# 本函数原建 `collabd-supervise-<区>`,而 `collabctl.py` 建 `collabd-keepalive-<区>`
# ⇒ 两个名字**各自对应一套形态**,且 `collabctl.py` 把 `collabd-supervise-*`
# 列入 `SCHED_TASKS`(**一律禁用**)⇒ **本函数自我供给起的常驻,会被下一次
# `collabctl off` 当"旧形态"干掉** ⇒ 自愈链断在这里。
# ⇒ 统一到 `collabd-keepalive-<区>`(`KEEPALIVE_TASKS` 的名单口径):
# `off` 认得它、`on` 会重建它 ⇒ **开关能真正管住这条自愈路径**。
# ⚠️ 触发形态也一并对齐:`-AtLogOn`(只在登录起)→ **每 5 分钟重复触发**
# (常驻中途死了要等下次登录 = 不自愈;5 分钟兜底才是既定口径)。
# ⚠️ 旧的 `collabd-supervise-<区>` 若已存在 ⇒ **不在这里删**(清理归 `collabctl` 的
# `SCHED_TASKS` 禁用名单,那块已覆盖)。
_task = "collabd-keepalive-%s" % (Path(WS).name or "ws")
_ps = (
"$ErrorActionPreference='Stop';"
"$n='%s';"
@@ -787,12 +799,18 @@ def _escalate_to_keeper(detail: str = "") -> str:
"$a=New-ScheduledTaskAction -Execute '%s' "
"-Argument '\"%s\"' "
"-WorkingDirectory '%s';"
"$t=New-ScheduledTaskTrigger -AtLogOn;"
# 🔴 每 5 分钟重复触发(与 `collabctl.py` 同口径)
"$t=New-ScheduledTaskTrigger -Once -At (Get-Date) "
"-RepetitionInterval (New-TimeSpan -Minutes 5);"
# 🔴 ExecutionTimeLimit=0(长驻进程 ⛔ 不能被调度器到点掐死)
# ⚠️ 去掉 `RestartCount 999 / RestartInterval 1min` —— 每 5 分钟重复触发
# 本身就提供重拉;每分钟重启是多余的抖动(P0-74 记过"反复"的成因)。
"$s=New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries "
"-DontStopIfGoingOnBatteries -StartWhenAvailable "
"-ExecutionTimeLimit ([TimeSpan]::Zero) -MultipleInstances IgnoreNew "
"-RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1);"
"Register-ScheduledTask -TaskName $n -Action $a -Trigger $t -Settings $s -Force|Out-Null;"
"-ExecutionTimeLimit ([TimeSpan]::Zero) -MultipleInstances IgnoreNew -Hidden;"
"$pr=New-ScheduledTaskPrincipal -UserId $env:USERNAME -LogonType Interactive -RunLevel Highest;"
"Register-ScheduledTask -TaskName $n -Action $a -Trigger $t -Settings $s "
"-Principal $pr -Force|Out-Null;"
"Start-ScheduledTask -TaskName $n;"
"$i=Get-ScheduledTaskInfo -TaskName $n;"
"'OK State=' + (Get-ScheduledTask -TaskName $n).State + ' Last=' + $i.LastTaskResult"