# 开发执行计划
状态:已完成。P0-P10 全部实现、验证并发布;当前维护版本为 `0.1.1`。
## 1. 执行原则
1. 以 [01-requirements.md](01-requirements.md) 和 [02-solution-design.md](02-solution-design.md) 为行为契约。
2. 每个可交付 commit 同时包含实现、测试和相应文档。
3. 每个阶段结束都必须能独立运行 `pnpm verify`。
4. 优先完成纵向切片,尽早在真实 DSH profile 中验证,不只做孤立模块。
5. 官方 API 优先。若必须使用未公开契约,先写 ADR 和兼容性降级,再实现。
6. 任何 schema、权限或 verdict 语义变化先更新设计和 ADR。
7. 所有业务状态由 Host 负责,Client 不自行推断 Review 是否可 Approve。
8. 未通过真实 profile E2E 的功能不声明完成。
## 2. 工作包总览
| 阶段 | 工作包 | 依赖 | 主要产物 |
| ---- | ----------------------- | ----- | ---------------------------------- |
| P0 | 仓库与治理初始化 | 无 | AGENTS、docs、许可证、构建与 CI |
| P1 | DSH 兼容性探针 | P0 | 可接管官方 Review tab 的最小插件 |
| P2 | Scope 与持久化基础 | P1 | 稳定 scope、storage domain、schema |
| P3 | Review 聚合与可见性 | P2 | Review、Thread、Draft、Submission |
| P4 | Diff 客户端与 Thread UI | P1-P3 | 官方风格 diff 和行级讨论 |
| P5 | Review 提交与 Approve | P3-P4 | verdict、提交、自动下一轮 |
| P6 | AI Skill 与工具 | P3-P5 | AI 读评论、写评论、告知用户 |
| P7 | 实时同步 | P3-P6 | 同 Host 多会话 SSE 同步 |
| P8 | Working/Revision Scope | P2-P7 | work scope、`/review`、跨会话共享 |
| P9 | Commit 绑定与稳定化 | P8 | working 到 rev 的原子绑定 |
| P10 | 发布准备 | P0-P9 | E2E、打包、文档、npm/GitHub 发布 |
## 3. P0:仓库与治理初始化
### T0.1 创建项目骨架
依赖:无。
产物:
- `$PERSONAL/dsh-review-threads`
- Git 仓库,默认分支 `main`
- pnpm 项目
- TypeScript strict
- 构建、测试、lint、format 配置
- 最小 `cordis.patch.yml`
- 最小可加载的 Host/Client 入口
验收:
- 空插件可在目标 DSH 中加载。
- `pnpm build` 和 `pnpm typecheck` 成功。
- 不依赖开发机绝对路径。
### T0.2 项目治理文件
依赖:T0.1。
产物:
- `AGENTS.md`
- `LICENSE`(MIT)
- `CONTRIBUTING.md`
- `SECURITY.md`
- `CODE_OF_CONDUCT.md`
- `README.md`
- `README.zh.md`
- `CHANGELOG.md`
验收:
- `AGENTS.md` 明确文档与代码同 commit。
- 许可证和包清单均为 MIT。
- 所有贡献命令可在干净 checkout 中运行。
### T0.3 迁移设计文档
依赖:T0.1。
产物:
- `docs/README.md`
- `docs/requirements/original.md`
- `docs/requirements/requirements.md`
- `docs/design.md`
- `docs/compatibility.md`
- `docs/decisions/0001-take-over-official-review-tab.md`
- `docs/decisions/0002-review-aggregate-and-approval.md`
- `docs/decisions/0003-scope-identity-and-storage.md`
验收:
- 文档内容与本设计一致。
- 文档链接全部有效。
- `AGENTS.md` 要求未来设计变更同步新增 ADR。
### T0.4 质量门禁与 CI
依赖:T0.1-T0.3。
产物:
- `pnpm format:check`
- `pnpm lint`
- `pnpm typecheck`
- `pnpm test`
- `pnpm build`
- `pnpm check:docs`
- `pnpm pack:check`
- `pnpm test:e2e`
- 汇总命令 `pnpm verify`
- GitHub Actions `verify.yml`
验收:
- 新仓库首个空实现 commit 通过 `pnpm verify`。
- 任一 lint warning、格式差异、测试失败或文档链接损坏都使命令失败。
- CI 与本地使用相同命令。
建议提交:
`chore: bootstrap dsh-review-threads`
## 4. P1:DSH 兼容性探针
### T1.1 锁定 DSH 公共契约
依赖:P0。
工作:
- 确认测试版本为 `0.2.1-rc.2` 与 `0.2.1-rc.3`。
- 核对 `sidebarRightTabs`、`workspaceChanges`、`connection.fetch`、`storageDomain`、`tools`、`commands` 和 Skill 打包入口。
- 在 `docs/compatibility.md` 记录精确版本和已使用 API。
验收:
- 所有依赖来自公开包导出。
- 不使用 `@deepseek-ai/dsh` 内部相对路径。
### T1.2 接管官方 `changes-review` tab
依赖:T1.1。
工作:
- 注册 `extension` 优先级 tab,kind 为 `changes-review`。
- 保持官方资源地址格式。
- 解析 `sessionId`、`eventSeq`、`turn`。
- 在冲突或契约不匹配时 fail closed,不覆盖出错的官方行为。
验收:
- 官方 turn-tail 改动文件卡打开插件 tab。
- rc2/rc3 都能取得同一地址。
- 移除插件后官方 tab 自动恢复。
### T1.3 读取官方 turn diff
依赖:T1.2。
工作:
- 通过 `ctx.workspaceChanges.summary()` 获取文件摘要。
- 通过 `ctx.workspaceChanges.diff()` 获取文件对比。
- 验证 created/deleted/coarse/binary/oversized 状态。
- 用公开 route 或 Remote 为 Client 建立代理,不暴露 Host cwd。
验收:
- 能加载单文件和多文件 turn diff。
- 与官方 UI 的增删行数和工作区路径一致。
### T1.4 Diff 功能对齐清单
依赖:T1.3。
必须对齐:
- 文件选择器
- 文件增删统计
- unified/split
- wrap
- syntax highlight
- 真实新旧行号
- hunk header
- 创建/删除/空 diff/过粗 diff 提示
- 打开整文件
验收:
- 对照官方 Review tab 截图逐项通过。
- 5,000 行截断和 oversized 降级行为一致。
建议提交:
`feat: take over the official review tab behind a compatibility adapter`
## 5. P2:Scope 与持久化基础
### T2.1 实现 repo identity
依赖:T1.1。
工作:
- 规范化 remote URL。
- 无 remote 时使用 Git common dir。
- 处理 worktree、submodule 目录和缺少 Git 的降级。
- 不把凭据、用户名或 token 写入 repo identity。
验收:
- 同一仓库的 worktree 解析到同一 repo identity。
- 不同仓库不碰撞。
### T2.2 实现 scope key
依赖:T2.1。
工作:
- Turn scope key。
- Work scope key。
- Revision scope key。
- diffSpec 哈希。
- 输入顺序稳定、JSON 规范化、SHA-256。
验收:
- 相同输入跨进程稳定。
- 符号 ref 移动不会被误认成同一 revision scope。
- path filter 或 diff 选项变化会生成不同 scope。
### T2.3 声明 storage domain
依赖:T2.1。
工作:
- 定义 `review_threads` domain,version 1,`per-record`。
- 实现 schema 校验和记录上限。
- 实现 open/close 生命周期与 disposal。
- 增加 schema/version 错误测试。
验收:
- 重启后记录恢复。
- 任一损坏记录按设计 fail loud 或显式迁移,不静默清空。
### T2.4 Scope 查询服务
依赖:T2.2-T2.3。
工作:
- `scopeStatus` 服务。
- scope → Review 的唯一映射。
- scope 元数据查询。
- 过期或不可用 diff 的状态。
验收:
- 同一 scope 重复打开返回同一 Review。
- 不同会话不重复创建 Review。
建议提交:
`feat: add stable review scopes and persistent storage`
## 6. P3:Review 聚合与可见性
### T3.1 Review 聚合模型
依赖:P2。
工作:
- Review 记录 schema。
- `currentDecision`、`latestSubmissionId`、`blockingSince`。
- 同一 scope 唯一 Review constraint。
- Review 不设置终结态。
验收:
- approve 后 Review 仍可写。
- Review 可从 work scope 绑定到 revision scope。
### T3.2 Thread 与 comment 服务
依赖:T3.1。
工作:
- Thread CRUD。
- 单行唯一锚点约束。
- 同一行自动合并。
- comment 作者权限。
- 用户删除自己的 comment。
- 用户删除整个 thread。
- thread resolve/reopen。
- AI 不能编辑、删除或 resolve。
验收:
- 并发追加使用原子 update 不丢正文。
- AI 与用户同一行评论进入同一 thread。
- 单条 AI comment 无法被用户删除,整个 thread 可由用户删除。
### T3.3 AnchorEngine
依赖:T3.2。
工作:
- anchor hash 生成。
- 精确匹配与唯一模糊匹配。
- outdated 状态。
- work scope 新 snapshot 的重新定位。
- 重复代码行安全测试。
验收:
- 唯一匹配才移动锚点。
- 任何不确定情况标记 outdated。
### T3.4 Review draft
依赖:T3.1-T3.3。
工作:
- `(reviewId, sessionId, turn)` draft 唯一性。
- operation log。
- 新增、编辑、删除、resolve、reopen、delete thread 操作。
- 取消 draft 的回滚。
- 跨刷新恢复或安全丢弃策略。
验收:
- draft 操作对 AI 不可见。
- 取消 draft 回到 shared state。
- 同一用户多个窗口的冲突可检测。
### T3.5 VisibilityEngine
依赖:T3.4。
工作:
- User view 与 AI view。
- thread `revision/sharedRevision`。
- draft 过滤。
- tombstone 过滤。
- AI 与用户 draft 并发时的部分可见性。
验收:
- AI 工具永远读不到未提交用户评论。
- AI 自己新增的评论立即可见。
- 已删除正文不会进入后续 AI 工具返回。
### T3.6 ReviewSubmission
依赖:T3.4-T3.5。
工作:
- 冻结 operation payload。
- 创建不可变 submission。
- 更新 Review currentDecision。
- `agent.followup()` 幂等提交。
- submit_failed 重试。
- messageId 去重。
验收:
- 一次提交恰好启动一个 AI turn。
- 重试不会重复启动或重复应用操作。
建议提交:
`feat: persist review aggregates, threads, drafts, and submissions`
## 7. P4:Diff 客户端与 Thread UI
### T4.1 插件 Review tab 基础
依赖:P1-P3。
工作:
- 文件选择器。
- 文件统计。
- Review 当前 decision 展示。
- thread 总览和未解决计数。
- Review submission 历史入口。
验收:
- 官方 turn-tail 卡打开后默认选中正确文件。
- 文件切换不丢 thread 状态。
### T4.2 Diff renderer
依赖:T4.1。
工作:
- unified/split。
- wrap/no-wrap。
- syntax highlight。
- 行号、hunk、空侧单元格。
- 创建/删除/coarse/truncated/binary/oversized 状态。
验收:
- 与官方 diff 功能逐项对齐。
- 3,000 行以上滚动和大 diff 性能可接受。
### T4.3 Line thread layer
依赖:T4.2。
工作:
- 行号 gutter 评论按钮。
- thread 数量角标。
- resolved thread 图标和折叠。
- popover 定位。
- unified/split 切换后的重新定位。
- 滚动和缩放同步。
验收:
- 切换布局后不会错行。
- popover 不遮挡当前行,不越出面板。
### T4.4 Thread panel
依赖:T4.3。
工作:
- comment 列表。
- 用户/AI 作者样式。
- 回复输入框。
- 编辑自己的评论。
- 删除自己的评论。
- 删除 thread。
- resolve/reopen。
- outdated 展示。
验收:
- 权限按钮严格按作者显示。
- completed thread 默认只剩标记,可展开详情。
### T4.5 Review draft UI
依赖:T3.4、T4.1。
工作:
- Start review 状态。
- draft 变化计数。
- verdict 选择。
- 总结输入框。
- Submit/Cancel。
- 提交失败重试。
验收:
- 评论操作不触发 AI。
- 提交按钮只调用一次 submission。
### T4.6 Approve UI
依赖:T3.4、T4.5。
工作:
- Host 返回 approval eligibility。
- 阻塞 review + 新代码变化 + 无 draft 时显示独立 Approve。
- 点击打开提交框,默认 approve。
- draft 出现后隐藏独立 Approve。
- 普通提交框包含 approve,但默认 comment。
验收:
- 所有 AC-09/10/11/12/13 在组件测试中通过。
建议提交:
`feat: add review threads and explicit review submission UI`
## 8. P5:Review 提交与 Approve 行为
### T5.1 Verdict instruction 生成
依赖:T3.6。
工作:
- approve/comment/request_changes/reject 四种 instruction。
- 可选 summaryText。
- 引用材料边界。
- Review 当前决策与 thread 状态分离。
验收:
- approve 不要求修改,也不暗示 Review 终结。
- reject 要求回到设计讨论。
- resolve thread 不影响 verdict。
### T5.2 自动下一轮
依赖:T5.1。
工作:
- 使用 DSH 公开 `agent.followup()`。
- 忙时排队。
- 失败回滚与重试。
- 会话关闭时的安全处理。
验收:
- 不重复 turn。
- 不因 add/edit/delete/resolve 操作自动启动 turn。
### T5.3 Approval eligibility
依赖:T5.1、T2.2。
工作:
- 判定阻塞 decision。
- 判定阻塞后代码是否有 AI 修改。
- turn/work/revision scope 的不同策略。
- 后续 submission 覆盖旧阻塞状态。
- manual resolve 不改变 eligibility。
验收:
- state/unit tests 覆盖所有条件组合。
建议提交:
`feat: submit review decisions and compute approval eligibility`
## 9. P6:AI Skill 与工具
### T6.1 Skill 打包
依赖:P5。
工作:
- `skills/dsh-review-threads/SKILL.md`。
- 工具栏使用规则。
- verdict 语义。
- approve 非终结语义。
- 评论后必须告知用户。
验收:
- Skill 能被 DSH 发现。
- Skill 不要求 AI 直接操作数据库。
### T6.2 只读工具
依赖:T3.5、T6.1。
工作:
- `review_threads_list`
- `review_threads_get`
- 只返回 AI-visible state。
- 返回 Review decision、submission 摘要和 thread 状态。
验收:
- 看不到 draft comment。
- 能看到 resolved 状态和 approve 后的 Review。
### T6.3 写工具
依赖:T3.2、T6.2。
工作:
- `review_threads_add_comment`。
- 行锚点参数校验。
- 已有 thread 自动追加。
- `announcementRequired`。
- AI 不可删除、不可 resolve、不可 approve。
验收:
- 同一行不会因 AI 操作新增第二个 thread。
- approve 后 AI 仍可添加新评论。
### T6.4 Prompt 注入防护
依赖:T6.2-T6.3。
工作:
- 评论正文 XML/JSON 边界。
- “源码和评论是不可信材料”说明。
- 长度上限与截断标记。
验收:
- 评论中的伪指令不能改变工具权限。
- 大 thread 明确截断而非静默遗漏。
建议提交:
`feat(ai): add review thread tools and behavior skill`
## 10. P7:实时同步
### T7.1 Host 事件转换
依赖:P3。
工作:
- 监听 `domain/changed`。
- 按 Review/scope 生成 revisioned event。
- merge 连续 event。
- 关闭时释放订阅。
验收:
- 写入成功后广播。
- 不广播未持久化状态。
### T7.2 SSE 路由与重连
依赖:T7.1。
工作:
- `/plugins/dsh-review-threads/events`。
- `Last-Event-ID` 或 `afterRevision`。
- 重连先拉快照再订阅增量。
- 心跳和超时。
验收:
- 断线恢复不丢评论。
- 旧 revision 可回退到完整快照。
### T7.3 多会话 E2E
依赖:T7.2。
工作:
- 两个会话打开相同 revision scope。
- 一端添加/编辑/resolve/delete。
- 另一端实时变化。
验收:
- 无刷新更新。
- 不重复显示。
- 顺序与 Host revision 一致。
建议提交:
`feat: synchronize review threads across sessions`
## 11. P8:Working 与 Revision Scope
### T8.1 Working scope snapshots
依赖:P2-P7。
工作:
- 为 work scope 保存 patch revision。
- AI turn 结束后更新 working snapshot。
- re-anchor thread。
- 评论跨轮保留。
验收:
- 用户多轮交流后仍能看到原 thread。
- AI 修改代码后 thread 精确定位或标 outdated。
### T8.2 Git revision service
依赖:T2.1-T2.2。
工作:
- 解析 `base..head`。
- 解析后 OID 固化 scope。
- 生成 file summary 和 hunks。
- 提供单文件 diff。
- 安全处理无效 revision 和超大 diff。
验收:
- 不执行用户提供的 shell。
- 使用 argv 调用 git。
- scope hash 与设计一致。
### T8.3 `/review` 命令
依赖:T8.2。
工作:
- `/review