同一项目可被多个 Story 并行开发,但每个活动 Story 必须拥有独立执行目录和分支。
id, name
repo_path(主仓库绝对路径)
default_branch
remote_url
availability
story_key, project_id
branch, base_branch
worktree_path
workspace_type = worktree | main
worktree_state
默认路径:<配置的 worktree_root>/<story_key>/<project_name>
默认分支:codex/<story_key>-<slug>;创建前用 Git 校验分支名。
| 事实 | 决策 |
|---|---|
| 目标 worktree 不存在,分支不存在 | 创建新分支和 worktree,可启动 |
| worktree 存在且分支匹配、未被其他 Story 占用 | 复用,可启动 |
| worktree 路径存在但不是登记的 Git worktree | 拒绝启动,显示冲突路径 |
| 分支已在其他 worktree checkout | 拒绝启动,不使用 force |
| worktree 分支与登记分支不一致 | 标记 stale,拒绝启动 |
| 主仓库有未提交修改 | 仍可从明确 base commit 创建;不得改写主仓库 |
| Story 完成或终止 | 保留 worktree;页面提供人工确认清理 |
| worktree 非 clean | 禁止自动删除,不提供 force 清理 |
每次新建、重开或恢复 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_conflict、branch_checked_out_elsewhere、project_path_missing。