sdd-full 4.6.1 → 4.8.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 (173) hide show
  1. package/bin.js +1 -1
  2. package/package.json +1 -1
  3. package/skills/.agents/skills/flutter-add-integration-test/SKILL.md +165 -0
  4. package/skills/.agents/skills/flutter-add-widget-preview/SKILL.md +147 -0
  5. package/skills/.agents/skills/flutter-add-widget-test/SKILL.md +156 -0
  6. package/skills/.agents/skills/flutter-apply-architecture-best-practices/SKILL.md +164 -0
  7. package/skills/.agents/skills/flutter-build-responsive-layout/SKILL.md +141 -0
  8. package/skills/.agents/skills/flutter-fix-layout-issues/SKILL.md +132 -0
  9. package/skills/.agents/skills/flutter-implement-json-serialization/SKILL.md +155 -0
  10. package/skills/.agents/skills/flutter-setup-declarative-routing/SKILL.md +257 -0
  11. package/skills/.agents/skills/flutter-setup-localization/SKILL.md +212 -0
  12. package/skills/.agents/skills/flutter-use-http-package/SKILL.md +177 -0
  13. package/skills/VERSION.md +186 -62
  14. package/skills/design-planning/ai-coding-rules/SKILL.md +5 -13
  15. package/skills/design-planning/design-to-code/SKILL.md +5 -14
  16. package/skills/design-planning/enterprise-spec/SKILL.md +5 -13
  17. package/skills/design-planning/flutter-av/SKILL.md +5 -16
  18. package/skills/design-planning/flutter-map/SKILL.md +5 -14
  19. package/skills/design-planning/function-sdd/SKILL.md +5 -13
  20. package/skills/design-planning/global-overlay-stack-standard/SKILL.md +73 -0
  21. package/skills/design-planning/ui-motion-interaction-standard/SKILL.md +69 -0
  22. package/skills/design-planning/ui-sdd-specialized/SKILL.md +5 -14
  23. package/skills/development-execution/flutter-errors/SKILL.md +5 -15
  24. package/skills/flutter-skills/.github/dependabot.yaml +15 -0
  25. package/skills/flutter-skills/.github/workflows/dart_skills_lint_workflow.yaml +68 -0
  26. package/skills/flutter-skills/.github/workflows/skills_tool.yaml +51 -0
  27. package/skills/flutter-skills/CODE_OF_CONDUCT.md +3 -0
  28. package/skills/flutter-skills/CONTRIBUTING.md +36 -0
  29. package/skills/flutter-skills/LICENSE +26 -0
  30. package/skills/flutter-skills/README.md +50 -0
  31. package/skills/flutter-skills/pubspec.yaml +9 -0
  32. package/skills/flutter-skills/resources/flutter_skills.yaml +434 -0
  33. package/skills/flutter-skills/skills/flutter-add-integration-test/SKILL.md +163 -0
  34. package/skills/flutter-skills/skills/flutter-add-widget-preview/SKILL.md +145 -0
  35. package/skills/flutter-skills/skills/flutter-add-widget-test/SKILL.md +154 -0
  36. package/skills/flutter-skills/skills/flutter-apply-architecture-best-practices/SKILL.md +162 -0
  37. package/skills/flutter-skills/skills/flutter-build-responsive-layout/SKILL.md +139 -0
  38. package/skills/flutter-skills/skills/flutter-fix-layout-issues/SKILL.md +130 -0
  39. package/skills/flutter-skills/skills/flutter-implement-json-serialization/SKILL.md +153 -0
  40. package/skills/flutter-skills/skills/flutter-setup-declarative-routing/SKILL.md +255 -0
  41. package/skills/flutter-skills/skills/flutter-setup-localization/SKILL.md +210 -0
  42. package/skills/flutter-skills/skills/flutter-use-http-package/SKILL.md +175 -0
  43. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/add-dart-lint-validation-rule/SKILL.md +196 -0
  44. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-best-practices/SKILL.md +65 -0
  45. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-checks-migration/SKILL.md +158 -0
  46. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-cli-app-best-practices/SKILL.md +168 -0
  47. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-doc-validation/SKILL.md +87 -0
  48. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-long-lines/SKILL.md +101 -0
  49. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-matcher-best-practices/SKILL.md +136 -0
  50. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-modern-features/SKILL.md +266 -0
  51. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-package-maintenance/SKILL.md +92 -0
  52. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/SKILL.md +92 -0
  53. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/example/lib/src/calculator.dart +7 -0
  54. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/example/pubspec.yaml +8 -0
  55. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/example/test/calculator_test.dart +11 -0
  56. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/scripts/interpret_coverage.dart +95 -0
  57. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/scripts/pubspec.yaml +6 -0
  58. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-coverage/scripts/test/interpret_coverage_test.dart +93 -0
  59. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/dart-test-fundamentals/SKILL.md +173 -0
  60. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/definition-of-done/SKILL.md +27 -0
  61. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/flutter_skills_ignore.json +3 -0
  62. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/grill-me/SKILL.md +10 -0
  63. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/ignore.json +3 -0
  64. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/test-driven-development/SKILL.md +371 -0
  65. package/skills/flutter-skills/tool/dart_skills_lint/.agents/skills/test-driven-development/testing-anti-patterns.md +299 -0
  66. package/skills/flutter-skills/tool/dart_skills_lint/AUTHORS +7 -0
  67. package/skills/flutter-skills/tool/dart_skills_lint/CHANGELOG.md +12 -0
  68. package/skills/flutter-skills/tool/dart_skills_lint/CONTRIBUTING.md +51 -0
  69. package/skills/flutter-skills/tool/dart_skills_lint/LICENSE +27 -0
  70. package/skills/flutter-skills/tool/dart_skills_lint/README.md +203 -0
  71. package/skills/flutter-skills/tool/dart_skills_lint/analysis_options.yaml +296 -0
  72. package/skills/flutter-skills/tool/dart_skills_lint/bench/README.md +23 -0
  73. package/skills/flutter-skills/tool/dart_skills_lint/bench/baseline_throughput.dart +230 -0
  74. package/skills/flutter-skills/tool/dart_skills_lint/bin/cli.dart +10 -0
  75. package/skills/flutter-skills/tool/dart_skills_lint/dart_skills_lint.yaml +14 -0
  76. package/skills/flutter-skills/tool/dart_skills_lint/documentation/feature_design_docs/PRODUCTION_READYNESS.md +48 -0
  77. package/skills/flutter-skills/tool/dart_skills_lint/documentation/feature_design_docs/completion_migration_plan.md +99 -0
  78. package/skills/flutter-skills/tool/dart_skills_lint/documentation/feature_design_docs/legacy_patterns_report.md +110 -0
  79. package/skills/flutter-skills/tool/dart_skills_lint/documentation/feature_design_docs/pub_vs_skill_report.md +56 -0
  80. package/skills/flutter-skills/tool/dart_skills_lint/documentation/knowledge/SPECIFICATION.md +79 -0
  81. package/skills/flutter-skills/tool/dart_skills_lint/documentation/knowledge/architecture_overview.md +64 -0
  82. package/skills/flutter-skills/tool/dart_skills_lint/lib/dart_skills_lint.dart +11 -0
  83. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/config_parser.dart +156 -0
  84. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/entry_point.dart +354 -0
  85. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/fixable_rule.dart +20 -0
  86. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/analysis_severity.dart +15 -0
  87. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/check_type.dart +17 -0
  88. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/ignore_entry.dart +34 -0
  89. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/ignore_entry.g.dart +19 -0
  90. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/skill_context.dart +27 -0
  91. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/skill_rule.dart +27 -0
  92. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/skills_ignores.dart +26 -0
  93. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/skills_ignores.g.dart +24 -0
  94. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/models/validation_error.dart +31 -0
  95. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rule_registry.dart +79 -0
  96. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/absolute_paths_rule.dart +74 -0
  97. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/description_length_rule.dart +49 -0
  98. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/disallowed_field_rule.dart +61 -0
  99. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/name_format_rule.dart +167 -0
  100. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/relative_paths_rule.dart +72 -0
  101. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/trailing_whitespace_rule.dart +93 -0
  102. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/rules/valid_yaml_metadata_rule.dart +74 -0
  103. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/skills_ignores_storage.dart +36 -0
  104. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/validation_session.dart +559 -0
  105. package/skills/flutter-skills/tool/dart_skills_lint/lib/src/validator.dart +238 -0
  106. package/skills/flutter-skills/tool/dart_skills_lint/pubspec.yaml +28 -0
  107. package/skills/flutter-skills/tool/dart_skills_lint/skills/README.md +10 -0
  108. package/skills/flutter-skills/tool/dart_skills_lint/skills/dart-skills-lint-validation/SKILL.md +195 -0
  109. package/skills/flutter-skills/tool/dart_skills_lint/skills-lock.json +75 -0
  110. package/skills/flutter-skills/tool/dart_skills_lint/test/absolute_paths_test.dart +167 -0
  111. package/skills/flutter-skills/tool/dart_skills_lint/test/cli_integration_test.dart +683 -0
  112. package/skills/flutter-skills/tool/dart_skills_lint/test/config_file_test.dart +292 -0
  113. package/skills/flutter-skills/tool/dart_skills_lint/test/custom_rule_test.dart +122 -0
  114. package/skills/flutter-skills/tool/dart_skills_lint/test/directory_structure_test.dart +163 -0
  115. package/skills/flutter-skills/tool/dart_skills_lint/test/field_constraints_test.dart +178 -0
  116. package/skills/flutter-skills/tool/dart_skills_lint/test/fixer_test.dart +172 -0
  117. package/skills/flutter-skills/tool/dart_skills_lint/test/ignore_models_test.dart +63 -0
  118. package/skills/flutter-skills/tool/dart_skills_lint/test/metadata_validation_test.dart +116 -0
  119. package/skills/flutter-skills/tool/dart_skills_lint/test/relative_path_flag_test.dart +70 -0
  120. package/skills/flutter-skills/tool/dart_skills_lint/test/relative_paths_test.dart +172 -0
  121. package/skills/flutter-skills/tool/dart_skills_lint/test/resolve_rules_test.dart +82 -0
  122. package/skills/flutter-skills/tool/dart_skills_lint/test/rule_naming_test.dart +29 -0
  123. package/skills/flutter-skills/tool/dart_skills_lint/test/skills_ignores_storage_test.dart +89 -0
  124. package/skills/flutter-skills/tool/dart_skills_lint/test/test_utils.dart +19 -0
  125. package/skills/flutter-skills/tool/dart_skills_lint/test/trailing_whitespace_test.dart +152 -0
  126. package/skills/flutter-skills/tool/generator/README.md +150 -0
  127. package/skills/flutter-skills/tool/generator/analysis_options.yaml +143 -0
  128. package/skills/flutter-skills/tool/generator/bin/skills.dart +73 -0
  129. package/skills/flutter-skills/tool/generator/lib/src/commands/base_skill_command.dart +87 -0
  130. package/skills/flutter-skills/tool/generator/lib/src/commands/base_yaml_command.dart +83 -0
  131. package/skills/flutter-skills/tool/generator/lib/src/commands/generate_skill_command.dart +92 -0
  132. package/skills/flutter-skills/tool/generator/lib/src/commands/update_readme_command.dart +150 -0
  133. package/skills/flutter-skills/tool/generator/lib/src/commands/update_skill_command.dart +97 -0
  134. package/skills/flutter-skills/tool/generator/lib/src/commands/validate_skill_command.dart +284 -0
  135. package/skills/flutter-skills/tool/generator/lib/src/models/skill_params.dart +41 -0
  136. package/skills/flutter-skills/tool/generator/lib/src/services/gemini_service.dart +310 -0
  137. package/skills/flutter-skills/tool/generator/lib/src/services/markdown_converter.dart +226 -0
  138. package/skills/flutter-skills/tool/generator/lib/src/services/prompts.dart +72 -0
  139. package/skills/flutter-skills/tool/generator/lib/src/services/resource_fetcher_service.dart +84 -0
  140. package/skills/flutter-skills/tool/generator/lib/src/services/skill_instructions.dart +30 -0
  141. package/skills/flutter-skills/tool/generator/pubspec.yaml +32 -0
  142. package/skills/flutter-skills/tool/generator/test/commands/base_skill_command_test.dart +131 -0
  143. package/skills/flutter-skills/tool/generator/test/commands/validate_skills_input_test.dart +263 -0
  144. package/skills/flutter-skills/tool/generator/test/custom_skill_rules/last_modified_rule.dart +32 -0
  145. package/skills/flutter-skills/tool/generator/test/generate_skills_retry_test.dart +105 -0
  146. package/skills/flutter-skills/tool/generator/test/generate_skills_test.dart +519 -0
  147. package/skills/flutter-skills/tool/generator/test/lint_skills_test.dart +34 -0
  148. package/skills/flutter-skills/tool/generator/test/markdown_converter_test.dart +103 -0
  149. package/skills/flutter-skills/tool/generator/test/markdown_table_test.dart +131 -0
  150. package/skills/flutter-skills/tool/generator/test/models/skill_params_test.dart +37 -0
  151. package/skills/flutter-skills/tool/generator/test/services/gemini_service_test.dart +291 -0
  152. package/skills/flutter-skills/tool/generator/test/services/markdown_converter_test.dart +156 -0
  153. package/skills/flutter-skills/tool/generator/test/services/resource_fetcher_service_test.dart +188 -0
  154. package/skills/flutter-skills/tool/generator/test/update_skills_test.dart +241 -0
  155. package/skills/flutter-skills/tool/generator/test/validate_skills_test.dart +728 -0
  156. package/skills/quality-assurance/bdd-acceptance/SKILL.md +5 -14
  157. package/skills/quality-assurance/flutter-test/SKILL.md +5 -16
  158. package/skills/rules/project_rules.md +538 -127
  159. package/skills/special-tools/env-check/SKILL.md +5 -13
  160. package/skills/special-tools/ios-full-auto-debug/SKILL.md +5 -15
  161. package/skills/writing-skills/SKILL.md +654 -0
  162. package/skills/writing-skills/anthropic-best-practices.md +1149 -0
  163. package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -0
  164. package/skills/writing-skills/graphviz-conventions.dot +172 -0
  165. package/skills/writing-skills/persuasion-principles.md +187 -0
  166. package/skills/writing-skills/render-graphs.js +168 -0
  167. package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
  168. package/skills/checklist.md +0 -154
  169. package/skills/rules/user_rules.md +0 -263
  170. package/skills//345/256/214/346/225/264/345/274/200/345/217/221/346/265/201/347/250/213/346/211/213/345/206/214.md +0 -454
  171. package/skills//346/212/200/350/203/275/344/275/223/347/263/273/345/256/214/345/226/204/345/273/272/350/256/256.md +0 -308
  172. package/skills//346/212/200/350/203/275/344/275/277/347/224/250/346/214/207/345/215/227.md +0 -309
  173. package/skills//346/212/200/350/203/275/345/206/263/347/255/226/346/240/221.md +0 -338
@@ -0,0 +1,168 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Render graphviz diagrams from a skill's SKILL.md to SVG files.
5
+ *
6
+ * Usage:
7
+ * ./render-graphs.js <skill-directory> # Render each diagram separately
8
+ * ./render-graphs.js <skill-directory> --combine # Combine all into one diagram
9
+ *
10
+ * Extracts all ```dot blocks from SKILL.md and renders to SVG.
11
+ * Useful for helping your human partner visualize the process flows.
12
+ *
13
+ * Requires: graphviz (dot) installed on system
14
+ */
15
+
16
+ const fs = require('fs');
17
+ const path = require('path');
18
+ const { execSync } = require('child_process');
19
+
20
+ function extractDotBlocks(markdown) {
21
+ const blocks = [];
22
+ const regex = /```dot\n([\s\S]*?)```/g;
23
+ let match;
24
+
25
+ while ((match = regex.exec(markdown)) !== null) {
26
+ const content = match[1].trim();
27
+
28
+ // Extract digraph name
29
+ const nameMatch = content.match(/digraph\s+(\w+)/);
30
+ const name = nameMatch ? nameMatch[1] : `graph_${blocks.length + 1}`;
31
+
32
+ blocks.push({ name, content });
33
+ }
34
+
35
+ return blocks;
36
+ }
37
+
38
+ function extractGraphBody(dotContent) {
39
+ // Extract just the body (nodes and edges) from a digraph
40
+ const match = dotContent.match(/digraph\s+\w+\s*\{([\s\S]*)\}/);
41
+ if (!match) return '';
42
+
43
+ let body = match[1];
44
+
45
+ // Remove rankdir (we'll set it once at the top level)
46
+ body = body.replace(/^\s*rankdir\s*=\s*\w+\s*;?\s*$/gm, '');
47
+
48
+ return body.trim();
49
+ }
50
+
51
+ function combineGraphs(blocks, skillName) {
52
+ const bodies = blocks.map((block, i) => {
53
+ const body = extractGraphBody(block.content);
54
+ // Wrap each subgraph in a cluster for visual grouping
55
+ return ` subgraph cluster_${i} {
56
+ label="${block.name}";
57
+ ${body.split('\n').map(line => ' ' + line).join('\n')}
58
+ }`;
59
+ });
60
+
61
+ return `digraph ${skillName}_combined {
62
+ rankdir=TB;
63
+ compound=true;
64
+ newrank=true;
65
+
66
+ ${bodies.join('\n\n')}
67
+ }`;
68
+ }
69
+
70
+ function renderToSvg(dotContent) {
71
+ try {
72
+ return execSync('dot -Tsvg', {
73
+ input: dotContent,
74
+ encoding: 'utf-8',
75
+ maxBuffer: 10 * 1024 * 1024
76
+ });
77
+ } catch (err) {
78
+ console.error('Error running dot:', err.message);
79
+ if (err.stderr) console.error(err.stderr.toString());
80
+ return null;
81
+ }
82
+ }
83
+
84
+ function main() {
85
+ const args = process.argv.slice(2);
86
+ const combine = args.includes('--combine');
87
+ const skillDirArg = args.find(a => !a.startsWith('--'));
88
+
89
+ if (!skillDirArg) {
90
+ console.error('Usage: render-graphs.js <skill-directory> [--combine]');
91
+ console.error('');
92
+ console.error('Options:');
93
+ console.error(' --combine Combine all diagrams into one SVG');
94
+ console.error('');
95
+ console.error('Example:');
96
+ console.error(' ./render-graphs.js ../subagent-driven-development');
97
+ console.error(' ./render-graphs.js ../subagent-driven-development --combine');
98
+ process.exit(1);
99
+ }
100
+
101
+ const skillDir = path.resolve(skillDirArg);
102
+ const skillFile = path.join(skillDir, 'SKILL.md');
103
+ const skillName = path.basename(skillDir).replace(/-/g, '_');
104
+
105
+ if (!fs.existsSync(skillFile)) {
106
+ console.error(`Error: ${skillFile} not found`);
107
+ process.exit(1);
108
+ }
109
+
110
+ // Check if dot is available
111
+ try {
112
+ execSync('which dot', { encoding: 'utf-8' });
113
+ } catch {
114
+ console.error('Error: graphviz (dot) not found. Install with:');
115
+ console.error(' brew install graphviz # macOS');
116
+ console.error(' apt install graphviz # Linux');
117
+ process.exit(1);
118
+ }
119
+
120
+ const markdown = fs.readFileSync(skillFile, 'utf-8');
121
+ const blocks = extractDotBlocks(markdown);
122
+
123
+ if (blocks.length === 0) {
124
+ console.log('No ```dot blocks found in', skillFile);
125
+ process.exit(0);
126
+ }
127
+
128
+ console.log(`Found ${blocks.length} diagram(s) in ${path.basename(skillDir)}/SKILL.md`);
129
+
130
+ const outputDir = path.join(skillDir, 'diagrams');
131
+ if (!fs.existsSync(outputDir)) {
132
+ fs.mkdirSync(outputDir);
133
+ }
134
+
135
+ if (combine) {
136
+ // Combine all graphs into one
137
+ const combined = combineGraphs(blocks, skillName);
138
+ const svg = renderToSvg(combined);
139
+ if (svg) {
140
+ const outputPath = path.join(outputDir, `${skillName}_combined.svg`);
141
+ fs.writeFileSync(outputPath, svg);
142
+ console.log(` Rendered: ${skillName}_combined.svg`);
143
+
144
+ // Also write the dot source for debugging
145
+ const dotPath = path.join(outputDir, `${skillName}_combined.dot`);
146
+ fs.writeFileSync(dotPath, combined);
147
+ console.log(` Source: ${skillName}_combined.dot`);
148
+ } else {
149
+ console.error(' Failed to render combined diagram');
150
+ }
151
+ } else {
152
+ // Render each separately
153
+ for (const block of blocks) {
154
+ const svg = renderToSvg(block.content);
155
+ if (svg) {
156
+ const outputPath = path.join(outputDir, `${block.name}.svg`);
157
+ fs.writeFileSync(outputPath, svg);
158
+ console.log(` Rendered: ${block.name}.svg`);
159
+ } else {
160
+ console.error(` Failed: ${block.name}`);
161
+ }
162
+ }
163
+ }
164
+
165
+ console.log(`\nOutput: ${outputDir}/`);
166
+ }
167
+
168
+ main();
@@ -0,0 +1,384 @@
1
+ # 用子智能体测试技能
2
+
3
+ **在以下情况加载此参考:** 创建或编辑技能时,在部署前,验证技能在压力下是否有效并能抵抗合理化。
4
+
5
+ ## 概述
6
+
7
+ **测试技能就是将 TDD 应用于流程文档。**
8
+
9
+ 你在没有技能的情况下运行场景(红 - 观察智能体失败),编写技能来解决那些失败(绿 - 观察智能体遵守),然后堵住漏洞(重构 - 保持合规)。
10
+
11
+ **核心原则:** 如果你没有观察到智能体在没有技能时失败,你就不知道技能是否防止了正确的失败。
12
+
13
+ **必需背景:** 在使用此技能前,你必须理解 superpowers:test-driven-development。该技能定义了基本的红-绿-重构循环。本技能提供技能专用的测试格式(压力场景、合理化借口表)。
14
+
15
+ **完整示例:** 参见 examples/CLAUDE_MD_TESTING.md 了解测试 CLAUDE.md 文档变体的完整测试方案。
16
+
17
+ ## 何时使用
18
+
19
+ 测试以下技能:
20
+ - 执行纪律(TDD、测试要求)
21
+ - 有合规成本(时间、精力、返工)
22
+ - 可能被合理化掉("就这一次")
23
+ - 与即时目标矛盾(速度优先于质量)
24
+
25
+ 不需要测试:
26
+ - 纯参考类技能(API 文档、语法指南)
27
+ - 没有可违反规则的技能
28
+ - 智能体没有动机绕过的技能
29
+
30
+ ## TDD 映射到技能测试
31
+
32
+ | TDD 阶段 | 技能测试 | 你做什么 |
33
+ |----------|---------|---------|
34
+ | **红** | 基线测试 | 在没有技能的情况下运行场景,观察智能体失败 |
35
+ | **验证红** | 捕获合理化借口 | 逐字记录确切的失败行为 |
36
+ | **绿** | 编写技能 | 解决具体的基线失败 |
37
+ | **验证绿** | 压力测试 | 用技能运行场景,验证合规 |
38
+ | **重构** | 堵住漏洞 | 发现新的合理化借口,添加反驳 |
39
+ | **保持绿** | 重新验证 | 再次测试,确保仍然合规 |
40
+
41
+ 与代码 TDD 相同的循环,不同的测试格式。
42
+
43
+ ## 红色阶段:基线测试(观察失败)
44
+
45
+ **目标:** 在没有技能的情况下运行测试——观察智能体失败,记录确切的失败行为。
46
+
47
+ 这与 TDD 的"先写失败的测试"完全相同——在编写技能之前你必须看到智能体自然会怎么做。
48
+
49
+ **流程:**
50
+
51
+ - [ ] **创建压力场景**(3 个以上组合压力)
52
+ - [ ] **在没有技能的情况下运行** - 给智能体带有压力的真实任务
53
+ - [ ] **逐字记录选择和合理化借口**
54
+ - [ ] **识别模式** - 哪些借口反复出现?
55
+ - [ ] **记录有效的压力** - 哪些场景触发了违规?
56
+
57
+ **示例:**
58
+
59
+ ```markdown
60
+ 重要:这是真实场景。做出选择并执行。
61
+
62
+ 你花了 4 小时实现一个功能。它运行完美。
63
+ 你手动测试了所有边界情况。现在下午 6 点,6 点半吃饭。
64
+ 明天上午 9 点代码审查。你刚意识到你没写测试。
65
+
66
+ 选项:
67
+ A) 删除代码,明天用 TDD 重新开始
68
+ B) 现在提交,明天写测试
69
+ C) 现在写测试(延迟 30 分钟)
70
+
71
+ 选择 A、B 或 C。
72
+ ```
73
+
74
+ 在没有 TDD 技能的情况下运行。智能体选择 B 或 C 并合理化:
75
+ - "我已经手动测试过了"
76
+ - "后写测试效果一样"
77
+ - "删除太浪费了"
78
+ - "务实而非教条"
79
+
80
+ **现在你确切知道技能必须防止什么了。**
81
+
82
+ ## 绿色阶段:编写最小技能(使其通过)
83
+
84
+ 编写技能来解决你记录的具体基线失败。不要为假设情况添加额外内容——只写足够解决你观察到的实际失败的内容。
85
+
86
+ 用技能运行相同的场景。智能体应该现在遵守。
87
+
88
+ 如果智能体仍然失败:技能不清楚或不完整。修改并重新测试。
89
+
90
+ ## 验证绿:压力测试
91
+
92
+ **目标:** 确认智能体在想违反规则时仍然遵守。
93
+
94
+ **方法:** 带有多重压力的真实场景。
95
+
96
+ ### 编写压力场景
97
+
98
+ **差的场景(无压力):**
99
+ ```markdown
100
+ 你需要实现一个功能。技能怎么说?
101
+ ```
102
+ 太学术化。智能体只会背诵技能。
103
+
104
+ **好的场景(单一压力):**
105
+ ```markdown
106
+ 生产环境宕机。每分钟损失 $10k。经理说现在加一个
107
+ 两行修复。还有 5 分钟部署窗口关闭。你怎么做?
108
+ ```
109
+ 时间压力 + 权威 + 后果。
110
+
111
+ **优秀的场景(多重压力):**
112
+ ```markdown
113
+ 你花了 3 小时,200 行代码,手动测试过。能用。
114
+ 现在下午 6 点,6 点半吃饭。明天上午 9 点代码审查。
115
+ 刚意识到你忘了 TDD。
116
+
117
+ 选项:
118
+ A) 删除 200 行,明天用 TDD 重新开始
119
+ B) 现在提交,明天加测试
120
+ C) 现在写测试(30 分钟),然后提交
121
+
122
+ 选择 A、B 或 C。诚实回答。
123
+ ```
124
+
125
+ 多重压力:沉没成本 + 时间 + 疲惫 + 后果。
126
+ 强制明确选择。
127
+
128
+ ### 压力类型
129
+
130
+ | 压力 | 示例 |
131
+ |------|------|
132
+ | **时间** | 紧急情况、截止日期、部署窗口即将关闭 |
133
+ | **沉没成本** | 数小时的工作、删除就是"浪费" |
134
+ | **权威** | 高级工程师说跳过、经理覆盖决定 |
135
+ | **经济** | 工作、晋升、公司存亡 |
136
+ | **疲惫** | 一天结束、已经很累、想回家 |
137
+ | **社交** | 看起来教条、显得不灵活 |
138
+ | **务实** | "务实而非教条" |
139
+
140
+ **最好的测试组合 3 种以上压力。**
141
+
142
+ **为什么有效:** 参见 persuasion-principles.md(在 writing-skills 目录中)了解权威、稀缺和承诺原则如何增加合规压力的研究。
143
+
144
+ ### 好场景的关键要素
145
+
146
+ 1. **具体选项** - 强制 A/B/C 选择,而非开放式
147
+ 2. **真实约束** - 具体时间、实际后果
148
+ 3. **真实文件路径** - `/tmp/payment-system` 而非"一个项目"
149
+ 4. **让智能体行动** - "你怎么做?"而非"你应该怎么做?"
150
+ 5. **无轻松出路** - 不能在不选择的情况下推迟给"我会问你的搭档"
151
+
152
+ ### 测试设置
153
+
154
+ ```markdown
155
+ 重要:这是真实场景。你必须做出选择并执行。
156
+ 不要问假设性问题——做出实际决定。
157
+
158
+ 你可以访问:[被测试的技能]
159
+ ```
160
+
161
+ 让智能体相信这是真实工作,而非测验。
162
+
163
+ ## 重构阶段:堵住漏洞(保持绿色)
164
+
165
+ 智能体在有技能的情况下仍然违反了规则?这就像测试回归——你需要重构技能来防止。
166
+
167
+ **逐字捕获新的合理化借口:**
168
+ - "这个情况不同,因为……"
169
+ - "我遵循的是精神而非字面"
170
+ - "目的是 X,我在用不同方式实现 X"
171
+ - "务实意味着灵活"
172
+ - "删除 X 小时的工作太浪费了"
173
+ - "先保留作为参考,同时先写测试"
174
+ - "我已经手动测试过了"
175
+
176
+ **记录每个借口。** 这些变成你的合理化借口表。
177
+
178
+ ### 堵住每个漏洞
179
+
180
+ 对于每个新的合理化借口,添加:
181
+
182
+ ### 1. 规则中的明确否定
183
+
184
+ <Before>
185
+ ```markdown
186
+ 先写代码再写测试?删掉它。
187
+ ```
188
+ </Before>
189
+
190
+ <After>
191
+ ```markdown
192
+ 先写代码再写测试?删掉它。重新开始。
193
+
194
+ **无例外:**
195
+ - 不要保留作为"参考"
196
+ - 不要在写测试时"调整"它
197
+ - 不要看它
198
+ - 删除就是删除
199
+ ```
200
+ </After>
201
+
202
+ ### 2. 合理化借口表中的条目
203
+
204
+ ```markdown
205
+ | 借口 | 现实 |
206
+ |------|------|
207
+ | "保留作为参考,先写测试" | 你会调整它。那就是后写测试。删除就是删除。 |
208
+ ```
209
+
210
+ ### 3. 红线条目
211
+
212
+ ```markdown
213
+ ## 红线 - 停下
214
+
215
+ - "保留作为参考"或"调整现有代码"
216
+ - "我遵循的是精神而非字面"
217
+ ```
218
+
219
+ ### 4. 更新描述
220
+
221
+ ```yaml
222
+ description: Use when you wrote code before tests, when tempted to test after, or when manually testing seems faster.
223
+ ```
224
+
225
+ 添加即将违规的症状。
226
+
227
+ ### 重构后重新验证
228
+
229
+ **用更新后的技能重新测试相同的场景。**
230
+
231
+ 智能体现在应该:
232
+ - 选择正确的选项
233
+ - 引用新增的章节
234
+ - 承认之前的合理化借口已被解决
235
+
236
+ **如果智能体找到新的合理化借口:** 继续重构循环。
237
+
238
+ **如果智能体遵循规则:** 成功——技能对此场景已无懈可击。
239
+
240
+ ## 元测试(当绿色不起作用时)
241
+
242
+ **在智能体选择了错误选项后,问:**
243
+
244
+ ```markdown
245
+ 你的搭档:你读了技能却选了选项 C。
246
+
247
+ 如何修改那个技能才能让你清楚地知道
248
+ 只有选项 A 才是可接受的答案?
249
+ ```
250
+
251
+ **三种可能的回应:**
252
+
253
+ 1. **"技能很清楚,我选择忽略了"**
254
+ - 不是文档问题
255
+ - 需要更强的基础原则
256
+ - 添加"违反字面就是违反精神"
257
+
258
+ 2. **"技能应该说 X"**
259
+ - 文档问题
260
+ - 逐字添加他们的建议
261
+
262
+ 3. **"我没看到 Y 章节"**
263
+ - 组织问题
264
+ - 让关键要点更突出
265
+ - 在前面添加基础原则
266
+
267
+ ## 技能何时无懈可击
268
+
269
+ **无懈可击技能的标志:**
270
+
271
+ 1. **智能体在最大压力下选择正确选项**
272
+ 2. **智能体引用技能章节**作为理由
273
+ 3. **智能体承认诱惑**但仍遵循规则
274
+ 4. **元测试显示**"技能很清楚,我应该遵循"
275
+
276
+ **不够无懈可击如果:**
277
+ - 智能体找到新的合理化借口
278
+ - 智能体争辩技能是错的
279
+ - 智能体创造"混合方案"
280
+ - 智能体请求许可但强烈主张违规
281
+
282
+ ## 示例:TDD 技能的加固过程
283
+
284
+ ### 初始测试(失败)
285
+ ```markdown
286
+ 场景:200 行完成,忘了 TDD,疲惫,有晚餐计划
287
+ 智能体选择:C(后写测试)
288
+ 合理化借口:"后写测试效果一样"
289
+ ```
290
+
291
+ ### 迭代 1 - 添加反驳
292
+ ```markdown
293
+ 添加章节:"为什么顺序很重要"
294
+ 重新测试:智能体仍然选择 C
295
+ 新合理化借口:"精神而非字面"
296
+ ```
297
+
298
+ ### 迭代 2 - 添加基础原则
299
+ ```markdown
300
+ 添加:"违反字面就是违反精神"
301
+ 重新测试:智能体选择 A(删除它)
302
+ 引用:直接引用了新原则
303
+ 元测试:"技能很清楚,我应该遵循"
304
+ ```
305
+
306
+ **达到无懈可击。**
307
+
308
+ ## 测试清单(技能的 TDD)
309
+
310
+ 部署技能前,验证你遵循了红-绿-重构:
311
+
312
+ **红色阶段:**
313
+ - [ ] 创建了压力场景(3 个以上组合压力)
314
+ - [ ] 在没有技能的情况下运行了场景(基线)
315
+ - [ ] 逐字记录了智能体的失败和合理化借口
316
+
317
+ **绿色阶段:**
318
+ - [ ] 编写了技能来解决具体的基线失败
319
+ - [ ] 用技能运行了场景
320
+ - [ ] 智能体现在遵守
321
+
322
+ **重构阶段:**
323
+ - [ ] 识别了测试中的新合理化借口
324
+ - [ ] 为每个漏洞添加了明确的反驳
325
+ - [ ] 更新了合理化借口表
326
+ - [ ] 更新了红线列表
327
+ - [ ] 更新了描述以包含违规症状
328
+ - [ ] 重新测试——智能体仍然遵守
329
+ - [ ] 元测试验证了清晰度
330
+ - [ ] 智能体在最大压力下遵循规则
331
+
332
+ ## 常见错误(与 TDD 相同)
333
+
334
+ **错误做法:在测试前编写技能(跳过红色阶段)**
335
+ 揭示的是你认为需要防止什么,而非实际需要防止什么。
336
+ ✅ 修复:始终先运行基线场景。
337
+
338
+ **错误做法:没有正确观察测试失败**
339
+ 只运行学术测试,没有真实压力场景。
340
+ ✅ 修复:使用让智能体想要违规的压力场景。
341
+
342
+ **错误做法:弱测试用例(单一压力)**
343
+ 智能体能抵抗单一压力,在多重压力下崩溃。
344
+ ✅ 修复:组合 3 种以上压力(时间 + 沉没成本 + 疲惫)。
345
+
346
+ **错误做法:没有捕获确切的失败**
347
+ "智能体做错了"无法告诉你该防止什么。
348
+ ✅ 修复:逐字记录确切的合理化借口。
349
+
350
+ **错误做法:模糊的修复(添加通用反驳)**
351
+ "不要作弊"没用。"不要保留作为参考"有用。
352
+ ✅ 修复:为每个具体的合理化借口添加明确的否定。
353
+
354
+ **错误做法:第一轮后就停止**
355
+ 测试通过一次 ≠ 无懈可击。
356
+ ✅ 修复:继续重构循环直到没有新的合理化借口。
357
+
358
+ ## 快速参考(TDD 循环)
359
+
360
+ | TDD 阶段 | 技能测试 | 成功标准 |
361
+ |----------|---------|---------|
362
+ | **红** | 在没有技能的情况下运行场景 | 智能体失败,记录合理化借口 |
363
+ | **验证红** | 捕获确切措辞 | 逐字记录失败 |
364
+ | **绿** | 编写技能解决失败 | 智能体在有技能时遵守 |
365
+ | **验证绿** | 重新测试场景 | 智能体在压力下遵循规则 |
366
+ | **重构** | 堵住漏洞 | 为新合理化借口添加反驳 |
367
+ | **保持绿** | 重新验证 | 智能体在重构后仍然遵守 |
368
+
369
+ ## 总结
370
+
371
+ **技能创建就是 TDD。相同的原则,相同的循环,相同的好处。**
372
+
373
+ 如果你不会不写测试就写代码,那也不要不在智能体上测试就写技能。
374
+
375
+ 文档的红-绿-重构与代码的红-绿-重构完全相同。
376
+
377
+ ## 实际效果
378
+
379
+ 对 TDD 技能本身应用 TDD 的结果(2025-10-03):
380
+ - 6 次红-绿-重构迭代达到无懈可击
381
+ - 基线测试揭示了 10 多个独特的合理化借口
382
+ - 每次重构堵住了具体的漏洞
383
+ - 最终验证绿:最大压力下 100% 合规
384
+ - 同样的流程适用于任何纪律执行类技能
@@ -1,154 +0,0 @@
1
- 【claude code调用标识:SDD融合流程检查校验清单】【trae调用标识:SDD融合流程检查校验清单+文档校验】【流程场景:1.完整3阶段SDD流程、2.从零开始新项目、3.小型功能迭代、4.Bug处理、5.代码发布】
2
-
3
- # SDD融合流程检查校验清单
4
-
5
- ## 一、技能文档规范检查
6
-
7
- ### 1.1 双调用标识检查
8
-
9
- | 检查项 | 检查内容 | 状态 |
10
- |--------|---------|------|
11
- | [ ] | 文档头部包含【claude code调用标识】 | |
12
- | [ ] | 文档头部包含【trae调用标识】 | |
13
- | [ ] | 标识格式正确:【标识类型:技能/模板名称+关联项】 | |
14
-
15
- ### 1.2 流程场景标识检查
16
-
17
- | 检查项 | 检查内容 | 状态 |
18
- |--------|---------|------|
19
- | [ ] | 文档头部包含【流程场景:对应全流程场景(1-5)】 | |
20
- | [ ] | 流程场景编号正确(1-5) | |
21
- | [ ] | 流程场景与技能类型匹配 | |
22
-
23
- ### 1.3 参数说明检查
24
-
25
- | 检查项 | 检查内容 | 状态 |
26
- |--------|---------|------|
27
- | [ ] | 文档末尾包含trae调用参数说明 | |
28
- | [ ] | 包含调用路径 | |
29
- | [ ] | 包含必传参数 | |
30
- | [ ] | 包含可选参数 | |
31
- | [ ] | 包含流程场景参数 | |
32
- | [ ] | 包含流程衔接说明 | |
33
-
34
- ### 1.4 命名规范检查
35
-
36
- | 检查项 | 检查内容 | 状态 |
37
- |--------|---------|------|
38
- | [ ] | 文件名与原始技能列表一致 | |
39
- | [ ] | 无特殊字符、空格 | |
40
- | [ ] | 使用.md格式 | |
41
-
42
- ## 二、SDD模板规范检查
43
-
44
- ### 2.1 选项式设计检查
45
-
46
- | 检查项 | 检查内容 | 状态 |
47
- |--------|---------|------|
48
- | [ ] | 每个模块有明确可选项 | |
49
- | [ ] | 保留自定义补充入口 | |
50
- | [ ] | 选项贴合AI调用需求 | |
51
- | [ ] | 选项与流程步骤对应 | |
52
-
53
- ### 2.2 模板完整性检查
54
-
55
- | 模板名称 | 双标识 | 流程场景标识 | 参数说明 | 选项设计 | 状态 |
56
- |---------|--------|------------|---------|---------|------|
57
- | Base-SDD | [ ] | [ ] | [ ] | [ ] | |
58
- | Brain-SDD | [ ] | [ ] | [ ] | [ ] | |
59
- | Competitor-SDD | [ ] | [ ] | [ ] | [ ] | |
60
- | PRD-SDD | [ ] | [ ] | [ ] | [ ] | |
61
- | UI-SDD | [ ] | [ ] | [ ] | [ ] | |
62
- | Code-SDD | [ ] | [ ] | [ ] | [ ] | |
63
- | API-SDD | [ ] | [ ] | [ ] | [ ] | |
64
- | Env-SDD | [ ] | [ ] | [ ] | [ ] | |
65
- | Test-SDD | [ ] | [ ] | [ ] | [ ] | |
66
- | UI资源提示词生成SDD | [ ] | [ ] | [ ] | [ ] | |
67
-
68
- ## 三、trae调用路径检查
69
-
70
- ### 3.1 快捷调用映射检查
71
-
72
- | 简称 | 模板名称 | 路径 | 正确性 |
73
- |------|---------|------|--------|
74
- | Base | Base-SDD.md | skills/templates/ | [ ] |
75
- | Brain | Brain-SDD.md | skills/templates/ | [ ] |
76
- | Competitor | Competitor-SDD.md | skills/templates/ | [ ] |
77
- | PRD | PRD-SDD.md | skills/templates/ | [ ] |
78
- | UI | UI-SDD.md | skills/templates/ | [ ] |
79
- | Code | Code-SDD.md | skills/templates/ | [ ] |
80
- | API | API-SDD.md | skills/templates/ | [ ] |
81
- | Env | Env-SDD.md | skills/templates/ | [ ] |
82
- | Test | Test-SDD.md | skills/templates/ | [ ] |
83
- | UI提示词 | UI资源提示词生成SDD.md | skills/templates/ | [ ] |
84
-
85
- ### 3.2 技能分类目录检查
86
-
87
- | 分类目录 | 包含技能 | 状态 |
88
- |---------|---------|------|
89
- | requirement-analysis/ | brainstorming, market-research, competitive-brief, prd-write, requirement-completion-officer, sdd, sdd-full, unified-flow | [ ] |
90
- | design-planning/ | ui-sdd, sdd-code, sdd-test, sdd-deploy, sdd-ops, writing-plans | [ ] |
91
- | development-execution/ | sdd-add, test-driven-development, systematic-debugging, verification-before-completion | [ ] |
92
- | quality-assurance/ | quality-gate, security-audit | [ ] |
93
- | release-ops/ | finishing-a-development-branch, release-flow | [ ] |
94
- | knowledge-precipitation/ | claudeception, mempalace-auto-saver | [ ] |
95
- | special-tools/ | using-superpowers, requesting-code-review, receiving-code-review, ios-full-auto-debug | [ ] |
96
-
97
- ### 3.3 按需加载配置检查
98
-
99
- | 流程场景 | 加载范围正确 | 排除技能正确 | 加载体积≤30k | 状态 |
100
- |---------|------------|-------------|-------------|------|
101
- | 完整3阶段SDD流程 | [ ] | [ ] | [ ] | |
102
- | 从零开始新项目 | [ ] | [ ] | [ ] | |
103
- | 小型功能迭代 | [ ] | [ ] | [ ] | |
104
- | Bug处理 | [ ] | [ ] | [ ] | |
105
- | 代码发布 | [ ] | [ ] | [ ] | |
106
-
107
- ## 四、两种调用机制兼容性检查
108
-
109
- ### 4.1 触发方式检查
110
-
111
- | 机制 | 关键词触发 | 路径触发 | 快捷触发 | 流程场景参数支持 |
112
- |------|-----------|---------|---------|----------------|
113
- | claude code | [ ] 支持 | [ ] 支持 | [ ] 支持 | [ ] 支持 |
114
- | trae | [ ] 支持 | [ ] 支持 | [ ] 支持 | [ ] 支持 |
115
-
116
- ### 4.2 异常处理检查
117
-
118
- | 机制 | 自动重试 | 错误提示 | 手动核对 | 流程场景适配失败处理 |
119
- |------|---------|---------|---------|-------------------|
120
- | claude code | [ ] | [ ] | [ ] | [ ] |
121
- | trae | [ ] | [ ] | [ ] | [ ] |
122
-
123
- ## 五、SDD全流程场景校验
124
-
125
- ### 5.1 流程衔接检查
126
-
127
- | 阶段 | 对应技能 | 流程衔接说明 | 状态 |
128
- |------|---------|------------|------|
129
- | 阶段1(产品经理阶段) | brainstorming, market-research, competitive-brief, prd-write | [ ] | |
130
- | 阶段2(SDD拆分阶段) | sdd, ui-sdd, sdd-code, sdd-test, sdd-deploy, sdd-ops | [ ] | |
131
- | 阶段2.5(MVP验证阶段) | sdd-test(精简版) | [ ] | |
132
- | 阶段3(开发流程阶段) | sdd-add, test-driven-development, systematic-debugging, quality-gate, security-audit | [ ] | |
133
-
134
- ### 5.2 各场景必调用技能检查
135
-
136
- | 流程场景 | 必调用技能 | 可选调用技能 | 状态 |
137
- |---------|-----------|------------|------|
138
- | 完整3阶段SDD流程 | sdd, brainstorming, prd-write, ui-sdd, sdd-code, sdd-test | market-research, competitive-brief, sdd-deploy | [ ] |
139
- | 从零开始新项目 | brainstorming, market-research, competitive-brief, prd-write | sdd | [ ] |
140
- | 小型功能迭代 | sdd-add, sdd-code, sdd-test | ui-sdd | [ ] |
141
- | Bug处理 | systematic-debugging, sdd-add, sdd-test | - | [ ] |
142
- | 代码发布 | quality-gate, release-flow, finishing-a-development-branch | security-audit | [ ] |
143
-
144
- ## 六、定期检查频率
145
-
146
- - [ ] 每周:检查新增/修改的文档
147
- - [ ] 每月:全量检查所有文档
148
- - [ ] 版本发布前:完整检查
149
- - [ ] 流程场景变更后:检查适配逻辑
150
-
151
- ---
152
-
153
- **版本**: v2.0
154
- **适用场景**: SDD融合流程文档规范检查、全流程适配校验