codex@macbookpro
·
2026-03-30
T-S055.md
1# Task T-S055:续命基础存储层
2
3## 状态
4
5- 当前状态:`已完成`
6- 规模预估:`M`
7- 依赖任务:无
8- 建议执行者:`Codex`(存储层、schema、同步队列改动集中)
9
10## 直接给对话的提示词
11
12读 `/Users/george/code/baa-conductor/tasks/T-S055.md` 任务文档,完成开发任务。
13
14如需补背景,再读:
15
16- `/Users/george/code/baa-conductor/plans/discuss/DISCUSS-TIMED-JOBS-RENEWAL-REQUIREMENTS.md`
17- `/Users/george/code/baa-conductor/tasks/TASK_OVERVIEW.md`
18
19## 当前基线
20
21- 仓库:`/Users/george/code/baa-conductor`
22- 分支基线:`main`
23- 提交:`071abbf`
24
25## 分支与 worktree(强制)
26
27- 分支名:`feat/renewal-storage-foundation`
28- worktree 路径:`/Users/george/code/baa-conductor-renewal-storage-foundation`
29
30开工步骤:
31
321. `cd /Users/george/code/baa-conductor`
332. `git worktree add ../baa-conductor-renewal-storage-foundation -b feat/renewal-storage-foundation main`
343. `cd ../baa-conductor-renewal-storage-foundation`
354. 在这个 worktree 目录里开发,不要回到主仓库目录
36
37完成后提交与推送:
38
391. 在 worktree 里提交所有变更(包括更新后的任务文档)
402. `git push -u origin feat/renewal-storage-foundation`
41
42合并步骤(由合并者执行):
43
441. `cd /Users/george/code/baa-conductor`
452. `git fetch origin`
463. `git merge origin/feat/renewal-storage-foundation`
474. `git push`
485. `git worktree remove ../baa-conductor-renewal-storage-foundation`(如果 worktree 还在)
49
50合并冲突处理:
51
521. 如果 `git merge` 报冲突,先 `git diff` 查看冲突文件
532. 手动解决冲突后 `git add` 冲突文件
543. `git merge --continue` 完成合并
554. 不要用 `git merge --abort` 然后 force 覆盖
56
57命名规则:
58
59- 功能任务分支名以 `feat/` 开头
60- 缺陷任务分支名以 `bug/` 开头
61
62## 目标
63
64为续命系统补齐首版存储基础:本地对话表、对话关联表、续命任务表,以及对应的本地 store 和 D1 同步能力。
65
66## 背景
67
68当前已经确认首版续命实现复用 `artifact.db + SyncQueue + D1SyncWorker`,但仍需要正式落地三个新对象:
69
70- 本地对话表
71- 对话关联表
72- 续命任务表
73
74这一步只做存储基础,不做自动化状态接口、不做消息投影、不做发送执行。
75
76## 涉及仓库
77
78- `/Users/george/code/baa-conductor`
79
80## 范围
81
82- 为 `artifact.db` 增加本地对话、对话关联、续命任务三张表
83- 为 `packages/artifact-db` 增加对应的读写方法
84- 为 `packages/d1-client` 增加三张表的同步白名单和远端 D1 schema
85- 为后续任务预留必要索引、状态字段和查询原语
86
87## 路径约束
88
89- 新表统一落在 `artifact.db` 体系,不新建第二套本地数据库
90- 同步能力复用现有 `SyncQueue` / `D1SyncWorker`
91- 这一步不要引入业务判断逻辑,不要实现 `shouldRenew()`
92
93## 推荐实现边界
94
95建议优先做:
96
97- `packages/artifact-db` 的 schema、types、store 方法
98- `packages/d1-client` 的 D1 setup 与 sync whitelist
99
100## 允许修改的目录
101
102- `/Users/george/code/baa-conductor/packages/artifact-db/`
103- `/Users/george/code/baa-conductor/packages/d1-client/`
104
105## 尽量不要修改
106
107- `/Users/george/code/baa-conductor/apps/conductor-daemon/src/`
108- `/Users/george/code/baa-conductor/plugins/`
109
110## 必须完成
111
112### 1. 本地 schema
113
114- 在 `artifact.db` 中增加本地对话表
115- 在 `artifact.db` 中增加对话关联表
116- 在 `artifact.db` 中增加续命任务表
117- 为状态查询、到期任务扫描、对话映射增加必要索引
118
119### 2. store 方法
120
121- 增加本地对话表的 upsert / read / list 原语
122- 增加对话关联表的 upsert / read 原语
123- 增加续命任务表的 insert / list / update 原语
124- 至少预留后续任务需要的 `next_attempt_at`、目标快照、日志路径字段
125
126### 3. D1 同步
127
128- 在远端 D1 setup SQL 中镜像新增三张表
129- 在 `SYNC_COLUMN_WHITELIST` 中放行新增表字段
130- 确保本地写入能继续通过 `SyncQueue` 入队同步
131
132## 需要特别注意
133
134- 本地对话身份不能退化成 `platform|conversation_id` 拼接字符串
135- 本任务只做存储基础,不要顺手实现业务 worker
136- 新表字段命名要兼顾后续 `manual / auto / paused`、`pending / running / done / failed`
137- 所有开发必须在 worktree 中进行,不要在主仓库目录修改代码
138
139## 验收标准
140
141- `artifact.db` schema 中存在三张新表
142- `packages/artifact-db` 暴露对应 store 方法
143- `packages/d1-client` 能识别并同步三张新表
144- 现有 messages / executions / sessions 链路不被破坏
145
146## 推荐验证命令
147
148- `cd /Users/george/code/baa-conductor-renewal-storage-foundation && pnpm build`
149- `cd /Users/george/code/baa-conductor-renewal-storage-foundation && pnpm test`
150
151## 执行记录
152
153> 以下内容由执行任务的 AI 填写,创建任务时留空。
154
155### 开始执行
156
157- 执行者:`Codex`
158- 开始时间:`2026-03-30 14:42:37 +0800`
159- 状态变更:`待开始` → `进行中`
160
161### 完成摘要
162
163- 完成时间:`2026-03-30 15:06:32 CST`
164- 状态变更:`进行中` → `已完成`
165- 修改了哪些文件:
166 - `packages/artifact-db/src/schema.ts`
167 - `packages/artifact-db/src/store.ts`
168 - `packages/artifact-db/src/types.ts`
169 - `packages/artifact-db/src/index.ts`
170 - `packages/artifact-db/src/index.test.js`
171 - `packages/d1-client/src/d1-setup.sql`
172 - `packages/d1-client/src/sync-worker.ts`
173 - `packages/d1-client/src/index.test.js`
174 - `tasks/T-S055.md`
175- 核心实现思路:
176 - 在 `artifact.db` / D1 中新增 `local_conversations`、`conversation_links`、`renewal_jobs` 三张表,并补状态、到期扫描、对话映射所需索引
177 - 为 `ArtifactStore` 增加本地对话、对话关联、续命任务的 record/types/store 原语,并保留 `automation_status`、`next_attempt_at`、目标快照、日志路径等后续字段
178 - 新增三张表的 D1 同步白名单,并用测试覆盖 store 原语和白名单 SQL 生成
179- 跑了哪些测试:
180 - `cd /Users/george/code/baa-conductor-renewal-storage-foundation && pnpm -C packages/artifact-db test`
181 - `cd /Users/george/code/baa-conductor-renewal-storage-foundation && pnpm -C packages/d1-client test`
182 - `cd /Users/george/code/baa-conductor-renewal-storage-foundation && pnpm build`
183 - `cd /Users/george/code/baa-conductor-renewal-storage-foundation && pnpm test`
184
185### 执行过程中遇到的问题
186
187- worktree 初始未安装依赖,`pnpm exec tsc` 直接失败;补跑一次 `pnpm install` 后恢复正常验证流程
188
189### 剩余风险
190
191- `conversation_links` 当前按 `(platform, remote_conversation_id)` 维持唯一映射,后续如果同一平台对话需要并存多条活跃路由,需要在 `T-S056` 里结合真实输入模型再细化冲突策略