add-coder 0.2.2 → 0.2.4

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 (84) hide show
  1. package/dist/index.js +370 -155
  2. package/package.json +2 -1
  3. package/templates/adapters/claude/hooks/doc-format-guard.sh +24 -13
  4. package/templates/adapters/claude/hooks/lib/common.sh +261 -0
  5. package/templates/adapters/claude/hooks/lib/context-inject.sh +96 -0
  6. package/templates/adapters/claude/hooks/lib/preload-templates.sh +187 -0
  7. package/templates/adapters/claude/hooks/lib/session-end.sh +76 -0
  8. package/templates/adapters/claude/hooks/lib/state-detect.sh +117 -0
  9. package/templates/adapters/claude/hooks/lib/subagent-stop.sh +90 -0
  10. package/templates/adapters/claude/hooks/lib/vocabulary.sh +56 -0
  11. package/templates/adapters/claude/hooks/notification.sh +8 -1
  12. package/templates/adapters/codex/hooks/doc-format-guard.sh +238 -0
  13. package/templates/adapters/codex/hooks/lib/common.sh +261 -0
  14. package/templates/adapters/codex/hooks/lib/context-inject.sh +96 -0
  15. package/templates/adapters/codex/hooks/lib/preload-templates.sh +187 -0
  16. package/templates/adapters/codex/hooks/lib/session-end.sh +76 -0
  17. package/templates/adapters/codex/hooks/lib/state-detect.sh +6 -0
  18. package/templates/adapters/codex/hooks/lib/subagent-stop.sh +90 -0
  19. package/templates/adapters/codex/hooks/lib/vocabulary.sh +56 -0
  20. package/templates/adapters/codex/hooks/notification.sh +8 -1
  21. package/templates/adapters/codex/hooks/permission-gate.sh +18 -0
  22. package/templates/adapters/codex/hooks/post-tool-failure.sh +10 -0
  23. package/templates/adapters/codex/hooks/pre-compact.sh +37 -0
  24. package/templates/adapters/codex/hooks/pre-tool-use.sh +112 -59
  25. package/templates/adapters/codex/hooks/prompt-submit.sh +32 -35
  26. package/templates/adapters/codex/hooks/review-checklist.sh +10 -0
  27. package/templates/adapters/codex/hooks/session-end.sh +38 -0
  28. package/templates/adapters/codex/hooks/subagent-guard.sh +15 -0
  29. package/templates/adapters/codex/hooks/subagent-stop.sh +47 -0
  30. package/templates/adapters/qoder/hooks/doc-format-guard.sh +84 -15
  31. package/templates/adapters/qoder/hooks/lib/common.sh +261 -0
  32. package/templates/adapters/qoder/hooks/lib/preload-templates.sh +187 -0
  33. package/templates/adapters/qoder/hooks/lib/session-end.sh +76 -0
  34. package/templates/adapters/qoder/hooks/lib/state-detect.sh +17 -4
  35. package/templates/adapters/qoder/hooks/lib/subagent-stop.sh +90 -0
  36. package/templates/adapters/qoder/hooks/lib/vocabulary.sh +8 -1
  37. package/templates/adapters/qoder/hooks/pre-compact.sh +1 -1
  38. package/templates/adapters/trae/hooks/doc-format-guard.sh +238 -0
  39. package/templates/adapters/trae/hooks/lib/common.sh +261 -0
  40. package/templates/adapters/trae/hooks/lib/context-inject.sh +96 -0
  41. package/templates/adapters/trae/hooks/lib/preload-templates.sh +187 -0
  42. package/templates/adapters/trae/hooks/lib/session-end.sh +76 -0
  43. package/templates/adapters/trae/hooks/lib/state-detect.sh +6 -0
  44. package/templates/adapters/trae/hooks/lib/subagent-stop.sh +90 -0
  45. package/templates/adapters/trae/hooks/lib/vocabulary.sh +56 -0
  46. package/templates/adapters/trae/hooks/notification.sh +8 -1
  47. package/templates/adapters/trae/hooks/permission-gate.sh +18 -0
  48. package/templates/adapters/trae/hooks/pre-compact.sh +1 -1
  49. package/templates/adapters/trae/hooks/pre-tool-use.sh +112 -59
  50. package/templates/adapters/trae/hooks/prompt-submit.sh +32 -35
  51. package/templates/adapters/trae/hooks/review-checklist.sh +10 -0
  52. package/templates/adapters/trae/hooks/session-end.sh +31 -14
  53. package/templates/adapters/trae/hooks/subagent-guard.sh +8 -29
  54. package/templates/adapters/trae/hooks/subagent-stop.sh +40 -13
  55. package/templates/adapters/vscode/hooks/doc-format-guard.sh +183 -0
  56. package/templates/adapters/vscode/hooks/lib/common.sh +261 -0
  57. package/templates/adapters/vscode/hooks/lib/context-inject.sh +96 -0
  58. package/templates/adapters/vscode/hooks/lib/preload-templates.sh +187 -0
  59. package/templates/adapters/vscode/hooks/lib/session-end.sh +76 -0
  60. package/templates/adapters/vscode/hooks/lib/state-detect.sh +117 -0
  61. package/templates/adapters/vscode/hooks/lib/subagent-stop.sh +90 -0
  62. package/templates/adapters/vscode/hooks/lib/vocabulary.sh +56 -0
  63. package/templates/adapters/vscode/hooks/notification.sh +18 -10
  64. package/templates/adapters/vscode/hooks/permission-gate.sh +18 -0
  65. package/templates/adapters/vscode/hooks/review-checklist.sh +10 -0
  66. package/templates/core/hooks/doc-format-guard.sh +85 -16
  67. package/templates/core/hooks/lib/state-detect.sh +17 -4
  68. package/templates/core/hooks/lib/vocabulary.sh +8 -1
  69. package/templates/core/hooks/notification.sh +8 -1
  70. package/templates/core/hooks/pre-compact.sh +1 -1
  71. package/templates/core/hooks/pre-tool-use.sh +1 -1
  72. package/templates/core/rules/project_rules.md +42 -6
  73. package/templates/core/skills/add-paradigm/SKILL.md +34 -14
  74. package/templates/core/templates/prd-incremental-template.md +6 -1
  75. package/templates/core/templates/prd-standard-template.md +8 -3
  76. package/templates/core/templates/review-implementation-template.md +14 -0
  77. package/templates/core/templates/review-implementation-template.schema.json +6 -0
  78. package/templates/core/templates/review-template.md +15 -0
  79. package/templates/core/templates/review-template.schema.json +6 -0
  80. package/templates/core/templates/simple-plan-template.md +30 -3
  81. package/templates/core/templates/simple-plan-template.schema.json +6 -0
  82. package/templates/core/templates/standard-plan-template.md +18 -0
  83. package/templates/core/templates/standard-plan-template.schema.json +6 -0
  84. package/templates/core/vocabulary/add-governance-vocabulary.md +1 -1
@@ -4,20 +4,31 @@ set -euo pipefail
4
4
 
5
5
  input=$(cat)
6
6
 
7
+ # 动态探测 MAGIC_DIR(兼容多 adapter)
8
+ HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
9
+ PARENT_DIR="$(dirname "$HOOK_DIR")"
10
+ MAGIC_DIR="$(basename "$PARENT_DIR")"
11
+
7
12
  # DEBUG: dump stdin for investigation
8
- mkdir -p .qoder/debug-dump
9
- echo "=== $(date) ===" >> .qoder/debug-dump/stdin.log
10
- echo "file_path: $(echo "$input" | jq -r '.tool_input.file_path // "EMPTY"')" >> .qoder/debug-dump/stdin.log
11
- echo "has_file_content: $(echo "$input" | jq 'has("tool_input") and (.tool_input | has("file_content"))')" >> .qoder/debug-dump/stdin.log
12
- echo "has_replacements: $(echo "$input" | jq 'has("tool_input") and (.tool_input | has("replacements"))')" >> .qoder/debug-dump/stdin.log
13
- echo "top_keys: $(echo "$input" | jq -r 'keys | join(", ")')" >> .qoder/debug-dump/stdin.log
14
- echo "tool_input_keys: $(echo "$input" | jq -r '.tool_input | keys | join(", ") // "NO_TOOL_INPUT"')" >> .qoder/debug-dump/stdin.log
15
- echo "=== DONE ===" >> .qoder/debug-dump/stdin.log
13
+ mkdir -p "$MAGIC_DIR/debug-dump"
14
+ echo "=== $(date) ===" >> "$MAGIC_DIR/debug-dump/stdin.log"
15
+ echo "file_path: $(echo "$input" | jq -r '.tool_input.file_path // "EMPTY"')" >> "$MAGIC_DIR/debug-dump/stdin.log"
16
+ echo "has_file_content: $(echo "$input" | jq 'has("tool_input") and (.tool_input | has("file_content"))')" >> "$MAGIC_DIR/debug-dump/stdin.log"
17
+ echo "has_replacements: $(echo "$input" | jq 'has("tool_input") and (.tool_input | has("replacements"))')" >> "$MAGIC_DIR/debug-dump/stdin.log"
18
+ if echo "$input" | jq -e 'has("tool_input") and (.tool_input | has("file_content"))' > /dev/null 2>&1; then
19
+ echo "[file_content[500]]: $(echo "$input" | jq -r '.tool_input.file_content' | head -c 500)" >> "$MAGIC_DIR/debug-dump/stdin.log"
20
+ fi
21
+ if echo "$input" | jq -e 'has("tool_input") and (.tool_input | has("replacements"))' > /dev/null 2>&1; then
22
+ echo "[replacement_new_text[500]]: $(echo "$input" | jq -r '.tool_input.replacements[0].new_text' | head -c 500)" >> "$MAGIC_DIR/debug-dump/stdin.log"
23
+ fi
24
+ echo "top_keys: $(echo "$input" | jq -r 'keys | join(", ")')" >> "$MAGIC_DIR/debug-dump/stdin.log"
25
+ echo "tool_input_keys: $(echo "$input" | jq -r '.tool_input | keys | join(", ") // "NO_TOOL_INPUT"')" >> "$MAGIC_DIR/debug-dump/stdin.log"
26
+ echo "=== DONE ===" >> "$MAGIC_DIR/debug-dump/stdin.log"
16
27
  file_path=$(echo "$input" | jq -r '.tool_input.file_path // empty')
17
28
  # L17: 非文件工具事件(空 stdin)→ 不拦截(由 matcher 层过滤)
18
29
  [ -z "$file_path" ] && exit 0
19
30
 
20
- if ! echo "$file_path" | grep -qE '\.qoder/(plans|specs)/'; then
31
+ if ! echo "$file_path" | grep -qE '$MAGIC_DIR/(plans|specs)/'; then
21
32
  exit 0
22
33
  fi
23
34
 
@@ -34,8 +45,8 @@ if [ -z "$CONTENT" ]; then
34
45
  exit 2
35
46
  fi
36
47
 
37
- PROJECT_DIR="${QODER_PROJECT_DIR:-${QODERCN_PROJECT_DIR:-$PWD}}"
38
- TEMPLATES_DIR="$PROJECT_DIR/.qoder/templates"
48
+ PROJECT_DIR="$PWD"
49
+ TEMPLATES_DIR="$PROJECT_DIR/$MAGIC_DIR/templates"
39
50
 
40
51
  # 通过 filename 匹配模板名
41
52
  TEMPLATE_NAME=""
@@ -49,10 +60,12 @@ done
49
60
 
50
61
  # 退一步:根据文件内容特征猜测模板类型
51
62
  if [ -z "$TEMPLATE_NAME" ]; then
52
- if echo "$CONTENT" | grep -q "## 四、Handoff"; then
53
- TEMPLATE_NAME="simple-standard-plan-template.md"
54
- elif echo "$CONTENT" | grep -q "## PLAN 元信息"; then
63
+ if echo "$CONTENT" | grep -q "## PLAN 元信息"; then
55
64
  TEMPLATE_NAME="standard-plan-template.md"
65
+ elif echo "$CONTENT" | grep -q "## 一、Plan 概述"; then
66
+ TEMPLATE_NAME="simple-plan-template.md"
67
+ elif echo "$CONTENT" | grep -q "## 四、Handoff"; then
68
+ TEMPLATE_NAME="simple-plan-template.md"
56
69
  elif echo "$CONTENT" | grep -q "## Review 元信息"; then
57
70
  if echo "$CONTENT" | grep -q "运行时验证"; then
58
71
  TEMPLATE_NAME="review-runtime-template.md"
@@ -119,7 +132,7 @@ ISSUES=""
119
132
 
120
133
  # ── 章节校验 ──
121
134
  # 使用项目目录下的临时文件,避免 /tmp 在沙箱中不可写导致静默跳过
122
- TMPFILE="$PROJECT_DIR/.qoder/.doc-guard-issues.tmp"
135
+ TMPFILE="$PROJECT_DIR/$MAGIC_DIR/.doc-guard-issues.tmp"
123
136
  : > "$TMPFILE"
124
137
  trap "rm -f $TMPFILE" EXIT
125
138
  # SearchReplace 只传 patch → 跳过章节/子章节校验(无法从 patch 推断完整文档结构)
@@ -154,6 +167,62 @@ done >> "$TMPFILE"
154
167
 
155
168
  ISSUES=$(cat "$TMPFILE" 2>/dev/null)
156
169
 
170
+ # ── 算法化规则校验(ADD 范式约束下沉为代码)──
171
+ ALGO_ISSUES=""
172
+
173
+ # 规则1: 精简版 Plan 反作弊
174
+ if echo "$TEMPLATE_NAME" | grep -q 'simple-plan'; then
175
+ # 1a. 文件数 ≤ 3
176
+ file_count=$(echo "$CONTENT" | grep -cP '^\|\s*`[^`]+`' 2>/dev/null || echo "0")
177
+ if [ "$file_count" -gt 3 ] 2>/dev/null; then
178
+ ALGO_ISSUES="${ALGO_ISSUES} ❌ 精简版反作弊: 涉及 ${file_count} 个文件(超过 3 个限制),应改用 standard-plan-template.md\n"
179
+ fi
180
+ # 1b. HITL 表不能写 "等 N 个文件"
181
+ if echo "$CONTENT" | grep -qP '等\s*\d*\s*个文件|等\s*若干'; then
182
+ ALGO_ISSUES="${ALGO_ISSUES} ❌ 精简版反作弊: HITL 表文件清单使用模糊描述('等 N 个文件'),必须列出实际完整路径\n"
183
+ fi
184
+ # 1c. HITL 方案/设计决策不能写 "等若干决策"
185
+ if echo "$CONTENT" | grep -qP '等\s*若干\s*(决策|方案|设计)'; then
186
+ ALGO_ISSUES="${ALGO_ISSUES} ❌ 精简版反作弊: HITL 表方案/设计决策使用模糊描述('等若干决策'),必须逐条列出\n"
187
+ fi
188
+ # 1d. 不能包含架构设计章节(精简版无架构设计)
189
+ if echo "$CONTENT" | grep -q '## 三、架构设计'; then
190
+ ALGO_ISSUES="${ALGO_ISSUES} ❌ 精简版反作弊: 包含 '## 三、架构设计' 章节,精简版不应有架构设计——应改用 standard-plan-template.md\n"
191
+ fi
192
+ fi
193
+
194
+ # 规则2: HITL 表非空校验(所有 Plan + Review 模板)
195
+ if echo "$TEMPLATE_NAME" | grep -qE 'plan|review'; then
196
+ if echo "$CONTENT" | grep -q '## HITL'; then
197
+ # HITL 表至少要有 1 行非占位符内容(不包含 { } 占位符)
198
+ hitl_rows=$(echo "$CONTENT" | sed -n '/## HITL/,/^## /p' | grep -cP '^\|\s*[^|{]*\s*\|' 2>/dev/null || echo "0")
199
+ # rows 包含表头行和分隔行,实际数据行 = rows - 2
200
+ hitl_data=$((hitl_rows - 2))
201
+ if [ "$hitl_data" -lt 1 ] 2>/dev/null; then
202
+ ALGO_ISSUES="${ALGO_ISSUES} ⚠️ HITL 表为空——必须填写至少 1 行实际内容后再提交审核\n"
203
+ fi
204
+ fi
205
+ fi
206
+
207
+ # 规则3: 精简版 Plan 禁止同时存在独立 handoff 文件
208
+ if echo "$TEMPLATE_NAME" | grep -q 'simple-plan'; then
209
+ plan_base=$(basename "$file_path" | sed 's/-plan-v.*//')
210
+ plan_dir=$(dirname "$file_path")
211
+ handoff_pattern="${plan_dir}/${plan_base}-handoff"
212
+ if find "$plan_dir" -name "${plan_base}-handoff*.md" 2>/dev/null | grep -q .; then
213
+ ALGO_ISSUES="${ALGO_ISSUES} ❌ 精简版 Handoff 冲突: 检测到独立 handoff 文件(${plan_base}-handoff*.md)。精简版 Plan 的 Handoff 已融合在 §四,不应生成独立文件。请删除独立 handoff 文件或改用 standard-plan-template.md\n"
214
+ fi
215
+ fi
216
+
217
+ if [ -n "$ALGO_ISSUES" ]; then
218
+ echo "⛔ 算法化规则校验不通过:" >&2
219
+ echo -e "$ALGO_ISSUES" >&2
220
+ # 合并到 ISSUES 中一起阻断
221
+ echo -e "$ALGO_ISSUES" >> "$TMPFILE"
222
+ fi
223
+
224
+ ISSUES=$(cat "$TMPFILE" 2>/dev/null)
225
+
157
226
  # ── 阻断或放行 ──
158
227
  if [ -n "$ISSUES" ]; then
159
228
  echo "⛔ $TEMPLATE_NAME 校验不通过:
@@ -163,7 +232,7 @@ $ISSUES" >&2
163
232
  fi
164
233
 
165
234
  # ── 自动更新 index.md ──
166
- if echo "$file_path" | grep -q '\.qoder/plans/'; then
235
+ if echo "$file_path" | grep -q '$MAGIC_DIR/plans/'; then
167
236
  if [ -x "$PROJECT_DIR/scripts/gen-plan-index.sh" ]; then
168
237
  "$PROJECT_DIR/scripts/gen-plan-index.sh" 2>/dev/null || true
169
238
  fi
@@ -2,12 +2,25 @@
2
2
  # state-detect.sh — ADD 活跃流程检测 + dev action 追踪
3
3
  # 共享库
4
4
 
5
- PROJECT_DIR="${QODER_PROJECT_DIR:-${QODERCN_PROJECT_DIR:-$PWD}}"
6
- QODER_DIR="$PROJECT_DIR/.qoder"
7
- PLANS_DIR="$QODER_DIR/plans"
5
+ PROJECT_DIR="$PWD"
6
+
7
+ # 动态探测 MAGIC_DIR(兼容多 adapter,source 自 hook 脚本时继承调用者的 HOOK_DIR)
8
+ if [ -z "${MAGIC_DIR:-}" ]; then
9
+ if [ -n "${HOOK_DIR:-}" ]; then
10
+ MAGIC_DIR="$(basename "$(dirname "$HOOK_DIR")")"
11
+ else
12
+ for m in ".claude" ".qoder" ".vscode" ".add"; do
13
+ [ -d "$PROJECT_DIR/$m" ] && { MAGIC_DIR="$m"; break; }
14
+ done
15
+ MAGIC_DIR="${MAGIC_DIR:-.add}"
16
+ fi
17
+ fi
18
+
19
+ MAGIC_PATH="$PROJECT_DIR/$MAGIC_DIR"
20
+ PLANS_DIR="$MAGIC_PATH/plans"
8
21
 
9
22
  # dev action 标记文件(项目级,PreToolUse 写入,Stop 读取)
10
- DEV_FLAG="/tmp/qoder_dev_$(echo "$PROJECT_DIR" | md5sum 2>/dev/null | cut -c1-8 || echo "default")"
23
+ DEV_FLAG="/tmp/add_dev_$(echo "$PROJECT_DIR" | md5sum 2>/dev/null | cut -c1-8 || echo "default")"
11
24
 
12
25
  # 检测活跃 ADD 流程
13
26
  # 返回: "plan_keyword::step_x/total::round_n/total_r::handoff_path::add_route_path" 或 ""
@@ -2,7 +2,14 @@
2
2
  # vocabulary.sh — 从 vocabulary markdown 表格加载触发词
3
3
  # 单一数据源: .qoder/vocabulary/add-governance-vocabulary.md §类别 A-F 表格
4
4
 
5
- VOCABULARY_FILE="$PWD/.qoder/vocabulary/add-governance-vocabulary.md"
5
+ # 动态探测 MAGIC_DIR
6
+ if [ -z "${MAGIC_DIR:-}" ]; then
7
+ for m in ".claude" ".qoder" ".vscode" ".add"; do
8
+ [ -d "${PROJECT_DIR:-$PWD}/$m" ] && { MAGIC_DIR="$m"; break; }
9
+ done
10
+ MAGIC_DIR="${MAGIC_DIR:-.add}"
11
+ fi
12
+ VOCABULARY_FILE="${PROJECT_DIR:-$PWD}/$MAGIC_DIR/vocabulary/add-governance-vocabulary.md"
6
13
 
7
14
  # 输出格式: 优先级::触发词正则::响应文本(:: 避免与触发词内的 | 冲突)
8
15
  load_triggers() {
@@ -22,7 +22,14 @@ state=$(detect_active_add 2>/dev/null || true)
22
22
 
23
23
  IFS='::' read -r plan _ _ _ _ <<< "$state"
24
24
 
25
- reviews_dir="${PROJECT_DIR}/.qoder/reviews"
25
+ # 动态探测
26
+ if [ -z "${MAGIC_DIR:-}" ]; then
27
+ for m in ".claude" ".qoder" ".vscode" ".add"; do
28
+ [ -d "${PROJECT_DIR:-$PWD}/$m" ] && { MAGIC_DIR="$m"; break; }
29
+ done
30
+ MAGIC_DIR="${MAGIC_DIR:-.add}"
31
+ fi
32
+ reviews_dir="${PROJECT_DIR}/$MAGIC_DIR/reviews"
26
33
  if ls "$reviews_dir"/*.md >/dev/null 2>&1; then
27
34
  echo "[ADD Notification] Plan: ${plan} — 请检查 Review 文档: ${reviews_dir}"
28
35
  fi
@@ -8,7 +8,7 @@ export CURRENT_MAGIC=$(basename "$(dirname "$HOOK_DIR")")
8
8
  COMMON_LIB="$HOOK_DIR/lib/common.sh"
9
9
  [ -f "$COMMON_LIB" ] && source "$COMMON_LIB"
10
10
 
11
- export PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$PWD}"
11
+ export PROJECT_DIR="$PWD"
12
12
 
13
13
  # ── ① 获取 ADD 状态并保存到标记文件 ──
14
14
  if type detect_active_add >/dev/null 2>&1; then
@@ -11,7 +11,7 @@ input=$(cat)
11
11
  HOOK_DIR="$(cd "$(dirname "$0")" && pwd)"
12
12
  PARENT="$(dirname "$HOOK_DIR")"
13
13
  MAGIC_DIR="$(basename "$PARENT")"
14
- PROJECT_DIR="${CLAUDE_PROJECT_DIR:-${QODER_PROJECT_DIR:-${QODERCN_PROJECT_DIR:-$(dirname "$PARENT")}}}"
14
+ PROJECT_DIR="$PWD"
15
15
 
16
16
  # ── §A 辅助函数: 阻断日志 ──
17
17
  _log_block() {
@@ -26,6 +26,7 @@
26
26
  | P2 | ADD-13 DPS 上游文档质量闸门 | Plan 概括度 → Review 注意力稀释 → Specs 遗漏 → 实现偏差。`check_dps`(DPS ≥ 85)在 Step 0 末尾量化阻断 | ✅ 已实现 | 2026-06-11 引入 |
27
27
  | P2 | ADD-14 RAHS 下游执行健康度闸门 | 范围保真度 + 类型安全 + 审计完整度 + Spec 合规 + 阶段对称性。`check_rahs`(RAHS ≥ 90)在 Step 4/8 量化阻断 | ✅ 已实现 | 2026-06-11 引入 |
28
28
  | P2 | ADD-15 add-route 闭环自检 | Step 3 代码完成后必须调用 `check_add_route_completeness` 扫描 add-route Step 完成度,防止执行遗漏。返回 complete 方可进入 Step 3.5 | ✅ 已实现 | 2026-06-11 引入 |
29
+ | P2 | ADD-17 HITL 磋商临时文件机制 | doc-format-guard 要求 Plan/Review 文件包含完整章节才放行,HITL 第一步只写总览表会被 guard 阻断。用 `{name}.temporary.md` 做磋商(不受 guard 检查),人类拍板后再写正式文件并删除 temporary.md | ✅ 已实现 | 2026-07-23 引入 |
29
30
 
30
31
 
31
32
  ### P0 规则:不可跳过
@@ -66,6 +67,7 @@ AI 助手必须先恢复到基线、找到对应的 SKILL 文件并按步骤执
66
67
  | ADD-14 | `add-paradigm` Step 4 末端 + Step 8 收敛 + MCP `check_rahs` | Step 4 合规检查 / Step 8 收敛判定 |
67
68
  | ADD-15 | `add-paradigm` Step 3.6 + MCP `check_add_route_completeness` | Step 3 代码完成后自检 |
68
69
  | ADD-16 | `add-paradigm` Step 9 | runtime-fix plan 收敛后,关闭 gateway.md 运行时发现 |
70
+ | ADD-17 | `add-paradigm` 独立能力:生成 Plan / Step 0 | Plan/Review HITL 磋商时(写入 temporary.md 绕过 guard,拍板后写正式文件) |
69
71
 
70
72
  ---
71
73
 
@@ -148,22 +150,28 @@ ADD 是**开发阶段**的编程范式,不是运行时范式。
148
150
  | 架构文档 | `docs/*/knowledge/01-架构/` 或 `02-架构/` | 架构说明书、系统设计、模块定义 |
149
151
  | 规范文档 | `docs/*/knowledge/02-规范/` 或 `03-规范/` | 开发规范、AI 核心规范、状态机规范 |
150
152
 
151
- **此外,ADD 工作流的核心产物由 `{{magicDir}}/templates/` 下的 11 个模板定义**,这些模板不是参考资料,而是每次变更必须产出的文档骨架。分析变更影响范围时,必须同步确认需要创建/更新哪些模板产物:
153
+ **此外,ADD 工作流的核心产物由 `{{magicDir}}/templates/` 下的 13 个模板定义**,这些模板不是参考资料,而是每次变更必须产出的文档骨架。分析变更影响范围时,必须同步确认需要创建/更新哪些模板产物:
152
154
 
153
155
  | 模板 | 用途 | 对应阶段 |
154
- |------|------|---------|
155
- | `plan-template.md` | 需求方案:元信息 + 背景目标 + 方案选型 + 架构设计 + 实施步骤 + 验收标准 + ADD-7审计策略 | 需求理解 |
156
+ |------|------|------|
157
+ | `simple-plan-template.md` | 精简版 Plan:≤3 文件单一改动,Tasks+Handoff 融合在 Plan 体内,无需独立 spec/handoff | 简单任务 |
158
+ | `standard-plan-template.md` | 标准版 Plan:多模块/跨系统/含架构设计,需独立 spec/tasks/checklist/handoff | 复杂任务 |
156
159
  | `spec-template.md` | 功能规格:Why / What Changes / Impact / WHEN-THEN Requirements | Step 0~1 |
157
160
  | `tasks-template.md` | 任务拆分:Phase → Task → SubTask 层级 | Step 1 |
158
161
  | `checklist-template.md` | 验收清单:业务检查项 + ADD 规则合规检查 + 跨项目联调检查 [T]/[R] | Step 3.5 / Step 8 |
159
- | `review-template.md` | 方案审查(ADD-9):元信息 + 问题复现 + 方案对比 + 决策结论 + 影响评估 | Plan 后 |
160
- | `review-implementation-template.md` | 实现审查(ADD-10):格式契约 + 框架版本 + 数据模型 + 环境变量 + API 选择 + E2E curl | Code 后 |
162
+ | `review-template.md` | 方案审查(ADD-9):元信息 + **HITL 发现总览** + 问题复现 + 方案对比 + 决策结论 + 影响评估 | Plan 后 |
163
+ | `review-implementation-template.md` | 实现审查(ADD-10):元信息 + **HITL 发现总览** + 格式契约 + 框架版本 + 数据模型 + 环境变量 + API 选择 + E2E curl | Code 后 |
161
164
  | `review-runtime-template.md` | 运行时纠偏(ADD-11):发现列表 + 根因分析 + 流程改进项 + 回流确认 | Deploy 后 |
162
165
  | `handoff-template.md` | 交接总览索引(指向单轮/多轮) | Step 8 后 |
163
166
  | `handoff-single-round-template.md` | 单轮交接:9 章节(含恢复上下文审计查询) | 单轮变更完成后 |
164
167
  | `handoff-multi-round-template.md` | 多轮交接:全局拓扑 + 每轮 13 子章节 + 收敛规则 + 启动模板 | 多轮原子事务完成后 |
165
168
 
166
- > **AI 首次学习 ADD 范式时,必须读取上述全部 11 个模板文件。遗漏模板 = 遗漏范式全貌。**
169
+ > **AI 首次学习 ADD 范式时,必须读取上述全部 13 个模板文件。遗漏模板 = 遗漏范式全貌。**
170
+ >
171
+ > **精简版 Plan 特殊规则**:
172
+ > - **Handoff 融合**:使用 `simple-plan-template.md` 时,Handoff 信息直接嵌入 Plan 的 §四,**不产生**独立的 `-handoff-v1.md` 文件
173
+ > - **反作弊**:以下三条不满足任一条,必须改用 `standard-plan-template.md`:① 涉及文件 ≤ 3 个且全部在本模块内;② 无新增模块/子系统/外部依赖;③ 无需独立 spec 文档
174
+ > - **HITL 强制**:精简版 Plan 的 HITL 表必须列出实际完整文件路径(禁止"等 N 个文件")和所有设计决策(禁止"等若干决策")
167
175
  ### 审计要求
168
176
 
169
177
  每次文档变更必须记录到 AuditLog(通过 `record_dev_operation` 工具),`targetType` 为 `"DOC"`,`action` 为 `"DOC_UPDATED"` 或 `"DOC_CREATED"`,`targetId` 为文档文件路径。
@@ -753,6 +761,34 @@ ADD-0.1 要求"文档先行"(先改文档再改代码)。ADD-16 是对 ADD-0
753
761
 
754
762
  ---
755
763
 
764
+ ## ADD-17:HITL 磋商临时文件机制
765
+
766
+ **Plan 和 Review 的 HITL 磋商必须在写入正式文件之前完成,但 doc-format-guard 要求 `.qoder/plans/` 和 `.qoder/reviews/` 下的文件包含完整章节才放行。HITL 第一步只写总览表、不写正文——会被 guard 阻断。**
767
+
768
+ ### 流程
769
+
770
+ ```
771
+ ① AI 写 {name}.temporary.md(只含 HITL 总览表,放项目根目录,不受 guard 检查)
772
+ ② 人类审阅 HITL 表 → 逐行拍板(同意/调整)
773
+ ③ AI 根据确认后的 HITL 表生成完整 Plan/Review → 写入正式路径(guard 放行)
774
+ ④ 删除 temporary.md
775
+ ```
776
+
777
+ ### 适用范围
778
+
779
+ | 文档类型 | temporary 磋商 | 正式写入路径 |
780
+ |---------|:---:|------|
781
+ | Plan(标准版/精简版) | ✅ 需要 | `.qoder/plans/{YYYY-MM}/{DD}/` |
782
+ | Review(方案/实现) | ✅ 需要 | `.qoder/reviews/` |
783
+ | Spec / Tasks / Checklist | ❌ 不需要 | 直接写入 `.qoder/specs/` |
784
+ | Handoff | ❌ 不需要 | 直接写入 `.qoder/plans/` |
785
+
786
+ ### 与 ADD-0.1 的关系
787
+
788
+ ADD-0.1 要求"文档先行"——HITL 磋商本身就是文档先行的一种形式(先对齐方向再产出文档)。temporary.md 机制确保 HITL 的"先拍板再展开"哲学不因 guard 的"完整章节校验"而被破坏。
789
+
790
+ ---
791
+
756
792
  ---
757
793
 
758
794
  ## 项目技术约束
@@ -46,18 +46,32 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
46
46
  >
47
47
  > **Plan 是后续 ADD 工作流的输入。** 生成 plan 后如需执行,才启动下方 Step 0。
48
48
 
49
- 1. **读取模板**:读 `plan-template.md`,禁止凭记忆
50
- 2. **命名规范**:`{项目名}-{功能名}-plan-v1.md` `{{magicDir}}/plans/{YYYY-MM}/{DD}/`(按当天日期创建子目录)
51
- 3. **必含章节**:
52
- - 元信息(名称/时间/关联文档/ADD-7审计策略表)
49
+ 1. **模板选择**:根据任务复杂度选模板
50
+ - **精简版** `simple-plan-template.md`:≤3 文件、无新模块/架构、无外部 API 契约变更。Tasks 合并在 Plan 体内,无需独立 spec 文件。
51
+ - **标准版** `standard-plan-template.md`:多模块、跨系统集成、含架构选型或数据模型设计。
52
+ 2. **读取模板**:读选定的模板文件,禁止凭记忆
53
+ 3. **命名规范**:`{项目名}-{功能名}-plan-v1.md` → `{{magicDir}}/plans/{YYYY-MM}/{DD}/`(按当天日期创建子目录)
54
+ 4. **HITL 总览(先写 temporary.md)**:doc-format-guard 要求写入 `.qoder/plans/` 的文件必须包含完整章节,但 HITL 第一步只写总览表不写正文。因此先在项目根目录写 `{plan-name}.temporary.md`(只含 HITL 表,不受 guard 检查),人类拍板后再写正式 Plan 文件并删除 temporary.md。
55
+ 5. **HITL 确认后展开**:人类拍板后,再填写以下正文章节。
56
+ 6. **必含章节(标准版)**:
57
+ - PLAN 元信息(名称/时间/关联文档/ADD-7审计策略表)
58
+ - HITL 计划总览(人类拍板入口)
53
59
  - 一、背景与目标
54
60
  - 二、方案选型
55
61
  - 三、架构设计
56
- - 四、实施步骤 + 依赖图
62
+ - 四、实施 Task + 依赖图
57
63
  - 五、验收标准
58
- - 六、关联文档(指向 review/handoff/spec 的占位链接)
59
- 4. **文档链路**:plan 作为枢纽节点,必须包含与后续 review/handoff 的双向链接占位
60
- 5. **记录审计**:plan 生成后调用 `record_dev_operation`(targetType: "PLAN")
64
+ - 六、关联文档
65
+ 6. **必含章节(精简版)**:
66
+ - HITL 计划总览(人类拍板入口)
67
+ - 一、Plan 概述
68
+ - 二、变更范围
69
+ - 三、Tasks(合并在 Plan 中)
70
+ - 四、Handoff
71
+ - 五、验收标准
72
+ - 六、关联
73
+ 7. **文档链路**:plan 作为枢纽节点,必须包含与后续 review/handoff 的双向链接占位
74
+ 8. **记录审计**:plan 生成后调用 `record_dev_operation`(targetType: "PLAN")
61
75
 
62
76
  ---
63
77
 
@@ -90,15 +104,16 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
90
104
  |------|------|---------|
91
105
  | `prd-standard-template.md` | 产品/系统需求文档(新建):背景目标 + 用户场景 + 功能需求 + 非功能需求 + 验收标准 | 需求定义 |
92
106
  | `prd-incremental-template.md` | 产品/系统需求文档(增量):在已有 PRD 基础上追加/修改/删除 | 需求变更 |
93
- | `plan-template.md` | 需求方案:元信息 + 背景目标 + 方案选型 + 架构设计 + 实施步骤 + 验收标准 + ADD-7审计策略 | 需求理解 |
107
+ | `simple-plan-template.md` | 精简版 Plan:≤3 文件单一改动,Tasks+Handoff 融合在 Plan 体内,无需独立 spec/handoff 文件 | 简单任务 |
108
+ | `standard-plan-template.md` | 标准版 Plan:多模块/跨系统/含架构设计,需独立 spec/tasks/checklist | 复杂任务 |
94
109
  | `add-route-template.md` | Plan→ADD 十阶段执行映射:Step 0-9 具体动作 + Task 映射表 + 审计阶段清单 + 依赖拓扑 | Step 0 |
95
110
  | `spec-template.md` | 功能规格:Why / What Changes / Impact / WHEN-THEN Requirements | Step 0~1 |
96
111
  | `tasks-template.md` | 任务拆分:Phase → Task → SubTask 层级 | Step 1 |
97
112
  | `checklist-template.md` | 验收清单:业务检查项 + ADD 规则合规检查 | Step 5 / Step 8 |
98
- | `review-template.md` | ADD-9 方向验证:元信息 + 问题复现 + 方案对比 + 决策结论 + 影响评估 | Review 关卡 |
99
- | `review-implementation-template.md` | ADD-10 语义对齐:格式契约 + 框架版本 + 数据模型 + 环境变量 + API 选择 + E2E curl | Code 后 |
113
+ | `review-template.md` | ADD-9 方向验证:元信息 + **HITL 发现总览**(一次性人类审核表) + 问题复现 + 方案对比 + 决策结论 + 影响评估 | Review 关卡 |
114
+ | `review-implementation-template.md` | ADD-10 语义对齐:元信息 + **HITL 发现总览** + 格式契约 + 框架版本 + 数据模型 + 环境变量 + API 选择 + E2E curl | Code 后 |
100
115
  | `review-runtime-template.md` | ADD-11 证据持久化:发现列表 + 根因分析 + 流程改进项 + 回流确认 | Deploy 后 |
101
- | `handoff-template.md` | 交接总览索引(指向单轮/多轮) | Step 8 后 |
116
+ | `handoff-template.md` | 交接总览索引(指向单轮/多轮)。**注意**:精简版 Plan 不需要生成此文件——Handoff 已融合在 Plan §四 | Step 8 后 |
102
117
  | `handoff-single-round-template.md` | 单轮交接:9 章节(含恢复上下文审计查询) | 单轮变更完成后 |
103
118
  | `handoff-multi-round-template.md` | 多轮交接:全局拓扑 + 每轮 13 子章节 + 收敛规则 + 启动模板 | 多轮原子事务完成后 |
104
119
 
@@ -106,6 +121,8 @@ description: "Audit-Driven Development paradigm workflow. Invoke when starting a
106
121
  >
107
122
  > **每次根据模板生成文档时(plan/spec/review/handoff),MUST 先重新读取对应的模板文件,再填充内容。禁止凭记忆生成——模板可能已在迭代中更新,记忆中的版本可能不完整。**
108
123
 
124
+ > **Review 的 HITL 磋商(temporary.md 机制)**:生成方案 Review(`review-template.md`)或实现 Review(`review-implementation-template.md`)时,和 Plan 一样——doc-format-guard 要求完整章节才放行,HITL 第一步只写总览表会被阻断。因此 Review 也走 temporary.md 流程:先写 `{review-name}.temporary.md`(只含 HITL 发现总览表)→ 人类拍板 → 生成完整 Review 写入 `.qoder/reviews/` → 删除 temporary。具体步骤见下方 Step 3.5.3(实现 Review)和 Step 0 方案 Review 产出。
125
+
109
126
  #### 0.2 搜索相关项目文档
110
127
 
111
128
  调用 MCP 工具 `find_related_docs` 查找与当前变更相关的项目文档:
@@ -793,7 +810,7 @@ check_add_route_completeness({ planKeyword: "<Plan 核心关键词>" })
793
810
 
794
811
  ### 3.5.3 生成实现审查文档
795
812
 
796
- 读取 `review-implementation-template.md`,逐项填写审查结果。
813
+ HITL temporary.md 流程执行:读取 `review-implementation-template.md` → 先写 `{name}-review-implementation.temporary.md`(只含 HITL 发现总览表)→ 人类一次性拍板 → 逐条展开详细分析 → 写入 `.qoder/reviews/`(guard 放行)→ 删除 temporary。详见上方模板生成规则处的 Review HITL 磋商说明。
797
814
 
798
815
  ### 3.5.4 生成运行时审查文档(所有 [T] 项通过后)
799
816
 
@@ -1038,8 +1055,11 @@ LIMIT 10;
1038
1055
  ### 收敛后:生成交接手册(handoff)
1039
1056
 
1040
1057
  > **MUST NOT 跳过此步骤。** 收敛条件全部满足后,必须按模板生成交接手册,使后续 AI Session 能恢复上下文。
1058
+ >
1059
+ > **例外**:如果本 Plan 使用的是 `simple-plan-template.md`,**跳过本步骤**——Handoff 已融合在 Plan §四,无需独立文件。
1041
1060
 
1042
- 1. **读取对应模板**:单轮变更读 `handoff-single-round-template.md`(9 章节),多轮变更读 `handoff-multi-round-template.md`(13 子章节/轮)
1061
+ 1. **判断是否精简版**:检查 Plan 文件是否基于 `simple-plan-template.md` → 是则跳过,Handoff 信息已在 Plan §四 中
1062
+ 2. **读取对应模板**:单轮变更读 `handoff-single-round-template.md`(9 章节),多轮变更读 `handoff-multi-round-template.md`(13 子章节/轮)
1043
1063
  2. **填满所有章节**:模板中每个 `{占位符}` 都必须替换为实际内容,不得留空。特别注意:
1044
1064
  - **§8 恢复上下文审计查询**:MUST 包含基于真实 `query_audit_logs` 结果的逐文件审计查询语句,不得编造
1045
1065
  - **§9 后置确认**:逐项确认 tsc/ADD 合规/审计落库
@@ -75,13 +75,18 @@
75
75
  ## 四、Plan 拆分影响
76
76
 
77
77
  > 本次变更是否影响了原 PRD 的 Plan 拆分建议?必填——增量改动可能改变 Plan 链路。
78
+ >
79
+ > **模板选择**:| 任务特征 | 推荐模板 | 特征判断 |
80
+ > |---------|---------|------|
81
+ > | 单一聚焦改动(≤3 文件、无子模块、无新架构) | `simple-plan-template.md` | 配置收敛、重构、修复、单文件新增 |
82
+ > | 多模块/跨系统/含架构设计或外部 API | `standard-plan-template.md` | 新功能模块、数据模型变更、跨仓库集成 |
78
83
 
79
84
  **影响判定**:无影响 / 新增 Plan / 调整 Plan 依赖 / 废弃 Plan
80
85
 
81
86
  **变更后的 Plan 链路**:
82
87
 
83
88
  ```text
84
- {更新后的 Plan 链路,格式与标准 PRD §10.1 一致}
89
+ {更新后的 Plan 链路,每个 Plan 标注 模板: {simple/standard},格式与标准 PRD §10.1 一致}
85
90
  ```
86
91
 
87
92
  ---
@@ -170,17 +170,22 @@
170
170
  ## 十、Plan 拆分建议
171
171
 
172
172
  > 本章节指导下游 AI 如何将本 PRD 拆分为 Plan。必填——没有这条,AI 拿到 PRD 不知道从哪下手。
173
+ >
174
+ > **模板选择**:| 任务特征 | 推荐模板 | 特征判断 |
175
+ > |---------|---------|------|
176
+ > | 单一聚焦改动(≤3 文件、无子模块、无新架构) | `simple-plan-template.md` | 配置收敛、重构、修复、单文件新增 |
177
+ > | 多模块/跨系统/含架构设计或外部 API | `standard-plan-template.md` | 新功能模块、数据模型变更、跨仓库集成 |
173
178
 
174
179
  ### 10.1 推荐 Plan 链路
175
180
 
176
181
  ```text
177
- Plan 1: {plan名称} ── 聚焦: {子功能描述}
182
+ Plan 1: {plan名称} ── 模板: {simple/standard} ── 聚焦: {子功能描述}
178
183
  │ 依赖: 无
179
184
 
180
- Plan 2: {plan名称} ── 聚焦: {子功能描述}
185
+ Plan 2: {plan名称} ── 模板: {simple/standard} ── 聚焦: {子功能描述}
181
186
  │ 依赖: Plan 1 完成的 {产出物}
182
187
 
183
- Plan 3: {plan名称} ── 聚焦: {子功能描述}
188
+ Plan 3: {plan名称} ── 模板: {simple/standard} ── 聚焦: {子功能描述}
184
189
  依赖: Plan 2 完成的 {产出物}
185
190
  ```
186
191
 
@@ -10,6 +10,20 @@
10
10
 
11
11
  ---
12
12
 
13
+ ## HITL 发现总览(一次性提交人类审核)
14
+
15
+ > **规则**:AI 必须先在此表中列出 **所有检查维度的发现**,等待人类一次性审核通过后再逐项展开。
16
+ > 禁止逐条边查边改——这是批量审批入口。
17
+
18
+ | # | 严重度 | 检查维度 | 发现摘要 | 建议措施 | 人类决策 |
19
+ |---|:---:|------|---------|---------|:---:|
20
+ | 1 | 🔴 高 | {契约/数据模型/安全} | {一句话} | {建议} | 接受/拒绝/修改 |
21
+ | 2 | 🟡 中 | {兼容性/环境} | {一句话} | {建议} | 接受/拒绝/修改 |
22
+
23
+ > **人类确认后**:AI 在下方逐章节展开详细检查。
24
+
25
+ ---
26
+
13
27
  ## 1. 跨仓库格式契约
14
28
 
15
29
  列出所有跨系统 API,逐对验证请求/响应格式:
@@ -6,6 +6,12 @@
6
6
  "heading": "## Review 元信息",
7
7
  "required": true
8
8
  },
9
+ {
10
+ "id": "hitl",
11
+ "heading": "## HITL 发现总览",
12
+ "required": true,
13
+ "note": "AI 必须在此表中列出所有检查维度的发现,提交人类一次性审核。禁止逐条边查边改。"
14
+ },
9
15
  {
10
16
  "id": "contract",
11
17
  "heading": "## 1. 跨仓库格式契约",
@@ -10,6 +10,21 @@
10
10
 
11
11
  ---
12
12
 
13
+ ## HITL 发现总览(一次性提交人类审核)
14
+
15
+ > **规则**:AI 必须先在此表中列出 **所有发现**,等待人类一次性审核通过后再逐项推进。
16
+ > 禁止边发现边修改——这是批量审批入口,不是逐条对话。
17
+
18
+ | # | 严重度 | 类别 | 发现摘要 | 建议措施 | 人类决策 |
19
+ |---|:---:|------|---------|---------|:---:|
20
+ | 1 | 🔴 高 | {架构/安全/性能} | {一句话} | {建议} | 接受/拒绝/修改 |
21
+ | 2 | 🟡 中 | {规范/兼容性} | {一句话} | {建议} | 接受/拒绝/修改 |
22
+ | 3 | 🟢 低 | {风格/优化} | {一句话} | {建议} | 接受/拒绝/修改 |
23
+
24
+ > **人类确认后**:AI 在下方逐条展开详细分析。每一条展开时必须引用上方编号。
25
+
26
+ ---
27
+
13
28
  ## 1. 问题复现
14
29
 
15
30
  为什么需要这次评审?
@@ -6,6 +6,12 @@
6
6
  "heading": "## Review 元信息",
7
7
  "required": true
8
8
  },
9
+ {
10
+ "id": "hitl",
11
+ "heading": "## HITL 发现总览",
12
+ "required": true,
13
+ "note": "AI 必须在此表中列出所有发现,提交人类一次性审核。禁止边发现边修改。"
14
+ },
9
15
  {
10
16
  "id": "problem",
11
17
  "heading": "## 1. 问题复现",
@@ -1,12 +1,39 @@
1
1
  # {需求名}-plan-v{版本号}
2
2
 
3
- > 精简版 Plan 模板:适用于单一聚焦改动(配置收敛、重构、修复等)。Tasks 合并于 Plan 体,无需独立 spec 文件。
3
+ > 精简版 Plan 模板:适用于单一聚焦改动(配置收敛、重构、修复、单文件新增等)。Tasks 合并于 Plan 体,无需独立 spec 文件。**Handoff 融合于 §四,无需独立 handoff 文件。**
4
+ >
5
+ > **何时选用精简版 vs 标准版**:
6
+ > - ✅ 精简版:≤3 个文件变更、无新模块/架构设计、无外部 API 契约变更
7
+ > - 📋 标准版 (`standard-plan-template.md`):多模块、跨系统集成、含架构选型或数据模型设计
8
+ >
9
+ > ⚠️ **反作弊规则**:选择精简版不是因为"想省事"——是因为任务确实简单。以下三条不满足任一条,必须改用标准版:
10
+ > - 涉及文件 ≤ 3 个且全部在本模块内
11
+ > - 无新增模块/子系统/外部依赖
12
+ > - 无需独立 spec 文档(改动逻辑一句话能说清)
13
+ > **如果 AI 为复杂任务偷选精简版,HITL 表中必然暴露——文件数对不上、架构变更为空、人类会拒绝。**
4
14
 
5
15
  **创建时间**: {ISO 时间戳}
6
16
  **主导 AI**: {AI 助手标识}
7
17
 
8
18
  ---
9
19
 
20
+ ## HITL 计划总览(一次性提交人类审核)
21
+
22
+ > **规则**:AI 先在此表中列出本次改动要点,等待人类一次性拍板后再执行。
23
+ >
24
+ > ⚠️ **禁止偷懒**:文件清单必须是**实际完整列表**(不是"等 3 个文件"),方案/设计决策必须逐条列出(不是"等若干决策")。HITL 表是人类的最后防线——这里糊弄,后面全白做。
25
+
26
+ | 维度 | 内容 | 人类决策 |
27
+ |------|------|:---:|
28
+ | 涉及文件(完整路径) | {逐行列出的实际文件路径} | 同意/调整 |
29
+ | 改动类型 | {重构 / 修复 / 配置 / 新增} | 同意/调整 |
30
+ | 方案/设计决策 | {逐条列出关键设计选择} | 同意/调整 |
31
+ | 风险等级 | {🔴高 / 🟡中 / 🟢低} | 同意/调整 |
32
+
33
+ > **人类确认后**:AI 在下方展开并执行。
34
+
35
+ ---
36
+
10
37
  ## 一、Plan 概述
11
38
 
12
39
  - **现状**: 一句话描述当前问题
@@ -40,9 +67,9 @@
40
67
 
41
68
  ---
42
69
 
43
- ## 四、Handoff
70
+ ## 四、Handoff(融合于 Plan 中,无需独立 handoff 文件)
44
71
 
45
- > 与独立 `handoff-single-round-template.md` 结构一致。
72
+ > **本 §四 即是 Handoff。** 精简版 Plan 不产生独立的 `-handoff-v1.md` 文件——交接信息直接嵌入此处。后续 AI Session 恢复上下文时,读取本 Plan 文件即可获取全部交接信息。
46
73
 
47
74
  ### 4.1 交接前状态
48
75
 
@@ -6,6 +6,12 @@
6
6
  "heading": "## 一、Plan 概述",
7
7
  "required": true
8
8
  },
9
+ {
10
+ "id": "hitl",
11
+ "heading": "## HITL 计划总览",
12
+ "required": true,
13
+ "note": "AI 必须先在此表中列出实际完整文件路径和方案决策,等待人类拍板后再执行。禁止偷懒写'等 N 个文件'。"
14
+ },
9
15
  {
10
16
  "id": "changes",
11
17
  "heading": "## 二、变更范围",
@@ -19,6 +19,24 @@
19
19
 
20
20
  ---
21
21
 
22
+ ## HITL 计划总览(一次性提交人类审核)
23
+
24
+ > **规则**:AI 先在此表中列出 Plan 的全部关键决策,等待人类一次性拍板后再展开详细设计。
25
+ > 禁止跳过此表直接写正文——这是方向校准入口。
26
+
27
+ | 维度 | 内容 | 人类决策 |
28
+ |------|------|:---:|
29
+ | 影响模块 | {列出所有涉及模块/子系统} | 同意/调整 |
30
+ | 预估文件数 | {N} 个文件({修改/新建/删除}) | 同意/调整 |
31
+ | 架构变更 | {无 / 新增 {模块} / 重构 {层}} | 同意/调整 |
32
+ | 新增依赖 | {无 / {依赖名}} | 同意/调整 |
33
+ | 风险等级 | {🔴高 / 🟡中 / 🟢低} | 同意/调整 |
34
+ | 预计轮次 | {1-2 轮 / 3-5 轮} | 同意/调整 |
35
+
36
+ > **人类确认后**:AI 在下方展开完整 Plan 设计。
37
+
38
+ ---
39
+
22
40
  ## 一、背景与目标
23
41
 
24
42
  ### 1.1 问题现状