dev-playbooks-cn 2.2.1 → 2.3.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 (40) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +1 -0
  3. package/package.json +1 -1
  4. package/scripts/benchmark-scan.sh +67 -0
  5. package/scripts/detect-fancy-words.sh +7 -0
  6. package/skills/_shared/references/AI/350/241/214/344/270/272/350/247/204/350/214/203.md +20 -1
  7. package/skills/_shared/references//344/270/223/345/256/266/345/210/227/350/241/250.md +21 -0
  8. package/skills/_shared/references//345/256/214/345/244/207/346/200/247/346/200/235/347/273/264/346/241/206/346/236/266.md +89 -0
  9. package/skills/devbooks-archiver/SKILL.md +16 -5
  10. package/skills/devbooks-brownfield-bootstrap/SKILL.md +4 -38
  11. package/skills/devbooks-coder/SKILL.md +1 -1
  12. package/skills/devbooks-convergence-audit/SKILL.md +1 -0
  13. package/skills/devbooks-delivery-workflow/SKILL.md +3 -14
  14. package/skills/devbooks-delivery-workflow/scripts/change-check.sh +8 -0
  15. package/skills/devbooks-delivery-workflow/scripts/guardrail-check.sh +39 -10
  16. package/skills/devbooks-design-backport/SKILL.md +2 -4
  17. package/skills/devbooks-design-doc/SKILL.md +5 -3
  18. package/skills/devbooks-docs-consistency/SKILL.md +155 -0
  19. package/skills/devbooks-docs-consistency/references/completeness-dimensions.yaml +25 -0
  20. package/skills/devbooks-docs-consistency/references/doc-classification.yaml +11 -0
  21. package/skills/devbooks-docs-consistency/references/docs-rules-schema.yaml +11 -0
  22. package/skills/devbooks-docs-consistency/scripts/alias.sh +5 -0
  23. package/skills/devbooks-docs-consistency/scripts/completeness-checker.sh +153 -0
  24. package/skills/devbooks-docs-consistency/scripts/doc-classifier.sh +121 -0
  25. package/skills/devbooks-docs-consistency/scripts/git-adapter.sh +32 -0
  26. package/skills/devbooks-docs-consistency/scripts/rules-engine.sh +255 -0
  27. package/skills/devbooks-docs-consistency/scripts/scanner.sh +93 -0
  28. package/skills/devbooks-docs-consistency/scripts/style-checker.sh +123 -0
  29. package/skills/devbooks-entropy-monitor/SKILL.md +3 -35
  30. package/skills/devbooks-impact-analysis/SKILL.md +3 -38
  31. package/skills/devbooks-implementation-plan/SKILL.md +2 -4
  32. package/skills/devbooks-proposal-author/SKILL.md +7 -3
  33. package/skills/devbooks-proposal-challenger/SKILL.md +2 -4
  34. package/skills/devbooks-proposal-judge/SKILL.md +2 -4
  35. package/skills/devbooks-reviewer/SKILL.md +3 -36
  36. package/skills/devbooks-router/SKILL.md +5 -35
  37. package/skills/devbooks-spec-contract/SKILL.md +3 -34
  38. package/skills/devbooks-test-owner/SKILL.md +2 -3
  39. package/skills/devbooks-test-reviewer/SKILL.md +2 -3
  40. package/skills/devbooks-docs-sync/SKILL.md +0 -338
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'EOF'
6
+ Usage: rules-engine.sh [--rules <path>] [--once "remove:@pattern"] --input <file>
7
+
8
+ Options:
9
+ --rules <path> YAML rules file
10
+ --once <action> One-time action (e.g. remove:@augment)
11
+ --input <file> Document file to check
12
+ EOF
13
+ }
14
+
15
+ RULES_PATH=""
16
+ ONCE_ACTION=""
17
+ INPUT_PATH=""
18
+
19
+ while [[ $# -gt 0 ]]; do
20
+ case "$1" in
21
+ --rules)
22
+ RULES_PATH="$2"
23
+ shift 2
24
+ ;;
25
+ --once)
26
+ ONCE_ACTION="$2"
27
+ shift 2
28
+ ;;
29
+ --input)
30
+ INPUT_PATH="$2"
31
+ shift 2
32
+ ;;
33
+ -h|--help)
34
+ usage
35
+ exit 0
36
+ ;;
37
+ *)
38
+ echo "Unknown argument: $1" >&2
39
+ usage >&2
40
+ exit 2
41
+ ;;
42
+ esac
43
+ done
44
+
45
+ if [[ -z "$INPUT_PATH" ]]; then
46
+ echo "Missing --input" >&2
47
+ usage >&2
48
+ exit 2
49
+ fi
50
+
51
+ if [[ ! -f "$INPUT_PATH" ]]; then
52
+ echo "Input file not found: $INPUT_PATH" >&2
53
+ exit 2
54
+ fi
55
+
56
+ report_violation() {
57
+ local rule_id="$1"
58
+ local pattern="$2"
59
+ local file_path="$3"
60
+ echo "rule_id=${rule_id} file=${file_path} forbidden=${pattern}"
61
+ }
62
+
63
+ run_once_action() {
64
+ local action="$1"
65
+ local file_path="$2"
66
+
67
+ if [[ -z "$action" ]]; then
68
+ return 0
69
+ fi
70
+
71
+ if [[ "$action" != remove:* ]]; then
72
+ echo "Unsupported once action: $action" >&2
73
+ return 2
74
+ fi
75
+
76
+ local pattern="${action#remove:}"
77
+ if grep -q "$pattern" "$file_path"; then
78
+ echo "once_action=remove pattern=$pattern file=$file_path"
79
+ else
80
+ echo "once_action=remove pattern=$pattern file=$file_path (not found)"
81
+ fi
82
+ }
83
+
84
+ validate_yaml() {
85
+ local file_path="$1"
86
+ local has_rules=0
87
+ local has_invalid=0
88
+ local indent_error=0
89
+
90
+ while IFS= read -r line; do
91
+ if [[ "$line" =~ ^rules:[[:space:]]*(\[\])?[[:space:]]*$ ]]; then
92
+ has_rules=1
93
+ continue
94
+ fi
95
+
96
+ if [[ "$line" =~ ^[[:space:]]*-[[:space:]]*id:[[:space:]]* ]]; then
97
+ has_rules=1
98
+ fi
99
+
100
+ if [[ "$line" =~ ^[[:space:]]*pattern[[:space:]]+[^:]+$ ]]; then
101
+ has_invalid=1
102
+ fi
103
+ done < "$file_path"
104
+
105
+ if [[ "$has_invalid" -eq 1 ]]; then
106
+ return 1
107
+ fi
108
+ if [[ "$has_rules" -eq 0 ]]; then
109
+ return 1
110
+ fi
111
+ return 0
112
+ }
113
+
114
+ extract_rules() {
115
+ local file_path="$1"
116
+
117
+ python3 - "$file_path" <<'PY'
118
+ import sys
119
+
120
+ file_path = sys.argv[1]
121
+ rules = []
122
+ current = None
123
+
124
+ with open(file_path, "r", encoding="utf-8") as fh:
125
+ for raw in fh:
126
+ line = raw.rstrip("\n")
127
+ if line.strip().startswith("rules:"):
128
+ continue
129
+ if line.lstrip().startswith("- "):
130
+ if current:
131
+ rules.append(current)
132
+ current = {}
133
+ line = line.lstrip()[2:]
134
+ if current is None:
135
+ continue
136
+ if ":" in line:
137
+ key, value = line.split(":", 1)
138
+ key = key.strip()
139
+ value = value.strip().strip('"')
140
+ current[key] = value
141
+ if current:
142
+ rules.append(current)
143
+
144
+ for rule in rules:
145
+ rule_id = rule.get("id", "")
146
+ rule_type = rule.get("type", "")
147
+ rule_target = rule.get("target", "")
148
+ rule_action = rule.get("action", "")
149
+ rule_pattern = rule.get("pattern", "")
150
+ rule_replacement = rule.get("replacement", "")
151
+ if rule_id:
152
+ print("|".join([rule_id, rule_type, rule_target, rule_action, rule_pattern, rule_replacement]))
153
+ PY
154
+ }
155
+
156
+ detect_conflicts() {
157
+ local rules_file="$1"
158
+ local conflict=0
159
+ local seen=""
160
+
161
+ while IFS='|' read -r rule_id rule_type rule_target rule_action rule_pattern rule_replacement; do
162
+ if [[ -z "$rule_id" ]]; then
163
+ continue
164
+ fi
165
+ if [[ "$rule_action" == "replace" ]]; then
166
+ local key="${rule_target}|${rule_pattern}"
167
+ local existing
168
+ existing=$(printf "%s\n" "$seen" | awk -F'=' -v k="$key" '$1==k {print $2}' | tail -n 1)
169
+ if [[ -n "$existing" && "$existing" != "$rule_replacement" ]]; then
170
+ echo "conflict detected: rule_id=$rule_id conflicts_with=$key"
171
+ conflict=1
172
+ else
173
+ seen+="${key}=${rule_replacement}\n"
174
+ fi
175
+ fi
176
+ done < <(extract_rules "$rules_file")
177
+
178
+ if [[ "$conflict" -eq 1 ]]; then
179
+ return 1
180
+ fi
181
+ return 0
182
+ }
183
+
184
+ apply_rules() {
185
+ local rules_file="$1"
186
+ local file_path="$2"
187
+ local violations=0
188
+ local matched_rules=0
189
+
190
+ while IFS='|' read -r rule_id rule_type rule_target rule_action rule_pattern rule_replacement; do
191
+ if [[ -z "$rule_id" ]]; then
192
+ continue
193
+ fi
194
+ matched_rules=1
195
+ case "$rule_action" in
196
+ check)
197
+ if grep -q "$rule_pattern" "$file_path"; then
198
+ report_violation "$rule_id" "$rule_pattern" "$file_path"
199
+ violations=1
200
+ fi
201
+ ;;
202
+ remove)
203
+ if grep -q "$rule_pattern" "$file_path"; then
204
+ report_violation "$rule_id" "$rule_pattern" "$file_path"
205
+ violations=1
206
+ fi
207
+ ;;
208
+ replace)
209
+ if grep -q "$rule_pattern" "$file_path"; then
210
+ report_violation "$rule_id" "$rule_pattern" "$file_path"
211
+ violations=1
212
+ fi
213
+ ;;
214
+ *)
215
+ echo "unsupported action: $rule_action" >&2
216
+ return 2
217
+ ;;
218
+ esac
219
+ done < <(extract_rules "$rules_file")
220
+
221
+ if [[ "$matched_rules" -eq 0 ]]; then
222
+ return 0
223
+ fi
224
+
225
+ if [[ "$violations" -eq 1 ]]; then
226
+ return 1
227
+ fi
228
+ return 0
229
+ }
230
+
231
+ if [[ -n "$ONCE_ACTION" ]]; then
232
+ run_once_action "$ONCE_ACTION" "$INPUT_PATH"
233
+ exit 0
234
+ fi
235
+
236
+ if [[ -z "$RULES_PATH" ]]; then
237
+ echo "no rules file provided"
238
+ exit 0
239
+ fi
240
+
241
+ if [[ ! -f "$RULES_PATH" ]]; then
242
+ echo "rules file not found: $RULES_PATH" >&2
243
+ exit 2
244
+ fi
245
+
246
+ if ! validate_yaml "$RULES_PATH"; then
247
+ echo "invalid yaml rules: $RULES_PATH" >&2
248
+ exit 2
249
+ fi
250
+
251
+ if ! detect_conflicts "$RULES_PATH"; then
252
+ exit 2
253
+ fi
254
+
255
+ apply_rules "$RULES_PATH" "$INPUT_PATH"
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'EOF'
6
+ Usage: scanner.sh --scan-mode <incremental|full> [--cwd <path>]
7
+ EOF
8
+ }
9
+
10
+ SCAN_MODE=""
11
+ CWD=""
12
+
13
+ while [[ $# -gt 0 ]]; do
14
+ case "$1" in
15
+ --scan-mode)
16
+ SCAN_MODE="$2"
17
+ shift 2
18
+ ;;
19
+ --cwd)
20
+ CWD="$2"
21
+ shift 2
22
+ ;;
23
+ -h|--help)
24
+ usage
25
+ exit 0
26
+ ;;
27
+ *)
28
+ echo "Unknown argument: $1" >&2
29
+ usage >&2
30
+ exit 2
31
+ ;;
32
+ esac
33
+ done
34
+
35
+ if [[ -z "$SCAN_MODE" ]]; then
36
+ echo "Missing --scan-mode" >&2
37
+ usage >&2
38
+ exit 2
39
+ fi
40
+
41
+ if [[ -n "$CWD" ]]; then
42
+ cd "$CWD" || {
43
+ echo "invalid cwd: $CWD" >&2
44
+ exit 2
45
+ }
46
+ fi
47
+
48
+ list_full_files() {
49
+ if command -v git >/dev/null 2>&1; then
50
+ if git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
51
+ {
52
+ git ls-files
53
+ git ls-files --others --exclude-standard
54
+ } | sort -u
55
+ return 0
56
+ fi
57
+ fi
58
+ find . -type f -print
59
+ }
60
+
61
+ if [[ "$SCAN_MODE" == "incremental" ]]; then
62
+ if ! command -v git >/dev/null 2>&1; then
63
+ echo "incremental scan failed, fallback to full scan" >&2
64
+ list_full_files
65
+ exit 0
66
+ fi
67
+
68
+ if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
69
+ echo "incremental scan failed, fallback to full scan" >&2
70
+ list_full_files
71
+ exit 0
72
+ fi
73
+
74
+ if ! git diff --name-only HEAD~1 >/dev/null 2>&1; then
75
+ echo "incremental scan failed, fallback to full scan" >&2
76
+ list_full_files
77
+ exit 0
78
+ fi
79
+
80
+ {
81
+ git diff --name-only HEAD~1
82
+ git ls-files --others --exclude-standard
83
+ } | sort -u
84
+ exit 0
85
+ fi
86
+
87
+ if [[ "$SCAN_MODE" == "full" ]]; then
88
+ list_full_files
89
+ exit 0
90
+ fi
91
+
92
+ echo "invalid scan mode: $SCAN_MODE" >&2
93
+ exit 2
@@ -0,0 +1,123 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<'EOF'
6
+ Usage: style-checker.sh [--meta <docs-maintenance.md>] [--use-emoji true|false] [--use-fancy-words true|false] --input <file>
7
+ EOF
8
+ }
9
+
10
+ META_PATH=""
11
+ INPUT_PATH=""
12
+ OVERRIDE_EMOJI=""
13
+ OVERRIDE_FANCY=""
14
+
15
+ while [[ $# -gt 0 ]]; do
16
+ case "$1" in
17
+ --meta)
18
+ META_PATH="$2"
19
+ shift 2
20
+ ;;
21
+ --input)
22
+ INPUT_PATH="$2"
23
+ shift 2
24
+ ;;
25
+ --use-emoji)
26
+ OVERRIDE_EMOJI="$2"
27
+ shift 2
28
+ ;;
29
+ --use-fancy-words)
30
+ OVERRIDE_FANCY="$2"
31
+ shift 2
32
+ ;;
33
+ -h|--help)
34
+ usage
35
+ exit 0
36
+ ;;
37
+ *)
38
+ echo "Unknown argument: $1" >&2
39
+ usage >&2
40
+ exit 2
41
+ ;;
42
+ esac
43
+ done
44
+
45
+ if [[ -z "$INPUT_PATH" ]]; then
46
+ echo "Missing --input" >&2
47
+ usage >&2
48
+ exit 2
49
+ fi
50
+
51
+ if [[ ! -f "$INPUT_PATH" ]]; then
52
+ echo "input not found: $INPUT_PATH" >&2
53
+ exit 2
54
+ fi
55
+
56
+ read_meta_flag() {
57
+ local key="$1"
58
+ local file_path="$2"
59
+ if [[ -z "$file_path" || ! -f "$file_path" ]]; then
60
+ echo ""
61
+ return
62
+ fi
63
+ awk -v key="$key" '
64
+ $0 ~ key":" {gsub(/^.*: /, "", $0); gsub(/^[[:space:]]+|[[:space:]]+$/, "", $0); print $0; exit}
65
+ ' "$file_path"
66
+ }
67
+
68
+ use_emoji=""
69
+ use_fancy=""
70
+
71
+ if [[ -n "$OVERRIDE_EMOJI" ]]; then
72
+ use_emoji="$OVERRIDE_EMOJI"
73
+ else
74
+ use_emoji=$(read_meta_flag "use_emoji" "$META_PATH")
75
+ fi
76
+
77
+ if [[ -n "$OVERRIDE_FANCY" ]]; then
78
+ use_fancy="$OVERRIDE_FANCY"
79
+ else
80
+ use_fancy=$(read_meta_flag "use_fancy_words" "$META_PATH")
81
+ fi
82
+
83
+ if [[ -z "$use_emoji" ]]; then
84
+ use_emoji="true"
85
+ fi
86
+
87
+ if [[ -z "$use_fancy" ]]; then
88
+ use_fancy="true"
89
+ fi
90
+
91
+ exit_code=0
92
+
93
+ if [[ "$use_emoji" == "false" ]]; then
94
+ if python3 - "$INPUT_PATH" <<'PY'
95
+ import sys
96
+
97
+ path = sys.argv[1]
98
+ try:
99
+ with open(path, "r", encoding="utf-8", errors="ignore") as fh:
100
+ data = fh.read()
101
+ except OSError:
102
+ sys.exit(1)
103
+
104
+ for ch in data:
105
+ codepoint = ord(ch)
106
+ if 0x1F300 <= codepoint <= 0x1FAFF:
107
+ sys.exit(0)
108
+ sys.exit(1)
109
+ PY
110
+ then
111
+ echo "emoji detected in $INPUT_PATH"
112
+ exit_code=1
113
+ fi
114
+ fi
115
+
116
+ if [[ "$use_fancy" == "false" ]]; then
117
+ if grep -qE "(最强大脑|智能|高效|强大|优雅|完美|革命性|颠覆性)" "$INPUT_PATH"; then
118
+ echo "fancy words detected in $INPUT_PATH"
119
+ exit_code=1
120
+ fi
121
+ fi
122
+
123
+ exit "$exit_code"
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-entropy-monitor
3
3
  description: devbooks-entropy-monitor:定期采集系统熵度量(结构熵/变更熵/测试熵/依赖熵),生成量化报告,当指标超阈值时建议重构。用户说"熵度量/复杂度趋势/重构预警/代码健康/技术债务度量"等时使用。
4
+ recommended_experts: ["Performance Engineer", "System Architect"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -150,39 +151,6 @@ allowed-tools:
150
151
 
151
152
  ---
152
153
 
153
- ## MCP 增强
154
-
155
- 本 Skill 支持 MCP 运行时增强,自动检测并启用高级功能。
156
-
157
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
158
-
159
- ### 依赖的 MCP 服务
160
-
161
- | 服务 | 用途 | 超时 |
162
- |------|------|------|
163
- | `mcp__ckb__getHotspots` | 获取热点文件分析 | 2s |
164
- | `mcp__ckb__getStatus` | 检测 CKB 索引可用性 | 2s |
165
-
166
- ### 检测流程
167
-
168
- 1. 调用 `mcp__ckb__getStatus`(2s 超时)
169
- 2. 若 CKB 可用 → 使用 `getHotspots` 获取精确热点分析
170
- 3. 若超时或失败 → 降级到 Git 历史统计
171
-
172
- ### 增强模式 vs 基础模式
173
-
174
- | 功能 | 增强模式 | 基础模式 |
175
- |------|----------|----------|
176
- | 热点分析 | CKB 实时分析(含复杂度) | Git log 变更频率统计 |
177
- | 耦合检测 | 调用图分析 | 文件共变分析 |
178
- | 趋势预测 | 基于复杂度变化率 | 基于变更频率 |
179
-
180
- ### 降级提示
181
-
182
- 当 MCP 不可用时,输出以下提示:
183
-
184
- ```
185
- ⚠️ CKB 不可用,使用 Git 历史进行熵度量。
186
- 热点分析基于变更频率,不含代码复杂度数据。
187
- ```
154
+ ## MCP 说明
188
155
 
156
+ 本 Skill 不依赖 MCP 服务,无需运行时检测。
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-impact-analysis
3
3
  description: devbooks-impact-analysis:跨模块/跨文件/对外契约变更前做影响分析,产出可直接写入 proposal.md 的 Impact 部分(Scope/Impacts/Risks/Minimal Diff/Open Questions)。用户说"做影响分析/改动面控制/引用查找/受影响模块/兼容性风险"等时使用。
4
+ recommended_experts: ["System Architect"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -129,42 +130,6 @@ AI:[使用 Grep/CKB 分析引用]
129
130
 
130
131
  ---
131
132
 
132
- ## MCP 增强
133
-
134
- 本 Skill 支持 MCP 运行时增强,自动检测并启用高级功能。
135
-
136
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
137
-
138
- ### 依赖的 MCP 服务
139
-
140
- | 服务 | 用途 | 超时 |
141
- |------|------|------|
142
- | `mcp__ckb__analyzeImpact` | 符号级影响分析 | 2s |
143
- | `mcp__ckb__findReferences` | 精确引用查找 | 2s |
144
- | `mcp__ckb__getCallGraph` | 调用图分析 | 2s |
145
- | `mcp__ckb__getStatus` | 检测 CKB 索引可用性 | 2s |
146
-
147
- ### 检测流程
148
-
149
- 1. 调用 `mcp__ckb__getStatus`(2s 超时)
150
- 2. 若 CKB 可用 → 使用 `analyzeImpact` 和 `findReferences` 进行精确分析
151
- 3. 若超时或失败 → 降级到基础模式(Grep 文本搜索)
152
-
153
- ### 增强模式 vs 基础模式
154
-
155
- | 功能 | 增强模式 | 基础模式 |
156
- |------|----------|----------|
157
- | 引用查找 | 符号级精确匹配 | 文本 Grep 搜索 |
158
- | 影响范围 | 调用图传递分析 | 直接引用统计 |
159
- | 风险评估 | 基于调用深度量化 | 基于文件数量估算 |
160
- | 跨模块分析 | 自动识别模块边界 | 需手动指定范围 |
161
-
162
- ### 降级提示
163
-
164
- 当 MCP 不可用时,输出以下提示:
165
-
166
- ```
167
- ⚠️ CKB 不可用,使用 Grep 文本搜索进行影响分析。
168
- 分析结果可能不够精确,建议手动生成 SCIP 索引后重新分析。
169
- ```
133
+ ## MCP 说明
170
134
 
135
+ 本 Skill 不依赖 MCP 服务,无需运行时检测。
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-implementation-plan
3
3
  description: devbooks-implementation-plan:从设计文档推导编码计划(tasks.md),输出可跟踪的主线计划/临时计划/断点区,并绑定验收锚点。用户说"写编码计划/Implementation Plan/tasks.md/任务拆解/并行拆分/里程碑/验收锚点"等时使用。
4
+ recommended_experts: ["System Architect", "Product Manager"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -153,9 +154,6 @@ implementation-plan → test-owner (会话A) → coder (会话B)
153
154
 
154
155
  ---
155
156
 
156
- ## MCP 增强
157
+ ## MCP 说明
157
158
 
158
159
  本 Skill 不依赖 MCP 服务,无需运行时检测。
159
-
160
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
161
-
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-proposal-author
3
3
  description: devbooks-proposal-author:撰写变更提案 proposal.md(Why/What/Impact + Debate Packet),作为后续 Design/Spec/Plan 的入口。对设计性决策会呈现选项给用户选择。用户说"写提案/proposal/为什么要改/影响范围/坏味道重构提案"等时使用。
4
+ recommended_experts: ["Product Manager", "System Architect"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -175,9 +176,12 @@ proposal-author → [impact-analysis] → design-doc → [spec-contract] → imp
175
176
 
176
177
  ---
177
178
 
178
- ## MCP 增强
179
+ ## Challenger 审视
179
180
 
180
- Skill 不依赖 MCP 服务,无需运行时检测。
181
+ 在完成提案草案后,执行 Challenger 审视,重点检查遗漏的约束与不确定性,并参考完备性方法论。
182
+
183
+ - 方法论参考:[完备性思维框架](../_shared/references/完备性思维框架.md)
181
184
 
182
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
185
+ ## MCP 说明
183
186
 
187
+ 本 Skill 不依赖 MCP 服务,无需运行时检测。
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-proposal-challenger
3
3
  description: devbooks-proposal-challenger:对 proposal.md 发起质疑(Challenger)+ 查漏补缺,指出风险/遗漏/不一致并给结论,发现缺失的验收标准和未覆盖场景。用户说"质疑提案/挑刺/风险评估/提案对辩 challenger/查漏补缺"等时使用。
4
+ recommended_experts: ["Product Manager", "System Architect"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -78,9 +79,6 @@ allowed-tools:
78
79
 
79
80
  ---
80
81
 
81
- ## MCP 增强
82
+ ## MCP 说明
82
83
 
83
84
  本 Skill 不依赖 MCP 服务,无需运行时检测。
84
-
85
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
86
-
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-proposal-judge
3
3
  description: devbooks-proposal-judge:对 proposal 阶段进行裁决(Judge),输出 Approved/Revise/Rejected 并写回 proposal.md 的 Decision Log。用户说"裁决提案/提案评审/Approved Revise Rejected/decision log"等时使用。
4
+ recommended_experts: ["Product Manager", "System Architect"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -70,9 +71,6 @@ allowed-tools:
70
71
 
71
72
  ---
72
73
 
73
- ## MCP 增强
74
+ ## MCP 说明
74
75
 
75
76
  本 Skill 不依赖 MCP 服务,无需运行时检测。
76
-
77
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
78
-
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  name: devbooks-reviewer
3
3
  description: devbooks-reviewer:以 Reviewer 角色做可读性/一致性/依赖健康/坏味道审查,只输出审查意见与可执行建议,不讨论业务正确性。用户说"帮我做代码评审/review 可维护性/坏味道/依赖风险/一致性建议",或在 DevBooks apply 阶段以 reviewer 执行时使用。
4
+ recommended_experts: ["System Architect", "Security Expert"]
4
5
  allowed-tools:
5
6
  - Glob
6
7
  - Grep
@@ -206,40 +207,6 @@ Review 通过后,Reviewer 必须执行:
206
207
 
207
208
  ---
208
209
 
209
- ## MCP 增强
210
-
211
- 本 Skill 支持 MCP 运行时增强,自动检测并启用高级功能。
212
-
213
- MCP 增强规则参考:`skills/_shared/MCP增强模板.md`
214
-
215
- ### 依赖的 MCP 服务
216
-
217
- | 服务 | 用途 | 超时 |
218
- |------|------|------|
219
- | `mcp__ckb__getHotspots` | 检测热点文件,优先审查 | 2s |
220
- | `mcp__ckb__getStatus` | 检测 CKB 索引可用性 | 2s |
221
-
222
- ### 检测流程
223
-
224
- 1. 调用 `mcp__ckb__getStatus`(2s 超时)
225
- 2. 若 CKB 可用 → 调用 `mcp__ckb__getHotspots` 获取热点文件
226
- 3. 对热点文件进行优先审查
227
- 4. 若超时或失败 → 降级到基础模式
228
-
229
- ### 增强模式 vs 基础模式
230
-
231
- | 功能 | 增强模式 | 基础模式 |
232
- |------|----------|----------|
233
- | 热点优先审查 | 自动识别高风险文件 | 按变更顺序审查 |
234
- | 依赖方向检查 | 基于模块图分析 | 基于文件路径推断 |
235
- | 循环依赖检测 | CKB 精确检测 | Grep 启发式检测 |
236
-
237
- ### 降级提示
238
-
239
- 当 MCP 不可用时,输出以下提示:
240
-
241
- ```
242
- ⚠️ CKB 不可用,无法进行热点优先审查。
243
- 按变更文件顺序进行审查。
244
- ```
210
+ ## MCP 说明
245
211
 
212
+ 本 Skill 不依赖 MCP 服务,无需运行时检测。