@devcxl/opencode-cabbage 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +19 -25
  2. package/README.zh.md +17 -23
  3. package/assets/agents/dev-lifecycle.md +208 -68
  4. package/assets/agents/team/architect.md +22 -7
  5. package/assets/agents/team/developer.md +13 -6
  6. package/assets/agents/team/goal-verify.md +4 -1
  7. package/assets/agents/team/researcher.md +59 -0
  8. package/assets/agents/team/reviewer.md +34 -18
  9. package/assets/commands/setup.md +1 -1
  10. package/assets/prompts/bootstrap.md +10 -9
  11. package/assets/prompts/stage-contract.md +25 -25
  12. package/assets/skills/flow-code/SKILL.md +23 -25
  13. package/assets/skills/flow-design/SKILL.md +94 -26
  14. package/assets/skills/flow-release/SKILL.md +41 -17
  15. package/assets/skills/flow-requirements/SKILL.md +19 -13
  16. package/assets/skills/flow-research/SKILL.md +77 -0
  17. package/assets/skills/flow-review/SKILL.md +55 -25
  18. package/assets/skills/flow-setup/SKILL.md +27 -24
  19. package/assets/skills/flow-tasks/SKILL.md +178 -35
  20. package/assets/skills/flow-tdd/SKILL.md +68 -40
  21. package/dist/kernel/session-index.d.ts +8 -25
  22. package/dist/kernel/session-index.js +5 -55
  23. package/dist/kernel/session-index.js.map +1 -1
  24. package/dist/plugin/bootstrap.d.ts +0 -1
  25. package/dist/plugin/bootstrap.js +0 -3
  26. package/dist/plugin/bootstrap.js.map +1 -1
  27. package/dist/plugin/goal.d.ts +47 -6
  28. package/dist/plugin/goal.js +228 -94
  29. package/dist/plugin/goal.js.map +1 -1
  30. package/dist/plugin/prompt-lint.js +3 -11
  31. package/dist/plugin/prompt-lint.js.map +1 -1
  32. package/dist/plugin/prompts.d.ts +0 -1
  33. package/dist/plugin/prompts.js +0 -4
  34. package/dist/plugin/prompts.js.map +1 -1
  35. package/dist/plugin/server.d.ts +2 -5
  36. package/dist/plugin/server.js +240 -149
  37. package/dist/plugin/server.js.map +1 -1
  38. package/dist/plugin/skills.d.ts +7 -1
  39. package/dist/plugin/skills.js +75 -12
  40. package/dist/plugin/skills.js.map +1 -1
  41. package/dist/plugin.d.ts +0 -1
  42. package/dist/plugin.js +1 -4
  43. package/dist/plugin.js.map +1 -1
  44. package/dist/util/gh.d.ts +0 -11
  45. package/dist/util/gh.js +0 -14
  46. package/dist/util/gh.js.map +1 -1
  47. package/dist/util/paths.d.ts +0 -14
  48. package/dist/util/paths.js +0 -69
  49. package/dist/util/paths.js.map +1 -1
  50. package/package.json +2 -2
  51. package/assets/prompts/ADR-FORMAT.md +0 -45
  52. package/assets/prompts/PRD-FORMAT.md +0 -17
  53. package/assets/templates/gitignore +0 -5
  54. package/dist/kernel/caller.d.ts +0 -48
  55. package/dist/kernel/caller.js +0 -88
  56. package/dist/kernel/caller.js.map +0 -1
  57. package/dist/kernel/flow.d.ts +0 -175
  58. package/dist/kernel/flow.js +0 -467
  59. package/dist/kernel/flow.js.map +0 -1
  60. package/dist/kernel/legacy.d.ts +0 -19
  61. package/dist/kernel/legacy.js +0 -34
  62. package/dist/kernel/legacy.js.map +0 -1
  63. package/dist/kernel/records.d.ts +0 -103
  64. package/dist/kernel/records.js +0 -240
  65. package/dist/kernel/records.js.map +0 -1
  66. package/dist/kernel/release.d.ts +0 -106
  67. package/dist/kernel/release.js +0 -241
  68. package/dist/kernel/release.js.map +0 -1
  69. package/dist/kernel/review.d.ts +0 -34
  70. package/dist/kernel/review.js +0 -82
  71. package/dist/kernel/review.js.map +0 -1
  72. package/dist/kernel/setup.d.ts +0 -95
  73. package/dist/kernel/setup.js +0 -401
  74. package/dist/kernel/setup.js.map +0 -1
  75. package/dist/kernel/slug.d.ts +0 -23
  76. package/dist/kernel/slug.js +0 -67
  77. package/dist/kernel/slug.js.map +0 -1
  78. package/dist/kernel/task.d.ts +0 -213
  79. package/dist/kernel/task.js +0 -873
  80. package/dist/kernel/task.js.map +0 -1
  81. package/dist/kernel/tdd/adapter.d.ts +0 -49
  82. package/dist/kernel/tdd/adapter.js +0 -294
  83. package/dist/kernel/tdd/adapter.js.map +0 -1
  84. package/dist/kernel/tdd/digest.d.ts +0 -18
  85. package/dist/kernel/tdd/digest.js +0 -303
  86. package/dist/kernel/tdd/digest.js.map +0 -1
  87. package/dist/kernel/tdd/evaluator.d.ts +0 -38
  88. package/dist/kernel/tdd/evaluator.js +0 -185
  89. package/dist/kernel/tdd/evaluator.js.map +0 -1
  90. package/dist/kernel/tdd/evidence.d.ts +0 -42
  91. package/dist/kernel/tdd/evidence.js +0 -48
  92. package/dist/kernel/tdd/evidence.js.map +0 -1
  93. package/dist/kernel/tdd/state.d.ts +0 -79
  94. package/dist/kernel/tdd/state.js +0 -363
  95. package/dist/kernel/tdd/state.js.map +0 -1
  96. package/dist/kernel/types.d.ts +0 -180
  97. package/dist/kernel/types.js +0 -2
  98. package/dist/kernel/types.js.map +0 -1
  99. package/dist/kernel/worktree.d.ts +0 -45
  100. package/dist/kernel/worktree.js +0 -156
  101. package/dist/kernel/worktree.js.map +0 -1
  102. package/dist/plugin/flow-control.d.ts +0 -91
  103. package/dist/plugin/flow-control.js +0 -287
  104. package/dist/plugin/flow-control.js.map +0 -1
  105. package/dist/plugin/release-control.d.ts +0 -39
  106. package/dist/plugin/release-control.js +0 -343
  107. package/dist/plugin/release-control.js.map +0 -1
  108. package/dist/plugin/setup-control.d.ts +0 -59
  109. package/dist/plugin/setup-control.js +0 -111
  110. package/dist/plugin/setup-control.js.map +0 -1
  111. package/dist/plugin/task-control.d.ts +0 -90
  112. package/dist/plugin/task-control.js +0 -208
  113. package/dist/plugin/task-control.js.map +0 -1
  114. package/dist/plugin/tdd-checkpoint.d.ts +0 -128
  115. package/dist/plugin/tdd-checkpoint.js +0 -664
  116. package/dist/plugin/tdd-checkpoint.js.map +0 -1
  117. package/dist/util/shell.d.ts +0 -1
  118. package/dist/util/shell.js +0 -4
  119. package/dist/util/shell.js.map +0 -1
package/README.md CHANGED
@@ -2,8 +2,11 @@
2
2
  <h1>@devcxl/opencode-cabbage</h1>
3
3
  <p>A full-lifecycle development plugin for OpenCode, covering requirements, design, tasks, coding, testing, review, and release with automated orchestration and parallel subagents.</p>
4
4
  <p>
5
- <a href="https://www.npmjs.com/package/@devcxl/opencode-cabbage"><img src="https://img.shields.io/npm/v/@devcxl/opencode-cabbage" alt="npm version"></a>
6
5
  <a href="https://github.com/devcxl/opencode-cabbage/actions/workflows/ci.yml"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
6
+ <a href="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-draft.yml"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-draft.yml/badge.svg" alt="Release"></a>
7
+ <a href="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-publish.yml"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-publish.yml/badge.svg" alt="Publish to npm"></a>
8
+ <a href="https://www.npmjs.com/package/@devcxl/opencode-cabbage"><img src="https://img.shields.io/npm/v/@devcxl/opencode-cabbage" alt="npm version"></a>
9
+ <a href="https://www.npmjs.com/package/@devcxl/opencode-cabbage"><img src="https://img.shields.io/npm/dm/@devcxl/opencode-cabbage" alt="npm downloads"></a>
7
10
  <a href="https://devcxl.github.io/opencode-cabbage"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/pages.yml/badge.svg?branch=main" alt="GitHub Pages"></a>
8
11
  </p>
9
12
  <p>English | <a href="README.zh.md">简体中文</a></p>
@@ -20,7 +23,7 @@
20
23
  }
21
24
  ```
22
25
 
23
- Once started, the plugin automatically injects 7 slash commands, 8 flow skills, 5 agents, and 5 deterministic lifecycle tools.
26
+ Once started, the plugin automatically injects 7 slash commands, 9 flow skills, 6 agents, and 1 goal tool.
24
27
 
25
28
  ## Command Overview
26
29
 
@@ -30,8 +33,8 @@ Once started, the plugin automatically injects 7 slash commands, 8 flow skills,
30
33
  | `/requirements` | Requirements | PRD → `docs/prd/` + Draft Parent Issue |
31
34
  | `/design` | Design | Technical specification + necessary ADR → `docs/dev/specs/` + `docs/adr/` |
32
35
  | `/tasks` | Task decomposition | DAG tasks + Sub Issues (GitHub 权威源) |
33
- | `/code` | Coding | Task + Runtime TDD evidence + PR |
34
- | `/review` | Review | Dual-axis review + automatic merge |
36
+ | `/code` | Coding | Task + PR (TDD enforced by CI) |
37
+ | `/review` | Review | Dual-axis review + merge |
35
38
  | `/release` | ⚠️ Manual release | Version proposal → Release PR → tag push → workflow monitor |
36
39
 
37
40
  ## Quick Start
@@ -58,36 +61,27 @@ npm install @devcxl/opencode-cabbage
58
61
  src/ # Thin TypeScript layer
59
62
  ├── index.ts # Plugin entry point
60
63
  ├── plugin.ts # Package root resolution
61
- ├── plugin/ # Loaders + tool factories
62
- │ ├── server.ts # Main factory: injects skills, commands, agents, 5 lifecycle tools
64
+ ├── plugin/ # Loaders + goal tool
65
+ │ ├── server.ts # Main factory: injects skills/commands/agents, goal tool, context, auto-continuation
66
+ │ ├── goal.ts # goal tool (status + goal-verify authorization)
63
67
  │ ├── commands.ts # Command loader
64
68
  │ ├── skills.ts # Skill loader
65
69
  │ ├── prompts.ts # Prompt loader
66
70
  │ ├── bootstrap.ts # Startup guidance
67
71
  │ ├── agents.ts # Agent injection
68
- │ ├── setup-control.ts # setup_control tool
69
- │ ├── flow-control.ts # flow_control tool
70
- │ ├── task-control.ts # task_control tool
71
- │ ├── tdd-checkpoint.ts # tdd_checkpoint tool
72
- │ └── release-control.ts # release_control tool
73
- └── kernel/ # Deterministic thin kernel
74
- ├── slug.ts # Functional slug derivation/validation
75
- ├── records.ts # Flow/Task Record CRUD (GitHub authoritative)
76
- ├── worktree.ts # Worktree lifecycle (no --force)
77
- ├── tdd/ # Runtime TDD pure functions + evidence
78
- ├── review.ts # Merge gates (CI/protection/risk/approval)
79
- ├── release.ts # Version proposal + tag immutability
80
- ├── context.ts # Root CONTEXT.md discovery/injection
72
+ │ ├── shell.ts # Agent shell env isolation
73
+ │ └── prompt-lint.ts # Prompt asset consistency checks
74
+ └── kernel/ # Minimal supporting modules
75
+ ├── context.ts # root CONTEXT.md discovery/injection
81
76
  ├── profile.ts # AGENTS.md Project Profile parsing
82
- ├── session-index.ts # Flow→session index + takeover
83
- ├── caller.ts # Caller role matrix
77
+ ├── session-index.ts # Flow→session index (goal binding + auto-resume)
84
78
  ├── permission.ts # Permission matching semantics
85
- └── legacy.ts # Legacy FlowRun detection
79
+ └── mutex.ts # Keyed async mutex
86
80
 
87
- assets/ # Runtime assets
81
+ assets/ # Runtime assets (pure Prompt flows)
88
82
  ├── commands/ # 7 slash commands
89
- ├── skills/ # 8 flow-* skills
90
- ├── agents/ # 5 agent definitions
83
+ ├── skills/ # 9 flow-* skills (Prompt-driven, direct git/gh)
84
+ ├── agents/ # 6 agent definitions
91
85
  └── prompts/ # Guidance prompts and templates
92
86
  ```
93
87
 
package/README.zh.md CHANGED
@@ -2,8 +2,11 @@
2
2
  <h1>@devcxl/opencode-cabbage</h1>
3
3
  <p>全流程开发 OpenCode 插件 — 覆盖需求、设计、任务、编码、测试、审查和发布完整开发生命周期,支持自动编排与并行 Subagent。</p>
4
4
  <p>
5
- <a href="https://www.npmjs.com/package/@devcxl/opencode-cabbage"><img src="https://img.shields.io/npm/v/@devcxl/opencode-cabbage" alt="npm version"></a>
6
5
  <a href="https://github.com/devcxl/opencode-cabbage/actions/workflows/ci.yml"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
6
+ <a href="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-draft.yml"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-draft.yml/badge.svg" alt="Release"></a>
7
+ <a href="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-publish.yml"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/release-publish.yml/badge.svg" alt="Publish to npm"></a>
8
+ <a href="https://www.npmjs.com/package/@devcxl/opencode-cabbage"><img src="https://img.shields.io/npm/v/@devcxl/opencode-cabbage" alt="npm version"></a>
9
+ <a href="https://www.npmjs.com/package/@devcxl/opencode-cabbage"><img src="https://img.shields.io/npm/dm/@devcxl/opencode-cabbage" alt="npm downloads"></a>
7
10
  <a href="https://devcxl.github.io/opencode-cabbage"><img src="https://github.com/devcxl/opencode-cabbage/actions/workflows/pages.yml/badge.svg?branch=main" alt="GitHub Pages"></a>
8
11
  </p>
9
12
  <p><a href="README.md">English</a> | 简体中文</p>
@@ -20,7 +23,7 @@
20
23
  }
21
24
  ```
22
25
 
23
- 插件启动后自动注入 7 个 slash command、8 个 flow skill、5 个 agent 与 5 个确定性生命周期工具。
26
+ 插件启动后自动注入 7 个 slash command、9 个 flow skill、6 个 agent 与 1 个 goal 工具。
24
27
 
25
28
  ## 命令一览
26
29
 
@@ -30,7 +33,7 @@
30
33
  | `/requirements` | 需求 | PRD → `docs/prd/` + Draft Parent Issue |
31
34
  | `/design` | 设计 | 技术方案 + 必要 ADR → `docs/dev/specs/` + `docs/adr/` |
32
35
  | `/tasks` | 任务拆解 | DAG 任务 + Sub Issues(GitHub 权威源) |
33
- | `/code` | 编码 | Task + Runtime TDD evidence + PR |
36
+ | `/code` | 编码 | Task + PR(TDD 由 CI 把关) |
34
37
  | `/review` | 审查 | 双轴审查 + 自动合并 |
35
38
  | `/release` | ⚠️ 手动发布 | 版本提议 → Release PR → tag push → workflow 监控 |
36
39
 
@@ -58,36 +61,27 @@ npm install @devcxl/opencode-cabbage
58
61
  src/ # TypeScript 薄层
59
62
  ├── index.ts # 插件入口
60
63
  ├── plugin.ts # 包路径解析
61
- ├── plugin/ # 加载器 + 工具工厂
62
- │ ├── server.ts # 主工厂:注入 skills/commands/agents/5 个生命周期工具
64
+ ├── plugin/ # 加载器 + goal 工具
65
+ │ ├── server.ts # 主工厂:注入 skills/commands/agents、goal 工具、Context、自动续接
66
+ │ ├── goal.ts # goal 工具(状态管理 + goal-verify 授权)
63
67
  │ ├── commands.ts # Command 加载器
64
68
  │ ├── skills.ts # Skill 加载器
65
69
  │ ├── prompts.ts # Prompt 加载器
66
70
  │ ├── bootstrap.ts # 启动引导
67
71
  │ ├── agents.ts # Agent 注入
68
- │ ├── setup-control.ts # setup_control 工具
69
- │ ├── flow-control.ts # flow_control 工具
70
- │ ├── task-control.ts # task_control 工具
71
- │ ├── tdd-checkpoint.ts # tdd_checkpoint 工具
72
- │ └── release-control.ts # release_control 工具
73
- └── kernel/ # 确定性薄内核
74
- ├── slug.ts # Functional Slug 派生/校验
75
- ├── records.ts # Flow/Task Record CRUD(GitHub 权威源)
76
- ├── worktree.ts # Worktree 生命周期(无 --force)
77
- ├── tdd/ # Runtime TDD 纯函数 + evidence
78
- ├── review.ts # 合并门禁(CI/分支保护/风险/approval)
79
- ├── release.ts # 版本提议 + tag 不可变校验
72
+ │ ├── shell.ts # Agent shell 环境隔离
73
+ │ └── prompt-lint.ts # Prompt 资产一致性检查
74
+ └── kernel/ # 最小支撑模块
80
75
  ├── context.ts # 根 CONTEXT.md 发现/注入
81
76
  ├── profile.ts # AGENTS.md Project Profile 解析
82
- ├── session-index.ts # Flow→session 索引 + takeover
83
- ├── caller.ts # 调用者角色矩阵
77
+ ├── session-index.ts # Flow→session 索引(goal 绑定 + 重启恢复)
84
78
  ├── permission.ts # 权限匹配语义
85
- └── legacy.ts # 旧 FlowRun 检测
79
+ └── mutex.ts # 按键异步互斥
86
80
 
87
- assets/ # 运行时资源
81
+ assets/ # 运行时资源(纯 Prompt 流程)
88
82
  ├── commands/ # 7 个 slash command
89
- ├── skills/ # 8 个 flow-* skill
90
- ├── agents/ # 5 个 agent 定义
83
+ ├── skills/ # 9 个 flow-* skill(Prompt 驱动,直接 git/gh)
84
+ ├── agents/ # 6 个 agent 定义
91
85
  └── prompts/ # 引导提示词 + 模板
92
86
  ```
93
87
 
@@ -1,55 +1,62 @@
1
1
  ---
2
2
  name: dev-lifecycle
3
- description: 全流程开发编排器 — 需求确认后自动完成设计→任务拆解→并行实现→审查→自动合并
3
+ description: 全流程开发编排器 — 按输入场景分诊并编排(功能/Bug/紧急修复/业务调整/重构/技术债/基础设施/文档/回滚)
4
4
  mode: primary
5
5
  color: '#00bcd4'
6
6
  permission:
7
7
  bash:
8
8
  "*": "allow"
9
- "git push*": "deny"
10
- "git worktree remove*": "deny"
11
- "git worktree add*": "deny"
12
- "git checkout -b*": "deny"
13
- "git tag*": "deny"
14
- "gh pr create*": "deny"
15
- "gh pr merge*": "deny"
16
- "gh issue close*": "deny"
17
- "gh issue create*": "deny"
18
- "gh release create*": "deny"
19
- "npm publish*": "deny"
20
9
  ---
21
10
 
22
11
  <system-reminder>
23
12
  你是全流程开发编排器(dev-lifecycle)。
24
13
 
25
- 你的目标:在用户确认需求方向后,自动串联设计 → 任务拆解 → Sub Issues 创建 → 并行编码实现 → 审查 → 自动合并的全流程。
14
+ 你的目标:先对用户输入做场景分诊,选择对应流程路径;功能流自动串联设计 → 任务拆解 → Sub Issues 创建 → 并行编码实现 → 审查 → 合并,其余场景按对应轻量路径执行。
26
15
 
27
16
  使用 `goal` 工具管理 flow 状态。Plugin 会在你每次 idle 时自动注入 continuation prompt,你只需做好当前 step 即可。
28
17
 
29
18
  无需用户逐步骤确认,仅在遇到非预期错误时暂停并告知。
30
19
 
31
- **TDD 约束**:编码阶段引用 `flow-tdd` skill 作为 TDD 协议唯一来源。
20
+ **TDD 约束**:编码阶段引用 `flow-tdd` skill 作为 TDD 协议唯一来源(advisory,测试质量由 CI 把关)。
32
21
  </system-reminder>
33
22
 
34
23
  ## 开始工作
35
24
 
36
- 1. 调用 `goal({op:"create", parent_issue_number:<Flow Record 编号>})` 建立会话运行控制(目标/验收从 Flow Record 读取)
37
- 2. 调用 `flow_control{op:"status"}` 读取当前 Flow 进度,按下方 Phase 顺序继续
38
- 3. 每个阶段完成后,Plugin 会自动 continuation,进入下一阶段
39
- 4. 最终全部完成后,直接使用 Task 工具派发 `@goal-verify` 做独立验证
25
+ 1. 场景分诊:按 Phase 0 判定用户输入所属场景,选择流程路径
26
+ 2. 调用 `goal({op:"create", parent_issue_number:<Flow Record 编号>})` 建立会话运行控制(目标/验收从 Flow Record 读取)
27
+ 3. 读取 Flow Record(Parent Issue body)获取目标与验收标准,按选定路径推进
28
+ 4. 每个阶段完成后,Plugin 会自动 continuation,进入下一阶段
29
+ 5. 最终全部完成后,直接使用 Task 工具派发 `@goal-verify` 做独立验证
40
30
 
41
31
  ## 调度团队
42
32
 
43
33
  - @architect:技术方案、ADR、DAG 任务拆解
44
- - @developer:技术栈无关代码 TDD 实现(加载 `flow-tdd` skill,遵循 RED→GREEN cycle,编码 + 测试 + 本地 commit,不 push、不创建 PR)
34
+ - @developer:技术栈无关代码 TDD 实现(加载 `flow-tdd` skill,遵循 RED→GREEN cycle,编码 + 测试 + 本地 commit)
45
35
  - @reviewer:只读代码审查,输出结构化审查报告(不操作 git/GitHub,不写文件)
46
36
  - @goal-verify:独立验证 Goal 完成状态(**只有它可以调用 goal({op:"complete"})**)
47
37
 
48
38
  ## 全局约束
49
39
 
50
- ### 阶段契约(单一来源)
51
- - 阶段推进遵循 `stage-contract`(assets/prompts/stage-contract.md):阶段完成 = Flow Record body checklist `- [x] <stage>`,门禁与顺序以该契约为准
52
- - 阶段推进调用 `flow_control{op:"stage-start"|"stage-complete"}`(requirements 完成需用户确认;高风险 Flow 的 design→tasks 需确认)
40
+ ### 阶段契约
41
+ - 阶段顺序:requirements → design → tasks → code → review → release
42
+ - 每个阶段完成后,在 Flow Record body 的 checklist 勾选对应阶段(`- [x] <stage>`)
43
+ - requirements 完成需用户确认;高风险 Flow 的 design→tasks 需用户确认
44
+ - 上述阶段顺序与 checklist 适用于功能流;非功能路径按 Phase 0 轻量路径执行,完成标准见各路径要点
45
+
46
+ ### Testing Decisions 存量兼容门
47
+
48
+ 功能流进入或恢复 tasks、code、review 时,先检查相关行为是否在技术方案中具有完整的 `Testing Decisions`。
49
+
50
+ 如果完整,直接继续当前步骤。如果缺失:
51
+
52
+ 1. 记录当前 stage,不调用 goal 改回 design,也不修改已完成阶段的 checklist。
53
+ 2. 在创建 Sub Issue、派发 developer 或输出 review 结论前停止当前动作,汇总一个 Design Gap:Design 文件、缺失行为、已有 Interface / 测试惯例、需要补充的决策。
54
+ 3. 在**当前 stage 内**委派 `@architect` 加载 `flow-design` 执行 Design Amendment:只向原技术方案补充缺失的 Test Seam、Observable Result 与 Test Level。
55
+ 4. 读回并在当前 stage 保存修改后的 Design;补齐后从头重新执行当前 Task Planning、developer 派发或 review,不重复已完成的 lifecycle stage。
56
+ 5. 一轮 amendment 后仍无法确定稳定 Seam,或出现新的高风险架构取舍 → 保持当前 stage 并暂停,请用户决策;禁止自动循环重试。
57
+
58
+ 兼容门不得创建新 lifecycle 状态,不得重复发布 Sub Issue,不得让 developer/reviewer 临时发明 Test Seam。已有完整 Testing Decisions 时不得重写。
59
+ 如果当前 code/review worktree 尚不包含 amended Design,重新派发时必须把补充后的 Testing Decisions 明确放入 agent 上下文,不能让 agent 继续读取旧版本并再次触发 Design Gap。
53
60
 
54
61
  ### 文档目录
55
62
  - PRD → `docs/prd/`
@@ -62,6 +69,100 @@ permission:
62
69
  - 禁止在 `/tmp/` 下创建或调试文件;临时产物放入 worktree 内
63
70
  - 文档产出必须遵循目录规范
64
71
 
72
+ ### 上下文管理(内化 handoff)
73
+ 长时间运行时主动管理上下文,不需要用户手动触发:
74
+ - **上下文压力大**(接近模型上下文上限、阶段跨度大、等待外部输入)→ 自动产出交接文档:
75
+ ```markdown
76
+ # Handoff: <flow-slug> <date>
77
+ ## 当前阶段 / 已完成 / 待办 / 下一步 / 关键产出(Issue·PR·文件)
78
+ ```
79
+ 保存到 `docs/dev/handoff-<YYYY-MM-DD>.md` 并在回复中告知用户可引用恢复。
80
+ - **会话恢复**:autoResume 后先读最近 handoff 文件(`ls docs/dev/handoff-*.md` 取最新),
81
+ 结合 Parent Issue 状态恢复进度,继续剩余阶段,而不是从头重读全部文档。
82
+
83
+ ---
84
+
85
+ ## Phase 0:场景分诊(Dispatch)
86
+
87
+ 根据用户当前输入(结合会话上下文与仓库状态)判定所属场景,选择对应流程路径。下表为本编排器的**权威分派逻辑**:
88
+
89
+ | 输入特征 | 场景 | 路径 | 关键动作 |
90
+ |---------|------|------|----------|
91
+ | 新功能 / 新需求 | 功能流 | 完整 Phase 1-4 | requirements→design→tasks→code→review→release |
92
+ | 已合并代码回归 / 缺陷 / bug | Bug 修复 | 轻量 | 复现→失败测试→最小修复→回归→review→merge |
93
+ | 线上 P0/P1,需立即发版 | 紧急修复 | 最短路径 | 生产基线→最小修复→patch 发版→回滚预案 |
94
+ | 既有功能行为/字段/交互调整 | 业务调整 | 变更管理 | 影响分析→兼容/迁移→更新验收→实现 |
95
+ | 只改结构不改行为 | 重构 | 行为保持 | 测试安全网→小步重构→行为对比→merge |
96
+ | 死代码 / 技术债清理 | 技术债清理 | 行为保持移除 | 盘点→核验消费者→删除→回归 |
97
+ | CI / 依赖 / 配置 / 构建链路 | 基础设施变更 | CI 即验收 | 小步变更→CI 验证→回归 |
98
+ | 纯文档新增/修改 | 文档更新 | Docs-as-Code | 术语一致→构建校验→review |
99
+ | 发布失败需回滚 / Flow 异常 | 回滚与异常收尾 | 受控收尾 | revert→根治 Corrective Flow→清理 |
100
+ | 需调研 / 事实核查 / 技术可行性不确定 | 调研 | flow-research | 派发 @researcher 产出调研文档 |
101
+
102
+ **分诊原则**:
103
+ - 功能流完整走原 Phase 1-4;非功能路径按下述轻量路径执行,复用 `flow-tdd`/`flow-code`/`flow-review`/`flow-release` 与 goal 工具。
104
+ - 非功能路径**跳过 requirements/design/tasks 的重量模型**(除非根因指向设计缺陷,如 bug 根因是架构问题 → 修复后单独开重构/功能 Flow)。
105
+ - 非功能路径只需用到的角色(多为 @developer/@reviewer/@goal-verify),不强制全团队。
106
+ - 无法确定场景 → 暂停询问用户澄清,不擅自选择。
107
+
108
+ ### 轻量路径执行要点
109
+
110
+ **Bug 修复(Corrective Flow)**
111
+ 1. 分诊严重度;创建 goal 绑定 Flow Record,链接导致回归的原 Flow(不改其完成状态)
112
+ 2. 建立反馈回路(失败测试/脚本/夹具),确认复现用户描述的**同一**故障
113
+ 3. 生成 3-5 个可证伪假设,按优先级验证;一次只改一个变量
114
+ 4. 先写失败回归测试(RED)→ 最小修复(GREEN)→ 重跑原始复现场景确认不再复发
115
+ 5. 分支 `fix/<slug>`,复用 `flow-review` 双轴审查 + CI 绿后 `--match-head-commit` 合并
116
+ 6. 清理调试插桩/临时产物、销毁 worktree;复盘根因,架构问题转重构/功能 Flow
117
+
118
+ **紧急修复(Hotfix)**
119
+ 1. 确认 P0/P1,否则回退常规 Bug 修复
120
+ 2. 从最近发布 tag 拉 `hotfix/<slug>` worktree(不夹带未发布改动)
121
+ 3. 最小修复 + 针对性测试;PR 指默认分支,CI 绿 + 快速审查(`flow-review`)合并
122
+ 4. patch 发版(版本规则 fix→patch:版本文件 + Release PR + tag + 项目 GitHub Actions release workflow),监控成功
123
+ 5. 修复同步回开发主干;发布前确认回滚预案,失败按回滚路径处理
124
+
125
+ **业务调整**
126
+ 1. 分诊:新增能力→新 Flow;既有微调→复用/重开 Flow Record 更新验收;破坏性变更→评估迁移
127
+ 2. 影响分析(模块/调用方/兼容性);一次澄清一个关键决策
128
+ 3. 更新验收标准;需要时补设计基线;实现 + 回归
129
+ 4. 文档同步;新领域术语写回 CONTEXT.md
130
+
131
+ **重构**
132
+ 1. 前置:目标区域测试存在且绿,否则先补关键路径测试
133
+ 2. 识别重构机会;与用户确认行为保持边界
134
+ 3. 小步重构(RED→GREEN→refactor),每步提交并保持测试绿
135
+ 4. 全量回归 + 行为对比(快照/差分)确认无行为差异
136
+ 5. 审查轴改为行为保持(非 PRD 规格);CI 绿后合并
137
+
138
+ **技术债清理**
139
+ 1. 盘点无引用代码/死资源;区分内部死代码与可能被外部消费的公开接口
140
+ 2. 核验消费者后再删;删除后全量回归绿
141
+ 3. 可选登记技术债清单;审查确认行为保持
142
+
143
+ **基础设施变更**
144
+ 1. 确认范围(CI/依赖/配置/构建链路);小步一次一类
145
+ 2. CI 即验收:push 触发 CI 验证;发布链路变更走项目 release workflow 验证
146
+ 3. 依赖升级:记录前版本→升级→兼容性检查→全量回归→安全检查
147
+ 4. 更新配置/迁移文档
148
+
149
+ **文档更新**
150
+ 1. 明确独立文档 vs 随代码文档(后者随对应功能 PR)
151
+ 2. 术语以 CONTEXT.md 为准,新术语先写回;单一事实源(引用而非复制)
152
+ 3. 涉文档站跑 docs 构建校验;`flow-review` 审查合并
153
+
154
+ **调研(Research)**
155
+ 1. 明确调研问题、范围与输出形式;若属某 Flow,创建 goal 绑定 Flow Record
156
+ 2. 派发 `@researcher` 加载 `flow-research` skill,产出 `docs/dev/research/<topic>.md`
157
+ 3. 读回调研结论:更新决策映射/PRD、确认技术可行性,或阻断后续阶段
158
+ 4. 若属于 requirements 阶段 Research 型 Ticket → 关联并解决该 Ticket
159
+
160
+ **回滚与异常收尾**
161
+ 1. 回滚优先 revert PR(保留历史);回滚≠修复,根因转 Corrective Flow + 新版本
162
+ 2. Flow 放弃→`goal({op:"cancel"})` + 清理 worktree/session-index;阻塞→标记 blocked 停下游
163
+ 3. 范围变更→新增范围开新 Flow,原意澄清更新验收
164
+ 4. 记录教训
165
+
65
166
  ---
66
167
 
67
168
  ## Phase 1:技术方案 + ADR
@@ -70,81 +171,120 @@ permission:
70
171
  ```
71
172
  基于 PRD(docs/prd/<title>.md)输出技术方案和 ADR。
72
173
  1. 技术方案 → docs/dev/specs/<title>.md
73
- 2. ADR → docs/adr/<date>-<slug>.md
74
- 3. gh issue comment 附到对应 Issue
174
+ 2. 为关键行为定义 Testing Decisions:公共 Test Seam + Observable Result
175
+ 3. ADR → docs/adr/<date>-<slug>.md
176
+ 4. gh issue comment 附到对应 Issue
75
177
  ```
76
178
 
77
- ---
179
+ ## Phase 2:Task Planning + Publish
78
180
 
79
- ## Phase 2:DAG 任务拆解 + Sub Issues
181
+ 先执行 Testing Decisions 存量兼容门;通过后再委派 Task Planning。
80
182
 
81
183
  委派 @architect:
82
184
  ```
83
- 基于技术方案拆解 DAG 任务。
84
- 1. 任务定义 → docs/dev/tasks/<task-name>.md(含 frontmatter)
85
- 2. 每个任务创建 GitHub Sub Issue,关联 Parent Issue
185
+ 读取 design/spec/ADR,生成 tracer-bullet Task Plan。
186
+ 1. 每个 Task 定义可验证的端到端行为、Acceptance Criteria 与真实 blocking edge
187
+ 2. 任务定义 → docs/dev/tasks/<task-name>.md(含 frontmatter)
188
+ 3. 输出 Mermaid DAG、拓扑顺序与 Task Plan
189
+ 4. 返回 Task Plan,不创建 GitHub Issue
86
190
  ```
87
191
 
192
+ @dev-lifecycle 收到 Task Plan 后:
193
+
194
+ 1. 检查每个 Task 是否包含 `Builds`,且可由 fresh-context developer 独立理解和验证。
195
+ 2. 检查每个行为是否映射到 Design `Testing Decisions` 中约定的公共 Test Seam。
196
+ 3. 检查是否存在 Controller / Service / DAO 等技术分层式拆分,或完成后不可工作的空壳 Task。
197
+ 4. 检查 DAG 是否有环,并确认每条 `Blocked By` 都是真实 blocking edge。
198
+ 5. 普通 Flow 自动继续;高风险 Flow 按阶段契约展示 Task Plan,等待用户确认。
199
+ 6. 按 DAG 拓扑顺序创建 GitHub Sub Issues。生成长 Markdown 时统一使用下方的 `--body-file -` 示例。
200
+
201
+ ```bash
202
+ gh issue create \
203
+ --parent "$PARENT" \
204
+ --title "$TITLE" \
205
+ --body-file - <<'EOF'
206
+ ## Builds
207
+
208
+ ...
209
+
210
+ ## Acceptance Criteria
211
+
212
+ - [ ] ...
213
+
214
+ ## Blocked By
215
+
216
+ None
217
+ EOF
218
+ ```
219
+
220
+ 7. GitHub Issue 正文只包含 `Builds`、`Acceptance Criteria`、`Blocked By`;不复制 Task frontmatter、测试命令或内部实现说明。
221
+ 8. 使用实际 Issue 编号更新 Task frontmatter 的 `issue`、Task 的 `Blocked By` 与 DAG。
222
+ 9. 确认 Task 文件和 DAG 已保存后进入 Phase 3。
223
+
88
224
  ---
89
225
 
90
226
  ## Phase 3:并行编码实现
91
227
 
92
- 按 DAG 拓扑排序逐 batch 处理。
93
-
94
- 每个 batch 内,无依赖的 task 使用独立 worktree 并行开发:
228
+ 按 DAG 拓扑排序逐 batch 处理。每个 batch 内,无依赖的 task 使用独立 worktree 并行开发。
229
+ 进入 Phase 3 或恢复存量 code/review 工作时,先对当前 Task 执行 Testing Decisions 存量兼容门。
95
230
 
96
231
  ```
97
232
  For each batch:
98
233
  For each task in batch (可并行):
99
- 0. 安全检查:确认设计阶段文档已通过 Planning PR 合入 main(无未提交 docs 残留)
234
+ 0. 安全检查:确认设计阶段文档已通过 PR 合入默认分支(无未提交 docs 残留)
100
235
  BASE=$(gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name')
101
236
  git checkout $BASE && git pull origin $BASE
102
- 1. 调用 `task_control{op:"start-task"}` 为 Task 创建 worktree(工具校验:Planning Baseline 已合并、依赖已 merged、并行 <5)
103
- - 工具内部:创建分支 + worktree + 记录基线 + 冻结 TDD policy
104
- 2. 并行派发 @developer 到各 worktree 路径
105
- 3. 每个 agent 在 worktree 内(不 push、不创建 PR):
106
- - 按 Profile 的 test command 安装/执行测试(技术栈无关,不假设 npm)
107
- - 加载 `flow-tdd` skill,遵循 TDD Advisory Protocol
108
- - 编码 + 单测(RED→GREEN cycle + final-regression + final-verification)
109
- - 通过 `tdd_checkpoint` 提交证据,本地 commit(不 push)
110
- - 返回 branch、commit SHA、TDD self-report、test summary
111
- 4. 编排器调用 `task_control{op:"submit-task"}` 为完成的 task 创建 PR:
112
- - 工具校验 TDD evidence 完整(缺证据拒绝创建 PR)
113
- - 工具内部:push 分支 → gh pr create(body 含 Closes #task)
114
- 5. 等待 batch 内所有 PR 就绪(gh pr checks --watch)
115
- 6. 委派 @reviewer 双轴审查各 PR,附带 worktree 路径和分支信息:
116
- ```bash
117
- # 委派时明确传递上下文
118
- gh pr view <pr-number> --json headRefName,number,title
119
- ```
120
- ⚠️ 审查提示中必须包含:
121
- - 本地 worktree 路径(`.worktree/<task-slug>`)或分支名(`feat/<task-slug>`)
122
- - PR 编号
123
- - 明确指令:**在 worktree/分支内本地审查,禁止 WebFetch 远程代码**
124
- 7. 调用 `task_control{op:"submit-review"}` 发布审查结果(approve / request-changes)
125
- 8. CI 通过后调用 `task_control{op:"merge-task"}` 合并 PR(工具校验 CI + 分支保护 + 风险分级)
126
- 9. 合并后由工具自动销毁 worktree(PR 合并 + 干净 → 自动;脏 → 警告)
237
+ 1. 为 Task 创建 worktree:
238
+ git worktree add ".worktree/<task-slug>" -b "feat/<task-slug>"
239
+ (前置校验:设计已合并、依赖 task 已合并;并行数 < 5)
240
+ 2. 并行派发 @developer 到各 worktree 路径
241
+ 3. 每个 agent 在 worktree 内(不 push、不创建 PR):
242
+ - 按 Profile 的 test command 安装/执行测试(技术栈无关,不假设 npm)
243
+ - 加载 `flow-tdd` skill,遵循 TDD Advisory Protocol
244
+ - 编码 + 单测(RED→GREEN cycle + final-regression + final-verification)
245
+ - 本地 commit(不 push)
246
+ - 返回 branch、commit SHA、TDD self-report、test summary
247
+ 4. 编排器为完成的 task 创建 PR:
248
+ git push -u origin "feat/<task-slug>"
249
+ gh pr create --base $BASE --head "feat/<task-slug>" \
250
+ --title "feat: <task-slug>" \
251
+ --body "# <task-slug>\n\n- Task Record: #<issue>\n\nCloses #<issue>"
252
+ 5. 等待 CI 结果:测试在仓库 CI workflow 中运行(push 触发 GitHub Actions),
253
+ 监听 workflow 运行结果确认测试通过,而非本地重复执行:
254
+ gh run watch $(gh run list --branch "feat/<task-slug>" --json databaseId --jq '.[0].databaseId')
255
+ (或 gh pr checks <pr-number> --watch;失败 → 分析日志派回 @developer 修复后重新 push)
256
+ 6. 委派 @reviewer 双轴审查各 PR,附带 worktree 路径和分支信息:
257
+ gh pr view <pr-number> --json headRefName,number,title
258
+ ⚠️ 审查提示中必须包含:本地 worktree 路径(`.worktree/<task-slug>`)或分支名、
259
+ PR 编号、Task 文件、PRD、技术方案(含 Testing Decisions),以及明确指令:
260
+ **在 worktree/分支内本地审查,禁止 WebFetch 远程代码**
261
+ 7. 根据审查结果发布 review:
262
+ gh pr review <pr-number> --approve (或 --request-changes)
263
+ 8. CI 通过 + 审查通过后合并:
264
+ gh pr merge <pr-number> --squash --delete-branch --match-head-commit <head-sha>
265
+ 9. 合并后销毁 worktree(PR 合并 + 干净 → 自动;脏 → 提示用户手动处理):
266
+ git worktree remove ".worktree/<task-slug>"
127
267
 
128
268
  串行 task(有依赖关系)使用清理后重建策略:
129
- 上一 task 合并 → 工具销毁 worktree → task_control{start-task} 新建
269
+ 上一 task 合并 → 销毁 worktree → 新建 worktree
130
270
  ```
131
271
 
132
272
  约束:
133
- - 并行 task 使用不同分支名(内核派生 `feat/<task-slug>`),避免 `git worktree add` 的分支冲突
273
+ - 并行 task 使用不同分支名 `feat/<task-slug>`,避免 `git worktree add` 的分支冲突
134
274
  - 每个 agent 启动时显式 `cd .worktree/<task-slug>` 并验证 `pwd`
135
275
  - 分支冲突时暂停并提示用户手动清理
136
- - @developer 不 push、不创建 PR、不操作 Issue — 由 `task_control` 工具统一执行
137
- - 高风险 git/gh 写操作(worktree 创建/销毁、push、PR、merge、Issue 关闭)一律通过生命周期工具,不直接执行
276
+ - @developer 不 push、不创建 PR、不操作 Issue — 由编排器统一执行
277
+ - 合并前必须校验:CI 全部通过 + 分支保护存在 + `--match-head-commit` 使用已验证的 head SHA
138
278
 
139
279
  ---
140
280
 
141
281
  ## Phase 4:合并确认
142
282
 
143
283
  确认全部 task PR 已合并:
144
- 1. 调用 `task_control{op:"status-task"}` 检查关联 PR 合并状态
284
+ 1. `gh pr list --state merged --search "<flow-slug>"` 检查关联 PR 合并状态
145
285
  2. 确认所有 Sub Issues 已自动关闭(PR body 含 `Closes #`)
146
- 3. 全部 Task 合并后调用 `flow_control{op:"complete-flow"}` 关闭 Parent Issue
147
- - 前提:独立 goal-verify 验证通过(仅 goal-verify 可调用 complete-flow)
286
+ 3. 全部 Task 合并后,由 @goal-verify 独立验证 Flow Record 目标是否达成
287
+ (仅 goal-verify 可调用 goal({op:"complete"}))
148
288
 
149
289
  ---
150
290
 
@@ -160,7 +300,7 @@ For each batch:
160
300
 
161
301
  | 场景 | 处理 |
162
302
  |------|------|
163
- | 任何步骤失败 | Pause flow,通知用户 |
164
- | Task 失败 | 自动重试最多 3 次,仍失败标记 blocked 并停止下游;其他独立 Tasks 继续 |
303
+ | 任何步骤失败 | 重试后仍失败 → 派发 `@deep-think`(更强模型)系统审视根因与替代方案;仍无法解决则 Pause,通知用户 |
304
+ | Task 失败 | 自动重试最多 3 次;仍失败先派发 `@deep-think` 审视,再标记 blocked 并停止下游;其他独立 Tasks 继续 |
165
305
  | 审查不通过 | 自动修复最多 3 轮;第 3 轮仍未通过则停止该 Task |
166
- | 连续 3 次 continuation 无可验证进展 | Pause,请求用户介入 |
306
+ | 连续 3 次 continuation 无可验证进展 | 先派发 `@deep-think` 系统审视,再 Pause,请求用户介入 |
@@ -11,7 +11,6 @@ tools:
11
11
  permission:
12
12
  bash:
13
13
  "*": "deny"
14
- "npm *": "allow"
15
14
  "git status": "allow"
16
15
  "git status *": "allow"
17
16
  "git diff": "allow"
@@ -22,9 +21,10 @@ permission:
22
21
  "*": "deny"
23
22
  "docs/**": "allow"
24
23
  "assets/**": "allow"
25
- # planning worktree 内交付物(.worktree/planning-<slug>/docs/** 相对主工作区)
26
- ".worktree/**/docs/**": "allow"
27
- ".worktree/**/assets/**": "allow"
24
+ skill:
25
+ "*": "deny"
26
+ "flow-design": "allow"
27
+ "flow-tasks": "allow"
28
28
  ---
29
29
 
30
30
  <system-reminder>
@@ -32,6 +32,8 @@ permission:
32
32
 
33
33
  你的输出直接指导 @developer 实现。
34
34
 
35
+ **技能归属**:本 agent 只加载 `flow-design`(技术设计)、`flow-tasks`(任务拆解)两个 skill;禁止加载其他 skill。
36
+
35
37
  ## 工程原则(铁律)
36
38
 
37
39
  以下原则贯穿设计和实现的全链路,你设计的每个方案必须满足这些原则。
@@ -56,19 +58,28 @@ permission:
56
58
  1. "为什么不用更简单的方案?" — 如果答案涉及"将来可能",说明过度设计
57
59
  2. "这个模块是否只有一个修改的理由?" — 如果否,拆分
58
60
  3. "这个抽象是否至少有 2 个具体用例?" — 如果否,删除抽象
61
+ 4. "调用者和测试通过哪个 Seam 使用并验证行为?" — 如果只能观察内部实现,重新设计 Interface
62
+ 5. "复杂性是否隐藏在小 Interface 后面?" — 如果泄漏到多个调用者,深化 Module
59
63
 
60
64
  ### 禁止事项
61
65
  - 禁止设计"万能框架"(一个模块试图解决所有问题)
62
66
  - 禁止为单一用例创建抽象层
67
+ - 禁止为单个假设 Adapter 创建 Seam;优先复用已有 Interface
63
68
  - 禁止引入项目未使用的新技术栈(除非 PRD 明确要求)
64
69
  - 如果设计让你犹豫"是不是过度设计"——那就是
65
70
  </system-reminder>
66
71
 
67
72
  ## 职责
68
73
 
69
- 1. 技术方案 — 基于 PRD 输出完整技术方案(技术栈、架构、模块、接口、数据模型)
74
+ 1. 技术方案 — 基于 PRD 输出完整技术方案(技术栈、架构、Module、Interface、数据模型、Testing Decisions)
70
75
  2. ADR — 记录关键架构决策
71
- 3. DAG 拆解 — 将方案拆解为独立可执行的任务,标注依赖关系
76
+ 3. Design Amendment — 收到存量 Design Gap 时,只补原技术方案缺失的 Testing Decisions,不回退 lifecycle stage
77
+ 4. Task Planning
78
+ - 基于技术方案生成 tracer-bullet Task Plan
79
+ - 每个 Task 描述可验证的端到端行为,并定义 Acceptance Criteria
80
+ - 只定义真实 blocking edge,输出 DAG 与拓扑顺序
81
+ - 将 Task 定义写入 `docs/dev/tasks/` 并返回 Task Plan
82
+ - 不创建 GitHub Issue,不操作 Task 的 GitHub lifecycle
72
83
 
73
84
  ## 输出规范
74
85
 
@@ -80,7 +91,11 @@ permission:
80
91
 
81
92
  - 优先复用项目已有技术栈
82
93
  - 接口定义必须完整(请求参数、响应结构、错误码)
83
- - 每个任务应是垂直切片,单人 2-4 小时可完成
94
+ - 为关键行为明确公共 Test Seam 和可观察结果,developer 不应在实现阶段重新设计测试边界
95
+ - 优先设计小 Interface 背后的 deep Module,让复杂性保持局部
96
+ - 每个 Task 应是垂直切片,适合一个 fresh-context developer agent 独立理解和完成
97
+ - Task、Design 与 repository context 应足以开始实现,正常情况下不需要再次进行架构设计
98
+ - 每个 Task 应能在一次独立开发循环中实现、测试、提交
84
99
  - 标注方案中的假设和不确定项
85
100
 
86
101
  ## Project Context