codex@macbookpro
·
2026-04-01
T-S065.md
1# Task T-S065:policy 配置化
2
3## 状态
4
5- 当前状态:`已完成`
6- 规模预估:`M`
7- 依赖任务:无
8- 建议执行者:`Codex`
9
10## 直接给对话的提示词
11
12读 `/Users/george/code/baa-conductor/tasks/T-S065.md` 任务文档,完成开发任务。
13
14如需补背景,再读:
15
16- `/Users/george/code/baa-conductor/bugs/archive/OPT-003-policy-configurable.md`
17- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_SYSTEM.md`
18- `/Users/george/code/baa-conductor/plans/BAA_INSTRUCTION_ROADMAP.md`
19
20## 当前基线
21
22- 仓库:`/Users/george/code/baa-conductor`
23- 分支基线:`main`
24- 提交:`64d122e`
25
26## 分支与 worktree(强制)
27
28- 分支名:`feat/policy-configurable`
29- worktree 路径:`/Users/george/code/baa-conductor-policy-configurable`
30
31开工步骤:
32
331. `cd /Users/george/code/baa-conductor`
342. `git worktree add ../baa-conductor-policy-configurable -b feat/policy-configurable main`
353. `cd ../baa-conductor-policy-configurable`
364. 在这个 worktree 目录里开发,不要回到主仓库目录
37
38完成后提交与推送:
39
401. 在 worktree 里提交所有变更(包括更新后的任务文档)
412. `git push -u origin feat/policy-configurable`
42
43合并步骤(由合并者执行):
44
451. `cd /Users/george/code/baa-conductor`
462. `git fetch origin`
473. `git merge origin/feat/policy-configurable`
484. `git push`
495. `git worktree remove ../baa-conductor-policy-configurable`(如果 worktree 还在)
50
51合并冲突处理:
52
531. 如果 `git merge` 报冲突,先 `git diff` 查看冲突文件
542. 手动解决冲突后 `git add` 冲突文件
553. `git merge --continue` 完成合并
564. 不要用 `git merge --abort` 然后 force 覆盖
57
58命名规则:
59
60- 功能任务分支名以 `feat/` 开头
61- 缺陷任务分支名以 `bug/` 开头
62
63## 目标
64
65把 BAA policy 从硬编码常量改成可配置结构,为后续 automation control plane 和更多 target/tool 扩面提供基础。
66
67## 背景
68
69当前 target/tool 白名单仍主要是硬编码集合。随着 `browser.chatgpt/gemini` 放开、自动化控制指令准备接入,这部分已经进入主链演进路径,不应继续只挂在 opt。
70
71## 涉及仓库
72
73- `/Users/george/code/baa-conductor`
74
75## 范围
76
77- policy 配置化入口
78- 默认策略与当前行为兼容
79- 测试覆盖
80
81## 允许修改的目录
82
83- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/instructions/`
84- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/index.test.js`
85- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/local-api.ts`
86
87## 必须完成
88
89### 1. policy 配置入口
90
91- 支持在 instruction center 构造或初始化阶段传入 policy 配置
92- 默认值保持当前主线行为不变
93
94### 2. 兼容现有 target / tool
95
96- `conductor` / `system` / `browser.claude/chatgpt/gemini` 现有行为不回退
97- 为后续新增 automation control 指令留清晰扩展点
98
99### 3. 测试
100
101- 覆盖默认 policy
102- 覆盖自定义 policy 覆盖行为
103
104## 验收标准
105
106- 不传配置时,当前主线行为不变
107- 传配置时,可以扩展或收缩允许的 target / tool 集合
108- 测试覆盖核心分支
109
110## 推荐验证命令
111
112- `cd /Users/george/code/baa-conductor-policy-configurable && pnpm -C apps/conductor-daemon test`
113
114## 执行记录
115
116> 以下内容由执行任务的 AI 填写,创建任务时留空。
117
118### 开始执行
119
120- 执行者:`Codex`
121- 开始时间:`2026-04-01 17:40:00 +0800`
122- 状态变更:`待开始` → `进行中`
123
124### 完成摘要
125
126- 完成时间:`2026-04-01 18:02:34 +0800`
127- 状态变更:`进行中` → `已完成`
128- 修改了哪些文件:
129 - `apps/conductor-daemon/src/instructions/policy.ts`
130 - `apps/conductor-daemon/src/instructions/loop.ts`
131 - `apps/conductor-daemon/src/instructions/ingest.ts`
132 - `apps/conductor-daemon/src/local-api.ts`
133 - `apps/conductor-daemon/src/index.test.js`
134 - `tasks/T-S065.md`
135- 核心实现思路:
136 - 把硬编码 target/tool 白名单抽成 `policy` 配置结构,提供默认 policy 克隆入口和解析函数。
137 - 在 `BaaInstructionCenter` 构造阶段支持注入 policy,并在 `BaaLiveInstructionIngest` 初始化阶段支持把 policy 继续透传到内部 center。
138 - 为 `ConductorLocalApiContext` 增加可选 `instructionPolicy` 扩展点,保持默认行为不变,同时给后续 automation control / 新 target/tool 扩面留入口。
139 - 补测试覆盖默认 policy 主线行为,以及自定义 policy 对 target/tool allowlist 的收缩与扩展。
140- 跑了哪些测试:
141 - `pnpm -C /Users/george/code/baa-conductor-policy-configurable/apps/conductor-daemon test`
142
143### 执行过程中遇到的问题
144
145- 新 worktree 初始没有 `node_modules`,先执行 `pnpm -C /Users/george/code/baa-conductor-policy-configurable install --frozen-lockfile` 后再跑测试。
146
147### 剩余风险
148
149- 暂无