详细设计 3/3:Worktree、Session 注入与自动发现

同一项目可被多个 Story 并行开发,但每个活动 Story 必须拥有独立执行目录和分支。

project(共享仓库注册表)

id, name

repo_path(主仓库绝对路径)

default_branch

remote_url

availability

story_project(Story 执行绑定)

story_key, project_id

branch, base_branch

worktree_path

workspace_type = worktree | main

worktree_state

启动协议

用户启动 Story 读取项目事实 校验 Git / 基线 创建分支 + 独立 worktree 生成 Context Snapshot 启动 Session

默认路径:<配置的 worktree_root>/<story_key>/<project_name>

默认分支:codex/<story_key>-<slug>;创建前用 Git 校验分支名。

Worktree 决策表

事实决策
目标 worktree 不存在,分支不存在创建新分支和 worktree,可启动
worktree 存在且分支匹配、未被其他 Story 占用复用,可启动
worktree 路径存在但不是登记的 Git worktree拒绝启动,显示冲突路径
分支已在其他 worktree checkout拒绝启动,不使用 force
worktree 分支与登记分支不一致标记 stale,拒绝启动
主仓库有未提交修改仍可从明确 base commit 创建;不得改写主仓库
Story 完成或终止保留 worktree;页面提供人工确认清理
worktree 非 clean禁止自动删除,不提供 force 清理

Session 上下文注入

每次新建、重开或恢复 session 前:

1. Resolver 读取最新 TAPD 镜像、project/story_project、文档、DDL/Nacos 和证据。

2. 校验所有 worktree 路径与当前分支,生成 revision 固定的 Markdown 快照。

3. Prompt 注入项目目录、摘要、状态、证据路径和“按需读取原文”说明。

4. session 启动事件记录 context_revision,便于知道 AI 当时看到了什么。

自动发现

触发:启动/重开 session 前、阶段完成后、用户刷新资料、项目绑定变化后。

扫描:目标 worktree 的分支、commit、diff、约定 SQL 路径、配置引用、PRD/设计文档路径。

边界:扫描器只产出候选事实;纯决策器比较现有资料与候选;处理器事务写入并记录事件。扫描本身不启动 AI、不发布 Nacos、不执行 DDL。

用户可见反馈

Story 详情页按项目展示:主仓库、worktree、分支、基线、可用状态、文档、DDL/Nacos、证据和待确认项。

任何无法启动的分支都返回明确 reason_code,例如 worktree_path_conflictbranch_checked_out_elsewhereproject_path_missing