- commit
- 684fcce
- parent
- 961fbd1
- author
- claude@macbookpro
- date
- 2026-03-31 15:21:44 +0800 CST
docs: demote watchdog logging from task to low-priority plan T-S060 withdrawn — renewal mainline now uses API proxy (projector + dispatcher + Firefox proxyDelivery), not GUI/a11y. Watchdog remains as fallback scaffolding only. Requirements preserved in plans/WATCHDOG_LOGGING_ENHANCEMENT.md. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
3 files changed,
+68,
-178
+68,
-0
1@@ -0,0 +1,68 @@
2+# 看门狗日志增强需求
3+
4+> 日期:2026-03-31
5+> 优先级:`低`(当前续命主力已切到 API 代理方式,watchdog 仅作兜底脚手架)
6+> 状态:`需求记录`
7+> 来源:原 `T-S060`,降级为需求文档
8+
9+## 背景
10+
11+仓库 `tools/watchdog/` 下有两个脚本:
12+
13+- `watchdog.sh`:轮询心跳文件,判断是否需要续命
14+- `a11y_msg.sh`:通过 macOS 辅助功能 API(osascript)操控 Safari 发消息
15+
16+这是早期的 GUI 续命方案(V1),依赖 Claude 手动设心跳状态。当前续命主力已切到 conductor renewal(API 代理方式:projector + dispatcher + Firefox proxyDelivery),watchdog 降为兜底脚手架。
17+
18+## 当前问题
19+
20+### `a11y_msg.sh`
21+
22+1. 没有调用开始日志
23+2. 标签页未找到时不报错,直接继续执行无效的粘贴+回车
24+3. osascript 失败被 `2>/dev/null` 静默吞掉,退出码始终为 0
25+4. 无法区分失败原因(参数缺失 / 标签页未命中 / 按键失败 / TCC 权限拒绝)
26+
27+### `watchdog.sh`
28+
29+1. Python 解析心跳文件失败时(`ST="error"`),主循环没有显式 FAIL 日志
30+2. CHECK 日志已比较完整,续命后也记录了 `a11y_rc`,这部分基本到位
31+
32+## 需求
33+
34+### 1. `a11y_msg.sh` 日志增强
35+
36+- 记录 START 日志(标签页名 + 消息摘要)
37+- 检查 osascript 切标签页的返回值,区分"matched"和"not found"
38+- 标签页未命中时 exit 非零,不继续执行粘贴
39+- osascript 按键操作失败时记录错误并 exit 非零
40+- 保持成功路径的退出码为 0
41+
42+### 2. `watchdog.sh` 错误日志
43+
44+- Python 解析失败(`ST="error"`)时写显式 FAIL 日志行
45+- 其余 CHECK/RENEWAL 日志已到位,无需大改
46+
47+### 3. 不改变 v4 状态机语义
48+
49+- 保留 `renewed` 超时重试逻辑
50+- 不清空 `wake_at` / `max_wake_at`
51+- 不引入旧版 `origin/feat/watchdog-logging` 分支的状态机回退
52+
53+## 允许修改的目录
54+
55+- `tools/watchdog/`
56+
57+## 为什么优先级低
58+
59+- 续命主力已切到 conductor renewal(API 代理),不依赖 watchdog
60+- watchdog 仅在 conductor 链路完全断裂时作为最后保险
61+- 当前 watchdog 功能正常,只是出错时排障困难
62+- 不阻塞任何主线功能
63+
64+## 关联
65+
66+- 原任务卡:`T-S060`(已撤回)
67+- watchdog V1 代码:`tools/watchdog/watchdog.sh`、`tools/watchdog/a11y_msg.sh`
68+- watchdog V2 设计:[`WATCHDOG_V2_CONDUCTOR_INTEGRATED.md`](./WATCHDOG_V2_CONDUCTOR_INTEGRATED.md)(事件驱动方案,同样搁置)
69+- 续命主力:`apps/conductor-daemon/src/renewal/`(projector + dispatcher)
+0,
-177
1@@ -1,177 +0,0 @@
2-# Task T-S060:看门狗日志增强重写(保持 v4 语义)
3-
4-## 状态
5-
6-- 当前状态:`待开始`
7-- 规模预估:`S`
8-- 依赖任务:无
9-- 建议执行者:`Claude / Codex`(改动面小,但需要严格对照当前 `main` 行为,避免把旧状态机语义带回来)
10-
11-## 直接给对话的提示词
12-
13-读 `/Users/george/code/baa-conductor/tasks/T-S060.md` 任务文档,完成开发任务。
14-
15-如需补背景,再读:
16-
17-- `/Users/george/code/baa-conductor/tools/watchdog/README.md`
18-- `/Users/george/code/baa-conductor/plans/TONIGHT_SPRINT.md`
19-- `/Users/george/code/baa-conductor/HANDOFF.md`
20-
21-## 当前基线
22-
23-- 仓库:`/Users/george/code/baa-conductor`
24-- 分支基线:`main`
25-- 提交:`8affb3b`
26-
27-## 分支与 worktree(强制)
28-
29-- 分支名:`feat/watchdog-logging-v4-safe`
30-- worktree 路径:`/Users/george/code/baa-conductor-watchdog-logging-v4-safe`
31-
32-开工步骤:
33-
34-1. `cd /Users/george/code/baa-conductor`
35-2. `git worktree add ../baa-conductor-watchdog-logging-v4-safe -b feat/watchdog-logging-v4-safe main`
36-3. `cd ../baa-conductor-watchdog-logging-v4-safe`
37-4. 在这个 worktree 目录里开发,不要回到主仓库目录
38-
39-完成后提交与推送:
40-
41-1. 在 worktree 里提交所有变更(包括更新后的任务文档)
42-2. `git push -u origin feat/watchdog-logging-v4-safe`
43-
44-合并步骤(由合并者执行):
45-
46-1. `cd /Users/george/code/baa-conductor`
47-2. `git fetch origin`
48-3. `git merge origin/feat/watchdog-logging-v4-safe`
49-4. `git push`
50-5. `git worktree remove ../baa-conductor-watchdog-logging-v4-safe`(如果 worktree 还在)
51-
52-合并冲突处理:
53-
54-1. 如果 `git merge` 报冲突,先 `git diff` 查看冲突文件
55-2. 手动解决冲突后 `git add` 冲突文件
56-3. `git merge --continue` 完成合并
57-4. 不要用 `git merge --abort` 然后 force 覆盖
58-
59-命名规则:
60-
61-- 功能任务分支名以 `feat/` 开头
62-- 缺陷任务分支名以 `bug/` 开头
63-
64-## 目标
65-
66-在不改变当前 `watchdog v4` 状态机语义的前提下,重做看门狗日志增强。
67-
68-## 背景
69-
70-仓库里存在一个旧远端分支 `origin/feat/watchdog-logging`,其中有一部分日志增强改动是有价值的,但该分支基于很旧的基线,直接合并会把当前 `main` 上已经存在的 `watchdog v4` 行为带回旧逻辑。
71-
72-这次任务的目标不是合并旧分支,而是:
73-
74-- 从最新 `main` 重新实现需要的日志增强
75-- 只保留“纯日志 / fail-closed”改进
76-- 不引入旧版 `watchdog.sh` 的状态机回退
77-
78-## 涉及仓库
79-
80-- `/Users/george/code/baa-conductor`
81-
82-## 范围
83-
84-- 为 `a11y_msg.sh` 增加更明确的 START / OK / FAIL 日志
85-- 为 `watchdog.sh` 增加更完整的每轮 CHECK 日志和 `a11y_msg.sh` 返回码记录
86-- 保留当前 `watchdog v4` 的 `renewed` 超时重试语义
87-- 如有必要,更新 `tools/watchdog/README.md`
88-
89-## 路径约束
90-
91-- 不允许直接合并或照搬 `origin/feat/watchdog-logging`
92-- 必须从当前 `main` 重写
93-- 不允许把 `watchdog.sh` 从当前 `v4` 语义改回旧版 `v3`
94-
95-## 推荐实现边界
96-
97-建议优先做:
98-
99-- `tools/watchdog/a11y_msg.sh`
100-- `tools/watchdog/watchdog.sh`
101-- 必要时最小改动 `tools/watchdog/README.md`
102-
103-## 允许修改的目录
104-
105-- `/Users/george/code/baa-conductor/tools/watchdog/`
106-- `/Users/george/code/baa-conductor/tasks/T-S060.md`
107-
108-## 尽量不要修改
109-
110-- `/Users/george/code/baa-conductor/apps/`
111-- `/Users/george/code/baa-conductor/packages/`
112-- `/Users/george/code/baa-conductor/plugins/`
113-
114-## 必须完成
115-
116-### 1. `a11y_msg.sh` 日志增强
117-
118-- 记录调用开始日志
119-- 区分参数缺失、标签页未命中、按键失败等失败原因
120-- 保留成功/失败退出码
121-
122-### 2. `watchdog.sh` CHECK 日志增强
123-
124-- 每轮记录更完整的状态信息
125-- 在续命调用后记录 `a11y_msg.sh` 的返回码
126-- 出错时记录失败日志
127-
128-### 3. 保持当前行为不回退
129-
130-- 保留当前 `watchdog v4` 的 `renewed` 超时重试逻辑
131-- 不要擅自清空 `wake_at` / `max_wake_at`
132-- 不要改变现有心跳状态机含义,除非任务文档明确要求
133-
134-## 需要特别注意
135-
136-- 这次任务的重点是“增强日志”,不是“重写状态机”
137-- 如果引用旧分支实现,只能选择性吸收日志语句,不能整体移植
138-- 如果发现旧分支中的某个行为改动确实合理,需要在任务文档里记录并单独说明
139-- 所有开发必须在 worktree 中进行,不要在主仓库目录修改代码
140-
141-## 验收标准
142-
143-- `a11y_msg.sh` 失败时能区分至少 2 类以上失败原因
144-- `watchdog.sh` 每轮 CHECK 会写更完整状态到 `watchdog.log`
145-- 续命调用后能看到 `a11y_msg.sh` 返回码
146-- 当前 `watchdog v4` 的 `renewed` 超时重试语义不被破坏
147-
148-## 推荐验证命令
149-
150-- `cd /Users/george/code/baa-conductor-watchdog-logging-v4-safe && bash -n tools/watchdog/a11y_msg.sh`
151-- `cd /Users/george/code/baa-conductor-watchdog-logging-v4-safe && bash -n tools/watchdog/watchdog.sh`
152-- `cd /Users/george/code/baa-conductor-watchdog-logging-v4-safe && git diff -- tools/watchdog/`
153-
154-## 执行记录
155-
156-> 以下内容由执行任务的 AI 填写,创建任务时留空。
157-
158-### 开始执行
159-
160-- 执行者:
161-- 开始时间:
162-- 状态变更:`待开始` → `进行中`
163-
164-### 完成摘要
165-
166-- 完成时间:
167-- 状态变更:`进行中` → `已完成`
168-- 修改了哪些文件:
169-- 核心实现思路:
170-- 跑了哪些测试:
171-
172-### 执行过程中遇到的问题
173-
174--
175-
176-### 剩余风险
177-
178--
+0,
-1
1@@ -80,7 +80,6 @@
2 |---|---|---|
3 | [`T-S048`](./T-S048.md) | Gemini 投递适配器 | 仍保留,但暂让位于续命/定时任务主线 |
4 | [`T-S049`](./T-S049.md) | 开放 chatgpt/gemini target | 依赖 T-S048,暂后移 |
5-| [`T-S060`](./T-S060.md) | 看门狗日志增强重写(保持 v4 语义) | 替代旧的 `origin/feat/watchdog-logging`,只重做日志增强,不回退状态机 |
6 | [`T-S051`](./T-S051.md) | 代码文件直读映射 | 已完成,保留为后续实现参考 |
7
8 ### 已完成