@zhuan-ai/zhuanspec 2.16.4 → 2.16.6
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.
- package/dist/core/hooks/post-apply.d.ts +5 -4
- package/dist/core/hooks/post-apply.js +19 -36
- package/dist/core/hooks/record-progress.js +90 -3
- package/dist/core/hooks/summarize.js +8 -34
- package/dist/core/hooks/user-input-hook.js +6 -4
- package/dist/core/templates/agents-template.d.ts +1 -1
- package/dist/core/templates/agents-template.js +1 -1
- package/dist/core/templates/codex-hooks-template.js +1 -1
- package/dist/core/templates/slash-command-templates.js +4 -1
- package/package.json +1 -1
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Actions after Apply phase completes:
|
|
5
5
|
* 1. Reverse Sync deviation detection
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. Update progress.json
|
|
6
|
+
* 2. Report status (user manually triggers review in a new session)
|
|
8
7
|
*/
|
|
9
8
|
interface PostApplyOptions {
|
|
10
9
|
json?: boolean;
|
|
@@ -21,8 +20,10 @@ interface HookOutput {
|
|
|
21
20
|
}
|
|
22
21
|
export declare function postApplyHook(options: PostApplyOptions): Promise<void>;
|
|
23
22
|
/**
|
|
24
|
-
* Execute post-apply actions: deviation detection
|
|
25
|
-
*
|
|
23
|
+
* Execute post-apply actions: deviation detection only.
|
|
24
|
+
* Auto review trigger has been removed to ensure Stop hook fires correctly
|
|
25
|
+
* and apply phaseBaseline is properly marked.
|
|
26
|
+
* Users should manually run `zhuanspec review <change-id>` in a new session.
|
|
26
27
|
*/
|
|
27
28
|
export declare function executePostApply(changeDir: string, repoRoot: string): Promise<HookOutput>;
|
|
28
29
|
export {};
|
|
@@ -3,11 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Actions after Apply phase completes:
|
|
5
5
|
* 1. Reverse Sync deviation detection
|
|
6
|
-
* 2.
|
|
7
|
-
* 3. Update progress.json
|
|
6
|
+
* 2. Report status (user manually triggers review in a new session)
|
|
8
7
|
*/
|
|
9
8
|
import path from 'path';
|
|
10
|
-
import { execSync } from 'child_process';
|
|
11
9
|
import { FileSystemUtils } from '../../utils/file-system.js';
|
|
12
10
|
import { GitRepoDetector } from '../../utils/git-repo-detector.js';
|
|
13
11
|
import { getBeijingTime, atomicWriteJson, recoverProgressJsonForWrite, } from './record-progress.js';
|
|
@@ -40,51 +38,36 @@ async function runPostApplyHook(changeId) {
|
|
|
40
38
|
return await executePostApply(changeDir, repoRoot);
|
|
41
39
|
}
|
|
42
40
|
/**
|
|
43
|
-
* Execute post-apply actions: deviation detection
|
|
44
|
-
*
|
|
41
|
+
* Execute post-apply actions: deviation detection only.
|
|
42
|
+
* Auto review trigger has been removed to ensure Stop hook fires correctly
|
|
43
|
+
* and apply phaseBaseline is properly marked.
|
|
44
|
+
* Users should manually run `zhuanspec review <change-id>` in a new session.
|
|
45
45
|
*/
|
|
46
46
|
export async function executePostApply(changeDir, repoRoot) {
|
|
47
47
|
// 1. Reverse Sync deviation detection
|
|
48
48
|
const deviationResult = await detectDeviation(changeDir, repoRoot);
|
|
49
|
-
// 2.
|
|
49
|
+
// 2. Report deviation status (no auto review trigger)
|
|
50
50
|
if (!deviationResult.detected) {
|
|
51
51
|
try {
|
|
52
|
-
//
|
|
53
|
-
// NOTE: 此快照调用对新的 correctionContext 机制已非必须(精准归因由 resolve-correction
|
|
54
|
-
// → correctionContext → record-progress 三角完成),保留仅用于向后兼容旧 change 数据。
|
|
52
|
+
// Snapshot AI baseline (accuracy metric)
|
|
55
53
|
await triggerAccuracySnapshot(changeDir);
|
|
56
|
-
console.log('Post-apply: Triggering automatic review...');
|
|
57
|
-
execSync(`zhuanspec review`, {
|
|
58
|
-
cwd: repoRoot,
|
|
59
|
-
encoding: 'utf-8',
|
|
60
|
-
stdio: 'inherit',
|
|
61
|
-
});
|
|
62
|
-
// 3. Update progress.json
|
|
63
|
-
await updateProgressJson(changeDir, 'review_triggered');
|
|
64
|
-
return {
|
|
65
|
-
continue: true,
|
|
66
|
-
systemMessage: 'Post-apply: Review triggered automatically',
|
|
67
|
-
hookSpecificOutput: {
|
|
68
|
-
reviewTriggered: true,
|
|
69
|
-
deviationDetected: false,
|
|
70
|
-
},
|
|
71
|
-
};
|
|
72
54
|
}
|
|
73
|
-
catch
|
|
74
|
-
|
|
75
|
-
continue: true,
|
|
76
|
-
systemMessage: 'Post-apply: Review trigger failed (manual review required)',
|
|
77
|
-
hookSpecificOutput: {
|
|
78
|
-
reviewTriggered: false,
|
|
79
|
-
deviationDetected: false,
|
|
80
|
-
},
|
|
81
|
-
};
|
|
55
|
+
catch {
|
|
56
|
+
// snapshot failure is non-blocking
|
|
82
57
|
}
|
|
58
|
+
return {
|
|
59
|
+
continue: true,
|
|
60
|
+
systemMessage: 'Post-apply: No deviation detected. Please run `zhuanspec review` in a new session to enter Review phase.',
|
|
61
|
+
hookSpecificOutput: {
|
|
62
|
+
reviewTriggered: false,
|
|
63
|
+
deviationDetected: false,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
83
66
|
}
|
|
84
|
-
// Deviation detected -
|
|
67
|
+
// Deviation detected - report to user
|
|
85
68
|
return {
|
|
86
69
|
continue: true,
|
|
87
|
-
systemMessage: `Post-apply: Deviation detected (${deviationResult.files?.length || 0} files outside scope), review
|
|
70
|
+
systemMessage: `Post-apply: Deviation detected (${deviationResult.files?.length || 0} files outside scope), please update proposal before review`,
|
|
88
71
|
hookSpecificOutput: {
|
|
89
72
|
reviewTriggered: false,
|
|
90
73
|
deviationDetected: true,
|
|
@@ -405,6 +405,55 @@ function generateProposalChangeSummary(toolInput) {
|
|
|
405
405
|
// Truncate to 120 chars
|
|
406
406
|
return firstLine.length > 120 ? firstLine.substring(0, 117) + '...' : firstLine;
|
|
407
407
|
}
|
|
408
|
+
function parseApplyPatch(command) {
|
|
409
|
+
const result = { files: [], totalLinesAdded: 0, totalLinesRemoved: 0 };
|
|
410
|
+
if (!command)
|
|
411
|
+
return result;
|
|
412
|
+
const lines = command.split('\n');
|
|
413
|
+
let currentFile = null;
|
|
414
|
+
for (const line of lines) {
|
|
415
|
+
if (line.startsWith('*** Add File: ') || line.startsWith('*** Update File: ')) {
|
|
416
|
+
if (currentFile)
|
|
417
|
+
result.files.push(currentFile);
|
|
418
|
+
const filePath = line.replace(/^\*\*\* (?:Add|Update) File:\s*/, '').trim();
|
|
419
|
+
currentFile = { path: filePath, linesAdded: 0, linesRemoved: 0 };
|
|
420
|
+
}
|
|
421
|
+
else if (line.startsWith('*** Delete File: ')) {
|
|
422
|
+
if (currentFile)
|
|
423
|
+
result.files.push(currentFile);
|
|
424
|
+
const filePath = line.replace(/^\*\*\* Delete File:\s*/, '').trim();
|
|
425
|
+
currentFile = { path: filePath, linesAdded: 0, linesRemoved: 0 };
|
|
426
|
+
}
|
|
427
|
+
else if (line === '*** End Patch' || line === '*** Begin Patch') {
|
|
428
|
+
if (currentFile) {
|
|
429
|
+
result.files.push(currentFile);
|
|
430
|
+
currentFile = null;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
else if (line.startsWith('*** ')) {
|
|
434
|
+
// Other patch directives (e.g., *** Rename File:) — push current and skip
|
|
435
|
+
if (currentFile) {
|
|
436
|
+
result.files.push(currentFile);
|
|
437
|
+
currentFile = null;
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
else if (currentFile) {
|
|
441
|
+
if (line.startsWith('+'))
|
|
442
|
+
currentFile.linesAdded++;
|
|
443
|
+
else if (line.startsWith('-'))
|
|
444
|
+
currentFile.linesRemoved++;
|
|
445
|
+
// Context lines (space prefix or @@ markers) are ignored for counting
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
if (currentFile)
|
|
449
|
+
result.files.push(currentFile);
|
|
450
|
+
// Calculate totals
|
|
451
|
+
for (const f of result.files) {
|
|
452
|
+
result.totalLinesAdded += f.linesAdded;
|
|
453
|
+
result.totalLinesRemoved += f.linesRemoved;
|
|
454
|
+
}
|
|
455
|
+
return result;
|
|
456
|
+
}
|
|
408
457
|
async function runRecordProgress(filePath, toolName, success, stdinData) {
|
|
409
458
|
const cwd = resolveZhuanSpecRoot();
|
|
410
459
|
// Priority: filePath-derived > progress.json scan > environment variables
|
|
@@ -620,8 +669,31 @@ async function runRecordProgress(filePath, toolName, success, stdinData) {
|
|
|
620
669
|
progress.currentNode = process.env.ZHUANSPEC_CURRENT_NODE || phase;
|
|
621
670
|
progress.currentTask = currentTask || progress.currentTask;
|
|
622
671
|
progress.toolCalls.push(toolCall);
|
|
623
|
-
|
|
624
|
-
|
|
672
|
+
// === Codex apply_patch 支持 ===
|
|
673
|
+
// Codex 使用 apply_patch 工具,file_path 为空,实际内容在 command 字段的 patch 格式中
|
|
674
|
+
let patchResult = null;
|
|
675
|
+
if (toolName === 'apply_patch') {
|
|
676
|
+
const command = stdinData.tool_input?.command || '';
|
|
677
|
+
patchResult = parseApplyPatch(command);
|
|
678
|
+
// 用第一个文件路径作为 filePath(用于 accuracy 追踪和 change detection)
|
|
679
|
+
if (patchResult.files.length > 0 && !filePath) {
|
|
680
|
+
filePath = patchResult.files[0].path;
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
const WRITE_TOOLS = new Set(['Write', 'Edit', 'MultiEdit', 'NotebookEdit', 'apply_patch']);
|
|
684
|
+
if (toolName === 'apply_patch' && patchResult) {
|
|
685
|
+
// apply_patch 可修改多文件,逐一加入 filesModified
|
|
686
|
+
const zhuanspecDirPrefix = path.resolve(process.cwd(), 'zhuanspec') + path.sep;
|
|
687
|
+
for (const f of patchResult.files) {
|
|
688
|
+
if (!f.path || progress.filesModified.includes(f.path))
|
|
689
|
+
continue;
|
|
690
|
+
const absF = path.isAbsolute(f.path) ? f.path : path.resolve(process.cwd(), f.path);
|
|
691
|
+
if (!absF.startsWith(zhuanspecDirPrefix)) {
|
|
692
|
+
progress.filesModified.push(f.path);
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
else if (filePath && WRITE_TOOLS.has(toolName) && !progress.filesModified.includes(filePath)) {
|
|
625
697
|
// Exclude ZhuanSpec internal files (spec/metrics/doc files inside zhuanspec/ dir)
|
|
626
698
|
const absFilePath = path.isAbsolute(filePath) ? filePath : path.resolve(process.cwd(), filePath);
|
|
627
699
|
const zhuanspecDirPrefix = path.resolve(process.cwd(), 'zhuanspec') + path.sep;
|
|
@@ -631,7 +703,7 @@ async function runRecordProgress(filePath, toolName, success, stdinData) {
|
|
|
631
703
|
}
|
|
632
704
|
// Detect proposal file changes and record them
|
|
633
705
|
const changePath = path.join(zhuanspecDir, 'changes', changeId);
|
|
634
|
-
const WRITE_EDIT_TOOLS = new Set(['Write', 'Edit', 'MultiEdit']);
|
|
706
|
+
const WRITE_EDIT_TOOLS = new Set(['Write', 'Edit', 'MultiEdit', 'apply_patch']);
|
|
635
707
|
if (filePath && WRITE_EDIT_TOOLS.has(toolName) && isProposalFile(filePath, changePath)) {
|
|
636
708
|
const relativeProposalPath = path.relative(changePath, path.isAbsolute(filePath) ? filePath : path.resolve(cwd, filePath));
|
|
637
709
|
// 提案文件变更行数:按工具类型取不同字段,避免 Edit/MultiEdit 全记为 0
|
|
@@ -652,6 +724,16 @@ async function runRecordProgress(filePath, toolName, success, stdinData) {
|
|
|
652
724
|
contentLines += Math.max(ns, os);
|
|
653
725
|
}
|
|
654
726
|
}
|
|
727
|
+
else if (toolName === 'apply_patch' && patchResult) {
|
|
728
|
+
// apply_patch 的提案文件变更行数:用 patch 中涉及该提案文件的行数
|
|
729
|
+
const absChangePath = path.isAbsolute(changePath) ? changePath : path.resolve(cwd, changePath);
|
|
730
|
+
for (const f of patchResult.files) {
|
|
731
|
+
const absF = path.isAbsolute(f.path) ? f.path : path.resolve(cwd, f.path);
|
|
732
|
+
if (absF.startsWith(absChangePath + path.sep)) {
|
|
733
|
+
contentLines += f.linesAdded + f.linesRemoved;
|
|
734
|
+
}
|
|
735
|
+
}
|
|
736
|
+
}
|
|
655
737
|
const record = {
|
|
656
738
|
changeRecordId: `pc-${Date.now()}`,
|
|
657
739
|
timestamp,
|
|
@@ -725,6 +807,11 @@ async function runRecordProgress(filePath, toolName, success, stdinData) {
|
|
|
725
807
|
}
|
|
726
808
|
contentSource = toolInputEdits.length > 0 ? 'edits[]' : 'none';
|
|
727
809
|
}
|
|
810
|
+
else if (toolName === 'apply_patch' && patchResult) {
|
|
811
|
+
// Codex apply_patch:统计 patch 中所有 +/- 行
|
|
812
|
+
changeLines = patchResult.totalLinesAdded + patchResult.totalLinesRemoved;
|
|
813
|
+
contentSource = patchResult.files.length > 0 ? 'command' : 'none';
|
|
814
|
+
}
|
|
728
815
|
let estimatedLines = 0;
|
|
729
816
|
// === P0 兜底:post-baseline-fallback ===
|
|
730
817
|
// 正常链路:UserPromptSubmit 的 user-input hook 会在 phaseBaseline 已打标时写入
|
|
@@ -9,7 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import path from 'path';
|
|
11
11
|
import { promises as fsPromises } from 'fs';
|
|
12
|
-
import { execSync } from 'child_process';
|
|
13
12
|
import { FileSystemUtils } from '../../utils/file-system.js';
|
|
14
13
|
import { executePostApply } from './post-apply.js';
|
|
15
14
|
import { getBeijingTime, detectActiveChange, atomicWriteJson } from './record-progress.js';
|
|
@@ -89,38 +88,15 @@ async function runSummarize() {
|
|
|
89
88
|
nextTask = pendingTasks[0].taskId;
|
|
90
89
|
}
|
|
91
90
|
}
|
|
92
|
-
//
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
let autoReviewPassed = false;
|
|
91
|
+
// Deviation detection only (no auto review trigger).
|
|
92
|
+
// Apply 完成后不再自动触发 review,确保 Stop hook 正确闪断以标记 apply baseline。
|
|
93
|
+
// 用户需在新会话中手动执行 `zhuanspec review <change-id>` 进入 review 阶段。
|
|
96
94
|
let deviationDetected = false;
|
|
97
95
|
if (phase === 'apply' && allTasksComplete) {
|
|
98
|
-
// Execute post-apply hook to detect deviations
|
|
96
|
+
// Execute post-apply hook to detect deviations only
|
|
99
97
|
const postApplyResult = await executePostApply(changeDir, cwd);
|
|
100
98
|
if (postApplyResult.hookSpecificOutput?.deviationDetected) {
|
|
101
99
|
deviationDetected = true;
|
|
102
|
-
// Don't trigger review if deviation detected
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
// No deviation - proceed with auto review
|
|
106
|
-
const autoReviewEnabled = process.env.ZHUANSPEC_AUTO_REVIEW !== 'false';
|
|
107
|
-
const reviewPath = path.join(metricsDir, 'review.json');
|
|
108
|
-
const hasReviewReport = await FileSystemUtils.fileExists(reviewPath);
|
|
109
|
-
if (autoReviewEnabled && !hasReviewReport) {
|
|
110
|
-
try {
|
|
111
|
-
execSync(`zhuanspec review "${changeId}"`, {
|
|
112
|
-
cwd,
|
|
113
|
-
stdio: 'pipe',
|
|
114
|
-
encoding: 'utf-8',
|
|
115
|
-
});
|
|
116
|
-
autoReviewTriggered = true;
|
|
117
|
-
autoReviewPassed = true;
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
autoReviewTriggered = true;
|
|
121
|
-
autoReviewPassed = false;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
100
|
}
|
|
125
101
|
}
|
|
126
102
|
// Calculate metrics
|
|
@@ -242,14 +218,12 @@ async function runSummarize() {
|
|
|
242
218
|
}
|
|
243
219
|
}
|
|
244
220
|
if (allTasksComplete) {
|
|
245
|
-
systemMessage += `\n✅ All tasks completed!
|
|
221
|
+
systemMessage += `\n✅ All tasks completed! Apply 阶段已结束。\n`;
|
|
246
222
|
if (deviationDetected) {
|
|
247
223
|
systemMessage += `⚠️ DEVIATION DETECTED. Please update proposal (Reverse Sync) before proceeding to Review.\n`;
|
|
248
224
|
}
|
|
249
|
-
else
|
|
250
|
-
systemMessage +=
|
|
251
|
-
? `✅ Auto review executed successfully.\n`
|
|
252
|
-
: `⚠️ Auto review executed but failed. Please check zhuanspec review output.\n`;
|
|
225
|
+
else {
|
|
226
|
+
systemMessage += `📌 如需进入 Review 阶段,请在新会话中执行:zhuanspec review "${changeId}"\n`;
|
|
253
227
|
}
|
|
254
228
|
}
|
|
255
229
|
else if (nextTask) {
|
|
@@ -330,7 +304,7 @@ async function runSummarize() {
|
|
|
330
304
|
waveCompleted: currentWave?.waveId,
|
|
331
305
|
nextTask,
|
|
332
306
|
allTasksComplete,
|
|
333
|
-
autoReviewTriggered,
|
|
307
|
+
autoReviewTriggered: false,
|
|
334
308
|
pitfallAskPending,
|
|
335
309
|
metrics: {
|
|
336
310
|
totalToolCalls: progressData?.toolCalls.length || 0,
|
|
@@ -185,17 +185,19 @@ export async function userInputHook(content, responseTimeMs) {
|
|
|
185
185
|
logDebug(cwd, { event: 'skip', reason: 'content-too-short', changeId, phase, phaseSource, contentLen });
|
|
186
186
|
return { continue: true };
|
|
187
187
|
}
|
|
188
|
-
// Skip slash/bang commands
|
|
189
|
-
//
|
|
188
|
+
// Skip slash/bang/dollar commands:
|
|
189
|
+
// Claude Code: /zhuanspec:proposal, /compact, /clear, !ls
|
|
190
|
+
// Codex: $zhuanspec-proposal, $zhuanspec-techDesign 等 skill 触发
|
|
191
|
+
// 这类 prompt 是命令/workflow 触发,非"用户对 AI 产出的纠偏/澄清/补充",
|
|
190
192
|
// 不应计入 user_inputs.json,更不应放进纠偏溯源池影响 accuracyRate。
|
|
191
193
|
// 注意:Claude Code 在 slash 命令前会注入 NAK(U+0015) 等 C0 控制字符做标记,
|
|
192
194
|
// 普通 trim() 不会剥控制字符,必须显式剥掉前缀的 C0/DEL 再做正则判定,
|
|
193
195
|
// 否则像 "\u0015/zhuanspec:proposal" 这种命令会漏过过滤被记成普通用户输入。
|
|
194
196
|
const trimmedContent = content.trim().replace(/^[\x00-\x1F\x7F]+/, '');
|
|
195
|
-
if (/^[
|
|
197
|
+
if (/^[/!$][A-Za-z0-9_:/@.\-]+(\s|$)/.test(trimmedContent) || /^\/[\w:\-]+$/.test(trimmedContent)) {
|
|
196
198
|
logDebug(cwd, {
|
|
197
199
|
event: 'skip',
|
|
198
|
-
reason: '
|
|
200
|
+
reason: 'skill-command',
|
|
199
201
|
changeId,
|
|
200
202
|
phase,
|
|
201
203
|
phaseSource,
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const agentsTemplate = "# ZhuanSpec \u4F7F\u7528\u8BF4\u660E\n\n\u9762\u5411\u4F7F\u7528 ZhuanSpec \u8FDB\u884C\u89C4\u8303\u9A71\u52A8\u5F00\u53D1\u7684 AI \u7F16\u7A0B\u52A9\u624B\u7684\u8BF4\u660E\u6587\u6863\u3002\n\n---\n\n## \u26A1 \u4E09\u6761\u94C1\u5F8B\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF09\n\n> \u4E09\u6761\u94C1\u5F8B\u662F ZhuanSpec \u5DE5\u4F5C\u6D41\u7684\u6838\u5FC3\u7EA6\u675F\uFF0C\u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u5FC5\u987B\u9075\u5B88\u3002\n\n| \u94C1\u5F8B | \u542B\u4E49 | \u8FDD\u53CD\u540E\u679C |\n|------|------|---------|\n| **No Spec, No Code** | \u6CA1\u6709\u6587\u6863\u4E0D\u51C6\u5199\u4EE3\u7801 | Propose \u9636\u6BB5\u4EA7\u51FA spec \u624D\u80FD\u8FDB\u5165 Apply |\n| **Spec is Truth** | \u6587\u6863\u4E0E\u4EE3\u7801\u51B2\u7A81\u65F6\uFF0C\u9519\u7684\u4E00\u5B9A\u662F\u4EE3\u7801 | \u5F52\u6863\u65F6\u5F3A\u5236\u6821\u9A8C Spec-Code \u4E00\u81F4\u6027 |\n| **Reverse Sync** | \u53D1\u73B0\u504F\u5DEE\u5148\u4FEE Spec\uFF0C\u518D\u4FEE\u4EE3\u7801 | Apply \u9636\u6BB5\u6BCF\u5B8C\u6210\u4E00\u4E2A Task \u505A\u504F\u5DEE\u68C0\u6D4B |\n\n### \u94C1\u5F8B\u6267\u884C\u673A\u5236\n\n**\u94C1\u5F8B\u4E00\u6267\u884C**\uFF1A\n- Propose \u9636\u6BB5\u521B\u5EFA\u63D0\u6848\u540E\uFF0C\u5FC5\u987B\u7B49\u5F85\u7528\u6237\u660E\u786E\u6279\u51C6\uFF08\u56DE\u590D\"Plan Approved\"\u6216\u9009\u62E9\"\u6279\u51C6\uFF0C\u8FDB\u5165\u5B9E\u65BD\u9636\u6BB5\"\uFF09\u624D\u80FD\u8FDB\u5165 Apply\n- \u81EA\u52A8\u9A8C\u8BC1\u901A\u8FC7\u540E\uFF0C\u4F7F\u7528\u9009\u9879\u5F0F\u4EA4\u4E92\uFF08AskUserQuestion\uFF09\u5F39\u51FA\u786E\u8BA4\u5BF9\u8BDD\u6846\n- \u672A\u6279\u51C6\u524D\uFF0CPreToolUse Hook \u963B\u65AD\u6240\u6709\u4EE3\u7801\u4FEE\u6539\u64CD\u4F5C\n\n**\u94C1\u5F8B\u4E8C\u6267\u884C**\uFF1A\n- Archive \u9636\u6BB5\u524D\uFF0C\u5FC5\u987B\u9A8C\u8BC1\u5F52\u6863\u5185\u5BB9\u4E0E\u4EE3\u7801\u5B9E\u73B0\u4E00\u81F4\n- \u5982\u4E0D\u4E00\u81F4\uFF0C\u5FC5\u987B\u5148\u66F4\u65B0\u5F52\u6863\u5185\u5BB9\uFF0C\u518D\u5B8C\u6210\u5F52\u6863\n- PreArchive Hook \u68C0\u67E5 Spec-Code \u4E00\u81F4\u6027\n\n**\u94C1\u5F8B\u4E09\u6267\u884C**\uFF1A\n- Apply \u9636\u6BB5\u6BCF\u6B21 Write/Edit \u64CD\u4F5C\u524D\uFF0CPreToolUse Hook \u68C0\u6D4B\u504F\u79BB\n- **\u504F\u79BB\u68C0\u6D4B\u89E6\u53D1\u673A\u5236**\uFF1A\n - \u63D0\u6848\u8303\u56F4\u5916\u6587\u4EF6\u4FEE\u6539\u65F6\u81EA\u52A8\u89E6\u53D1\n - \u7528\u6237\u8F93\u5165\u7EA0\u6B63\u5173\u952E\u8BCD\uFF08\"\u4E0D\u5BF9\"\u3001\"\u9519\u4E86\"\u3001\"\u8FD9\u91CC\u5E94\u8BE5\u662F\"\u7B49\uFF09\u65F6\u81EA\u52A8\u89E6\u53D1\n - \u901A\u8FC7\u8BFB\u53D6 `progress.json` \u7684 `phase` \u5B57\u6BB5\u5224\u65AD\u5F53\u524D\u9636\u6BB5\n- \u5982\u679C\u4FEE\u6539\u6587\u4EF6\u4E0D\u5728\u63D0\u6848\u8303\u56F4\u5185\uFF0C\u89E6\u53D1\u504F\u79BB\u5904\u7406\u6D41\u7A0B\uFF1A\n 1. \u5F39\u51FA\u9009\u9879\u5F0F\u4EA4\u4E92\uFF1A\u66F4\u65B0\u63D0\u6848\u540E\u7EE7\u7EED / Bug\u4FEE\u590D\u8C41\u514D / \u53D6\u6D88\u4FEE\u6539\n 2. \u7528\u6237\u9009\u62E9\"\u66F4\u65B0\u63D0\u6848\u540E\u7EE7\u7EED\" \u2192 AI \u8FDB\u5165 Propose \u6A21\u5F0F \u2192 \u81EA\u52A8\u66F4\u65B0 proposal.md \u548C tasks.md \u2192 `zhuanspec validate --auto-fix` \u2192 \u8FD4\u56DE Apply \u6267\u884C\u539F\u4FEE\u6539\n 3. \u7528\u6237\u9009\u62E9\"Bug\u4FEE\u590D\u8C41\u514D\" \u2192 \u6807\u8BB0\u4E3A Bug \u4FEE\u590D \u2192 \u5141\u8BB8\u4FEE\u6539\uFF0C\u8DF3\u8FC7\u63D0\u6848\u6D41\u7A0B\n 4. \u7528\u6237\u9009\u62E9\"\u53D6\u6D88\" \u2192 \u4E0D\u6267\u884C\u4FEE\u6539 \u2192 \u7EE7\u7EED\u539F\u4EFB\u52A1\n- **\u504F\u79BB\u4FEE\u6B63\u6D41\u7A0B**\uFF08\u7528\u6237\u7EA0\u6B63\u65F6\uFF09\uFF1A\n 1. \u5148\u4FEE\u6539 spec \u6587\u4EF6\uFF0C\u5B9E\u65F6\u540C\u6B65\u7528\u6237\u786E\u8BA4\n 2. \u7528\u6237\u786E\u8BA4\u540E\u4FEE\u6539\u4EE3\u7801\uFF0C\u5B8C\u6210\u540E\u9A8C\u8BC1\n 3. \u7528\u6237\u786E\u8BA4\u65E0\u8BEF\u540E\u89E6\u53D1\u77E5\u8BC6\u6C89\u6DC0\n\n### AI \u81EA\u7531\u5EA6\u63A7\u5236\u77E9\u9635\n\n| \u9636\u6BB5 | \u81EA\u7531\u5EA6 | \u5141\u8BB8\u884C\u4E3A | \u7981\u6B62\u884C\u4E3A |\n|------|--------|---------|---------|\n| **Propose** | \u9AD8 | \u63A2\u7D22\u4EE3\u7801\u3001\u8BBE\u8BA1\u65B9\u6848\u3001\u63D0\u95EE\u6F84\u6E05 | \u7F16\u5199\u4EFB\u4F55\u4EE3\u7801 |\n| **Apply** | \u96F6 | \u4E25\u683C\u6309 tasks.md \u65BD\u5DE5 | \u8D85\u51FA\u63D0\u6848\u8303\u56F4\u4FEE\u6539\u3001\u81EA\u884C\u6DFB\u52A0\u4EFB\u52A1 |\n| **Review** | \u4E2D | \u9A8C\u8BC1\u5B9E\u73B0\u3001\u751F\u6210\u6D4B\u8BD5\u3001\u5BA1\u67E5\u4EE3\u7801 | \u4FEE\u6539\u529F\u80FD\u4EE3\u7801 |\n| **Archive** | \u4F4E | \u5408\u5E76\u89C4\u8303\u3001\u751F\u6210\u6458\u8981 | \u4FEE\u6539\u5DF2\u5F52\u6863\u5185\u5BB9 |\n\n---\n\n## \u77E5\u8BC6\u5E93\u68C0\u67E5\n\n**\u5DE5\u4F5C\u533A\u8FB9\u754C\uFF08\u5F3A\u5236\uFF09**\uFF1A\u67E5\u627E\u6587\u6863\u3001\u68C0\u7D22\u5DE5\u7A0B\u4EE3\u7801\u3001\u6267\u884C grep/glob/ls \u65F6\uFF0C\u8303\u56F4\u5FC5\u987B\u9650\u5B9A\u5728\u5F53\u524D ZhuanSpec \u5DE5\u4F5C\u533A\u5185\u3002\u7981\u6B62\u4F7F\u7528\u8DE8\u4E0A\u7EA7\u76EE\u5F55\u7684 glob\uFF08\u5982 `../**`\uFF09\u3001\u4E0A\u7EA7\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\u6216\u624B\u52A8\u62FC\u63A5\u5230\u5DE5\u4F5C\u533A\u5916\u8DEF\u5F84\u3002Glob \u8FD4\u56DE\u76F8\u5BF9\u8DEF\u5F84\u65F6\uFF0C\u5FC5\u987B\u4EE5\u672C\u6B21\u5DE5\u5177\u8C03\u7528\u7684 `path` \u53C2\u6570\u4F5C\u4E3A\u57FA\u51C6\u62FC\u63A5\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u5F97\u8BEF\u89E3\u4E3A\u5F53\u524D\u76EE\u5F55\u6216\u4E0A\u7EA7\u76EE\u5F55\u3002\n\n**\u5728\u4EFB\u4F55\u9636\u6BB5\u5F00\u59CB\u524D\uFF0C\u5FC5\u987B\u5148\u68C0\u67E5\u77E5\u8BC6\u5E93\u5E76\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\uFF1A**\n\n| \u64CD\u4F5C | \u547D\u4EE4 | \u76EE\u7684 |\n|------|------|------|\n| \u641C\u7D22\u9677\u9631 | `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/troubleshooting/` | \u907F\u514D\u91CD\u590D\u8E29\u5751 |\n| \u641C\u7D22\u6700\u4F73\u5B9E\u8DF5 | `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/best-practices/` | \u5B66\u4E60\u6210\u529F\u7ECF\u9A8C |\n| \u641C\u7D22\u9690\u5F0F\u7EA6\u5B9A | `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/implicit-conventions/` | \u7406\u89E3\u56E2\u961F\u7EA6\u5B9A |\n| \u9605\u8BFB\u77E5\u8BC6\u7D22\u5F15 | `cat zhuanspec/knowledge/index.md` | \u4E86\u89E3\u9879\u76EE\u7EA7\u77E5\u8BC6\u6458\u8981 |\n| \u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6 | `@skill:load-project-knowledge` | \u6E10\u8FDB\u5F0F\u52A0\u8F7D\u9879\u76EE\u67B6\u6784\u3001\u670D\u52A1\u5B9A\u4F4D\u3001\u68C0\u7D22\u4F18\u5148\u8DEF\u5F84\u548C\u67B6\u6784\u7EA6\u675F |\n\n**\u77E5\u8BC6\u5E93\u4F5C\u7528**\uFF1A\n- \u51CF\u5C11\u91CD\u590D\u8E29\u5751\uFF0C\u79EF\u7D2F\u9879\u76EE\u7ECF\u9A8C\n- \u63D0\u4F9B\u56E2\u961F\u9690\u5F0F\u7EA6\u5B9A\u7684\u4E66\u9762\u8BB0\u5F55\n- \u52A0\u901F\u65B0\u6210\u5458\u878D\u5165\u548C\u77E5\u8BC6\u4F20\u627F\n- \u901A\u8FC7 `@skill:load-project-knowledge` \u6E10\u8FDB\u5F0F\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\uFF0C\u83B7\u53D6 matched_services\u3001search_priority\u3001architecture_constraints\uFF0C\u6309\u4F18\u5148\u8DEF\u5F84\u7F29\u5C0F\u4EE3\u7801\u5B9A\u4F4D\u8303\u56F4\n\n---\n\n## \u5FEB\u901F\u68C0\u67E5\u6E05\u5355\n\n- \u641C\u7D22\u73B0\u6709\u5DE5\u4F5C\uFF1A`zhuanspec spec list --long`\u3001`zhuanspec list`\uFF08\u4EC5\u4F7F\u7528 `rg` \u8FDB\u884C\u5168\u6587\u641C\u7D22\uFF09\n- **\u68C0\u67E5\u77E5\u8BC6\u5E93**\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u9677\u9631\u548C\u6700\u4F73\u5B9E\u8DF5\n- \u786E\u5B9A\u8303\u56F4\uFF1A\u65B0\u529F\u80FD vs \u4FEE\u6539\u73B0\u6709\u529F\u80FD\n- \u9009\u62E9\u552F\u4E00\u7684 `change-id`\uFF1Akebab-case \u683C\u5F0F\uFF0C\u52A8\u8BCD\u5F00\u5934\uFF08`add-`\u3001`update-`\u3001`remove-`\u3001`refactor-`\uFF09\n- \u642D\u5EFA\u7ED3\u6784\uFF1A`proposal.md`\u3001`tasks.md`\u3001`design.md`\uFF0C\u4EE5\u53CA\u6BCF\u4E2A\u53D7\u5F71\u54CD\u529F\u80FD\u7684\u89C4\u8303\u589E\u91CF\n- \u7F16\u5199\u589E\u91CF\uFF1A\u4F7F\u7528 `## ADDED|MODIFIED|REMOVED|RENAMED Requirements`\uFF1B\u6BCF\u4E2A\u8981\u6C42\u81F3\u5C11\u5305\u542B\u4E00\u4E2A `#### Scenario:`\n- \u9A8C\u8BC1\uFF1A\u8FD0\u884C `zhuanspec validate [change-id] --strict` \u5E76\u4FEE\u590D\u95EE\u9898\n- \u8BF7\u6C42\u6279\u51C6\uFF1A\u5728\u63D0\u6848\u83B7\u5F97\u6279\u51C6\u4E4B\u524D\u4E0D\u8981\u5F00\u59CB\u5B9E\u65BD\n\n## \u8FDB\u5EA6\u6C47\u62A5\u7EA6\u5B9A\n\nApply \u9636\u6BB5\u6267\u884C\u6BCF\u4E2A\u4EFB\u52A1\u65F6\uFF0C\u5FC5\u987B\u6309\u4EE5\u4E0B\u683C\u5F0F\u8F93\u51FA\u8FDB\u5EA6\uFF1A\n\n**\u4EFB\u52A1\u5F00\u59CB\u65F6**\uFF1A\n```\n\u2501\u2501\u2501 \uD83D\uDE80 \u5F00\u59CB\u4EFB\u52A1 [X.Y/N] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u4EFB\u52A1: [\u4EFB\u52A1\u63CF\u8FF0]\nWave: W/N | Phase: Apply\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n**\u4EFB\u52A1\u5B8C\u6210\u540E**\uFF1A\n```\n\u2501\u2501\u2501 \u2705 \u4EFB\u52A1\u5B8C\u6210 [X.Y/N] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u5DF2\u4FEE\u6539: [\u6587\u4EF6\u5217\u8868]\n\u4E0B\u4E00\u4E2A: [\u4E0B\u4E00\u4EFB\u52A1ID]\n\u6574\u4F53\u8FDB\u5EA6: \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591 XX.X%\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n**\u8FDB\u5EA6\u6761\u683C\u5F0F**\uFF1A\n- \u4F7F\u7528 12 \u4E2A block \u5B57\u7B26\uFF08\u2588 \u548C \u2591\uFF09\n- \u8FDB\u5EA6\u767E\u5206\u6BD4 = (\u5DF2\u5B8C\u6210\u4EFB\u52A1\u6570 / \u603B\u4EFB\u52A1\u6570) \u00D7 100\n- \u4FDD\u7559 1 \u4F4D\u5C0F\u6570\n\n**\u793A\u4F8B**\uFF1A\n- 3/8 \u5B8C\u6210 \u2192 `\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591 37.5%`\n- 6/8 \u5B8C\u6210 \u2192 `\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591 75.0%`\n\n---\n\n## \u56DB\u9636\u6BB5\u5DE5\u4F5C\u6D41\n\n### \u9636\u6BB5 1\uFF1A\u521B\u5EFA\u53D8\u66F4\n\u5728\u4EE5\u4E0B\u60C5\u51B5\u4E0B\u521B\u5EFA\u63D0\u6848\uFF1A\n- \u6DFB\u52A0\u529F\u80FD\u6216\u7279\u6027\n- \u8FDB\u884C\u7834\u574F\u6027\u66F4\u6539\uFF08API\u3001schema\uFF09\n- \u66F4\u6539\u67B6\u6784\u6216\u6A21\u5F0F\n- \u4F18\u5316\u6027\u80FD\uFF08\u6539\u53D8\u884C\u4E3A\uFF09\n- \u66F4\u65B0\u5B89\u5168\u6A21\u5F0F\n\n\u89E6\u53D1\u8BCD\u793A\u4F8B\uFF1A\n- \"\u5E2E\u6211\u521B\u5EFA\u4E00\u4E2A\u53D8\u66F4\u63D0\u6848\"\n- \"\u5E2E\u6211\u89C4\u5212\u4E00\u4E2A\u53D8\u66F4\"\n- \"\u5E2E\u6211\u521B\u5EFA\u4E00\u4E2A\u63D0\u6848\"\n- \"\u6211\u60F3\u521B\u5EFA\u4E00\u4E2A\u89C4\u8303\u63D0\u6848\"\n- \"\u6211\u60F3\u521B\u5EFA\u4E00\u4E2A\u89C4\u8303\"\n\n\u5BBD\u677E\u5339\u914D\u6307\u5BFC\uFF1A\n- \u5305\u542B\u4EE5\u4E0B\u4E4B\u4E00\uFF1A`proposal`\u3001`change`\u3001`spec`\n- \u4E0E\u4EE5\u4E0B\u4E4B\u4E00\u7EC4\u5408\uFF1A`create`\u3001`plan`\u3001`make`\u3001`start`\u3001`help`\n\n\u8DF3\u8FC7\u63D0\u6848\u7684\u60C5\u51B5\uFF1A\n- Bug \u4FEE\u590D\uFF08\u6062\u590D\u9884\u671F\u884C\u4E3A\uFF09\n- \u62FC\u5199\u9519\u8BEF\u3001\u683C\u5F0F\u3001\u6CE8\u91CA\n- \u4F9D\u8D56\u66F4\u65B0\uFF08\u975E\u7834\u574F\u6027\uFF09\n- \u914D\u7F6E\u66F4\u6539\n- \u73B0\u6709\u884C\u4E3A\u7684\u6D4B\u8BD5\n\n**\u5DE5\u4F5C\u6D41**\n0. **\u68C0\u67E5\u77E5\u8BC6\u5E93\u3001\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\u5E76\u5BA1\u67E5\u9879\u76EE**\uFF1A\n - \u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u9677\u9631\u548C\u6700\u4F73\u5B9E\u8DF5\uFF0C\u907F\u514D\u91CD\u590D\u8E29\u5751\n - \u9605\u8BFB `zhuanspec/knowledge/index.md` \u4E86\u89E3\u9879\u76EE\u7EA7\u77E5\u8BC6\u6458\u8981\n - **\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6**\uFF1A\u8C03\u7528 `@skill:load-project-knowledge` \u8FDB\u884C\u6E10\u8FDB\u5F0F\u52A0\u8F7D\uFF1A\n * \u8F93\u5165\uFF1Adomain\uFF08\u5F53\u524D\u9879\u76EE\uFF09\u3001keywords\uFF08\u4ECE\u9700\u6C42\u63CF\u8FF0\u63D0\u53D6\uFF09\n * \u83B7\u53D6\uFF1Amatched_services\uFF08\u6D89\u53CA\u7684\u670D\u52A1\u5217\u8868\uFF09\u3001search_priority\uFF08\u68C0\u7D22\u4F18\u5148\u8DEF\u5F84\uFF09\u3001architecture_constraints\uFF08\u67B6\u6784\u7EA6\u675F\uFF09\n * \u4F7F\u7528\uFF1A\u540E\u7EED\u4EE3\u7801\u5B9A\u4F4D\u4F7F\u7528 search_priority \u9650\u5B9A\u8303\u56F4\uFF0C\u65B9\u6848\u8BBE\u8BA1\u68C0\u67E5 architecture_constraints\n * \u517C\u5BB9\u7B56\u7565\uFF1A\u82E5\u672A\u627E\u5230 project.md \u6216\u5173\u952E\u8BCD\u65E0\u5339\u914D\uFF0C\u8F93\u51FA\u8B66\u544A\u5E76\u4F7F\u7528\u5168\u5C40\u68C0\u7D22\n - **\u5DE5\u7A0B\u4EE3\u7801\u68C0\u7D22**\uFF1A\u4F7F\u7528 `@skill:load-project-knowledge` \u8FD4\u56DE\u7684 search_priority \u9650\u5B9A\u68C0\u7D22\u8303\u56F4\uFF0C\u6309\u4F18\u5148\u8DEF\u5F84\u5B9A\u4F4D\u4EE3\u7801\uFF1B\u4EC5\u5F53 Skill \u65E0\u5339\u914D\u7ED3\u679C\u65F6\uFF0C\u624D\u56DE\u9000\u5230 `grep/glob` \u6216\u5168\u5C40\u68C0\u7D22\n - \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u9879\u76EE\u7EA6\u5B9A\uFF08\u63D0\u793A\uFF1A\"\u2713 Loaded project.md\"\uFF09\n - \u5BA1\u67E5 `zhuanspec/project.md`\uFF0C`zhuanspec list` \u548C `zhuanspec list --specs` \u4EE5\u4E86\u89E3\u5F53\u524D\u4E0A\u4E0B\u6587\u3002\n1. **\u6D4B\u8BD5 case \u6765\u6E90\u786E\u8BA4\uFF08\u6700\u5148\u6267\u884C\uFF0C\u7981\u6B62\u8DF3\u8FC7\uFF09**\uFF1A\n \u5728\u8FDB\u884C\u4EFB\u4F55\u6F84\u6E05\u3001\u8BBE\u8BA1\u6216\u7F16\u5199\u4EFB\u4F55\u63D0\u6848\u6587\u4EF6\u4E4B\u524D\uFF0C\u4F7F\u7528\u9009\u9879\u5F0F\u4EA4\u4E92\u8BE2\u95EE\u7528\u6237\uFF1A\n - \u9009\u9879 A\uFF1A\u63D0\u4F9B\u6D4B\u8BD5 case\uFF08\u6709\u73B0\u6210 case\uFF0C\u8D70 TDD \u6A21\u5F0F\uFF09\n - \u9009\u9879 B\uFF1A\u6682\u4E0D\u63D0\u4F9B\u6D4B\u8BD5 case\n - \u9009\u9879 C\uFF1A\u5176\u4ED6\uFF08\u8BF7\u5728\u540E\u7EED\u8865\u5145\u8BF4\u660E\uFF09\n\n \u7528\u6237\u9009\u62E9\"\u63D0\u4F9B\u6D4B\u8BD5 case\"\u65F6\uFF1A\u8FDB\u5165 TDD \u9A71\u52A8\u6A21\u5F0F\n - \u660E\u786E\u544A\u77E5\uFF1A\u6D4B\u8BD5\u7528\u4F8B\u5C06\u7528\u4E8E\u9700\u6C42\u5B9A\u4E49\u3001\u5355\u5143\u6D4B\u8BD5\u751F\u6210\u3001\u5B9E\u65BD\u9A8C\u8BC1\n - \u82E5\u7528\u6237\u63D0\u4F9B\u94FE\u63A5\uFF08\u683C\u5F0F\uFF1A`https://zzcase.zhuanspirit.com/plan/taskDetail/module/{moduleId}/task/{taskId}`\uFF09\uFF0C\u4ECE URL \u63D0\u53D6 `moduleId`\uFF0C\u8C03\u7528 MCP \u5DE5\u5177 `mcp__caseweb__GET_get2` \u8BFB\u53D6\u6570\u636E\uFF1B\u5426\u5219\u624B\u52A8\u5F55\u5165\n - \u521B\u5EFA test-cases.md \u8BB0\u5F55\u6D4B\u8BD5 case \u8BE6\u60C5\uFF08\u6BCF\u4E2A TC-XXX \u542B\u524D\u7F6E\u6761\u4EF6\u3001\u6B65\u9AA4\u3001\u9884\u671F\u7ED3\u679C\u3001\u9A8C\u6536\u70B9\uFF09\n - tasks.md \u4F7F\u7528 `@test-case:TC-XXX` \u6807\u7B7E\u5173\u8054\u4EFB\u52A1\u4E0E\u6D4B\u8BD5 case\n - \u4EFB\u52A1\u5B9E\u65BD\u987A\u5E8F\u8C03\u6574\u4E3A\uFF1A\u5148\u5199\u6D4B\u8BD5 \u2192 \u518D\u5199\u5B9E\u73B0 \u2192 \u9A8C\u8BC1\u6D4B\u8BD5\u901A\u8FC7\n\n \u7528\u6237\u9009\u62E9\"\u6682\u4E0D\u63D0\u4F9B\"\uFF1A\u8DF3\u8FC7\uFF0C\u6309\u5E38\u89C4\u6D41\u7A0B\u7EE7\u7EED\n \u7528\u6237\u9009\u62E9\"\u5176\u4ED6\"\uFF1A\u7B49\u5F85\u7528\u6237\u8865\u5145\u8BF4\u660E\u540E\u7EE7\u7EED\n\n \u26A0\uFE0F **CHECKPOINT [TEST-CASE-INQUIRY]**\uFF1A\n \u65E0\u8BBA\u7528\u6237\u9009\u62E9\u4EC0\u4E48\uFF0C\u5FC5\u987B**\u7ACB\u5373**\u5C06\u7ED3\u679C\u8BB0\u5F55\u5230 tasks.md \u7684 `## Test Case Source Log` \u6BB5\n \uFF08\u82E5 tasks.md \u5C1A\u672A\u521B\u5EFA\uFF0C\u5148\u521B\u5EFA\u5E76\u5199\u5165\u6B64\u6BB5\uFF0C\u5176\u4F59\u5185\u5BB9\u540E\u7EED\u8865\u5145\uFF09\uFF1A\n ```\n ## Test Case Source Log\n - \u7528\u6237\u56DE\u7B54\uFF1A[\u63D0\u4F9B\u6D4B\u8BD5 case / \u6682\u4E0D\u63D0\u4F9B / \u5177\u4F53\u8BF4\u660E]\n - TDD \u6A21\u5F0F\uFF1A[\u542F\u7528 / \u7981\u7528]\n - \uFF08\u5982\u542F\u7528\uFF09\u6D4B\u8BD5 case \u6765\u6E90\uFF1A[\u94FE\u63A5 / \u624B\u52A8\u5F55\u5165 / bicId]\n ```\n \u6B64\u6BB5\u4E0D\u5F97\u4E3A\u7A7A\uFF0Cvalidate --strict \u4F1A**\u65E0\u6761\u4EF6**\u68C0\u67E5\u5176\u5B58\u5728\u4E0E\u5185\u5BB9\uFF0C\u7F3A\u5931\u76F4\u63A5\u62A5 ERROR\u3002\n \u672A\u5B8C\u6210\u6B64 checkpoint \u8BB0\u5F55\u4E4B\u524D\uFF0C\u7981\u6B62\u6267\u884C\u6B65\u9AA4 2 \u53CA\u540E\u7EED\u4EFB\u4F55\u6587\u4EF6\u5199\u5165\u64CD\u4F5C\u3002\n\n2. **\u5F3A\u5236\u6F84\u6E05\u68C0\u67E5\uFF08\u5FC5\u987B\u6267\u884C\uFF0C\u4E0D\u53EF\u8DF3\u8FC7\uFF09**\uFF1A\u5206\u6790\u7528\u6237\u8BF7\u6C42\uFF0C\u8BC6\u522B\u6240\u6709\u4E0D\u786E\u5B9A\u6216\u6A21\u7CCA\u7684\u65B9\u9762\uFF08\u8303\u56F4\u3001\u6280\u672F\u9009\u62E9\u3001\u5B9E\u73B0\u7EC6\u8282\u3001\u6570\u636E\u83B7\u53D6\u6765\u6E90\u3001\u670D\u52A1\u5206\u5C42\u3001\u4F9D\u8D56\u5173\u7CFB\u3001\u4F18\u5148\u7EA7\u3001\u9A8C\u6536\u6807\u51C6\u7B49......\uFF09\u3002\u5982\u679C\u53D1\u73B0\u4EFB\u4F55\u6A21\u7CCA\u4E4B\u5904\uFF0C\u5FC5\u987B\u505C\u6B62\u5E76\u4F7F\u7528**\u9009\u9879\u5F0F\u4EA4\u4E92**\uFF08\u5982 `AskQuestion` \u5DE5\u5177\uFF09\u63D0\u95EE\uFF0C\u83B7\u5F97\u660E\u786E\u7B54\u590D\u540E\u624D\u80FD\u7EE7\u7EED\u3002\u4E25\u7981\u5728\u4E0D\u786E\u5B9A\u7684\u60C5\u51B5\u4E0B\u81EA\u884C\u63A8\u6D4B\u6216\u521B\u5EFA\u63D0\u6848\uFF0C\u4E25\u7981\u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57\u3002\n\n \u26A0\uFE0F **CHECKPOINT [PRE-CLARIFICATION]**:\n You MUST record the pre-clarification result in tasks.md under \"## Pre-Clarification Log\":\n - If questions were asked: Record each question and the user's answer\n - If no clarification needed: Write \"Status: COMPLETED - No clarification needed\" with brief justification\n - This section MUST NOT be empty or contain only HTML comments\n - NEVER proceed to proposal writing without completing this checkpoint\n\n3. \u9009\u62E9\u4E00\u4E2A\u552F\u4E00\u7684\u52A8\u8BCD\u5F00\u5934\u7684 `change-id`\uFF0C\u5E76\u5728 `zhuanspec/changes/<id>/` \u4E0B\u642D\u5EFA `proposal.md`\u3001`tasks.md`\u3001`design.md` \u548C\u89C4\u8303\u589E\u91CF\u3002\n4. \u5C06\u53D8\u66F4\u6620\u5C04\u4E3A\u5177\u4F53\u7684\u529F\u80FD\u6216\u8981\u6C42\uFF0C\u5C06\u591A\u8303\u56F4\u7684\u5DE5\u4F5C\u5206\u89E3\u4E3A\u5177\u6709\u660E\u786E\u5173\u7CFB\u548C\u987A\u5E8F\u7684\u4E0D\u540C\u89C4\u8303\u589E\u91CF\u3002\n5. \u5F53\u89E3\u51B3\u65B9\u6848\u8DE8\u8D8A\u591A\u4E2A\u7CFB\u7EDF\u3001\u5F15\u5165\u65B0\u6A21\u5F0F\u6216\u5728\u63D0\u4EA4\u89C4\u8303\u4E4B\u524D\u9700\u8981\u6743\u8861\u8BA8\u8BBA\u65F6\uFF0C\u5728 `design.md` \u4E2D\u6355\u83B7\u67B6\u6784\u63A8\u7406\u3002\n\n \u26A0\uFE0F **CHECKPOINT [DESIGN-EXTERNAL-DEPENDENCY-GATE]**\uFF08\u63D0\u6848\u9636\u6BB5\u524D\u7F6E\u95ED\u73AF\uFF0C\u5FC5\u987B\u5728 design.md \u65B0\u5EFA/\u66F4\u65B0\u540E\u7ACB\u5373\u6267\u884C\uFF09\uFF1A\n 1. **\u4F9D\u8D56\u8BC6\u522B**\uFF1A\u5168\u91CF\u7F57\u5217 ES / MQ / Redis / SCF-RPC / HTTP / OSS / Config(Apollo) / Job \u516B\u7C7B\u5916\u90E8\u4F9D\u8D56\uFF0C\u6309\u7C7B\u578B\u5206\u6876\uFF1B\u4F9D\u8D56\u6E05\u5355\u4F18\u5148\u4ECE techDesign \u9636\u6BB5\u4EA7\u51FA\u63D0\u53D6\uFF0C\u7F3A\u5931\u65F6\u4ECE\u7528\u6237\u63D0\u4F9B\u7684\u6280\u672F\u65B9\u6848 / specs \u4E2D\u8865\u9F50\n 2. **\u786C\u89C4\u5219\u4F7F\u7528 AskQuestion**\uFF1A\u53EA\u8981\u67D0\u9879\u4F9D\u8D56\u7684\u72B6\u6001 / \u7248\u672C / \u8D1F\u8D23\u65B9 / \u515C\u5E95\u7B56\u7565\u4EFB\u4E00\u5B57\u6BB5\u4E0D\u660E\u786E\uFF0C**\u5FC5\u987B** \u8C03\u7528 `AskQuestion` \u4E00\u6B21\u6027\u5C55\u793A\u9009\u9879\uFF1B\u4E25\u7981\u9ED8\u8BA4\u5199 \u2705 \u6216 \u201C\u5F85\u786E\u8BA4\u201D\u8DF3\u8FC7\n 3. **\u77E9\u9635\u843D\u5730**\uFF1A\u6839\u636E\u7528\u6237\u56DE\u7B54\u5C06\u7ED3\u679C\u5199\u5165 design.md \u7684\u300C\u5916\u90E8\u4F9D\u8D56\u53EF\u7528\u6027\u77E9\u9635\u300D\u6BB5\uFF0C\u8868\u5934\u5FC5\u987B\u4E3A **6 \u5217**\uFF1A\n `| \u4F9D\u8D56\u540D\u79F0 | \u7C7B\u578B | \u72B6\u6001 | \u7248\u672C/\u73AF\u5883 | \u515C\u5E95/\u963B\u585E\u7B56\u7565 | \u8D1F\u8D23\u65B9 |`\n 4. **\u95ED\u73AF\u5B8C\u7ED3**\uFF1A\u672C\u6B65\u9AA4\u7ED3\u675F\u524D\u6240\u6709 techDesign \u9636\u6BB5\u6807\u8BB0\u4E3A \u26A0\uFE0F / \u2753 \u7684\u6761\u76EE\u5FC5\u987B\u6C89\u6DC0\u4E3A \u2705 / \u274C / \u2705+\u515C\u5E95\uFF0C**\u4E0D\u5141\u8BB8\u7559\u767D**\uFF1B\u8BE5\u77E9\u9635\u662F propose / apply / \u96C6\u6210\u9A8C\u8BC1\u9636\u6BB5\u7684\u552F\u4E00\u4E8B\u5B9E\u6E90\n\n \u26A0\uFE0F **CHECKPOINT [DATA-STORAGE-STRATEGY]**\uFF08\u4EC5\u5F53\u6280\u672F\u65B9\u6848\u5305\u542B\u65B0\u589E\u8868 / CREATE TABLE / t_* \u65F6\u5F3A\u5236\u6267\u884C\uFF09\uFF1A\u5FC5\u987B\u7528 `AskQuestion` \u6279\u91CF\u6F84\u6E05 **\u9884\u4F30\u6570\u91CF\u7EA7 / \u67E5\u8BE2\u573A\u666F / \u8BFB\u5199 QPS / \u65F6\u6548\u6027 / \u4E00\u81F4\u6027\uFF08\u542B\u8DE8\u8868\u4E8B\u52A1\uFF09** 5 \u5B57\u6BB5\uFF0C\u5E76\u5728 design.md \u5199\u5165 **8 \u5217** \u300C## \u6570\u636E\u5B58\u50A8\u7B56\u7565\u300D\u8868\uFF1A`| \u8868\u540D | \u9884\u4F30\u6570\u91CF\u7EA7 | \u67E5\u8BE2\u573A\u666F | \u8BFB/\u5199 QPS | \u65F6\u6548\u6027 | \u4E00\u81F4\u6027\uFF08\u542B\u8DE8\u8868\u4E8B\u52A1\uFF09 | \u5B58\u50A8\u7B56\u7565 | \u5907\u6CE8 |`\u3002\u4EFB\u4E00\u5217\u51FA\u73B0 `TBD` / \u7A7A / \u5F85\u8BC4\u4F30 \u2192 \u672A\u901A\u8FC7\uFF0C\u7981\u6B62\u8FDB\u5165\u89C4\u8303\u589E\u91CF\u7F16\u5199\u3002\n\n6. \u5728 `changes/<id>/specs/<capability>/spec.md` \u4E2D\u8D77\u8349\u89C4\u8303\u589E\u91CF\uFF08\u6BCF\u4E2A\u529F\u80FD\u4E00\u4E2A\u6587\u4EF6\u5939\uFF09\uFF0C\u4F7F\u7528 `## ADDED|MODIFIED|REMOVED Requirements`\uFF0C\u6BCF\u4E2A\u8981\u6C42\u81F3\u5C11\u5305\u542B\u4E00\u4E2A `#### Scenario:`\uFF0C\u5E76\u5728\u76F8\u5173\u65F6\u4EA4\u53C9\u5F15\u7528\u76F8\u5173\u529F\u80FD\u3002\n\n \u26A0\uFE0F **CHECKPOINT [SPEC-REQUIREMENT-FORMAT]**\uFF1A\n \u6BCF\u4E2A `### Requirement:` \u5757\u5199\u5B8C\u540E\u5FC5\u987B\u81EA\u68C0\u4EE5\u4E0B\u4E24\u70B9\uFF0C\u8FDD\u53CD\u4EFB\u610F\u4E00\u6761 `zhuanspec validate` \u4F1A\u62A5 ERROR\uFF1A\n 1. **\u5FC5\u987B\u6709\u9700\u6C42\u63CF\u8FF0\u6587\u672C**\uFF1Aheader \u4E4B\u540E\u3001\u7B2C\u4E00\u4E2A `#### Scenario` \u4E4B\u524D\uFF0C\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u884C\u975E\u7A7A\u7684\u9700\u6C42\u63CF\u8FF0\u6587\u672C\uFF1B\u4E0D\u80FD\u76F4\u63A5\u4ECE `### Requirement:` \u8DF3\u5230 `#### Scenario:`\u3002\n 2. **\u7B2C\u4E00\u884C\u63CF\u8FF0\u5FC5\u987B\u5305\u542B SHALL \u6216 MUST**\uFF1A\u9A8C\u8BC1\u5668\u7528 `/\\b(SHALL|MUST)\\b/` \u68C0\u67E5\u7B2C\u4E00\u884C\uFF0C\u7F3A\u5931\u76F4\u63A5 ERROR\u3002\u6B63\u786E\u793A\u4F8B\uFF1A`\u7CFB\u7EDF MUST \u63D0\u4F9B...` / `The system SHALL...`\uFF1B\u9519\u8BEF\u793A\u4F8B\uFF1A\u4EC5\u5199\u666E\u901A\u9648\u8FF0\u53E5\uFF08\u5982\"\u63D0\u4F9B\u5BA2\u6237\u67E5\u8BE2\u80FD\u529B\"\uFF09\u3002\n\n7. **\u53D1\u73B0\u53EF\u7528 Skill \u5E76\u521B\u5EFA tasks.md**\uFF1A\n - \u8FD0\u884C `zhuanspec skills list --json` \u83B7\u53D6\u5F53\u524D\u73AF\u5883\u4E2D\u53EF\u7528\u7684 skill \u5217\u8868\u53CA\u5176 description\n - \u5728 `proposal.md` \u7684 **Skill Mapping** \u6BB5\u4E2D\u57FA\u4E8E skill description \u8FDB\u884C\u8BED\u4E49\u5339\u914D\uFF1A\n - \u4ED4\u7EC6\u9605\u8BFB\u6BCF\u4E2A skill \u7684 description\uFF0C\u7406\u89E3\u5176\u5177\u4F53\u529F\u80FD\u548C\u9002\u7528\u573A\u666F\n - \u53EA\u6709\u5F53\u5B9E\u73B0\u533A\u57DF\u7684\u5B9E\u9645\u529F\u80FD\u4E0E skill description \u660E\u786E\u5339\u914D\u65F6\u624D\u5173\u8054\n - \u7B80\u5355\u7684\u4EE3\u7801\u4FEE\u6539\uFF08\u5982\u679A\u4E3E\u503C\u589E\u5220\uFF09\u5E94\u5339\u914D\u901A\u7528\u7F16\u7801\u89C4\u8303 skill\uFF0C\u800C\u975E\u67B6\u6784\u7EA7 skill\n - \u907F\u514D\u4EC5\u56E0\u6A21\u5757\u540D\u79F0\u6216\u6587\u4EF6\u8DEF\u5F84\u4E2D\u7684\u5173\u952E\u8BCD\u800C\u9519\u8BEF\u5339\u914D\n - \u5728\u8868\u683C\u4E2D\u8BF4\u660E\u5339\u914D\u7406\u7531\n - **\u4EFB\u52A1\u5206\u89E3\u89C4\u5219\uFF08\u6A21\u677F\u9A71\u52A8\uFF09**\uFF1A\n - \u6BCF\u4E2A\u4EFB\u52A1\u6309\u7C7B\u578B\u4F7F\u7528\u56FA\u5B9A\u6A21\u677F\uFF0C\u5FC5\u987B\u586B\u6EE1\u6240\u6709\u5B57\u6BB5\uFF08\u6587\u4EF6 \u2192 \u4F4D\u7F6E \u2192 \u5185\u5BB9 \u2192 \u9A8C\u8BC1\uFF09\uFF1A\n * **\u65B0\u589E\u6587\u4EF6\u4EFB\u52A1**\uFF1A\u5FC5\u987B\u5305\u542B `\u6587\u4EF6`\uFF08\u5B8C\u6574\u76F8\u5BF9\u8DEF\u5F84+\"\u65B0\u589E\"\u6807\u8BB0\uFF09\u3001`\u5185\u5BB9`\uFF08\u7C7B\u5B9A\u4E49\u3001\u4F9D\u8D56\u6CE8\u5165\u3001\u6838\u5FC3\u65B9\u6CD5\u7B7E\u540D+\u8FD4\u56DE\u7C7B\u578B\u3001\u5173\u952E\u903B\u8F91\u6D41\u7A0B\u3001\u5B57\u6BB5\u5217\u8868\uFF09\u3001`\u9A8C\u8BC1`\uFF08\u6B63\u5E38+\u5F02\u5E38\u573A\u666F\u7684\u8F93\u5165\u8F93\u51FA\u65AD\u8A00\uFF09\n * **\u4FEE\u6539\u6587\u4EF6\u4EFB\u52A1**\uFF1A\u5FC5\u987B\u5305\u542B `\u6587\u4EF6`\uFF08\u5B8C\u6574\u76F8\u5BF9\u8DEF\u5F84+\u603B\u884C\u6570\uFF09\u3001`\u4FEE\u6539\u4F4D\u7F6E`\uFF08L\u884C\u53F7\u8303\u56F4+\u51FD\u6570\u540D\uFF09\u3001`\u5185\u5BB9`\uFF08\u5177\u4F53\u6539\u4EC0\u4E48\u548C\u600E\u4E48\u6539\uFF09\u3001`\u9A8C\u8BC1`\uFF08\u4FEE\u6539\u540E\u9884\u671F\u884C\u4E3A+\u56DE\u5F52\u9A8C\u8BC1\uFF09\n - \u4EFB\u52A1\u7F16\u53F7\u4E25\u683C\u4F7F\u7528 N.M \u683C\u5F0F\uFF08\u5982 1.1\u30012.3\uFF09\uFF0C\u4E0D\u5141\u8BB8 3.2a \u7B49\u975E\u6807\u51C6\u7F16\u53F7\n - \u6BCF\u4E2A\u4EFB\u52A1\u5FC5\u987B\u5305\u542B @ref \u6807\u7B7E\u6307\u5411\u6280\u672F\u65B9\u6848\u5177\u4F53\u7AE0\u8282\uFF08\u683C\u5F0F\uFF1A@ref:<tech-spec\u8DEF\u5F84>#\u7AE0\u8282\u7F16\u53F7-\u7AE0\u8282\u540D\u79F0\uFF0C\u8DEF\u5F84\u4E3A\u5B9E\u9645\u5B9A\u4F4D\u5230\u7684\u6280\u672F\u65B9\u6848\u6587\u4EF6\u76F8\u5BF9\u8DEF\u5F84\uFF09\n - **\u6280\u672F\u65B9\u6848\u6444\u53D6**\uFF1A\u5F53\u6280\u672F\u65B9\u6848\u6587\u6863\u5B58\u5728\u65F6\uFF08\u6309\u4F18\u5148\u7EA7\uFF1A\u7528\u6237 --tech-spec \u6307\u5B9A\u8DEF\u5F84 > techDesign/tech-spec.md\uFF09\uFF1A\n * \u9010\u7AE0\u89E3\u6790 DB \u8868\u3001\u63A5\u53E3\u65B9\u6CD5\u3001ES \u7D22\u5F15\u3001MQ\u3001\u914D\u7F6E\u9879\u7B49\u5143\u7D20\n * \u6BCF\u4E2A\u6280\u672F\u5143\u7D20\u5FC5\u987B\u5BF9\u5E94\u81F3\u5C11\u4E00\u4E2A\u4EFB\u52A1\n * \u4EFB\u52A1\u7684\"\u5185\u5BB9\"\u6BB5\u5FC5\u987B\u5F15\u7528\u6280\u672F\u65B9\u6848\u4E2D\u7684\u5177\u4F53\u5B57\u6BB5\u5B9A\u4E49\uFF08\u5982\u8868\u5B57\u6BB5\u5217\u8868\u3001\u63A5\u53E3\u5165\u53C2\u51FA\u53C2\u3001\u679A\u4E3E\u503C\uFF09\n * \u65B0\u589E Coverage Checklist \u6BB5\uFF0C\u786E\u4FDD\u8986\u76D6\u7387 >= 95%\n - **\u7981\u6B62\u6A21\u7CCA\u63CF\u8FF0**\uFF1A\n * \u7981\u6B62\uFF1A\"\u521B\u5EFA CustomerMapper\" \u2014 \u7F3A\u5C11\u6587\u4EF6\u8DEF\u5F84\u3001\u65B9\u6CD5\u5217\u8868\u3001\u5173\u952E\u903B\u8F91\n * \u6B63\u786E\uFF1A\"\u521B\u5EFA CustomerMapper\" + \u6587\u4EF6\u8DEF\u5F84 + \u7EE7\u627F BaseMapper<CustomerEntity> + 3\u4E2A\u81EA\u5B9A\u4E49\u65B9\u6CD5\u7B7E\u540D + \u9A8C\u8BC1\n * \u4EFB\u52A1\u63CF\u8FF0\u5FC5\u987B\u81EA\u5305\u542B\uFF1AAI \u6267\u884C\u65F6\u4E0D\u9700\u8981\u518D\u8BFB\u6280\u672F\u65B9\u6848\u731C\u6D4B\u5B9E\u73B0\u7EC6\u8282\n - \u5C06 `tasks.md` \u8D77\u8349\u4E3A\u6709\u5E8F\u7684\u5C0F\u578B\u3001\u53EF\u9A8C\u8BC1\u5DE5\u4F5C\u9879\u5217\u8868\n - \u4F7F\u7528 `@skill:<real-skill-name>` \u6807\u6CE8\u4E0E skill \u5339\u914D\u7684\u4EFB\u52A1\uFF08\u652F\u6301\u591A\u4E2A\uFF1A`@skill:name1,name2`\uFF09\n - \u4EC5\u5F53 skill \u660E\u786E\u5339\u914D\u4EFB\u52A1\u65F6\u624D\u6807\u6CE8\uFF0C\u6CA1\u6709\u5339\u914D\u7684 skill \u53EF\u7701\u7565\u6807\u7B7E\n\n \u26A0\uFE0F **CHECKPOINT [SKILL-TAGGING]**:\n 1. You MUST run `zhuanspec skills list` first and record discovered skills in the Skill Mapping table\n 2. Every task MUST have either @skill:real-skill-name or @skill:none\n 3. If @skill:none, you MUST provide a justification (e.g., \"pure config change, no skill applies\")\n 4. @skill names MUST match exactly the names returned by `zhuanspec skills list` \u2014 do NOT invent skill names\n 5. The Skill Mapping table in tasks.md MUST NOT be empty\n 6. validate --strict will verify all @skill names exist in the known skill list\n\n \u26A0\uFE0F **CHECKPOINT [TASK-ORDERING]**:\n 1. Tasks in tasks.md MUST be organized under Wave headers (### Wave 1, ### Wave 2, etc.)\n 2. Wave assignment must be computed from @depends relationships (Wave 1 = no deps, Wave N = depends on Wave N-1)\n 3. No task may appear before a task it depends on\n 4. You MUST add a \"## Dependency Analysis\" section at the end with \"Status: COMPLETED\"\n 5. validate --strict will verify task ordering matches computed waves\n 6. \u5982\u679C\u591A\u4E2A\u4EFB\u52A1\u63CF\u8FF0\u4E2D\u5F15\u7528\u4E86\u76F8\u540C\u6587\u4EF6\u8DEF\u5F84\uFF0C\u5FC5\u987B\u5728 \"## File Conflict Analysis\" \u8868\u4E2D\u58F0\u660E\uFF1A\n - \u5404\u4EFB\u52A1\u4FEE\u6539\u7684\u5177\u4F53\u533A\u57DF\uFF08\u51FD\u6570\u540D\u3001\u884C\u53F7\u8303\u56F4\u3001\u914D\u7F6E\u8282\u540D\u79F0\uFF09\n - \u9694\u79BB\u7B56\u7565\uFF1Aparallel\uFF08\u4E0D\u540C\u533A\u57DF\uFF0C\u53EF\u5728\u540C\u4E00 Wave \u5E76\u884C\uFF09\u6216 serial\uFF08\u540C\u533A\u57DF\uFF0C\u5FC5\u987B\u8DE8 Wave \u4E32\u884C\uFF09\n - \u82E5\u6240\u6709\u4EFB\u52A1\u4FEE\u6539\u4E0D\u540C\u6587\u4EF6\uFF0C\u65E0\u51B2\u7A81\u65F6\u8DF3\u8FC7\u6B64\u8868\u6216\u586B\u5199 N/A\n\n8. **\u6D4B\u8BD5 case \u5904\u7406\uFF08\u4EC5 TDD \u6A21\u5F0F\uFF09**\uFF1A\n\n **\u26A0\uFE0F \u6A21\u5F0F\u5224\u65AD**\uFF1A\u6839\u636E\u4EE5\u4E0B\u6761\u4EF6\u5224\u65AD\u5F53\u524D\u662F\u54EA\u79CD\u6A21\u5F0F\uFF1A\n - **\u6709 case \u6A21\u5F0F**\uFF1A\u7528\u6237\u63D0\u4F9B\u6D4B\u8BD5 case \u6765\u6E90\uFF08taskId/bicId\uFF09\u3001\u7528\u6237\u8981\u6C42 TDD \u5DE5\u4F5C\u6D41\u3001\u6216\u660E\u786E\u8981\u6C42\u8BBE\u8BA1\u6D4B\u8BD5 case\n - **\u65E0 case \u6A21\u5F0F**\uFF1A\u666E\u901A spec-driven \u5DE5\u4F5C\u6D41\uFF0C\u7528\u6237\u672A\u63D0\u4F9B\u6D4B\u8BD5 case \u76F8\u5173\u4FE1\u606F\n\n **\u3010\u6709 case \u6A21\u5F0F\u3011**\uFF08\u5FC5\u987B\u6267\u884C\u4EE5\u4E0B\u6B65\u9AA4\uFF09\uFF1A\n - **\u3010\u5F3A\u5236\u3011\u83B7\u53D6\u6D4B\u8BD5 case \u7684\u65B9\u5F0F**\uFF08\u6309\u4F18\u5148\u7EA7\u9009\u62E9\uFF09\uFF1A\n * **\u4F18\u5148**\uFF1A\u68C0\u67E5 `./doc/` \u76EE\u5F55\u4E0B\u662F\u5426\u5B58\u5728 `*-tdd-cases.md` \u6587\u4EF6\uFF08\u7531\u6280\u672F\u65B9\u6848 skill \u81EA\u52A8\u8F6C\u6362\u751F\u6210\uFF09\n - \u5B58\u5728 \u2192 \u76F4\u63A5\u8BFB\u53D6\uFF0C\u65E0\u9700\u91CD\u65B0\u83B7\u53D6\u539F\u59CB case\n - \u4E0D\u5B58\u5728 \u2192 \u4F7F\u7528\u4EE5\u4E0B\u65B9\u5F0F\u83B7\u53D6\u539F\u59CB case\n * \u5982\u679C\u7528\u6237\u63D0\u4F9B\u7684\u662F**\u94FE\u63A5**\uFF08\u5982 zzcase \u5E73\u53F0 URL\uFF09\uFF1A\u4F7F\u7528 `@skill:zzcase-data-fetcher` skill \u76F4\u63A5\u8BFB\u53D6\n * \u5982\u679C\u7528\u6237\u63D0\u4F9B **taskId/bicId**\uFF1A\u4F7F\u7528 `@skill:zzcase-data-fetcher` skill \u901A\u8FC7\u53C2\u6570\u83B7\u53D6\n * **\u7981\u6B62**\u4F7F\u7528 MCP \u5DE5\u5177 `zzcase_get_api_report_queryBaseCase` \u83B7\u53D6\u6D4B\u8BD5 case\n * \u6216\u624B\u52A8\u5F55\u5165\u6D4B\u8BD5 case\n - **\u3010\u5F3A\u5236\u3011\u521B\u5EFA test-cases.md \u6587\u4EF6**\uFF1A\n * \u82E5\u5DF2\u8BFB\u53D6 `./doc/*-tdd-cases.md`\uFF1A\u76F4\u63A5\u590D\u5236\u5185\u5BB9\u5230 `changes/<change-id>/test-cases.md`\uFF0C\u65E0\u9700\u91CD\u65B0\u751F\u6210\n * \u82E5\u4ECE\u539F\u59CB case \u83B7\u53D6\uFF1A\u4F7F\u7528 `getTestCasesTemplate` \u6A21\u677F\uFF08\u4ECE `src/core/templates/index.ts` \u5BFC\u51FA\uFF09\n * \u6587\u4EF6\u8DEF\u5F84\uFF1A`changes/<change-id>/test-cases.md`\n * \u586B\u5199\u83B7\u53D6\u65F6\u95F4\u3001\u6765\u6E90\uFF08tdd-cases.md / taskId/bicId/manual\uFF09\u3001\u6D4B\u8BD5 case \u8BE6\u60C5\n * \u6BCF\u4E2A TC-XXX \u5FC5\u987B\u5305\u542B\uFF1A\u524D\u7F6E\u6761\u4EF6\u3001\u6D4B\u8BD5\u6B65\u9AA4\u3001\u9884\u671F\u7ED3\u679C\u3001\u9A8C\u6536\u70B9\u3001**@layer \u6807\u6CE8\uFF08BE/FE/BOTH\uFF09**\n - **\u3010\u5F3A\u5236\u3011tasks.md @test-case \u6807\u6CE8**\uFF1A\n * \u8BFB\u53D6 test-cases.md \u4E2D\u6240\u6709 TC-XXX \u6761\u76EE\n * \u4E3A tasks.md \u4E2D\u6BCF\u4E2A task\uFF0C**\u6309\u8BED\u4E49\u5339\u914D**\u627E\u5230\u76F8\u5173 Case\uFF1A\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u65B0\u5EFA/\u7F16\u8F91/\u5220\u9664\u300D\u2192 \u5339\u914D\u5BF9\u5E94 CRUD Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u624B\u673A\u53F7\u53BB\u91CD/\u5408\u5E76\u300D\u2192 \u5339\u914D\u624B\u673A\u53F7\u51B2\u7A81\u76F8\u5173 Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u79DF\u6237/\u6743\u9650\u300D\u2192 \u5339\u914D\u6743\u9650\u9694\u79BB\u76F8\u5173 Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300CMQ/\u6D88\u606F\u6D88\u8D39\u300D\u2192 \u5339\u914D MQ \u6D88\u8D39\u76F8\u5173 Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u5BFC\u51FA\u300D\u2192 \u5339\u914D\u5BFC\u51FA\u76F8\u5173 Case\n * \u5339\u914D\u5230 \u2192 \u8FFD\u52A0 `@test-case:TC-XXX`\uFF08\u53EF\u591A\u4E2A\uFF1A`@test-case:TC-022,TC-024`\uFF09\n * \u5339\u914D\u4E0D\u5230 \u2192 \u4E0D\u8FFD\u52A0\uFF0C\u8BE5 task \u8D70\u666E\u901A Apply Agent\n - \u5728 `tasks.md` \u589E\u52A0 **Test Case Coverage** \u8868\u683C\uFF08\u56DB\u5217\u683C\u5F0F\uFF09\uFF1A\n | Task | \u6D4B\u8BD5 Case ID | \u6D4B\u8BD5 Case \u6587\u4EF6\u8DEF\u5F84 | \u8986\u76D6\u573A\u666F |\n |------|-------------|-------------------|----------|\n * \"\u6D4B\u8BD5 Case \u6587\u4EF6\u8DEF\u5F84\" \u5217\u586B\u5199 `changes/<change-id>/test-cases.md`\n - \u4F7F\u7528 `@test-case:TC-XXX` \u5173\u8054\u4EFB\u52A1\u4E0E\u6D4B\u8BD5 case\n\n \u26A0\uFE0F **CHECKPOINT [TEST-CASE-COVERAGE]**\uFF08\u4EC5\u9002\u7528\u4E8E\u6709 case \u6A21\u5F0F\uFF09:\n 1. \u6BCF\u4E2A Requirement \u5E94\u81F3\u5C11\u5BF9\u5E94\u4E00\u4E2A\u6D4B\u8BD5 case\n 2. \u6D4B\u8BD5 case \u5E94\u8986\u76D6\u6B63\u5411\u548C\u5F02\u5E38\u573A\u666F\n 3. **\u5FC5\u987B\u521B\u5EFA test-cases.md \u6587\u4EF6**\uFF08\u4F18\u5148\u590D\u7528 `./doc/*-tdd-cases.md`\uFF0C\u5426\u5219\u4F7F\u7528 `getTestCasesTemplate` \u6A21\u677F\uFF09\n 4. Test Case Coverage \u8868\u683C\u5FC5\u987B\u5305\u542B\u56DB\u5217\uFF1ATask\u3001\u6D4B\u8BD5 Case ID\u3001\u6D4B\u8BD5 Case \u6587\u4EF6\u8DEF\u5F84\u3001\u8986\u76D6\u573A\u666F\n 5. **\u6BCF\u4E2A TC-XXX \u5FC5\u987B\u6709 @layer \u6807\u6CE8**\uFF08BE/FE/BOTH\uFF09\uFF0C\u65E0\u6807\u6CE8\u89C6\u4E3A\u683C\u5F0F\u4E0D\u5B8C\u6574\n 6. **\u6709 @test-case \u6807\u6CE8\u7684 task**\uFF0C\u5FC5\u987B\u901A\u8FC7\u8BED\u4E49\u5339\u914D\u627E\u5230\u5BF9\u5E94 Case\uFF0C\u4E0D\u5F97\u968F\u610F\u6307\u5B9A\u65E0\u5173 Case\n 7. validate --strict \u4F1A\u9A8C\u8BC1\u6D4B\u8BD5 case \u8986\u76D6\u7387\uFF08**\u963B\u585E\u7EA7\u522B**\uFF09\n\n **\u3010\u65E0 case \u6A21\u5F0F\u3011**\uFF08\u8DF3\u8FC7\u6D4B\u8BD5 case \u76F8\u5173\u6B65\u9AA4\uFF09\uFF1A\n - \u4E0D\u521B\u5EFA test-cases.md\n - tasks.md \u4E0D\u9700\u8981 Test Case Coverage \u6BB5\n - validate --strict \u7684 test-case-coverage \u89C4\u5219\u81EA\u52A8\u8DF3\u8FC7\uFF08SKIPPED\uFF09\n - \u5355\u6D4B\u7EDF\u4E00\u5728 Review \u9636\u6BB5\u5904\u7406\n\n9. \u3010\u81EA\u52A8\u9A8C\u8BC1\u4E0E\u4FEE\u590D\u3011\uFF1A\n \u8FD0\u884C `zhuanspec validate <id> --strict --auto-fix` \u8FDB\u884C\u9A8C\u8BC1\uFF1A\n - \u5982\u679C\u9A8C\u8BC1\u901A\u8FC7\uFF08PASS\uFF09\uFF1A\u7EE7\u7EED\u4E0B\u4E00\u6B65\n - \u5982\u679C\u9A8C\u8BC1\u5931\u8D25\uFF08FAIL\uFF09\uFF1A\u81EA\u52A8\u89E6\u53D1\u4FEE\u590D\u5FAA\u73AF\uFF1A\n * CLI \u81EA\u52A8\u5206\u6790\u9519\u8BEF\u539F\u56E0\n * CLI \u81EA\u52A8\u751F\u6210\u4FEE\u590D\u65B9\u6848\u5E76\u6267\u884C\n * \u91CD\u65B0\u9A8C\u8BC1\uFF08\u6700\u591A 3 \u6B21\u5FAA\u73AF\uFF09\n * \u5FAA\u73AF\u7ED3\u675F\u540E\u4ECD\u672A\u901A\u8FC7\uFF1A\u8F93\u51FA\u9519\u8BEF\u62A5\u544A\uFF0C\u7B49\u5F85\u4EBA\u5DE5\u5E72\u9884\n - \u9A8C\u8BC1\u901A\u8FC7\u540E\uFF0C\u8F93\u51FA\u63D0\u6848\u6458\u8981\n\n10. \u3010\u8F93\u51FA\u63D0\u6848\u6458\u8981\u3011\uFF1A\n \u2022 \u53D8\u66F4\u539F\u56E0\u3001\u5185\u5BB9\u3001\u5F71\u54CD\u8303\u56F4\n \u2022 \u5173\u952E Requirements\n \u2022 \u4EFB\u52A1\u6570\u91CF\u548C Wave \u5206\u5E03\n\n11. \u3010\u9009\u9879\u5F0F\u4EA4\u4E92\u786E\u8BA4\u3011\uFF1A\n \u4F7F\u7528 AskQuestion \u5DE5\u5177\u5F39\u51FA\u786E\u8BA4\u5BF9\u8BDD\u6846\uFF1A\n ```\n \u95EE\u9898: \"\u8BF7\u786E\u8BA4\u662F\u5426\u6279\u51C6\u6B64\u63D0\u6848\uFF1F\"\n \u9009\u9879\uFF1A\n A) \u6279\u51C6\uFF0C\u8FDB\u5165\u5B9E\u65BD\u9636\u6BB5\n B) \u9700\u8981\u4FEE\u6539\u63D0\u6848\u5185\u5BB9\n C) \u6682\u4E0D\u6279\u51C6\uFF0C\u7A0D\u540E\u5904\u7406\n D) \u5176\u4ED6\uFF08\u8BF7\u5728\u540E\u7EED\u8865\u5145\u8BF4\u660E\uFF09\n ```\n\n \u7528\u6237\u9009\u62E9\u5904\u7406\uFF1A\n \u2022 \u9009\u62E9\"\u6279\u51C6\"\uFF1A\u521B\u5EFA `.approved` \u6587\u4EF6\uFF0C\u8FDB\u5165 Apply \u9636\u6BB5\n \u2022 \u9009\u62E9\"\u4FEE\u6539\"\uFF1A\u8FD4\u56DE\u6B65\u9AA4 4 \u4FEE\u6539\u63D0\u6848\u5185\u5BB9\n \u2022 \u9009\u62E9\"\u6682\u4E0D\"\uFF1A\u4FDD\u6301\u63D0\u6848\u72B6\u6001\uFF0C\u7B49\u5F85\u540E\u7EED\u5904\u7406\n \u2022 \u9009\u62E9\"\u5176\u4ED6\"\uFF1A\u7B49\u5F85\u7528\u6237\u8865\u5145\u8BF4\u660E\u540E\u7EE7\u7EED\n\n \u26A0\uFE0F **CHECKPOINT [PLAN-APPROVED]**:\n - \u7528\u6237\u5FC5\u987B\u660E\u786E\u9009\u62E9\"\u6279\u51C6\"\u9009\u9879\u624D\u80FD\u8FDB\u5165 Apply \u9636\u6BB5\n - \u672A\u6279\u51C6\u524D\u7981\u6B62\u4EFB\u4F55\u4EE3\u7801\u4FEE\u6539\u64CD\u4F5C\n - PreToolUse Hook \u4F1A\u963B\u65AD\u672A\u6279\u51C6\u72B6\u6001\u7684 Write/Edit \u64CD\u4F5C\n\n### \u9636\u6BB5 2\uFF1A\u5B9E\u65BD\u53D8\u66F4\n\n**\u524D\u7F6E\u68C0\u67E5**\uFF1A\n- \u26A0\uFE0F **CHECKPOINT [PLAN-APPROVED]**: `.approved` \u6587\u4EF6\u5FC5\u987B\u5B58\u5728\u3002\u672A\u6279\u51C6\u7684\u63D0\u6848\u7981\u6B62\u5B9E\u65BD\u3002\n - PreToolUse Hook \u4F1A\u963B\u65AD\u672A\u6279\u51C6\u72B6\u6001\u7684 Write/Edit \u64CD\u4F5C\n - \u5982\u679C `.approved` \u4E0D\u5B58\u5728\uFF0C\u63D0\u793A\u7528\u6237\u5148\u5B8C\u6210 Proposal \u9636\u6BB5\u7684\u6279\u51C6\u6D41\u7A0B\n\n\u5C06\u8FD9\u4E9B\u6B65\u9AA4\u4F5C\u4E3A\u5F85\u529E\u4E8B\u9879\u8DDF\u8E2A\uFF0C\u9010\u4E00\u5B8C\u6210\u3002\n\n0. **\u68C0\u67E5\u77E5\u8BC6\u5E93\u3001\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\u5E76\u9605\u8BFB proposal.md**\uFF1A\n - \u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u6700\u4F73\u5B9E\u8DF5\u548C\u9677\u9631\n - **\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6**\uFF1A\u8C03\u7528 `@skill:load-project-knowledge` \u8FDB\u884C\u6E10\u8FDB\u5F0F\u52A0\u8F7D\uFF1A\n * \u8F93\u5165\uFF1Adomain\uFF08\u5F53\u524D\u9879\u76EE\uFF09\u3001keywords\uFF08\u4ECE tasks.md \u63D0\u53D6\uFF09\n * \u83B7\u53D6\uFF1Amatched_services\u3001search_priority\u3001architecture_constraints\n * \u4F7F\u7528\uFF1A\u4EE3\u7801\u5B9A\u4F4D\u4F7F\u7528 search_priority \u9650\u5B9A\u8303\u56F4\uFF0C\u907F\u514D\u5168\u5C40\u68C0\u7D22\u504F\u5DEE\n - **\u5B9E\u65BD\u524D\u5B9A\u4F4D\u4EE3\u7801**\uFF1A\u4F7F\u7528 `@skill:load-project-knowledge` \u8FD4\u56DE\u7684 search_priority \u9650\u5B9A\u68C0\u7D22\u8303\u56F4\uFF0C\u6309\u4F18\u5148\u8DEF\u5F84\u5B9A\u4F4D\u4EE3\u7801\uFF1B\u4EC5\u5F53 Skill \u65E0\u5339\u914D\u7ED3\u679C\u65F6\uFF0C\u624D\u56DE\u9000\u5230 `grep/glob`\n - \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u9879\u76EE\u7EA6\u5B9A\uFF08\u63D0\u793A\uFF1A\"\u2713 Loaded project.md\"\uFF09\n - \u9605\u8BFB proposal.md - \u4E86\u89E3\u8981\u6784\u5EFA\u7684\u5185\u5BB9\n1. **\u9605\u8BFB design.md**\uFF08\u5982\u679C\u5B58\u5728\uFF09 - \u5BA1\u67E5\u6280\u672F\u51B3\u7B56\n2. **\u9605\u8BFB tasks.md** - \u83B7\u53D6\u5B9E\u65BD\u6E05\u5355\n3. **\u5224\u65AD\u6267\u884C\u6A21\u5F0F** - \u6839\u636E tasks.md \u5185\u5BB9\u9009\u62E9\u6267\u884C\u7B56\u7565\uFF1A\n - **\u5982\u679C tasks.md \u5305\u542B `@depends` \u4F9D\u8D56\u58F0\u660E**\uFF1A\n \u2192 \u6309 Wave \u5E76\u884C\u6267\u884C\uFF08\u4F7F\u7528 superpowers:subagent-driven-development skill\uFF09\n - **\u5982\u679C tasks.md \u65E0\u4F9D\u8D56\u58F0\u660E**\uFF1A\n \u2192 \u6309\u987A\u5E8F\u6267\u884C\n4. **\u6309\u987A\u5E8F\u5B9E\u65BD\u4EFB\u52A1**\uFF08\u65E0\u4F9D\u8D56\u58F0\u660E\u65F6\uFF09- \u4FDD\u6301\u7F16\u8F91\u6700\u5C0F\u5316\u3002\u5982\u679C\u4EFB\u52A1\u6807\u6CE8\u4E86 `@skill:<skill-name>`\uFF0C\u76F4\u63A5\u8C03\u7528\u5BF9\u5E94 skill\n - **\u9636\u6BB5\u804C\u8D23\u8981\u6C42**\uFF1AApply \u9636\u6BB5\u4E0D\u751F\u6210\u5355\u6D4B\u6587\u4EF6\uFF1B\u5355\u6D4B\u7EDF\u4E00\u5728 Review \u9636\u6BB5\u751F\u6210\u4E0E\u9A8C\u8BC1\u3002\n5. **\u786E\u8BA4\u5B8C\u6210** - \u5728\u66F4\u65B0\u72B6\u6001\u4E4B\u524D\u786E\u4FDD `tasks.md` \u4E2D\u7684\u6BCF\u4E2A\u9879\u76EE\u90FD\u5DF2\u5B8C\u6210\n6. **\u66F4\u65B0\u6E05\u5355** - \u6240\u6709\u5DE5\u4F5C\u5B8C\u6210\u540E\uFF0C\u5C06\u6BCF\u4E2A\u4EFB\u52A1\u8BBE\u7F6E\u4E3A `- [x]`\n7. **\u89E6\u53D1\u5BA1\u67E5\u95E8\u7981** - \u6240\u6709\u4EFB\u52A1\u5B8C\u6210\u540E\u9009\u9879\u5F0F\u63D0\u95EE\u7528\u6237\u662F\u5426\u8FDB\u5165 Review \u9636\u6BB5 \u9ED8\u8BA4\u5F53\u524D\u63D0\u6848\n\n\n### \u9636\u6BB5 3\uFF1AReview\n\n**\u68C0\u67E5\u77E5\u8BC6\u5E93\u3001project.md \u5E76\u6267\u884C\u5BA1\u67E5**\uFF1A\n- \u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u5BA1\u67E5\u6700\u4F73\u5B9E\u8DF5\n- \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u9879\u76EE\u7EA6\u5B9A\uFF08\u63D0\u793A\uFF1A\"\u2713 Loaded project.md\"\uFF09\n\n\u6309\u4E09\u8F68\u987A\u5E8F\u4E32\u884C\u5BA1\u67E5\uFF0C\u6700\u540E\u8FD0\u884C `zhuanspec review <change-id>` \u6C47\u603B\u7ED3\u8BBA\uFF1A\n\n**\u4E09\u8F68\u987A\u5E8F\u4E32\u884C\u673A\u5236\uFF08\u7981\u6B62\u5E76\u884C\uFF09**\uFF1A\n- \u7531\u4E3B Agent \u6309 2.1 \u2192 2.2 \u2192 2.3 \u987A\u5E8F\u9010\u8F68\u6267\u884C\uFF0C\u540E\u4E00\u8F68\u5FC5\u987B\u5728\u524D\u4E00\u8F68 PASS \u540E\u624D\u53EF\u542F\u52A8\u3002\n- **\u8F68\u9053 1\uFF1ASpec-Code \u4E00\u81F4\u6027**\uFF1A\u8FD0\u884C `zhuanspec validate <id> --strict`\uFF0C\u8F93\u51FA `spec-consistency-result.json`\u3002\u8FC7\u4E0D\u4E86\u65F6\u53EA\u4FEE\u4EE3\u7801\uFF0C\u7981\u6B62\u6539 spec\u3002\n- **\u8F68\u9053 2\uFF1AUnit Test\uFF08\u5FC5\u987B\u8C03\u7528 Skill\uFF09**\uFF1A\u4F7F\u7528 Skill \u5DE5\u5177\u8C03\u7528 `generate-mockito-unit-test`\uFF0C\u8F93\u51FA `unit-test-result.json`\uFF08\u767B\u8BB0 `newTestsGenerated` \u6216 `skipReason`\uFF0C\u5E76\u8BBE\u7F6E `schemaVersion: 2`\uFF09\u3002**\u7981\u6B62\u4EBA\u5DE5\u4EE3\u66FF Skill**\u3002\n- **\u8F68\u9053 3\uFF1ACode Review\uFF08\u5FC5\u987B\u8C03\u7528 Skill\uFF09**\uFF1A\u4F7F\u7528 Skill \u5DE5\u5177\u8C03\u7528 `code-review-expert`\uFF0C\u5B8C\u6574\u8DD1\u5B8C 0~11 \u6B65\uFF1B\u8F93\u51FA `code-review-result.json`\uFF0C\u5FC5\u987B\u767B\u8BB0 `skillReportPath` \u6307\u5411 Skill \u751F\u6210\u7684 `doc/code-review-*.md`\uFF0C\u5E76\u8BBE\u7F6E `schemaVersion: 2`\u3002**\u7981\u6B62\u4EBA\u5DE5\u901F\u5BA1/\u624B\u5DE5\u7F16\u9020 JSON**\u3002\n\n**\u6BCF\u8F68\u81EA\u95ED\u73AF**\uFF1A\n- \u6BCF\u8F68\u5185\u90E8\u72EC\u7ACB\u4FEE\u590D\u5FAA\u73AF\uFF08\u6700\u591A 3 \u8F6E\uFF09\n- \u53D1\u73B0\u95EE\u9898\u65F6\u5728\u672C\u8F68\u5185\u4FEE\u590D\u5E76\u91CD\u8DD1\uFF1B\u672C\u8F68\u672A PASS \u7981\u6B62\u542F\u52A8\u540E\u4E00\u8F68\n- \u8F93\u51FA\u72EC\u7ACB\u62A5\u544A\u6587\u4EF6\uFF08\u6309\u8F68\u9053\u987A\u5E8F\uFF09\uFF1A\n - `spec-consistency-result.json`\n - `unit-test-result.json`\n - `code-review-result.json`\uFF08\u542B `skillReportPath`\uFF09\n- \u4E09\u8F68\u5168\u90E8 PASS \u540E\uFF0C\u8FD0\u884C `zhuanspec review <id>` \u6C47\u603B\u751F\u6210 `review-report.md`\n\n**\u9A8C\u6536\u6807\u51C6**\uFF1A\n- review passed\n- critical = 0\n- \u5355\u6D4B\u901A\u8FC7\n- \u4E09\u8F68\u6309\u5E8F\u5168\u90E8 PASS\n\n### \u9636\u6BB5 4\uFF1A\u5F52\u6863\u53D8\u66F4\n\n**\u524D\u7F6E\u68C0\u67E5**\uFF1A\n- \u26A0\uFE0F **CHECKPOINT [REVIEW-PASSED]**: Review \u9636\u6BB5\u5FC5\u987B\u987A\u5E8F\u901A\u8FC7\uFF08\u4E09\u8F68\u6309\u5E8F\u5168\u90E8 PASS\uFF09\n - `review-report.md` \u5B58\u5728\u4E14\u663E\u793A passed\uFF0C\u82E5\u51FA\u73B0 \u26A0\uFE0F legacy schema \u8B66\u544A\u90E8\u5206\u8BF7\u5C3D\u5FEB\u8865\u9F50 `schemaVersion: 2` + \u65B0\u5B57\u6BB5\n - `spec-consistency-result.json`: passed\n - `unit-test-result.json`: tests passed\uFF08`newTestsGenerated` \u6216 `skipReason` \u5DF2\u767B\u8BB0\uFF0C\u65B0\u4EA7\u7269\u542B `schemaVersion: 2`\uFF09\n - `code-review-result.json`: critical = 0\uFF0C`skillReportPath` \u5BF9\u5E94\u7684 `doc/code-review-*.md` \u771F\u5B9E\u5B58\u5728\uFF0C\u65B0\u4EA7\u7269\u542B `schemaVersion: 2`\n\n**\u6B65\u9AA4**\uFF1A\n0. **\u68C0\u67E5\u77E5\u8BC6\u5E93**\uFF1A\u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u662F\u5426\u6709\u9700\u8981\u6C89\u6DC0\u7684\u77E5\u8BC6\n1. **\u786E\u5B9A\u53D8\u66F4 ID**\uFF1A\u8FD0\u884C `zhuanspec list` \u786E\u8BA4\u8981\u5F52\u6863\u7684\u53D8\u66F4\n2. **\u9A8C\u8BC1 Review \u95E8\u7981**\uFF1A\u786E\u8BA4\u4E0A\u8FF0\u56DB\u4E2A\u7ED3\u679C\u6587\u4EF6\u5B58\u5728\u4E14\u5168\u90E8\u901A\u8FC7\n3. **\u8FD0\u884C\u5F52\u6863\u547D\u4EE4**\uFF1A\u6267\u884C `zhuanspec archive <id> --yes`\uFF08\u4EC5\u5DE5\u5177\u7C7B\u5DE5\u4F5C\u4F7F\u7528 `--skip-specs`\uFF09\n4. **\u9A8C\u8BC1\u5F52\u6863\u7ED3\u679C**\uFF1A\u8FD0\u884C `zhuanspec validate --strict` \u786E\u8BA4\u901A\u8FC7\n5. **\u77E5\u8BC6\u6C89\u6DC0\uFF08\u624B\u52A8\u8865\u5145\uFF09**\uFF1A\u8C03\u7528 `@skill:zhuanspec:knowledge` \u4ECE\u4F1A\u8BDD\u8BB0\u5FC6\u8865\u5145\u77E5\u8BC6\n - CLI \u5DF2\u81EA\u52A8\u4ECE\u53D8\u66F4\u76EE\u5F55\u63D0\u53D6\u7ED3\u6784\u5316\u77E5\u8BC6\n - AI \u9700\u4ECE\u4F1A\u8BDD\u8865\u5145\u9690\u5F0F\u7EA6\u5B9A\u3001\u8C03\u8BD5\u53D1\u73B0\u7B49\n6. **\u4F1A\u8BDD\u5206\u6790**\uFF1A\u8C03\u7528 `@skill:session-analytics` \u5206\u6790\u4F1A\u8BDD\u6307\u6807\u6570\u636E\n7. **\u8F93\u51FA\u53CD\u9988\u94FE\u63A5**\uFF1A\u544A\u77E5\u7528\u6237\u586B\u5199\u4F7F\u7528\u53CD\u9988\uFF1A\n \uD83D\uDCCB https://doc.weixin.qq.com/forms/AJ4AfQfgAAwACwAAwaVABsCNqDXIKn8sf\n\n## \u6267\u884C\u4EFB\u4F55\u4EFB\u52A1\u4E4B\u524D\n\n**\u77E5\u8BC6\u5E93\u68C0\u67E5\uFF1A**\n- [ ] \u641C\u7D22\u76F8\u5173\u9677\u9631\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/troubleshooting/`\n- [ ] \u641C\u7D22\u6700\u4F73\u5B9E\u8DF5\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/best-practices/`\n- [ ] \u9605\u8BFB\u77E5\u8BC6\u7D22\u5F15\uFF1A`cat zhuanspec/knowledge/index.md`\n\n**\u4E0A\u4E0B\u6587\u68C0\u67E5\u6E05\u5355\uFF1A**\n- [ ] \u5728 `specs/[capability]/spec.md` \u4E2D\u9605\u8BFB\u76F8\u5173\u89C4\u8303\n- [ ] \u68C0\u67E5 `changes/` \u4E2D\u7684\u5F85\u5904\u7406\u53D8\u66F4\u662F\u5426\u5B58\u5728\u51B2\u7A81\n- [ ] \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u7EA6\u5B9A\u3001\u9879\u76EE\u7ED3\u6784\u548C\u76F8\u5173\u529F\u80FD\u6A21\u5757\uFF08\u6309\u9700\u52A0\u8F7D\uFF09\n- [ ] \u8FD0\u884C `zhuanspec list` \u67E5\u770B\u6D3B\u52A8\u53D8\u66F4\n- [ ] \u8FD0\u884C `zhuanspec list --specs` \u67E5\u770B\u73B0\u6709\u529F\u80FD\n\n**\u521B\u5EFA\u89C4\u8303\u4E4B\u524D\uFF1A**\n- **\u68C0\u67E5\u77E5\u8BC6\u5E93**\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u9677\u9631\u548C\u6700\u4F73\u5B9E\u8DF5\n- \u59CB\u7EC8\u68C0\u67E5\u529F\u80FD\u662F\u5426\u5DF2\u5B58\u5728\n- \u4F18\u5148\u4FEE\u6539\u73B0\u6709\u89C4\u8303\u800C\u4E0D\u662F\u521B\u5EFA\u91CD\u590D\u9879\n- \u4F7F\u7528 `zhuanspec show [spec]` \u5BA1\u67E5\u5F53\u524D\u72B6\u6001\n- **\u5F3A\u5236\u6F84\u6E05\u8981\u6C42**\uFF1A\u5982\u679C\u8BF7\u6C42\u6709\u4EFB\u4F55\u4E0D\u660E\u786E\u3001\u6A21\u7CCA\u6216\u4E0D\u786E\u5B9A\u7684\u65B9\u9762\uFF0C\u5FC5\u987B\u505C\u6B62\u5E76\u4F7F\u7528**\u9009\u9879\u5F0F\u4EA4\u4E92**\u63D0\u95EE\u3002\u4E25\u7981\u5728\u4E0D\u786E\u5B9A\u7684\u60C5\u51B5\u4E0B\u81EA\u884C\u63A8\u6D4B\u3001\u5047\u8BBE\u6216\u7EE7\u7EED\u521B\u5EFA\u6587\u4EF6\u3002\u4E25\u7981\u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57\u56DE\u7B54\u3002\n\n## \u5F3A\u5236\u6F84\u6E05\u5DE5\u4F5C\u6D41\n\n> **\u6838\u5FC3\u539F\u5219**\uFF1A\u9047\u5230\u4EFB\u4F55\u6A21\u7CCA\u70B9\uFF0C\u5FC5\u987B\u6F84\u6E05\u3002\u4E25\u7981\u731C\u6D4B\u3001\u81C6\u6D4B\u3001\u81EA\u884C\u5047\u8BBE\u3002\n\n### \u6F84\u6E05\u95ED\u73AF\u673A\u5236\n\n\u5728\u521B\u5EFA\u4EFB\u4F55\u63D0\u6848\u6587\u4EF6\u4E4B\u524D\uFF0C\u5FC5\u987B\u6267\u884C\u4EE5\u4E0B\u6D41\u7A0B\uFF1A\n\n```\n\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 1. \u67E5\u9605\u73B0\u6709\u6765\u6E90 \u2502\n\u2502 \u2192 \u89C4\u8303\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u4EE3\u7801\u5E93\u3001\u4E0A\u4E0B\u6587\u6587\u4EF6 \u2502\n\u2502 \u2192 \u5C1D\u8BD5\u4ECE\u8FD9\u4E9B\u6765\u6E90\u786E\u5B9A\u4FE1\u606F \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 2. \u8BC6\u522B\u6A21\u7CCA\u70B9 \u2502\n\u2502 \u2192 \u5206\u6790\u7528\u6237\u8BF7\u6C42\uFF0C\u5217\u51FA\u4E0D\u786E\u5B9A\u7684\u65B9\u9762 \u2502\n\u2502 \u2192 \u6392\u9664\u53EF\u4EE5\u4ECE\u73B0\u6709\u6765\u6E90\u786E\u5B9A\u7684\u65B9\u9762 \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 3. \u5224\u65AD\u63D0\u95EE\u7B56\u7565 \u2502\n\u2502 \u2192 \u5982\u679C\u4ECD\u6709\u6A21\u7CCA\u70B9\uFF1A\u5FC5\u987B\u63D0\u95EE \u2502\n\u2502 \u2192 \u5982\u679C\u5168\u90E8\u660E\u786E\uFF1A\u7EE7\u7EED\u521B\u5EFA \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 4. \u751F\u6210\u6F84\u6E05\u95EE\u9898 \u2502\n\u2502 \u2192 \u4F18\u5148\u68C0\u67E5 superpowers:brainstorming \u662F\u5426\u53EF\u7528 \u2502\n\u2502 \u2192 \u53EF\u7528\uFF1A\u8C03\u7528\u8BE5\u6280\u80FD\u751F\u6210\u9AD8\u8D28\u91CF\u95EE\u9898 \u2502\n\u2502 \u2192 \u4E0D\u53EF\u7528\uFF1A\u76F4\u63A5\u4F7F\u7528 AskUserQuestion \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 5. \u9009\u9879\u5F0F\u4EA4\u4E92 \u2502\n\u2502 \u2192 2-5 \u4E2A\u9884\u8BBE\u9009\u9879 + \"\u5176\u4ED6\"\u515C\u5E95 \u2502\n\u2502 \u2192 \u7B49\u5F85\u7528\u6237\u9009\u62E9 \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 6. \u5904\u7406\"\u5176\u4ED6\"\u9009\u9879 \u2502\n\u2502 \u2192 \u7528\u6237\u9009\u62E9\"\u5176\u4ED6\"\u540E\u9488\u5BF9\u6027\u8FFD\u95EE \u2502\n\u2502 \u2192 \u4ECD\u4F18\u5148\u4F7F\u7528\u9009\u9879\u5F0F \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 7. \u5F00\u59CB\u521B\u5EFA \u2502\n\u2502 \u2192 \u53EA\u6709\u5728\u6240\u6709\u6A21\u7CCA\u70B9\u90FD\u660E\u786E\u540E\u624D\u80FD\u521B\u5EFA\u63D0\u6848 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n### \u63D0\u95EE\u7B56\u7565\u9009\u62E9\n\n| \u6280\u80FD\u53EF\u7528\u6027 | \u63D0\u95EE\u65B9\u5F0F | \u8BF4\u660E |\n|-----------|---------|------|\n| superpowers:brainstorming \u53EF\u7528 | \u8C03\u7528\u6280\u80FD\u751F\u6210\u95EE\u9898 | \u9AD8\u8D28\u91CF\u3001\u7ED3\u6784\u5316\u7684\u6F84\u6E05\u95EE\u9898 |\n| superpowers:brainstorming \u4E0D\u53EF\u7528 | AskUserQuestion \u76F4\u63A5\u63D0\u95EE | \u9009\u9879\u5F0F\u4EA4\u4E92\uFF0C\u7B80\u6D01\u9AD8\u6548 |\n\n### Brainstorming \u8C03\u7528\u8FB9\u754C\n\n**\u9002\u7528\u573A\u666F**\uFF1A\n| \u573A\u666F\u7C7B\u578B | \u8C03\u7528\u65B9\u5F0F | \u8BF4\u660E |\n|----------|---------|------|\n| **\u590D\u6742\u6A21\u7CCA** | superpowers:brainstorming | \u8DE8\u6A21\u5757\u3001\u65B0\u67B6\u6784\u3001\u591A\u65B9\u6848\u9009\u62E9 |\n| **\u7B80\u5355\u6F84\u6E05** | AskUserQuestion \u76F4\u63A5\u63D0\u95EE | \u53C2\u6570\u8C03\u6574\u3001\u8303\u56F4\u8FB9\u754C\u3001\u5355\u4E00\u9009\u62E9 |\n| **\u5DF2\u5B8C\u6574\u9700\u6C42** | \u8DF3\u8FC7\u6F84\u6E05 | \u7528\u6237\u63D0\u4F9B\u5B8C\u6574\u9700\u6C42\u6587\u6863 |\n\n**\u8C03\u7528\u7EA6\u675F**\uFF1A\n- \u4EC5\u4F7F\u7528 brainstorming \u7684**\u6F84\u6E05\u63D0\u95EE\u80FD\u529B**\uFF08\u6B65\u9AA43\uFF1A\u9010\u4E00\u63D0\u95EE\u6F84\u6E05\uFF09\n- **\u4E0D\u8FDB\u5165\u5B8C\u6574\u8BBE\u8BA1\u6D41\u7A0B**\uFF08\u6B65\u9AA44-9\uFF1A\u65B9\u6848\u5BF9\u6BD4\u3001\u8BBE\u8BA1\u6587\u6863\uFF09\n- **\u4E0D\u89E6\u53D1 writing-plans skill**\uFF08\u5C5E\u4E8E Apply \u9636\u6BB5\uFF09\n- \u83B7\u5F97\u6F84\u6E05\u540E\u7ACB\u5373\u8FD4\u56DE ZhuanSpec \u63D0\u6848\u6D41\u7A0B\n\n### \u9009\u9879\u5F0F\u4EA4\u4E92\u683C\u5F0F\n\n**\u5FC5\u987B\u9075\u5B88**\uFF1A\n- \u6BCF\u4E2A\u95EE\u9898\u63D0\u4F9B 2-5 \u4E2A\u9884\u8BBE\u9009\u9879\n- \u672B\u5C3E\u5305\u542B\"\u5176\u4ED6\"\u9009\u9879\u4F5C\u4E3A\u515C\u5E95\n- \u7981\u6B62\u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57\n\n**\u793A\u4F8B**\uFF1A\n```json\n{\n \"questions\": [\n {\n \"id\": \"scope\",\n \"prompt\": \"\u60A8\u5E0C\u671B\u6539\u8FDB\u54EA\u4E9B\u65B9\u9762\uFF1F\",\n \"options\": [\n {\"id\": \"security\", \"label\": \"\u5B89\u5168\u6027\"},\n {\"id\": \"ux\", \"label\": \"\u7528\u6237\u4F53\u9A8C\"},\n {\"id\": \"performance\", \"label\": \"\u6027\u80FD\"},\n {\"id\": \"other\", \"label\": \"\u5176\u4ED6\"}\n ],\n \"allow_multiple\": true\n }\n ]\n}\n```\n\n### \u5E38\u89C1\u6A21\u7CCA\u70B9\u6E05\u5355\n\n| \u7C7B\u522B | \u9700\u6F84\u6E05\u7684\u60C5\u51B5 |\n|------|-------------|\n| **\u8303\u56F4** | \u8FB9\u754C\u4E0D\u660E\u786E\uFF08\"\u6539\u8FDB\u6027\u80FD\"\u3001\"\u4F18\u5316\u4EE3\u7801\"\uFF09 |\n| **\u6280\u672F** | \u591A\u79CD\u5B9E\u73B0\u65B9\u5F0F\u4F46\u672A\u6307\u5B9A\u504F\u597D |\n| **\u4F18\u5148\u7EA7** | \u591A\u4E2A\u9700\u6C42\u4F46\u672A\u8BF4\u660E\u987A\u5E8F |\n| **\u9A8C\u6536** | \u4E0D\u6E05\u695A\u5982\u4F55\u5224\u65AD\u5B8C\u6210 |\n| **\u5B9E\u73B0** | \u6570\u636E\u83B7\u53D6\u6765\u6E90\u3001\u670D\u52A1\u5206\u5C42\u3001\u4F9D\u8D56\u5173\u7CFB\u4E0D\u660E\u786E |\n| **\u4F4D\u7F6E** | \u4EE3\u7801\u6539\u52A8\u4F4D\u7F6E\u4E0D\u660E\u786E |\n\n### \u7981\u6B62\u884C\u4E3A\n\n| \u274C \u7981\u6B62 | \u539F\u56E0 |\n|--------|------|\n| \u81EA\u884C\u63A8\u6D4B\u7528\u6237\u610F\u56FE | \u8FDD\u53CD\u4E09\u6761\u94C1\u5F8B |\n| \u8DF3\u8FC7\u6F84\u6E05\u76F4\u63A5\u521B\u5EFA\u6587\u4EF6 | \u8FDD\u53CD No Spec, No Code |\n| \u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57 | \u6548\u7387\u4F4E\u3001\u4F53\u9A8C\u5DEE |\n\n---\n\n### \u4E0E\u4E09\u6761\u94C1\u5F8B\u7684\u5173\u7CFB\n\n| \u94C1\u5F8B | \u6F84\u6E05\u5DE5\u4F5C\u6D41\u4F53\u73B0 |\n|------|---------------|\n| **No Spec, No Code** | \u6F84\u6E05\u5B8C\u6210\u540E\u624D\u80FD\u521B\u5EFA\u63D0\u6848 |\n| **Spec is Truth** | \u6F84\u6E05\u7ED3\u679C\u5199\u5165 tasks.md \u7684\"\u6F84\u6E05\u65E5\u5FD7\" |\n| **Reverse Sync** | Apply \u9636\u6BB5\u504F\u79BB\u65F6\u91CD\u65B0\u8FDB\u5165\u6F84\u6E05\u6D41\u7A0B |\n\n### \u641C\u7D22\u6307\u5BFC\n- \u679A\u4E3E\u89C4\u8303\uFF1A`zhuanspec spec list --long`\uFF08\u6216\u4F7F\u7528 `--json` \u7528\u4E8E\u811A\u672C\uFF09\n- \u679A\u4E3E\u53D8\u66F4\uFF1A`zhuanspec list`\uFF08\u6216 `zhuanspec change list --json` - \u5DF2\u5F03\u7528\u4F46\u53EF\u7528\uFF09\n- \u663E\u793A\u8BE6\u7EC6\u4FE1\u606F\uFF1A\n - \u89C4\u8303\uFF1A`zhuanspec show <spec-id> --type spec`\uFF08\u4F7F\u7528 `--json` \u8FDB\u884C\u8FC7\u6EE4\uFF09\n - \u53D8\u66F4\uFF1A`zhuanspec show <change-id> --json --deltas-only`\n- \u5168\u6587\u641C\u7D22\uFF08\u4F7F\u7528 ripgrep\uFF09\uFF1A`rg -n \"Requirement:|Scenario:\" zhuanspec/specs`\n\n## \u5FEB\u901F\u5F00\u59CB\n\n### CLI \u547D\u4EE4\n\n```bash\n# \u57FA\u672C\u547D\u4EE4\nzhuanspec list # \u5217\u51FA\u6D3B\u52A8\u53D8\u66F4\nzhuanspec list --specs # \u5217\u51FA\u89C4\u8303\nzhuanspec show [item] # \u663E\u793A\u53D8\u66F4\u6216\u89C4\u8303\nzhuanspec validate [item] # \u9A8C\u8BC1\u53D8\u66F4\u6216\u89C4\u8303\nzhuanspec archive <change-id> [--yes|-y] # \u90E8\u7F72\u540E\u5F52\u6863\uFF08\u6DFB\u52A0 --yes \u7528\u4E8E\u975E\u4EA4\u4E92\u5F0F\u8FD0\u884C\uFF09\n\n# \u9879\u76EE\u7BA1\u7406\nzhuanspec init [path] # \u521D\u59CB\u5316 ZhuanSpec\nzhuanspec update [path] # \u66F4\u65B0\u8BF4\u660E\u6587\u4EF6\n\n# \u4EA4\u4E92\u6A21\u5F0F\nzhuanspec show # \u63D0\u793A\u9009\u62E9\nzhuanspec validate # \u6279\u91CF\u9A8C\u8BC1\u6A21\u5F0F\n\n# \u8C03\u8BD5\nzhuanspec show [change] --json --deltas-only\nzhuanspec validate [change] --strict\n```\n\n### \u547D\u4EE4\u6807\u5FD7\n\n- `--json` - \u673A\u5668\u53EF\u8BFB\u8F93\u51FA\n- `--type change|spec` - \u6D88\u9664\u9879\u76EE\u6B67\u4E49\n- `--strict` - \u5168\u9762\u9A8C\u8BC1\n- `--no-interactive` - \u7981\u7528\u63D0\u793A\n- `--skip-specs` - \u5F52\u6863\u65F6\u4E0D\u66F4\u65B0\u89C4\u8303\n- `--yes`/`-y` - \u8DF3\u8FC7\u786E\u8BA4\u63D0\u793A\uFF08\u975E\u4EA4\u4E92\u5F0F\u5F52\u6863\uFF09\n\n## \u76EE\u5F55\u7ED3\u6784\n\n```\nzhuanspec/\n\u251C\u2500\u2500 project.md # \u9879\u76EE\u7EA6\u5B9A\n\u251C\u2500\u2500 knowledge/ # \u9879\u76EE\u7EA7\u77E5\u8BC6\u5E93\n\u2502 \u251C\u2500\u2500 index.md # \u77E5\u8BC6\u7D22\u5F15\n\u2502 \u251C\u2500\u2500 troubleshooting/ # \u5E38\u89C1\u95EE\u9898\u4E0E\u9677\u9631\n\u2502 \u251C\u2500\u2500 best-practices/ # \u6700\u4F73\u5B9E\u8DF5\n\u2502 \u2514\u2500\u2500 implicit-conventions/ # \u9690\u5F0F\u7EA6\u5B9A\n\u251C\u2500\u2500 specs/ # \u5F53\u524D\u771F\u5B9E\u72B6\u6001 - \u5DF2\u6784\u5EFA\u7684\u5185\u5BB9\n\u2502 \u2514\u2500\u2500 [capability]/ # \u5355\u4E00\u805A\u7126\u7684\u529F\u80FD\n\u2502 \u251C\u2500\u2500 spec.md # \u8981\u6C42\u548C\u573A\u666F\n\u2502 \u2514\u2500\u2500 design.md # \u6280\u672F\u6A21\u5F0F\n\u251C\u2500\u2500 changes/ # \u63D0\u6848 - \u5E94\u8BE5\u66F4\u6539\u7684\u5185\u5BB9\n\u2502 \u251C\u2500\u2500 [change-name]/\n\u2502 \u2502 \u251C\u2500\u2500 proposal.md # \u539F\u56E0\u3001\u5185\u5BB9\u3001\u5F71\u54CD\n\u2502 \u2502 \u251C\u2500\u2500 tasks.md # \u5B9E\u65BD\u6E05\u5355\n\u2502 \u2502 \u251C\u2500\u2500 design.md # \u6280\u672F\u51B3\u7B56\uFF08\u5FC5\u9009\uFF1B\u77E5\u8BC6\u63D0\u53D6\u6765\u6E90\uFF09\n\u2502 \u2502 \u2514\u2500\u2500 specs/ # \u589E\u91CF\u53D8\u66F4\n\u2502 \u2502 \u2514\u2500\u2500 [capability]/\n\u2502 \u2502 \u2514\u2500\u2500 spec.md # ADDED/MODIFIED/REMOVED\n\u2502 \u2514\u2500\u2500 archive/ # \u5DF2\u5B8C\u6210\u7684\u53D8\u66F4\n```\n\n## \u521B\u5EFA\u53D8\u66F4\u63D0\u6848\n\n### \u51B3\u7B56\u6811\n\n```\n\u65B0\u8BF7\u6C42\uFF1F\n\u251C\u2500 \u4FEE\u590D\u6062\u590D\u89C4\u8303\u884C\u4E3A\u7684 Bug\uFF1F \u2192 \u76F4\u63A5\u4FEE\u590D\n\u251C\u2500 \u62FC\u5199\u9519\u8BEF/\u683C\u5F0F/\u6CE8\u91CA\uFF1F \u2192 \u76F4\u63A5\u4FEE\u590D\n\u251C\u2500 \u65B0\u529F\u80FD/\u80FD\u529B\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\n\u251C\u2500 \u7834\u574F\u6027\u66F4\u6539\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\n\u251C\u2500 \u67B6\u6784\u66F4\u6539\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\n\u2514\u2500 \u4E0D\u660E\u786E\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\uFF08\u66F4\u5B89\u5168\uFF09\n```\n\n### \u63D0\u6848\u7ED3\u6784\n\n1. **\u521B\u5EFA\u76EE\u5F55\uFF1A** `changes/[change-id]/`\uFF08kebab-case\uFF0C\u52A8\u8BCD\u5F00\u5934\uFF0C\u552F\u4E00\uFF09\n\n2. **\u7F16\u5199 proposal.md\uFF1A**\n```markdown\n# Change: [\u53D8\u66F4\u7684\u7B80\u8981\u63CF\u8FF0]\n\n## \u53D8\u66F4\u539F\u56E0\n[\u5173\u4E8E\u95EE\u9898/\u673A\u4F1A\u7684 1-2 \u53E5\u8BDD]\n\n## \u53D8\u66F4\u5185\u5BB9\n- [\u53D8\u66F4\u7684\u8981\u70B9\u5217\u8868]\n- [\u7528 **BREAKING** \u6807\u8BB0\u7834\u574F\u6027\u66F4\u6539]\n\n## \u5F71\u54CD\u8303\u56F4\n- Affected specs: [\u5217\u51FA\u529F\u80FD]\n- Affected code: [\u5173\u952E\u6587\u4EF6/\u7CFB\u7EDF]\n```\n\n3. **\u521B\u5EFA\u89C4\u8303\u589E\u91CF\uFF1A** `specs/[capability]/spec.md`\n```markdown\n## ADDED Requirements\n### \u9700\u6C42\uFF1ANew Feature\nThe system SHALL provide...\n\n#### \u573A\u666F\uFF1ASuccess case\n- **\u5F53** user performs action\n- **\u5219** expected result\n\n## MODIFIED Requirements\n### \u9700\u6C42\uFF1AExisting Feature\n[\u5B8C\u6574\u7684\u4FEE\u6539\u540E\u8981\u6C42]\n\n## REMOVED Requirements\n### \u9700\u6C42\uFF1AOld Feature\n**Reason**: [\u79FB\u9664\u539F\u56E0]\n**Migration**: [\u5982\u4F55\u5904\u7406]\n```\n\u5982\u679C\u591A\u4E2A\u529F\u80FD\u53D7\u5230\u5F71\u54CD\uFF0C\u5728 `changes/[change-id]/specs/<capability>/spec.md` \u4E0B\u521B\u5EFA\u591A\u4E2A\u589E\u91CF\u6587\u4EF6\u2014\u2014\u6BCF\u4E2A\u529F\u80FD\u4E00\u4E2A\u3002\n\n4. **\u521B\u5EFA tasks.md\uFF1A**\n\n\u5148\u8FD0\u884C `zhuanspec skills list --json` \u53D1\u73B0\u5F53\u524D\u73AF\u5883\u4E2D\u53EF\u7528\u7684 skill \u53CA\u5176 description\uFF0C\u7136\u540E\u57FA\u4E8E\u8BED\u4E49\u5339\u914D\u5728\u4EFB\u52A1\u4E2D\u6807\u6CE8\u771F\u5B9E skill \u540D\u79F0\uFF1A\n\n```markdown\n## 1. \u5B9E\u73B0\n- [ ] 1.1 \u521B\u5EFA\u6570\u636E\u5E93\u8868\u7ED3\u6784 @skill:java-db-schema-standards\n- [ ] 1.2 \u5B9E\u73B0 RPC \u63A5\u53E3 @skill:java-scf-rpc-usage-skill\n- [ ] 1.3 \u6DFB\u52A0\u524D\u7AEF\u7EC4\u4EF6 @skill:kf-fe-frontend-dev\n- [ ] 1.4 \u7F16\u5199\u6D4B\u8BD5 @skill:generate-mockito-unit-test-skill\n```\n> **@skill \u6807\u7B7E**\uFF1A\u521B\u5EFA tasks.md \u524D\uFF0C\u8FD0\u884C `zhuanspec skills list --json` \u53D1\u73B0\u53EF\u7528 skill \u53CA\u5176 description\u3002\u57FA\u4E8E skill description \u8FDB\u884C\u8BED\u4E49\u5339\u914D\uFF1A\n> - \u4ED4\u7EC6\u9605\u8BFB\u6BCF\u4E2A skill \u7684 description\uFF0C\u7406\u89E3\u5176\u5177\u4F53\u529F\u80FD\u548C\u9002\u7528\u573A\u666F\n> - \u53EA\u6709\u5F53\u4EFB\u52A1\u529F\u80FD\u4E0E skill description \u660E\u786E\u5339\u914D\u65F6\u624D\u6807\u6CE8\n> - \u7B80\u5355\u7684\u4EE3\u7801\u4FEE\u6539\uFF08\u5982\u589E\u5220\u679A\u4E3E\u503C\uFF09\u5E94\u5339\u914D\u901A\u7528\u7F16\u7801\u89C4\u8303 skill\uFF0C\u800C\u975E\u67B6\u6784\u7EA7 skill\n> - \u907F\u514D\u4EC5\u56E0\u6587\u4EF6\u540D\u6216\u8DEF\u5F84\u5173\u952E\u8BCD\u800C\u9519\u8BEF\u5339\u914D\n> - \u4F7F\u7528\u771F\u5B9E skill \u540D\u79F0\u6807\u6CE8\uFF0C\u652F\u6301\u591A\u4E2A skill\uFF08`@skill:name1,name2`\uFF09\n> - Apply \u9636\u6BB5 AI \u6839\u636E\u6807\u7B7E\u76F4\u63A5\u8C03\u7528\u5BF9\u5E94 skill\u3002\u65E0\u53EF\u7528 skill \u65F6\u53EF\u7701\u7565\u3002\n\n\u26A0\uFE0F **\u68C0\u67E5\u70B9 [Skill \u6807\u6CE8]**\uFF1A\n1. \u5FC5\u987B\u5148\u8FD0\u884C `zhuanspec skills list` \u5E76\u5728 Skill \u6620\u5C04\u8868\u4E2D\u8BB0\u5F55\u53D1\u73B0\u7684 skill\n2. \u6BCF\u4E2A\u4EFB\u52A1\u5FC5\u987B\u6807\u6CE8 @skill:\u771F\u5B9Eskill\u540D\u79F0 \u6216 @skill:none\n3. \u5982\u679C\u4F7F\u7528 @skill:none\uFF0C\u5FC5\u987B\u63D0\u4F9B\u7406\u7531\uFF08\u4F8B\u5982\uFF1A\"\u7EAF\u914D\u7F6E\u53D8\u66F4\uFF0C\u65E0\u9700 skill\"\uFF09\n4. @skill \u540D\u79F0\u5FC5\u987B\u4E0E `zhuanspec skills list` \u8FD4\u56DE\u7684\u540D\u79F0\u5B8C\u5168\u4E00\u81F4 \u2014\u2014 \u7981\u6B62\u865A\u6784 skill \u540D\u79F0\n5. tasks.md \u4E2D\u7684 Skill \u6620\u5C04\u8868\u4E0D\u80FD\u4E3A\u7A7A\n6. validate --strict \u4F1A\u9A8C\u8BC1\u6240\u6709 @skill \u540D\u79F0\u662F\u5426\u5B58\u5728\u4E8E\u5DF2\u77E5 skill \u5217\u8868\u4E2D\n\n\u26A0\uFE0F **\u68C0\u67E5\u70B9 [\u4EFB\u52A1\u6392\u5E8F]**\uFF1A\n1. tasks.md \u4E2D\u7684\u4EFB\u52A1\u5FC5\u987B\u6309\u6CE2\u6B21\u7EC4\u7EC7\uFF08### \u6CE2\u6B21 1, ### \u6CE2\u6B21 2 \u7B49\uFF09\n2. \u6CE2\u6B21\u5206\u914D\u5FC5\u987B\u6839\u636E @depends \u4F9D\u8D56\u5173\u7CFB\u8BA1\u7B97\uFF08\u6CE2\u6B21 1 = \u65E0\u4F9D\u8D56\uFF0C\u6CE2\u6B21 N = \u4F9D\u8D56\u6CE2\u6B21 N-1\uFF09\n3. \u4EFB\u52A1\u4E0D\u80FD\u51FA\u73B0\u5728\u5176\u4F9D\u8D56\u7684\u4EFB\u52A1\u4E4B\u524D\n4. \u5FC5\u987B\u5728\u6587\u4EF6\u672B\u5C3E\u6DFB\u52A0 \"## \u4F9D\u8D56\u5206\u6790\" \u7AE0\u8282\u5E76\u6807\u660E\"\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\"\n5. validate --strict \u4F1A\u9A8C\u8BC1\u4EFB\u52A1\u6392\u5E8F\u662F\u5426\u4E0E\u8BA1\u7B97\u7684\u6CE2\u6B21\u5339\u914D\n\n## Subagent \u542F\u52A8\u524D\u4E0A\u4E0B\u6587\u51C6\u5907\n\n\u5728\u7F16\u6392\u5C42\u4E3A\u6BCF\u4E2A Subagent \u51C6\u5907\u4E0A\u4E0B\u6587\u65F6\uFF0C\u6309\u4E09\u7EA7\u7B56\u7565\u6CE8\u5165\uFF1A\n\n### L1 \u6838\u5FC3\uFF08\u5168\u91CF\u6CE8\u5165\uFF0C\u5FC5\u987B\u5B8C\u6574\uFF09\n1. \u89E3\u6790\u5F53\u524D\u4EFB\u52A1\u7684 @test-case \u6807\u6CE8 \u2192 \u4ECE test-cases.md \u4E2D\u63D0\u53D6\u5BF9\u5E94 TC \u5168\u6587\n2. \u89E3\u6790\u5F53\u524D\u4EFB\u52A1\u7684 @ref \u6807\u6CE8 \u2192 \u4ECE\u6280\u672F\u65B9\u6848\u6587\u6863\u4E2D\u63D0\u53D6\u5BF9\u5E94\u7AE0\u8282\uFF08\u6309\u4F18\u5148\u7EA7\u67E5\u627E\uFF1A\u7528\u6237 --tech-spec \u6307\u5B9A\u8DEF\u5F84 > techDesign/tech-spec.md\uFF09\n3. \u5B9A\u4F4D\u5F53\u524D\u4EFB\u52A1\u6240\u5C5E\u7684 capability \u2192 \u8BFB\u53D6 specs/<capability>/spec.md\n\n### L2 \u5173\u8054\uFF08\u5168\u91CF\u6CE8\u5165\uFF09\n4. design.md \u5168\u6587\n5. Rules + Knowledge\n6. \u5F53\u524D Wave \u5176\u4ED6\u4EFB\u52A1\u7684\u4E00\u53E5\u8BDD\u6458\u8981 + \u524D\u7F6E Wave \u5B8C\u6210\u7ED3\u679C\u6458\u8981\n\n### L3 \u80CC\u666F\uFF08\u6458\u8981 + \u6309\u9700\u8BFB\u53D6\uFF09\n7. \u6280\u672F\u65B9\u6848\u5176\u4ED6\u7AE0\u8282 \u2192 \u8F93\u51FA\u6E05\u5355\u5F0F\u6458\u8981\uFF08\u201C\u8FD8\u5305\u542B N \u5F20\u8868\uFF1Axxx, yyy, ...\uFF0C\u8BE6\u89C1\u6280\u672F\u65B9\u6848\u6587\u6863\u201D\uFF09\n8. \u5176\u4ED6 spec \u7684 Requirement \u6807\u9898\u5217\u8868 \u2192 \u8F93\u51FA\u6E05\u5355\uFF08\"\u53E6\u6709 M \u4E2A spec\uFF0C\u8BE6\u89C1 specs/ \u76EE\u5F55\"\uFF09\n\n### \u6700\u7EC8\u6821\u9A8C\n- L1+L2 \u603B\u884C\u6570 > 800 \u884C \u2192 \u5BF9 L2 \u4E2D design.md \u505A\u7AE0\u8282\u88C1\u526A\uFF08\u53EA\u4FDD\u7559\u5F53\u524D\u4EFB\u52A1\u76F8\u5173\u7AE0\u8282\uFF09\n- L1 \u4E0D\u5141\u8BB8\u88C1\u526A\n- L3 \u7684\u6458\u8981\u5FC5\u987B\u5305\u542B\u6240\u6709\u5143\u7D20\u540D\u79F0\uFF0C\u4E0D\u5141\u8BB8\u7528\"\u7B49\"\u6216\"...\"\u7701\u7565\n\n5. **\u57FA\u4E8E\u6280\u672F\u65B9\u6848\u9010\u7AE0\u6620\u5C04\u5230 design.md\uFF08\u5FC5\u9009\uFF09**\uFF1A\n\u6BCF\u4E2A\u63D0\u6848\u90FD\u5FC5\u987B\u521B\u5EFA `design.md`\uFF0C\u8BB0\u5F55\u6280\u672F\u51B3\u7B56\u548C\u67B6\u6784\u601D\u8003\u3002\n\n**\u7AE0\u8282\u6620\u5C04\u89C4\u5219**\uFF1A\n- **\u5FC5\u9009\u7AE0\u8282**\uFF08\u6240\u6709\u63D0\u6848\u5FC5\u987B\u5305\u542B\uFF09\uFF1A\u80CC\u666F/Background\u3001\u51B3\u7B56/Decision\u3001\u98CE\u9669/Risks\n- **\u6309\u9700\u7AE0\u8282**\uFF08\u4EC5\u5F53\u6280\u672F\u65B9\u6848\u6D89\u53CA\u65F6\u624D\u751F\u6210\uFF09\uFF1A\n - \u6280\u672F\u65B9\u6848\u6709\u5EFA\u8868 SQL / DDL \u2192 \u751F\u6210 \u6570\u636E\u6A21\u578B/Database Design \u7AE0\u8282\n - \u6280\u672F\u65B9\u6848\u6709\u63A5\u53E3\u5B9A\u4E49 / API / SCF / RPC \u2192 \u751F\u6210 \u63A5\u53E3\u8BBE\u8BA1/API Contract \u7AE0\u8282\n - \u6280\u672F\u65B9\u6848\u6709 ES / MQ / \u7F13\u5B58 \u2192 \u751F\u6210 \u57FA\u7840\u8BBE\u65BD/Infrastructure \u7AE0\u8282\n - \u6280\u672F\u65B9\u6848\u6709\u524D\u7AEF\u8BBE\u8BA1 \u2192 \u751F\u6210 \u524D\u7AEF\u8BBE\u8BA1/Frontend Design \u7AE0\u8282\n -...(\u6309\u7167\u63D0\u4F9B\u7684\u6280\u672F\u65B9\u6848\u8865\u5145 \u603B\u4E4B\u8981\u8986\u76D6\u5168)\n- \u6BCF\u4E2A\u6309\u9700\u7AE0\u8282\u7684\u5185\u5BB9\u4ECE\u6280\u672F\u65B9\u6848\u5BF9\u5E94\u7AE0\u8282\u6620\u5C04\u800C\u6765\n- \u65E0\u6280\u672F\u65B9\u6848\u6587\u6863\u65F6\uFF0C\u4EC5\u6821\u9A8C\u5FC5\u9009\u7AE0\u8282\uFF08\u5411\u540E\u517C\u5BB9\uFF09\n\n```markdown\n## \u80CC\u666F\n[\u80CC\u666F\u3001\u7EA6\u675F\u3001\u5229\u76CA\u76F8\u5173\u8005]\n\n## \u76EE\u6807 / \u975E\u76EE\u6807\n- Goals: [...]\n- Non-Goals: [...]\n\n## \u51B3\u7B56\n- Decision: [\u5185\u5BB9\u548C\u539F\u56E0]\n- Alternatives considered: [\u9009\u9879 + \u7406\u7531]\n\n## \u98CE\u9669 / \u6743\u8861\n- [\u98CE\u9669] \u2192 \u7F13\u89E3\u63AA\u65BD\n\n## \u6700\u4F73\u5B9E\u8DF5\n[\u5B9E\u65BD\u8FC7\u7A0B\u4E2D\u7684\u6700\u4F73\u5B9E\u8DF5\u5EFA\u8BAE]\n\n## \u9690\u5F0F\u7EA6\u5B9A\n[\u56E2\u961F\u7279\u6709\u7684\u9690\u5F0F\u7EA6\u5B9A\u6216\u9ED8\u8BA4\u884C\u4E3A]\n\n## \u8FC1\u79FB\u8BA1\u5212\n[\u6B65\u9AA4\u3001\u56DE\u6EDA]\n\n## \u5F85\u89E3\u51B3\u95EE\u9898\n- [...]\n```\n\n**\u91CD\u8981**\uFF1Adesign.md \u662F\u77E5\u8BC6\u63D0\u53D6\u7684\u4E3B\u8981\u6765\u6E90\uFF0C\u5F52\u6863\u65F6\u4F1A\u81EA\u52A8\u63D0\u53D6\u5176\u4E2D\u7684\u201C\u51B3\u7B56\u201D\u3001\u201C\u6700\u4F73\u5B9E\u8DF5\u201D\u3001\u201C\u9690\u5F0F\u7EA6\u5B9A\u201D\u6C89\u6DC0\u5230\u9879\u76EE\u77E5\u8BC6\u5E93\u3002\n- [...]\n```\n\n## \u89C4\u8303\u6587\u4EF6\u683C\u5F0F\n\n### \u5173\u952E\uFF1A\u573A\u666F\u683C\u5F0F\n\n**\u6B63\u786E**\uFF08\u4F7F\u7528 #### \u6807\u9898\uFF09\uFF1A\n```markdown\n#### \u573A\u666F\uFF1A\u7528\u6237\u767B\u5F55\u6210\u529F\n- **\u5F53** \u63D0\u4F9B\u4E86\u6709\u6548\u51ED\u636E\n- **\u5219** \u8FD4\u56DE JWT token\n```\n\n**\u9519\u8BEF**\uFF08\u4E0D\u8981\u4F7F\u7528\u9879\u76EE\u7B26\u53F7\u6216\u7C97\u4F53\uFF09\uFF1A\n```markdown\n- **\u573A\u666F\uFF1A\u7528\u6237\u767B\u5F55** \u274C\n**\u573A\u666F**\uFF1A\u7528\u6237\u767B\u5F55 \u274C\n### \u573A\u666F\uFF1A\u7528\u6237\u767B\u5F55 \u274C\n```\n\n\u6BCF\u4E2A\u8981\u6C42\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u4E2A\u573A\u666F\u3002\n\n### \u8981\u6C42\u63AA\u8F9E\n- \u5BF9\u89C4\u8303\u6027\u8981\u6C42\u4F7F\u7528 SHALL/MUST\uFF08\u9664\u975E\u6709\u610F\u975E\u89C4\u8303\u6027\uFF0C\u5426\u5219\u907F\u514D\u4F7F\u7528 should/may\uFF09\n\n### \u589E\u91CF\u64CD\u4F5C\n\n- `## ADDED Requirements` - \u65B0\u529F\u80FD\n- `## MODIFIED Requirements` - \u66F4\u6539\u7684\u884C\u4E3A\n- `## REMOVED Requirements` - \u5DF2\u5F03\u7528\u7684\u529F\u80FD\n- `## RENAMED Requirements` - \u540D\u79F0\u66F4\u6539\n\n\u6807\u9898\u4F7F\u7528 `trim(header)` \u5339\u914D - \u5FFD\u7565\u7A7A\u767D\u3002\n\n#### \u4F55\u65F6\u4F7F\u7528 ADDED vs MODIFIED\n- ADDED\uFF1A\u5F15\u5165\u4E00\u4E2A\u65B0\u7684\u529F\u80FD\u6216\u5B50\u529F\u80FD\uFF0C\u53EF\u4EE5\u72EC\u7ACB\u4F5C\u4E3A\u8981\u6C42\u3002\u5F53\u66F4\u6539\u662F\u6B63\u4EA4\u7684\uFF08\u4F8B\u5982\uFF0C\u6DFB\u52A0\"\u659C\u6760\u547D\u4EE4\u914D\u7F6E\"\uFF09\u800C\u4E0D\u662F\u6539\u53D8\u73B0\u6709\u8981\u6C42\u7684\u8BED\u4E49\u65F6\uFF0C\u4F18\u5148\u4F7F\u7528 ADDED\u3002\n- MODIFIED\uFF1A\u66F4\u6539\u73B0\u6709\u8981\u6C42\u7684\u884C\u4E3A\u3001\u8303\u56F4\u6216\u9A8C\u6536\u6807\u51C6\u3002\u59CB\u7EC8\u7C98\u8D34\u5B8C\u6574\u7684\u3001\u66F4\u65B0\u7684\u8981\u6C42\u5185\u5BB9\uFF08\u6807\u9898 + \u6240\u6709\u573A\u666F\uFF09\u3002\u5F52\u6863\u5668\u5C06\u7528\u60A8\u5728\u6B64\u5904\u63D0\u4F9B\u7684\u5185\u5BB9\u66FF\u6362\u6574\u4E2A\u8981\u6C42\uFF1B\u90E8\u5206\u589E\u91CF\u5C06\u4E22\u5931\u5148\u524D\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002\n- RENAMED\uFF1A\u4EC5\u5728\u540D\u79F0\u66F4\u6539\u65F6\u4F7F\u7528\u3002\u5982\u679C\u60A8\u8FD8\u66F4\u6539\u884C\u4E3A\uFF0C\u8BF7\u4F7F\u7528 RENAMED\uFF08\u540D\u79F0\uFF09\u52A0\u4E0A MODIFIED\uFF08\u5185\u5BB9\uFF09\uFF0C\u5F15\u7528\u65B0\u540D\u79F0\u3002\n\n\u5E38\u89C1\u9677\u9631\uFF1A\u4F7F\u7528 MODIFIED \u6DFB\u52A0\u65B0\u5173\u6CE8\u70B9\u800C\u4E0D\u5305\u542B\u5148\u524D\u7684\u6587\u672C\u3002\u8FD9\u4F1A\u5728\u5F52\u6863\u65F6\u5BFC\u81F4\u8BE6\u7EC6\u4FE1\u606F\u4E22\u5931\u3002\u5982\u679C\u60A8\u6CA1\u6709\u660E\u786E\u66F4\u6539\u73B0\u6709\u8981\u6C42\uFF0C\u8BF7\u5728 ADDED \u4E0B\u6DFB\u52A0\u65B0\u8981\u6C42\u3002\n\n\u6B63\u786E\u7F16\u5199 MODIFIED \u8981\u6C42\uFF1A\n1) \u5728 `zhuanspec/specs/<capability>/spec.md` \u4E2D\u627E\u5230\u73B0\u6709\u8981\u6C42\u3002\n2) \u590D\u5236\u6574\u4E2A\u8981\u6C42\u5757\uFF08\u4ECE `### Requirement: ...` \u5230\u5176\u573A\u666F\uFF09\u3002\n3) \u5C06\u5176\u7C98\u8D34\u5230 `## MODIFIED Requirements` \u4E0B\u5E76\u7F16\u8F91\u4EE5\u53CD\u6620\u65B0\u884C\u4E3A\u3002\n4) \u786E\u4FDD\u6807\u9898\u6587\u672C\u5B8C\u5168\u5339\u914D\uFF08\u5FFD\u7565\u7A7A\u767D\uFF09\u5E76\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A `#### Scenario:`\u3002\n\nRENAMED \u793A\u4F8B\uFF1A\n```markdown\n## RENAMED Requirements\n- FROM: `### \u9700\u6C42\uFF1ALogin`\n- TO: `### \u9700\u6C42\uFF1AUser Authentication`\n```\n\n## \u6545\u969C\u6392\u9664\n\n### \u5E38\u89C1\u9519\u8BEF\n\n**\"\u53D8\u66F4\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u4E2A\u589E\u91CF\"**\n- \u68C0\u67E5 `changes/[name]/specs/` \u662F\u5426\u5B58\u5728 .md \u6587\u4EF6\n- \u9A8C\u8BC1\u6587\u4EF6\u5177\u6709\u64CD\u4F5C\u524D\u7F00\uFF08## ADDED Requirements\uFF09\n\n**\"\u8981\u6C42\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u4E2A\u573A\u666F\"**\n- \u68C0\u67E5\u573A\u666F\u662F\u5426\u4F7F\u7528 `#### Scenario:` \u683C\u5F0F\uFF084 \u4E2A\u4E95\u53F7\uFF09\n- \u4E0D\u8981\u5BF9\u573A\u666F\u6807\u9898\u4F7F\u7528\u9879\u76EE\u7B26\u53F7\u6216\u7C97\u4F53\n\n**\u9759\u9ED8\u573A\u666F\u89E3\u6790\u5931\u8D25**\n- \u9700\u8981\u7CBE\u786E\u683C\u5F0F\uFF1A`#### Scenario: Name`\n- \u4F7F\u7528\u4EE5\u4E0B\u547D\u4EE4\u8C03\u8BD5\uFF1A`zhuanspec show [change] --json --deltas-only`\n\n### \u9A8C\u8BC1\u63D0\u793A\n\n```bash\n# \u59CB\u7EC8\u4F7F\u7528\u4E25\u683C\u6A21\u5F0F\u8FDB\u884C\u5168\u9762\u68C0\u67E5\nzhuanspec validate [change] --strict\n\n# \u8C03\u8BD5\u589E\u91CF\u89E3\u6790\nzhuanspec show [change] --json | jq '.deltas'\n\n# \u68C0\u67E5\u7279\u5B9A\u8981\u6C42\nzhuanspec show [spec] --json -r 1\n```\n\n## \u7406\u60F3\u8DEF\u5F84\u811A\u672C\n\n```bash\n# 1) \u63A2\u7D22\u5F53\u524D\u72B6\u6001\nzhuanspec spec list --long\nzhuanspec list\n# \u53EF\u9009\u5168\u6587\u641C\u7D22\uFF1A\n# rg -n \"Requirement:|Scenario:\" zhuanspec/specs\n# rg -n \"^#|Requirement:\" zhuanspec/changes\n\n# 2) \u9009\u62E9\u53D8\u66F4 ID \u5E76\u642D\u5EFA\nCHANGE=add-two-factor-auth\nmkdir -p zhuanspec/changes/$CHANGE/{specs/auth}\nprintf \"## \u53D8\u66F4\u539F\u56E0\\n...\\n\\n## \u53D8\u66F4\u5185\u5BB9\\n- ...\\n\\n## \u5F71\u54CD\u8303\u56F4\\n- ...\\n\" > zhuanspec/changes/\\$CHANGE/proposal.md\nprintf \"## 1. \u5B9E\u73B0\n- [ ] 1.1 ...\n\" > zhuanspec/changes/$CHANGE/tasks.md\n\n# 3) \u6DFB\u52A0\u589E\u91CF\uFF08\u793A\u4F8B\uFF09\ncat > zhuanspec/changes/$CHANGE/specs/auth/spec.md << 'EOF'\n## ADDED Requirements\n### \u9700\u6C42\uFF1A\u53CC\u56E0\u7D20\u8BA4\u8BC1\n\u7528\u6237 MUST \u5728\u767B\u5F55\u65F6\u63D0\u4F9B\u7B2C\u4E8C\u4E2A\u8BA4\u8BC1\u56E0\u7D20\u3002\n\n#### \u573A\u666F\uFF1A\u9700\u8981 OTP\n- **\u5F53** \u63D0\u4F9B\u4E86\u6709\u6548\u51ED\u636E\n- **\u5219** \u9700\u8981 OTP \u6311\u6218\nEOF\n\n# 4) \u9A8C\u8BC1\nzhuanspec validate $CHANGE --strict\n```\n\n## \u591A\u529F\u80FD\u793A\u4F8B\n\n```\nzhuanspec/changes/add-2fa-notify/\n\u251C\u2500\u2500 proposal.md\n\u251C\u2500\u2500 tasks.md\n\u2514\u2500\u2500 specs/\n \u251C\u2500\u2500 auth/\n \u2502 \u2514\u2500\u2500 spec.md # ADDED: \u53CC\u56E0\u7D20\u8BA4\u8BC1\n \u2514\u2500\u2500 notifications/\n \u2514\u2500\u2500 spec.md # ADDED: OTP \u90AE\u4EF6\u901A\u77E5\n```\n\nauth/spec.md\n```markdown\n## ADDED Requirements\n### \u9700\u6C42\uFF1A\u53CC\u56E0\u7D20\u8BA4\u8BC1\n...\n```\n\nnotifications/spec.md\n```markdown\n## ADDED Requirements\n### \u9700\u6C42\uFF1AOTP \u90AE\u4EF6\u901A\u77E5\n...\n```\n\n## \u6700\u4F73\u5B9E\u8DF5\n\n### \u7B80\u5355\u4F18\u5148\n- \u9ED8\u8BA4\u65B0\u589E\u4EE3\u7801 <100 \u884C\n- \u5355\u6587\u4EF6\u5B9E\u73B0\uFF0C\u76F4\u5230\u8BC1\u660E\u4E0D\u8DB3\n- \u907F\u514D\u6CA1\u6709\u660E\u786E\u7406\u7531\u7684\u6846\u67B6\n- \u9009\u62E9\u65E0\u804A\u4F46\u7ECF\u8FC7\u9A8C\u8BC1\u7684\u6A21\u5F0F\n\n### \u590D\u6742\u6027\u89E6\u53D1\u6761\u4EF6\n\u4EC5\u5728\u4EE5\u4E0B\u60C5\u51B5\u4E0B\u6DFB\u52A0\u590D\u6742\u6027\uFF1A\n- \u6027\u80FD\u6570\u636E\u8868\u660E\u5F53\u524D\u89E3\u51B3\u65B9\u6848\u592A\u6162\n- \u5177\u4F53\u7684\u89C4\u6A21\u8981\u6C42\uFF08>1000 \u7528\u6237\uFF0C>100MB \u6570\u636E\uFF09\n- \u591A\u4E2A\u7ECF\u8FC7\u9A8C\u8BC1\u7684\u7528\u4F8B\u9700\u8981\u62BD\u8C61\n\n### \u6E05\u6670\u7684\u5F15\u7528\n- \u4F7F\u7528 `file.ts:42` \u683C\u5F0F\u8868\u793A\u4EE3\u7801\u4F4D\u7F6E\n- \u5C06\u89C4\u8303\u5F15\u7528\u4E3A `specs/auth/spec.md`\n- \u94FE\u63A5\u76F8\u5173\u53D8\u66F4\u548C PR\n\n### \u529F\u80FD\u547D\u540D\n- \u4F7F\u7528\u52A8\u8BCD-\u540D\u8BCD\uFF1A`user-auth`\u3001`payment-capture`\n- \u6BCF\u4E2A\u529F\u80FD\u5355\u4E00\u76EE\u7684\n- 10 \u5206\u949F\u53EF\u7406\u89E3\u6027\u89C4\u5219\n- \u5982\u679C\u63CF\u8FF0\u9700\u8981\"AND\"\uFF0C\u5219\u62C6\u5206\n\n### \u53D8\u66F4 ID \u547D\u540D\n- \u4F7F\u7528 kebab-case\uFF0C\u7B80\u77ED\u4E14\u63CF\u8FF0\u6027\uFF1A`add-two-factor-auth`\n- \u4F18\u5148\u4F7F\u7528\u52A8\u8BCD\u5F00\u5934\u7684\u524D\u7F00\uFF1A`add-`\u3001`update-`\u3001`remove-`\u3001`refactor-`\n- \u786E\u4FDD\u552F\u4E00\u6027\uFF1B\u5982\u679C\u5DF2\u4F7F\u7528\uFF0C\u8FFD\u52A0 `-2`\u3001`-3` \u7B49\n\n## \u5DE5\u5177\u9009\u62E9\u6307\u5357\n\n| \u4EFB\u52A1 | \u5DE5\u5177 | \u539F\u56E0 |\n|------|------|-----|\n| \u6309\u6A21\u5F0F\u67E5\u627E\u6587\u4EF6 | Glob | \u5FEB\u901F\u6A21\u5F0F\u5339\u914D |\n| \u641C\u7D22\u4EE3\u7801\u5185\u5BB9 | Grep | \u4F18\u5316\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u641C\u7D22 |\n| \u8BFB\u53D6\u7279\u5B9A\u6587\u4EF6 | Read | \u76F4\u63A5\u6587\u4EF6\u8BBF\u95EE |\n| \u63A2\u7D22\u672A\u77E5\u8303\u56F4 | Task | \u591A\u6B65\u9AA4\u8C03\u67E5 |\n\n## \u9519\u8BEF\u6062\u590D\n\n### \u53D8\u66F4\u51B2\u7A81\n1. \u8FD0\u884C `zhuanspec list` \u67E5\u770B\u6D3B\u52A8\u53D8\u66F4\n2. \u68C0\u67E5\u91CD\u53E0\u7684\u89C4\u8303\n3. \u4E0E\u53D8\u66F4\u6240\u6709\u8005\u534F\u8C03\n4. \u8003\u8651\u5408\u5E76\u63D0\u6848\n\n### \u9A8C\u8BC1\u5931\u8D25\n1. \u4F7F\u7528 `--strict` \u6807\u5FD7\u8FD0\u884C\n2. \u68C0\u67E5 JSON \u8F93\u51FA\u4EE5\u83B7\u53D6\u8BE6\u7EC6\u4FE1\u606F\n3. \u9A8C\u8BC1\u89C4\u8303\u6587\u4EF6\u683C\u5F0F\n4. \u786E\u4FDD\u573A\u666F\u683C\u5F0F\u6B63\u786E\n\n### \u7F3A\u5C11\u4E0A\u4E0B\u6587\n1. \u9996\u5148\u9605\u8BFB project.md\n2. \u68C0\u67E5\u76F8\u5173\u89C4\u8303\n3. \u5BA1\u67E5\u6700\u8FD1\u7684\u5F52\u6863\n4. \u8BF7\u6C42\u6F84\u6E05\n\n## \u5FEB\u901F\u53C2\u8003\n\n### \u9636\u6BB5\u6307\u793A\u5668\n- `changes/` - \u5DF2\u63D0\u8BAE\uFF0C\u5C1A\u672A\u6784\u5EFA\n- `specs/` - \u5DF2\u6784\u5EFA\u5E76\u90E8\u7F72\n- `archive/` - \u5DF2\u5B8C\u6210\u7684\u53D8\u66F4\n\n### \u6587\u4EF6\u7528\u9014\n- `proposal.md` - \u539F\u56E0\u548C\u5185\u5BB9\n- `tasks.md` - \u5B9E\u65BD\u6B65\u9AA4\n- `design.md` - \u6280\u672F\u51B3\u7B56\n- `spec.md` - \u8981\u6C42\u548C\u884C\u4E3A\n\n### CLI \u8981\u70B9\n```bash\nzhuanspec list # \u6B63\u5728\u8FDB\u884C\u4EC0\u4E48\uFF1F\nzhuanspec show [item] # \u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F\nzhuanspec validate --strict # \u662F\u5426\u6B63\u786E\uFF1F\nzhuanspec archive <change-id> [--yes|-y] # \u6807\u8BB0\u5B8C\u6210\uFF08\u6DFB\u52A0 --yes \u7528\u4E8E\u81EA\u52A8\u5316\uFF09\n```\n\n\u8BB0\u4F4F\uFF1A\u89C4\u8303\u662F\u771F\u76F8\u3002\u53D8\u66F4\u662F\u63D0\u6848\u3002\u4FDD\u6301\u5B83\u4EEC\u540C\u6B65\u3002\n\n## \u4EFB\u52A1\u6267\u884C\u7F16\u6392\n\n\u5F53 apply \u6307\u4EE4\u4E2D\u5305\u542B `<execution_plan>`/task.md\u4E2D\u5305\u542B `@depends` \u65F6\uFF0C\u5FC5\u987B\u6309\u4EE5\u4E0B\u7B56\u7565\u6267\u884C\u4EFB\u52A1\uFF0C\u800C\u975E\u987A\u5E8F\u9010\u4E00\u6267\u884C\u3002\n\n### \u8C03\u5EA6\u89C4\u5219\n\n1. **\u6309 wave \u7F16\u53F7\u4ECE\u5C0F\u5230\u5927**\u4F9D\u6B21\u6267\u884C\uFF0Cwave \u4E4B\u95F4\u4E25\u683C\u4E32\u884C\n2. **\u540C\u4E00 wave \u5185\u7684\u591A\u4E2A task**\uFF1A\u4E3A\u6BCF\u4E2A task \u542F\u52A8\u72EC\u7ACB\u7684 subagent\uFF08Coding \u7C7B\u578B\uFF09\uFF0C\u4F46**\u6700\u5927\u5E76\u884C\u5EA6\u9650\u5236\u4E3A 3 \u4E2A subagent**\n3. **\u8D85\u8FC7 3 \u4E2A\u4EFB\u52A1\u7684 Wave**\uFF1A\u6309 batch \u62C6\u5206\u6267\u884C\uFF0C\u6BCF\u6279\u6700\u591A 3 \u4E2A subagent \u5E76\u884C\uFF0Cbatch \u95F4\u4E32\u884C\u7B49\u5F85\n4. **\u7B49\u5F85\u672C wave \u6240\u6709 subagent \u5B8C\u6210\u540E**\uFF0C\u624D\u542F\u52A8\u4E0B\u4E00 wave\n5. \u540C\u4E00 wave \u5185\u4EC5\u6709\u4E00\u4E2A task \u65F6\uFF0C\u542F\u52A8\u5355\u4E2A subagent \u6267\u884C\n6. **\u53C2\u8003 `<scheduling_summary>` \u4E2D\u7684\u5177\u4F53\u8C03\u5EA6\u6307\u4EE4**\uFF0C\u660E\u786E\u6BCF\u4E2A wave \u9700\u8981\u542F\u52A8\u7684 subagent \u6570\u91CF\u548C\u6267\u884C\u65B9\u5F0F\n7. **\u7F16\u8BD1\u5931\u8D25\u5904\u7406**\uFF1A\u5E76\u884C\u4EFB\u52A1\u7F16\u8BD1\u5931\u8D25\u65F6\uFF0C\u5148\u5C1D\u8BD5\u4FEE\u590D\uFF0C\u65E0\u6CD5\u4FEE\u590D\u5219\u6807\u8BB0\u4E3A BLOCKED\uFF0C\u7EE7\u7EED\u6267\u884C\u540C Wave \u5176\u4ED6\u4EFB\u52A1\n8. **Wave \u5B8C\u6210\u540E\u96C6\u6210\u6D4B\u8BD5**\uFF1A\u6BCF\u4E2A Wave \u5168\u90E8\u4EFB\u52A1\u5904\u7406\u5B8C\u6210\u540E\uFF0C\u8FDB\u5165\u96C6\u6210\u6D4B\u8BD5\u9636\u6BB5\uFF08\u8BE6\u89C1\u300CWave \u96C6\u6210\u9A8C\u8BC1\u300D\u7AE0\u8282\uFF09\n\n### \u8C03\u5EA6\u6307\u4EE4\u683C\u5F0F\n\n\u6267\u884C\u8BA1\u5212\u7684 `<wave>` \u5143\u7D20\u5305\u542B\u4EE5\u4E0B\u5C5E\u6027\u7528\u4E8E\u6307\u5BFC subagent \u8C03\u5EA6\uFF1A\n- `subagent_count`\uFF1A\u8BE5\u6CE2\u6B21\u9700\u8981\u542F\u52A8\u7684 subagent \u6570\u91CF\uFF08\u7B49\u4E8E wave \u5185\u7684\u4EFB\u52A1\u6570\uFF09\n- `execution_mode`\uFF1A\u6267\u884C\u6A21\u5F0F\uFF0C`parallel`\uFF08\u5E76\u884C\uFF09\u6216 `serial`\uFF08\u4E32\u884C\uFF09\n- `max_concurrency`\uFF1A\u6700\u5927\u5E76\u884C\u5EA6\u9650\u5236\uFF08\u9ED8\u8BA4 3\uFF09\n\n\u5F53 Wave \u5185\u4EFB\u52A1\u6570\u8D85\u8FC7 `max_concurrency` \u65F6\uFF0C`<wave>` \u5143\u7D20\u5305\u542B `<batch>` \u5B50\u5143\u7D20\uFF1A\n- `<batch number=\"1\" subagent_count=\"3\">` \u2014 \u6BCF\u6279\u6700\u591A 3 \u4E2A subagent \u5E76\u884C\n- batch \u4E4B\u95F4\u4E32\u884C\u6267\u884C\uFF0C\u524D\u4E00 batch \u5168\u90E8\u5B8C\u6210\u540E\u624D\u542F\u52A8\u4E0B\u4E00 batch\n\n`<scheduling_summary>` \u63D0\u4F9B\u4EBA\u7C7B\u53EF\u8BFB\u7684\u8C03\u5EA6\u6458\u8981\uFF0C\u683C\u5F0F\u5982\u4E0B\uFF1A\n```\nWave 1 \u2192 \u542F\u52A8 1 \u4E2A subagent \u6267\u884C\u8BE5\u6CE2\u6B21\u7684\u5355\u4E2A\u4EFB\u52A1\nWave 2 \u2192 \u542F\u52A8 1 \u4E2A subagent \u6267\u884C\u8BE5\u6CE2\u6B21\u7684\u5355\u4E2A\u4EFB\u52A1\nWave 3 \u2192 \u542F\u52A8 2 \u4E2A subagent \u5E76\u884C\u6267\u884C\u8BE5\u6CE2\u6B21\u7684 2 \u4E2A\u4EFB\u52A1\n```\n\nAI \u52A9\u624B\u5728\u6267\u884C\u65F6**\u5FC5\u987B**\u6309\u7167 `<scheduling_summary>` \u4E2D\u7684\u6307\u4EE4\u542F\u52A8\u5BF9\u5E94\u6570\u91CF\u7684 subagent\u3002\n\n### Subagent \u4E0A\u4E0B\u6587\u9694\u79BB\n\n\u6BCF\u4E2A subagent \u7684 prompt \u4E2D**\u4EC5\u5305\u542B**\uFF1A\n- \u5F53\u524D task \u7684\u63CF\u8FF0\u548C\u9A8C\u6536\u6807\u51C6\n- \u5F53\u524D task \u5173\u8054\u7684 `@skill` \u5185\u5BB9\uFF08\u901A\u8FC7 skill \u540D\u79F0\u89E6\u53D1\u52A0\u8F7D\uFF09\n- \u76F8\u5173\u7684 spec \u6587\u4EF6\u8DEF\u5F84\u548C\u5185\u5BB9\uFF08\u4EC5\u9650\u8BE5 task \u6D89\u53CA\u7684\u90E8\u5206\uFF09\n- \u524D\u5E8F wave \u7684\u5B8C\u6210\u6458\u8981\uFF08\u800C\u975E\u5B8C\u6574\u8F93\u51FA\uFF09\n\n**\u7981\u6B62**\u5411 subagent \u6CE8\u5165\uFF1A\n- \u5176\u4ED6 wave \u7684 task \u8BE6\u60C5\n- \u4E0D\u76F8\u5173\u7684 skill \u5185\u5BB9\n- \u5176\u4ED6 subagent \u7684\u5B8C\u6574\u8F93\u51FA\n\n### \u5B8C\u6210\u540C\u6B65\n\n- \u6BCF\u4E2A subagent \u5B8C\u6210\u540E\uFF0C\u63D0\u53D6\u7B80\u77ED\u7684**\u5B8C\u6210\u6458\u8981**\uFF08\u4FEE\u6539\u4E86\u54EA\u4E9B\u6587\u4EF6\u3001\u5173\u952E\u53D8\u66F4\u70B9\uFF09\n- \u5C06\u6458\u8981\u4F20\u9012\u7ED9\u540E\u7EED wave \u7684 subagent \u4F5C\u4E3A\u4E0A\u4E0B\u6587\n- \u5728 `tasks.md` \u4E2D\u5C06\u5BF9\u5E94\u4EFB\u52A1\u6807\u8BB0\u4E3A `[x]`\n\n### \u964D\u7EA7\u7B56\u7565\n\n\u5F53 AI \u5E73\u53F0\u4E0D\u652F\u6301 subagent \u65F6\uFF0C\u6309\u4EE5\u4E0B\u964D\u7EA7\u7B56\u7565\u6267\u884C\uFF1A\n1. \u4ECD\u6309 wave \u987A\u5E8F\u6267\u884C\u4EFB\u52A1\n2. \u6BCF\u4E2A task \u6267\u884C\u524D\uFF0C\u6E05\u7406\u4E0D\u76F8\u5173\u7684 skill \u4E0A\u4E0B\u6587\n3. \u6BCF\u4E2A task \u6267\u884C\u540E\uFF0C\u4EC5\u4FDD\u7559\u5B8C\u6210\u6458\u8981\uFF0C\u907F\u514D\u4E0A\u4E0B\u6587\u7D2F\u79EF\u81A8\u80C0\n\n---\n\n## Apply \u9636\u6BB5\u4E13\u7528 Agent\n\nApply \u9636\u6BB5\u4F7F\u7528\u4E24\u79CD\u4E13\u7528 Agent \u7C7B\u578B\u6267\u884C\u4EE3\u7801\u5B9E\u65BD\u4EFB\u52A1\uFF0C\u7531\u7F16\u6392 Agent\uFF08\u4E3B Agent\uFF09\u6839\u636E\u4EFB\u52A1\u6807\u6CE8\u9009\u62E9\u3002\n\n**Agent \u5B9A\u4E49\u6587\u4EF6\u8DEF\u5F84**\uFF08\u4F9B Claude/Cursor \u7B49\u5DE5\u5177\u6CE8\u518C\uFF09\uFF1A\n- `agents/zhuanspec/apply-agent.md` - \u666E\u901A\u4EE3\u7801\u5B9E\u65BD Agent\n- `agents/zhuanspec/tdd-apply-agent.md` - TDD \u6A21\u5F0F Agent\n\n### Agent \u7C7B\u578B\u9009\u62E9\u89C4\u5219\uFF08\u53CC\u6761\u4EF6\u5224\u5B9A\uFF09\n\n\u7F16\u6392 Agent \u5728\u4E3A\u6BCF\u4E2A\u4EFB\u52A1\u542F\u52A8 subagent \u524D\uFF0CMUST \u4E25\u683C\u6267\u884C\u4EE5\u4E0B\u53CC\u6761\u4EF6\u5224\u5B9A\uFF1A\n\n| \u6761\u4EF6 1\uFF1A@test-case | \u6761\u4EF6 2\uFF1A\u4EFB\u52A1\u7C7B\u578B | Agent \u7C7B\u578B | \u5B9A\u4E49\u6587\u4EF6 |\n|------|------|-----------|--------|\n| \u65E0 `@test-case` | \u2014\uFF08\u8DF3\u8FC7\uFF09 | `applyAgent` | `agents/zhuanspec/apply-agent.md` |\n| \u6709 `@test-case:TC-XXX` | \u9002\u5408 TDD\uFF08\u540E\u7AEF\u4E1A\u52A1\u903B\u8F91/\u63A5\u53E3\u5B9E\u73B0/\u590D\u6742\u67E5\u8BE2\uFF1B\u524D\u7AEF\u7EC4\u4EF6\u4EA4\u4E92/Hooks/\u8868\u5355\u6821\u9A8C/utils/services \u7B49\u53EF\u6D4B\u884C\u4E3A\uFF09 | `tddApplyAgent` | `agents/zhuanspec/tdd-apply-agent.md` |\n| \u6709 `@test-case:TC-XXX` | \u4E0D\u9002\u5408 TDD\uFF08DDL/\u914D\u7F6E/DTO/ES\u7D22\u5F15/Mapper XML/\u524D\u7AEF\u7EAF\u9759\u6001\u5C55\u793A\uFF09 | `applyAgent`\uFF08\u964D\u7EA7\uFF09 | `agents/zhuanspec/apply-agent.md` |\n\n**\u5224\u5B9A\u539F\u5219**\uFF1A\u6761\u4EF6 2 \u4F9D\u636E**\u662F\u5426\u5B58\u5728\u53EF\u6D4B\u8BD5\u884C\u4E3A**\uFF0C\u4E0E\u6280\u672F\u6808/\u524D\u540E\u7AEF\u65E0\u5173\u3002\u524D\u7AEF\u53EA\u8981\u5305\u542B\u72B6\u6001\u3001\u4EA4\u4E92\u3001Hooks\u3001\u8868\u5355\u6821\u9A8C\u3001utils\u3001services \u7B49\u53EF\u6D4B\u884C\u4E3A\u5373\u5C5E\u4E8E\u9002\u5408 TDD\u3002\n\n**\u4E0D\u9002\u5408 TDD \u7684\u4EFB\u52A1\u7C7B\u578B**\uFF1A\u5EFA\u8868/DDL\uFF08SQL \u811A\u672C\uFF09\u3001\u914D\u7F6E\u53D8\u66F4\uFF08yaml/properties/xml\uFF09\u3001\u7EAF DTO/Entity/Enum \u5B9A\u4E49\u3001ES \u7D22\u5F15\u6A21\u677F/JSON \u8D44\u6E90\u6587\u4EF6\u3001\u524D\u7AEF\u7EAF\u9759\u6001\u5C55\u793A\u7EC4\u4EF6\uFF08\u65E0 state / \u65E0\u4E8B\u4EF6 / \u65E0\u6570\u636E\u5904\u7406\uFF09\u3001Mapper XML/DAO \u63A5\u53E3\u5B9A\u4E49\u3002\n\n**\u9002\u5408 TDD \u7684\u524D\u7AEF\u4EFB\u52A1\u7C7B\u578B\uFF08\u8865\u5145\uFF09**\uFF1A\u7EC4\u4EF6\u4EA4\u4E92\u4E0E\u72B6\u6001\u7BA1\u7406\u3001\u81EA\u5B9A\u4E49 Hooks\u3001\u8868\u5355\u6821\u9A8C\u4E0E\u53D7\u63A7\u903B\u8F91\u3001\u524D\u7AEF utils/services\u3001store/reducer/selector\u3001\u6570\u636E\u683C\u5F0F\u5316\u4E0E\u7BA1\u9053\u3002\u524D\u7AEF\u542B\u72B6\u6001/\u4EA4\u4E92/Hooks/\u8868\u5355\u6821\u9A8C/utils/services \u7684\u4EFB\u52A1\u5C5E\u4E8E\u9002\u5408 TDD\uFF0C\u4E0D\u5F97\u4EE5\"\u524D\u7AEF\"\u4E3A\u7531\u964D\u7EA7\u3002\n\n**\u51B3\u7B56\u8BB0\u5F55\uFF08MANDATORY\uFF09**\uFF1A\u7F16\u6392 Agent MUST \u5728\u542F\u52A8\u6BCF\u4E2A subagent \u7684 prompt \u5F00\u5934\u6CE8\u5165 Agent \u9009\u62E9\u51B3\u7B56\uFF08Agent \u7C7B\u578B/@test-case \u6807\u6CE8/\u4EFB\u52A1\u7C7B\u578B\u5224\u5B9A/TDD \u9002\u7528\u6027\uFF09\uFF0Csubagent MUST \u5C06\u6B64\u51B3\u7B56\u4FE1\u606F\u539F\u6837\u5199\u5165\u4EFB\u52A1\u62A5\u544A\u3002\n\n### Agent \u4F7F\u7528\u65B9\u5F0F\n\n\u7F16\u6392 Agent\uFF08\u4E3B Agent\uFF09\u5728 Wave \u5E76\u884C\u6267\u884C\u65F6\uFF1A\n\n1. **\u9009\u62E9 Agent**\uFF1A\u6839\u636E\u4EFB\u52A1\u7684 `@test-case` \u6807\u6CE8\u548C\u4EFB\u52A1\u7C7B\u578B\uFF0C\u6309\u53CC\u6761\u4EF6\u89C4\u5219\u9009\u62E9\u5BF9\u5E94 Agent \u7C7B\u578B\n2. **\u52A0\u8F7D Agent \u5B9A\u4E49**\uFF1A\u8BFB\u53D6\u5BF9\u5E94 Agent \u5B9A\u4E49\u6587\u4EF6\u83B7\u53D6\u5B8C\u6574\u6307\u4EE4\n3. **\u6CE8\u5165\u4E0A\u4E0B\u6587**\uFF1A\n - \u5F53\u524D task \u7684\u5B8C\u6574\u63CF\u8FF0\n - \u76F8\u5173 spec \u6587\u4EF6\u5185\u5BB9\n - Rules \u548C Knowledge\uFF08\u8E29\u5751\u8B66\u544A\u3001\u6700\u4F73\u5B9E\u8DF5\uFF09\n - \u524D\u5E8F wave \u5B8C\u6210\u6458\u8981\n4. **\u542F\u52A8 Subagent**\uFF1A\u4F7F\u7528 Agent tool \u542F\u52A8 subagent\n5. **\u5904\u7406\u72B6\u6001\u62A5\u544A**\uFF1A\u6839\u636E Agent \u8FD4\u56DE\u7684 Status \u6267\u884C\u540E\u7EED\u64CD\u4F5C\n\n### Rules \u548C Knowledge \u6CE8\u5165\uFF08\u5173\u952E\uFF09\n\n\u7F16\u6392 Agent MUST \u5728\u6BCF\u4E2A subagent prompt \u4E2D\u6CE8\u5165\u4EE5\u4E0B\u4E0A\u4E0B\u6587\uFF1A\n\n**Rules \u52A0\u8F7D**\uFF08\u6839\u636E @skill \u9009\u62E9\u6027\u6CE8\u5165\uFF09\uFF1A\n- `api-design.md` - \u524D\u540E\u7AEF\u63A5\u53E3\u8BBE\u8BA1\u89C4\u8303\uFF08\u6D89\u53CA Controller/API \u65F6\uFF09\n- `dao-standards.md` - Java DAO \u5C42\u89C4\u8303\uFF08\u6D89\u53CA DAO \u65F6\uFF09\n- `coding-standards.md` - KF \u540E\u7AEF\u7F16\u7801\u89C4\u5219\uFF08\u6D89\u53CA Java \u4EE3\u7801\u65F6\uFF09\n- `java-db-schema-standards.md` - MySQL \u6570\u636E\u5E93\u5EFA\u8868\u6539\u8868\u89C4\u8303\n\n**Knowledge \u52A0\u8F7D**\uFF08MUST \u59CB\u7EC8\u6CE8\u5165\uFF09\uFF1A\n- `knowledge/index.md` - \u77E5\u8BC6\u7D22\u5F15\u6458\u8981\n- \u76F8\u5173 `best-practices/` \u5185\u5BB9\uFF08\u6700\u4F73\u5B9E\u8DF5\uFF09\n- \u76F8\u5173 `troubleshooting/` \u5185\u5BB9\uFF08\u8E29\u5751\u8B66\u544A\uFF09\n\n### \u72B6\u6001\u5904\u7406\u7B56\u7565\n\n| Status | \u5904\u7406\u65B9\u5F0F |\n|--------|--------|\n| **DONE** | \u7EE7\u7EED\u4E0B\u4E00\u4EFB\u52A1\uFF0C\u8BB0\u5F55\u5B8C\u6210\u6458\u8981 |\n| **DONE_WITH_CONCERNS** | \u8BC4\u4F30 concerns\uFF0C\u6B63\u786E\u6027\u95EE\u9898\u5148\u4FEE\u590D\uFF0C\u89C2\u5BDF\u6027\u95EE\u9898\u8BB0\u5F55\u540E\u7EE7\u7EED\u3002**MUST \u5C06 concerns \u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\u7684 Concerns \u8FFD\u8E2A\u7AE0\u8282** |\n| **BLOCKED** | \u8BC4\u4F30 blocker \u7C7B\u578B\uFF1A\u63D0\u4F9B\u4E0A\u4E0B\u6587/\u6362\u66F4\u5F3A\u6A21\u578B/\u62C6\u5206\u4EFB\u52A1/\u4FEE\u6539\u8BA1\u5212\u3002**MUST \u5C06 blocker \u539F\u56E0\u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A** |\n| **NEEDS_CONTEXT** | \u63D0\u4F9B\u7F3A\u5931\u4FE1\u606F\u5E76\u91CD\u65B0\u542F\u52A8 subagent |\n\n### Subagent \u4E0A\u4E0B\u6587\u9694\u79BB\u89C4\u5219\n\n**\u5FC5\u987B\u6CE8\u5165**\uFF1A\n- \u5F53\u524D task \u7684\u5B8C\u6574\u63CF\u8FF0\u548C\u9A8C\u6536\u6807\u51C6\n- \u5F53\u524D task \u5173\u8054\u7684 `@skill` \u5185\u5BB9\n- \u76F8\u5173\u7684 spec \u6587\u4EF6\u8DEF\u5F84\u548C\u5185\u5BB9\uFF08\u4EC5\u9650\u8BE5 task \u6D89\u53CA\u7684\u90E8\u5206\uFF09\n- \u524D\u5E8F wave \u7684\u5B8C\u6210\u6458\u8981\uFF08\u800C\u975E\u5B8C\u6574\u8F93\u51FA\uFF09\n- Rules \u548C Knowledge \u4E0A\u4E0B\u6587\n- **\u82E5 task \u6709 `@test-case` \u6807\u6CE8**\uFF1A\u4ECE `test-cases.md` \u4E2D\u63D0\u53D6\u5BF9\u5E94 TC-XXX \u7684\u5B8C\u6574\u5185\u5BB9\uFF08\u542B @layer\u3001BE \u9A8C\u6536\u3001FE \u9A8C\u6536\uFF09\uFF0C\u6CE8\u5165\u7ED9 TDD Apply Agent\n- **design.md \u7684\u5C42\u95F4\u4F9D\u8D56\u89C4\u5219 + \u67B6\u6784\u7EA6\u675F**\uFF08\u6240\u6709 task \u5FC5\u987B\u6CE8\u5165\uFF0C\u786E\u4FDD Agent \u4E86\u89E3\u7981\u6B62\u7684\u8DE8\u5C42\u8C03\u7528\uFF09\n\n**\u7981\u6B62\u6CE8\u5165**\uFF1A\n- \u5176\u4ED6 wave \u7684 task \u8BE6\u60C5\n- \u4E0D\u76F8\u5173\u7684 skill \u5185\u5BB9\n- \u5176\u4ED6 subagent \u7684\u5B8C\u6574\u8F93\u51FA\n\n## Skill \u65AD\u6D41\u6062\u590D\n\n\u5982\u679C\u5728\u6267\u884C @skill \u8FC7\u7A0B\u4E2D\u9047\u5230\u5F02\u5E38\uFF1A\n1. \u8BB0\u5F55\u5F02\u5E38\u5230 progress.json \u7684 skillCalls\n2. \u6807\u8BB0 afterAction: 'skip-and-continue'\n3. \u7EE7\u7EED\u5F53\u524D\u4EFB\u52A1\u7684\u540E\u7EED\u5B9E\u65BD\u6B65\u9AA4\n4. \u5728\u4EFB\u52A1\u5B8C\u6210\u62A5\u544A\u4E2D\u6807\u6CE8 \"Skill [name] skipped due to [reason]\"\n\n\u26A0\uFE0F Skill \u662F\u8F85\u52A9\u5DE5\u5177\uFF0C\u4E0D\u5E94\u963B\u65AD\u4E3B\u6D41\u7A0B\u3002\u4EFB\u4F55 Skill \u5931\u8D25\u90FD\u4E0D\u5E94\u5BFC\u81F4\u4EFB\u52A1\u5931\u8D25\u3002\n\n## Wave \u96C6\u6210\u9A8C\u8BC1\uFF08MANDATORY GATE\uFF09\n\n\u6BCF\u4E2A Wave \u5168\u90E8 Subagent \u5B8C\u6210\u540E\uFF0C\u7F16\u6392 Agent **\u5FC5\u987B**\u6267\u884C\u96C6\u6210\u9A8C\u8BC1\uFF0C**\u4E0D\u5F97\u8DF3\u8FC7**\uFF1A\n\n### A. \u7F16\u8BD1\u5931\u8D25\u5904\u7406\uFF08\u5E76\u884C\u6267\u884C\u8FC7\u7A0B\u4E2D\uFF09\n- \u5E76\u884C\u4EFB\u52A1\u6267\u884C\u4E2D\u9047\u5230\u7F16\u8BD1\u5931\u8D25\u65F6\uFF0C\u9996\u5148\u5C1D\u8BD5\u89E3\u51B3\u7F16\u8BD1\u95EE\u9898\uFF08\u5206\u6790\u9519\u8BEF\u3001\u81EA\u52A8\u4FEE\u590D\uFF09\n- \u4FEE\u590D\u6210\u529F \u2192 \u6807\u8BB0\u4E3A COMPLETED\uFF0C\u7EE7\u7EED\u6267\u884C\n- \u4FEE\u590D\u5931\u8D25 \u2192 \u6807\u8BB0\u4E3A BLOCKED\uFF0C\u7EE7\u7EED\u6267\u884C\u540C Wave \u5176\u4ED6\u4EFB\u52A1\n- \u540C Wave \u6240\u6709\u4EFB\u52A1\uFF08\u542B\u963B\u585E\u4EFB\u52A1\uFF09\u5168\u90E8\u5904\u7406\u5B8C\u6210\u540E \u2192 \u8FDB\u5165\u96C6\u6210\u6D4B\u8BD5\u9636\u6BB5\n\n### B. \u96C6\u6210\u6D4B\u8BD5\u9636\u6BB5\uFF08\u540C Wave \u6240\u6709\u4EFB\u52A1\u5904\u7406\u5B8C\u6210\u540E\uFF0CMANDATORY\uFF09\n1. \u7F16\u8BD1\u68C0\u67E5\uFF08`mvn compile -q` \u6216 `tsc --noEmit`\uFF09\n2. \u5BFC\u5165\u89E3\u6790\u68C0\u67E5\uFF08\u672C Wave \u65B0\u589E import \u662F\u5426\u53EF\u89E3\u6790\uFF09\n3. \u63A5\u53E3\u7B7E\u540D\u4E00\u81F4\u6027\uFF08\u8C03\u7528\u65B9\u53C2\u6570\u4E0E\u5B9A\u4E49\u5339\u914D\uFF09\n4. **Concerns/Blockers \u626B\u63CF**\uFF1A\n - \u626B\u63CF\u672C Wave \u6240\u6709\u4EFB\u52A1\u62A5\u544A\uFF08reports/task-*.md\uFF09\n - \u63D0\u53D6\u72B6\u6001\u4E3A DONE_WITH_CONCERNS \u6216 BLOCKED \u7684\u4EFB\u52A1\n - \u5C06\u5176 concerns/blocker \u539F\u56E0\u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\u7684 Concerns \u8FFD\u8E2A\u7AE0\u8282\n4.1. **\u5916\u90E8\u4F9D\u8D56\u5168\u91CF\u626B\u63CF\u4E0E\u515C\u5E95\u95ED\u73AF\uFF08MANDATORY\uFF0C\u4E0D\u5141\u8BB8\u9057\u6F0F\uFF09**\uFF1A\n \u63D0\u6848\u9636\u6BB5 DESIGN-EXTERNAL-DEPENDENCY-GATE \u7684\u96C6\u6210\u9A8C\u8BC1\u5151\u73B0\u9A8C\u6536\u70B9\uFF0C\u5FC5\u987B\u5B8C\u6574\u4F9D\u5E8F\u6267\u884C\uFF1A\n - **\u4E09\u7C7B\u6765\u6E90\u5168\u91CF\u91C7\u96C6**\uFF1A\u540C\u65F6\u8981\u6C47\u603B\u300A1\u300B\u4ECE design.md \u300C\u5916\u90E8\u4F9D\u8D56\u53EF\u7528\u6027\u77E9\u9635\u300D6 \u5217\u8868\u63D0\u53D6\u539F\u59CB\u6761\u76EE\u30012 \u4ECE\u672C Wave \u4EFB\u52A1\u62A5\u544A\u7684 concern/blocker \u6587\u672C\u4E2D\u6293\u53D6\u5916\u90E8\u4F9D\u8D56\u5173\u952E\u8BCD\u30013 \u5BF9 Wave \u65B0\u589E/\u4FEE\u6539\u6E90\u7801\u505A\u9759\u6001\u626B\u63CF\uFF08`@MessageConsumer`/`RedisTemplate`/`@ApolloJsonValue`/`@XxlJob`/`@ServiceContract` \u7B49\uFF09\n - **8 \u6876\u5206\u7C7B\uFF0C\u6BCF\u6876\u90FD\u5FC5\u987B\u7ED9\u7ED3\u8BBA**\uFF1AES / MQ / Redis / SCF-RPC / HTTP / OSS / Config / Job\uFF1B\u6CA1\u6709\u9879\u5219\u5199 `\u2014` \u5E76\u6CE8\u660E\u201C\u5DF2\u786E\u8BA4\u65E0\u4F9D\u8D56\u201D\uFF0C\u7981\u6B62\u8DF3\u8FC7\u6876\n - **\u72B6\u6001\u4E0D\u660E\u786E\u7684\u6876\u5F3A\u5236 `AskQuestion`**\uFF1A\u5F53 design.md \u77E9\u9635\u6709 \u26A0\uFE0F/\u274C \u4ECD\u88AB Wave \u6D89\u53CA\u3001\u4EE3\u7801\u626B\u63CF\u51FA\u65B0\u4F9D\u8D56\u3001concern \u660E\u786E\u8BF4\u201C\u5360\u4F4D/\u9ED8\u8BA4\u515C\u5E95/\u5F85\u6838\u5B9E\u201D\u3001\u6216\u6876\u7A7A\u4F46\u4EE3\u7801\u6D89\u53CA\u8BE5\u7C7B\u578B\u5173\u952E\u8BCD\uFF08\u4F9D\u8D56\u58F0\u660E\u9057\u6F0F\uFF09\u65F6\uFF0C**\u5FC5\u987B** \u4E00\u6B21\u6027\u6279\u91CF AskQuestion\uFF0C\u4E0D\u5141\u8BB8\u4EC5\u51ED\u201C\u4EFB\u52A1\u72B6\u6001\u4E3A DONE_WITH_CONCERNS + \u6709\u62A5\u544A\u201D\u5C31\u7B97\u95ED\u73AF\n - **\u5199\u56DE\u5BF9\u8D26\u8868**\uFF1A\u5C06\u7ED3\u679C\u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\u7684 **\u5916\u90E8\u4F9D\u8D56\u515C\u5E95\u5BF9\u8D26\u8868**\uFF085 \u5217\uFF1A\u6876 / \u4F9D\u8D56\u6761\u76EE / \u6765\u6E90 / \u89E3\u51B3\u72B6\u6001 / \u540E\u7EED\u52A8\u4F5C\uFF09\uFF1B\u2705+\u515C\u5E95 \u6761\u76EE\u5FC5\u987B\u540C\u6B65\u56DE\u5199 design.md \u77E9\u9635\uFF1B\u6876\u7ED3\u8BBA\u7F3A\u5931 \u2192 \u96C6\u6210\u62A5\u544A\u6574\u4F53\u72B6\u6001\u5F3A\u5236 FAIL\uFF0C\u963B\u65AD\u4E0B\u4E00 Wave\n - **\u5217\u51FA\u5F85\u91CD\u8DD1\u6E05\u5355**\uFF08MANDATORY\uFF09\uFF1A\u6F84\u6E05 \u2260 \u95ED\u73AF\u3002\u626B\u63CF\u672C Wave NEEDS_CONTEXT / BLOCKED \u4EFB\u52A1\uFF0C\u8BC6\u522B\u963B\u65AD\u539F\u56E0\u5DF2\u6F84\u6E05\u7684\u4EFB\u52A1\uFF0C\u5728\u96C6\u6210\u62A5\u544A\u4E2D\u65B0\u589E `## \uD83D\uDD01 \u5F85\u91CD\u8BD5\u4EFB\u52A1\u6E05\u5355` \u6BB5\uFF085 \u5217\uFF1A\u4EFB\u52A1ID / \u539F\u72B6\u6001 / \u963B\u65AD\u539F\u56E0 / \u5DF2\u6F84\u6E05\u4F9D\u8D56 / \u91CD\u8DD1\u6267\u884C\u65B9\uFF09\uFF1B\u7A7A\u5217\u4E5F\u987B\u663E\u5F0F\u5199 `\u2014 \u65E0\u9700\u91CD\u8DD1`\n5. **\u963B\u585E\u4EFB\u52A1\u91CD\u8BD5\uFF08BLOCKED \u222A NEEDS_CONTEXT \u5408\u5E76\u5904\u7406\uFF09**\uFF1A\n - \u91CD\u8BD5\u5BF9\u8C61\uFF1A\uFF081\uFF09\u7F16\u8BD1/\u6D4B\u8BD5\u5931\u8D25\u88AB\u6807 BLOCKED \u7684\u4EFB\u52A1\uFF1B\uFF082\uFF09\u5F85\u91CD\u8DD1\u6E05\u5355\u4E2D\u56E0\u5916\u90E8\u4F9D\u8D56\u5DF2\u6F84\u6E05\u800C\u89E3\u9501\u7684 NEEDS_CONTEXT / BLOCKED \u4EFB\u52A1\n - \u91CD\u8DD1\u524D\u786E\u8BA4 design.md \u77E9\u9635\u5DF2\u5199\u56DE\u6F84\u6E05\u7ED3\u679C\uFF1B\u91CD\u65B0\u542F\u52A8 subagent \u65F6\u5728 prompt \u4E2D\u663E\u5F0F\u6807\u6CE8 `Execution Mode = RETRY`\uFF0C\u5E76\u9644\u5E26\u4E0A\u6B21 concerns \u6458\u8981 + \u672C\u6B21\u5DF2\u6F84\u6E05\u4F9D\u8D56\u6761\u76EE + \u6700\u65B0\u77E9\u9635\u7247\u6BB5\n - \u91CD\u8BD5\u540E\u4ECD\u5931\u8D25 \u2192 \u4FDD\u7559 BLOCKED \u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\uFF0C\u6574\u4F53\u72B6\u6001\u5F3A\u5236 FAIL\n5. **\u751F\u6210\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A**\uFF08MANDATORY\uFF0C\u4E0D\u5F97\u8DF3\u8FC7\uFF09\uFF1A\n - \u62A5\u544A\u8DEF\u5F84\uFF1A`changes/<change-id>/reports/wave-{N}-integration-report.md`\n - \u8BB0\u5F55\u6240\u6709\u4EFB\u52A1\u6267\u884C\u7ED3\u679C\u3001\u7F16\u8BD1\u68C0\u67E5\u7ED3\u679C\u3001\u963B\u585E\u4EFB\u52A1\u91CD\u8BD5\u7ED3\u679C\n - **MUST \u5305\u542B Concerns \u8FFD\u8E2A\u7AE0\u8282**\uFF0C\u5217\u51FA\u6240\u6709 DONE_WITH_CONCERNS \u548C BLOCKED \u4EFB\u52A1\u53CA\u5176\u7591\u8651\n - \u6574\u4F53\u72B6\u6001\uFF1A\u6240\u6709\u68C0\u67E5\u901A\u8FC7\u4E14\u65E0\u672A\u89E3\u51B3\u7684\u963B\u585E\u4EFB\u52A1 \u2192 PASS\n - **\u672A\u751F\u6210\u62A5\u544A\u6587\u4EF6 \u2192 \u963B\u65AD\uFF0C\u4E0D\u5F97\u8FDB\u5165\u4E0B\u4E00 Wave**\n6. TC \u8986\u76D6\u5FEB\u7167\u5BF9\u6BD4\uFF08\u5982 tc-implementation-verify Skill \u5DF2\u5B89\u88C5\uFF09\uFF1A\n - \u751F\u6210 `metrics/tc-snapshot-wave-N.json`\n - \u4E0E\u524D\u4E00 Wave \u5FEB\u7167\u5BF9\u6BD4\n - \u56DE\u5F52\uFF08implemented \u2192 missing\uFF09\u2192 \u963B\u65AD\n - \u8FDB\u5C55\uFF08missing \u2192 implemented\uFF09\u2192 \u8BB0\u5F55\n\n\u6240\u6709\u4EFB\u52A1\u5B8C\u6210\uFF08\u542B\u963B\u585E\u4EFB\u52A1\u91CD\u8BD5\uFF09\u4E14\u9A8C\u8BC1\u901A\u8FC7 \u2192 \u8BB0\u5F55 Wave \u5B8C\u6210\u72B6\u6001\uFF0C\u8FDB\u5165\u4E0B\u4E00 Wave\u3002\n\u4EFB\u4F55\u68C0\u67E5\u5931\u8D25 \u2192 \u4FEE\u590D\u540E\u624D\u8FDB\u5165\u4E0B\u4E00 Wave\u3002\n\n## \u5168\u91CF TC \u5B9E\u73B0\u9A8C\u8BC1\uFF08\u5168\u90E8\u4EFB\u52A1\u5B8C\u6210\u540E\u3001\u5BA1\u67E5\u95E8\u7981\u524D\uFF09\n\n\u6240\u6709 Wave \u5B8C\u6210\u540E\uFF0C\u8FDB\u5165\u5BA1\u67E5\u95E8\u7981\u4E4B\u524D\uFF0C\u7F16\u6392 Agent \u6267\u884C\uFF1A\n1. \u68C0\u67E5\u63D0\u6848\u76EE\u5F55\u4E2D\u662F\u5426\u5B58\u5728 `test-cases.md`\n2. \u82E5\u5B58\u5728\uFF0C\u6309 `tc-implementation-verify` Skill \u5B9A\u4E49\u6267\u884C\uFF1A\n - \u89E3\u6790 `test-cases.md` \u4E2D\u6240\u6709 TC \u7684\u9A8C\u8BC1\u70B9\n - \u5728\u9879\u76EE\u6E90\u4EE3\u7801\u4E2D\u641C\u7D22\u9A8C\u8BC1\u70B9\u5BF9\u5E94\u5B9E\u73B0\uFF08\u6392\u9664\u6D4B\u8BD5\u4EE3\u7801\uFF09\n - \u5C06\u7ED3\u679C\u5199\u5165 `metrics/tc-verify-result.json`\n3. \u82E5\u5B58\u5728 `missing` \u6216 `partial` TC \u2192 \u6682\u505C\u5E76\u8F93\u51FA\u672A\u5B9E\u73B0\u6E05\u5355\n4. \u82E5\u4E0D\u5B58\u5728 `test-cases.md` \u2192 \u8DF3\u8FC7\uFF0C\u76F4\u63A5\u8FDB\u5165\u5BA1\u67E5\u95E8\u7981\u9636\u6BB5\n\n---\n\n### Rules \u548C Knowledge \u6CE8\u5165\u793A\u4F8B\n\n\u7F16\u6392 Agent \u5728\u542F\u52A8 subagent \u65F6\u7684 prompt \u793A\u4F8B\uFF1A\n\n```markdown\n## Rules \u548C Knowledge \u4E0A\u4E0B\u6587\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09\n\n### \u76F8\u5173 Rules\n[\u6839\u636E @skill \u6807\u6CE8\u6CE8\u5165\u5BF9\u5E94 rules \u5185\u5BB9\uFF0C\u5982 api-design.md]\n\n### Knowledge - \u6700\u4F73\u5B9E\u8DF5\n[\u6CE8\u5165 best-practices \u5185\u5BB9]\n\n### Knowledge - \u8E29\u5751\u8B66\u544A\n[\u6CE8\u5165 troubleshooting \u5185\u5BB9\uFF0C\u5982\u6709]\n\n\u26A0\uFE0F **\u91CD\u8981**: \u4EE5\u4E0B rules \u548C knowledge MUST \u5728\u5B9E\u65BD\u8FC7\u7A0B\u4E2D\u9075\u5FAA\u3002\n\u5982\u6709\u4EFB\u4F55\u4E0D\u786E\u5B9A\uFF0C\u62A5\u544A NEEDS_CONTEXT \u72B6\u6001\u3002\n```\n";
|
|
1
|
+
export declare const agentsTemplate = "# ZhuanSpec \u4F7F\u7528\u8BF4\u660E\n\n\u9762\u5411\u4F7F\u7528 ZhuanSpec \u8FDB\u884C\u89C4\u8303\u9A71\u52A8\u5F00\u53D1\u7684 AI \u7F16\u7A0B\u52A9\u624B\u7684\u8BF4\u660E\u6587\u6863\u3002\n\n---\n\n## \u26A1 \u4E09\u6761\u94C1\u5F8B\uFF08\u4E0D\u53EF\u8FDD\u53CD\uFF09\n\n> \u4E09\u6761\u94C1\u5F8B\u662F ZhuanSpec \u5DE5\u4F5C\u6D41\u7684\u6838\u5FC3\u7EA6\u675F\uFF0C\u4EFB\u4F55\u60C5\u51B5\u4E0B\u90FD\u5FC5\u987B\u9075\u5B88\u3002\n\n| \u94C1\u5F8B | \u542B\u4E49 | \u8FDD\u53CD\u540E\u679C |\n|------|------|---------|\n| **No Spec, No Code** | \u6CA1\u6709\u6587\u6863\u4E0D\u51C6\u5199\u4EE3\u7801 | Propose \u9636\u6BB5\u4EA7\u51FA spec \u624D\u80FD\u8FDB\u5165 Apply |\n| **Spec is Truth** | \u6587\u6863\u4E0E\u4EE3\u7801\u51B2\u7A81\u65F6\uFF0C\u9519\u7684\u4E00\u5B9A\u662F\u4EE3\u7801 | \u5F52\u6863\u65F6\u5F3A\u5236\u6821\u9A8C Spec-Code \u4E00\u81F4\u6027 |\n| **Reverse Sync** | \u53D1\u73B0\u504F\u5DEE\u5148\u4FEE Spec\uFF0C\u518D\u4FEE\u4EE3\u7801 | Apply \u9636\u6BB5\u6BCF\u5B8C\u6210\u4E00\u4E2A Task \u505A\u504F\u5DEE\u68C0\u6D4B |\n\n### \u94C1\u5F8B\u6267\u884C\u673A\u5236\n\n**\u94C1\u5F8B\u4E00\u6267\u884C**\uFF1A\n- Propose \u9636\u6BB5\u521B\u5EFA\u63D0\u6848\u540E\uFF0C\u5FC5\u987B\u7B49\u5F85\u7528\u6237\u660E\u786E\u6279\u51C6\uFF08\u56DE\u590D\"Plan Approved\"\u6216\u9009\u62E9\"\u6279\u51C6\uFF0C\u8FDB\u5165\u5B9E\u65BD\u9636\u6BB5\"\uFF09\u624D\u80FD\u8FDB\u5165 Apply\n- \u81EA\u52A8\u9A8C\u8BC1\u901A\u8FC7\u540E\uFF0C\u4F7F\u7528\u9009\u9879\u5F0F\u4EA4\u4E92\uFF08AskUserQuestion\uFF09\u5F39\u51FA\u786E\u8BA4\u5BF9\u8BDD\u6846\n- \u672A\u6279\u51C6\u524D\uFF0CPreToolUse Hook \u963B\u65AD\u6240\u6709\u4EE3\u7801\u4FEE\u6539\u64CD\u4F5C\n\n**\u94C1\u5F8B\u4E8C\u6267\u884C**\uFF1A\n- Archive \u9636\u6BB5\u524D\uFF0C\u5FC5\u987B\u9A8C\u8BC1\u5F52\u6863\u5185\u5BB9\u4E0E\u4EE3\u7801\u5B9E\u73B0\u4E00\u81F4\n- \u5982\u4E0D\u4E00\u81F4\uFF0C\u5FC5\u987B\u5148\u66F4\u65B0\u5F52\u6863\u5185\u5BB9\uFF0C\u518D\u5B8C\u6210\u5F52\u6863\n- PreArchive Hook \u68C0\u67E5 Spec-Code \u4E00\u81F4\u6027\n\n**\u94C1\u5F8B\u4E09\u6267\u884C**\uFF1A\n- Apply \u9636\u6BB5\u6BCF\u6B21 Write/Edit \u64CD\u4F5C\u524D\uFF0CPreToolUse Hook \u68C0\u6D4B\u504F\u79BB\n- **\u504F\u79BB\u68C0\u6D4B\u89E6\u53D1\u673A\u5236**\uFF1A\n - \u63D0\u6848\u8303\u56F4\u5916\u6587\u4EF6\u4FEE\u6539\u65F6\u81EA\u52A8\u89E6\u53D1\n - \u7528\u6237\u8F93\u5165\u7EA0\u6B63\u5173\u952E\u8BCD\uFF08\"\u4E0D\u5BF9\"\u3001\"\u9519\u4E86\"\u3001\"\u8FD9\u91CC\u5E94\u8BE5\u662F\"\u7B49\uFF09\u65F6\u81EA\u52A8\u89E6\u53D1\n - \u901A\u8FC7\u8BFB\u53D6 `progress.json` \u7684 `phase` \u5B57\u6BB5\u5224\u65AD\u5F53\u524D\u9636\u6BB5\n- \u5982\u679C\u4FEE\u6539\u6587\u4EF6\u4E0D\u5728\u63D0\u6848\u8303\u56F4\u5185\uFF0C\u89E6\u53D1\u504F\u79BB\u5904\u7406\u6D41\u7A0B\uFF1A\n 1. \u5F39\u51FA\u9009\u9879\u5F0F\u4EA4\u4E92\uFF1A\u66F4\u65B0\u63D0\u6848\u540E\u7EE7\u7EED / Bug\u4FEE\u590D\u8C41\u514D / \u53D6\u6D88\u4FEE\u6539\n 2. \u7528\u6237\u9009\u62E9\"\u66F4\u65B0\u63D0\u6848\u540E\u7EE7\u7EED\" \u2192 AI \u8FDB\u5165 Propose \u6A21\u5F0F \u2192 \u81EA\u52A8\u66F4\u65B0 proposal.md \u548C tasks.md \u2192 `zhuanspec validate --auto-fix` \u2192 \u8FD4\u56DE Apply \u6267\u884C\u539F\u4FEE\u6539\n 3. \u7528\u6237\u9009\u62E9\"Bug\u4FEE\u590D\u8C41\u514D\" \u2192 \u6807\u8BB0\u4E3A Bug \u4FEE\u590D \u2192 \u5141\u8BB8\u4FEE\u6539\uFF0C\u8DF3\u8FC7\u63D0\u6848\u6D41\u7A0B\n 4. \u7528\u6237\u9009\u62E9\"\u53D6\u6D88\" \u2192 \u4E0D\u6267\u884C\u4FEE\u6539 \u2192 \u7EE7\u7EED\u539F\u4EFB\u52A1\n- **\u504F\u79BB\u4FEE\u6B63\u6D41\u7A0B**\uFF08\u7528\u6237\u7EA0\u6B63\u65F6\uFF09\uFF1A\n 1. \u5148\u4FEE\u6539 spec \u6587\u4EF6\uFF0C\u5B9E\u65F6\u540C\u6B65\u7528\u6237\u786E\u8BA4\n 2. \u7528\u6237\u786E\u8BA4\u540E\u4FEE\u6539\u4EE3\u7801\uFF0C\u5B8C\u6210\u540E\u9A8C\u8BC1\n 3. \u7528\u6237\u786E\u8BA4\u65E0\u8BEF\u540E\u89E6\u53D1\u77E5\u8BC6\u6C89\u6DC0\n\n### AI \u81EA\u7531\u5EA6\u63A7\u5236\u77E9\u9635\n\n| \u9636\u6BB5 | \u81EA\u7531\u5EA6 | \u5141\u8BB8\u884C\u4E3A | \u7981\u6B62\u884C\u4E3A |\n|------|--------|---------|---------|\n| **Propose** | \u9AD8 | \u63A2\u7D22\u4EE3\u7801\u3001\u8BBE\u8BA1\u65B9\u6848\u3001\u63D0\u95EE\u6F84\u6E05 | \u7F16\u5199\u4EFB\u4F55\u4EE3\u7801 |\n| **Apply** | \u96F6 | \u4E25\u683C\u6309 tasks.md \u65BD\u5DE5 | \u8D85\u51FA\u63D0\u6848\u8303\u56F4\u4FEE\u6539\u3001\u81EA\u884C\u6DFB\u52A0\u4EFB\u52A1 |\n| **Review** | \u4E2D | \u9A8C\u8BC1\u5B9E\u73B0\u3001\u751F\u6210\u6D4B\u8BD5\u3001\u5BA1\u67E5\u4EE3\u7801 | \u4FEE\u6539\u529F\u80FD\u4EE3\u7801 |\n| **Archive** | \u4F4E | \u5408\u5E76\u89C4\u8303\u3001\u751F\u6210\u6458\u8981 | \u4FEE\u6539\u5DF2\u5F52\u6863\u5185\u5BB9 |\n\n---\n\n## \u77E5\u8BC6\u5E93\u68C0\u67E5\n\n**\u5DE5\u4F5C\u533A\u8FB9\u754C\uFF08\u5F3A\u5236\uFF09**\uFF1A\u67E5\u627E\u6587\u6863\u3001\u68C0\u7D22\u5DE5\u7A0B\u4EE3\u7801\u3001\u6267\u884C grep/glob/ls \u65F6\uFF0C\u8303\u56F4\u5FC5\u987B\u9650\u5B9A\u5728\u5F53\u524D ZhuanSpec \u5DE5\u4F5C\u533A\u5185\u3002\u7981\u6B62\u4F7F\u7528\u8DE8\u4E0A\u7EA7\u76EE\u5F55\u7684 glob\uFF08\u5982 `../**`\uFF09\u3001\u4E0A\u7EA7\u76EE\u5F55\u7EDD\u5BF9\u8DEF\u5F84\u6216\u624B\u52A8\u62FC\u63A5\u5230\u5DE5\u4F5C\u533A\u5916\u8DEF\u5F84\u3002Glob \u8FD4\u56DE\u76F8\u5BF9\u8DEF\u5F84\u65F6\uFF0C\u5FC5\u987B\u4EE5\u672C\u6B21\u5DE5\u5177\u8C03\u7528\u7684 `path` \u53C2\u6570\u4F5C\u4E3A\u57FA\u51C6\u62FC\u63A5\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4E0D\u5F97\u8BEF\u89E3\u4E3A\u5F53\u524D\u76EE\u5F55\u6216\u4E0A\u7EA7\u76EE\u5F55\u3002\n\n**\u5728\u4EFB\u4F55\u9636\u6BB5\u5F00\u59CB\u524D\uFF0C\u5FC5\u987B\u5148\u68C0\u67E5\u77E5\u8BC6\u5E93\u5E76\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\uFF1A**\n\n| \u64CD\u4F5C | \u547D\u4EE4 | \u76EE\u7684 |\n|------|------|------|\n| \u641C\u7D22\u9677\u9631 | `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/troubleshooting/` | \u907F\u514D\u91CD\u590D\u8E29\u5751 |\n| \u641C\u7D22\u6700\u4F73\u5B9E\u8DF5 | `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/best-practices/` | \u5B66\u4E60\u6210\u529F\u7ECF\u9A8C |\n| \u641C\u7D22\u9690\u5F0F\u7EA6\u5B9A | `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/implicit-conventions/` | \u7406\u89E3\u56E2\u961F\u7EA6\u5B9A |\n| \u9605\u8BFB\u77E5\u8BC6\u7D22\u5F15 | `cat zhuanspec/knowledge/index.md` | \u4E86\u89E3\u9879\u76EE\u7EA7\u77E5\u8BC6\u6458\u8981 |\n| \u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6 | `@skill:load-project-knowledge` | \u6E10\u8FDB\u5F0F\u52A0\u8F7D\u9879\u76EE\u67B6\u6784\u3001\u670D\u52A1\u5B9A\u4F4D\u3001\u68C0\u7D22\u4F18\u5148\u8DEF\u5F84\u548C\u67B6\u6784\u7EA6\u675F |\n\n**\u77E5\u8BC6\u5E93\u4F5C\u7528**\uFF1A\n- \u51CF\u5C11\u91CD\u590D\u8E29\u5751\uFF0C\u79EF\u7D2F\u9879\u76EE\u7ECF\u9A8C\n- \u63D0\u4F9B\u56E2\u961F\u9690\u5F0F\u7EA6\u5B9A\u7684\u4E66\u9762\u8BB0\u5F55\n- \u52A0\u901F\u65B0\u6210\u5458\u878D\u5165\u548C\u77E5\u8BC6\u4F20\u627F\n- \u901A\u8FC7 `@skill:load-project-knowledge` \u6E10\u8FDB\u5F0F\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\uFF0C\u83B7\u53D6 matched_services\u3001search_priority\u3001architecture_constraints\uFF0C\u6309\u4F18\u5148\u8DEF\u5F84\u7F29\u5C0F\u4EE3\u7801\u5B9A\u4F4D\u8303\u56F4\n\n---\n\n## \u5FEB\u901F\u68C0\u67E5\u6E05\u5355\n\n- \u641C\u7D22\u73B0\u6709\u5DE5\u4F5C\uFF1A`zhuanspec spec list --long`\u3001`zhuanspec list`\uFF08\u4EC5\u4F7F\u7528 `rg` \u8FDB\u884C\u5168\u6587\u641C\u7D22\uFF09\n- **\u68C0\u67E5\u77E5\u8BC6\u5E93**\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u9677\u9631\u548C\u6700\u4F73\u5B9E\u8DF5\n- \u786E\u5B9A\u8303\u56F4\uFF1A\u65B0\u529F\u80FD vs \u4FEE\u6539\u73B0\u6709\u529F\u80FD\n- \u9009\u62E9\u552F\u4E00\u7684 `change-id`\uFF1Akebab-case \u683C\u5F0F\uFF0C\u52A8\u8BCD\u5F00\u5934\uFF08`add-`\u3001`update-`\u3001`remove-`\u3001`refactor-`\uFF09\n- \u642D\u5EFA\u7ED3\u6784\uFF1A`proposal.md`\u3001`tasks.md`\u3001`design.md`\uFF0C\u4EE5\u53CA\u6BCF\u4E2A\u53D7\u5F71\u54CD\u529F\u80FD\u7684\u89C4\u8303\u589E\u91CF\n- \u7F16\u5199\u589E\u91CF\uFF1A\u4F7F\u7528 `## ADDED|MODIFIED|REMOVED|RENAMED Requirements`\uFF1B\u6BCF\u4E2A\u8981\u6C42\u81F3\u5C11\u5305\u542B\u4E00\u4E2A `#### Scenario:`\n- \u9A8C\u8BC1\uFF1A\u8FD0\u884C `zhuanspec validate [change-id] --strict` \u5E76\u4FEE\u590D\u95EE\u9898\n- \u8BF7\u6C42\u6279\u51C6\uFF1A\u5728\u63D0\u6848\u83B7\u5F97\u6279\u51C6\u4E4B\u524D\u4E0D\u8981\u5F00\u59CB\u5B9E\u65BD\n\n## \u8FDB\u5EA6\u6C47\u62A5\u7EA6\u5B9A\n\nApply \u9636\u6BB5\u6267\u884C\u6BCF\u4E2A\u4EFB\u52A1\u65F6\uFF0C\u5FC5\u987B\u6309\u4EE5\u4E0B\u683C\u5F0F\u8F93\u51FA\u8FDB\u5EA6\uFF1A\n\n**\u4EFB\u52A1\u5F00\u59CB\u65F6**\uFF1A\n```\n\u2501\u2501\u2501 \uD83D\uDE80 \u5F00\u59CB\u4EFB\u52A1 [X.Y/N] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u4EFB\u52A1: [\u4EFB\u52A1\u63CF\u8FF0]\nWave: W/N | Phase: Apply\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n**\u4EFB\u52A1\u5B8C\u6210\u540E**\uFF1A\n```\n\u2501\u2501\u2501 \u2705 \u4EFB\u52A1\u5B8C\u6210 [X.Y/N] \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\u5DF2\u4FEE\u6539: [\u6587\u4EF6\u5217\u8868]\n\u4E0B\u4E00\u4E2A: [\u4E0B\u4E00\u4EFB\u52A1ID]\n\u6574\u4F53\u8FDB\u5EA6: \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591 XX.X%\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n**\u8FDB\u5EA6\u6761\u683C\u5F0F**\uFF1A\n- \u4F7F\u7528 12 \u4E2A block \u5B57\u7B26\uFF08\u2588 \u548C \u2591\uFF09\n- \u8FDB\u5EA6\u767E\u5206\u6BD4 = (\u5DF2\u5B8C\u6210\u4EFB\u52A1\u6570 / \u603B\u4EFB\u52A1\u6570) \u00D7 100\n- \u4FDD\u7559 1 \u4F4D\u5C0F\u6570\n\n**\u793A\u4F8B**\uFF1A\n- 3/8 \u5B8C\u6210 \u2192 `\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591 37.5%`\n- 6/8 \u5B8C\u6210 \u2192 `\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591 75.0%`\n\n---\n\n## \u56DB\u9636\u6BB5\u5DE5\u4F5C\u6D41\n\n### \u9636\u6BB5 1\uFF1A\u521B\u5EFA\u53D8\u66F4\n\u5728\u4EE5\u4E0B\u60C5\u51B5\u4E0B\u521B\u5EFA\u63D0\u6848\uFF1A\n- \u6DFB\u52A0\u529F\u80FD\u6216\u7279\u6027\n- \u8FDB\u884C\u7834\u574F\u6027\u66F4\u6539\uFF08API\u3001schema\uFF09\n- \u66F4\u6539\u67B6\u6784\u6216\u6A21\u5F0F\n- \u4F18\u5316\u6027\u80FD\uFF08\u6539\u53D8\u884C\u4E3A\uFF09\n- \u66F4\u65B0\u5B89\u5168\u6A21\u5F0F\n\n\u89E6\u53D1\u8BCD\u793A\u4F8B\uFF1A\n- \"\u5E2E\u6211\u521B\u5EFA\u4E00\u4E2A\u53D8\u66F4\u63D0\u6848\"\n- \"\u5E2E\u6211\u89C4\u5212\u4E00\u4E2A\u53D8\u66F4\"\n- \"\u5E2E\u6211\u521B\u5EFA\u4E00\u4E2A\u63D0\u6848\"\n- \"\u6211\u60F3\u521B\u5EFA\u4E00\u4E2A\u89C4\u8303\u63D0\u6848\"\n- \"\u6211\u60F3\u521B\u5EFA\u4E00\u4E2A\u89C4\u8303\"\n\n\u5BBD\u677E\u5339\u914D\u6307\u5BFC\uFF1A\n- \u5305\u542B\u4EE5\u4E0B\u4E4B\u4E00\uFF1A`proposal`\u3001`change`\u3001`spec`\n- \u4E0E\u4EE5\u4E0B\u4E4B\u4E00\u7EC4\u5408\uFF1A`create`\u3001`plan`\u3001`make`\u3001`start`\u3001`help`\n\n\u8DF3\u8FC7\u63D0\u6848\u7684\u60C5\u51B5\uFF1A\n- Bug \u4FEE\u590D\uFF08\u6062\u590D\u9884\u671F\u884C\u4E3A\uFF09\n- \u62FC\u5199\u9519\u8BEF\u3001\u683C\u5F0F\u3001\u6CE8\u91CA\n- \u4F9D\u8D56\u66F4\u65B0\uFF08\u975E\u7834\u574F\u6027\uFF09\n- \u914D\u7F6E\u66F4\u6539\n- \u73B0\u6709\u884C\u4E3A\u7684\u6D4B\u8BD5\n\n**\u5DE5\u4F5C\u6D41**\n0. **\u68C0\u67E5\u77E5\u8BC6\u5E93\u3001\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\u5E76\u5BA1\u67E5\u9879\u76EE**\uFF1A\n - \u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u9677\u9631\u548C\u6700\u4F73\u5B9E\u8DF5\uFF0C\u907F\u514D\u91CD\u590D\u8E29\u5751\n - \u9605\u8BFB `zhuanspec/knowledge/index.md` \u4E86\u89E3\u9879\u76EE\u7EA7\u77E5\u8BC6\u6458\u8981\n - **\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6**\uFF1A\u8C03\u7528 `@skill:load-project-knowledge` \u8FDB\u884C\u6E10\u8FDB\u5F0F\u52A0\u8F7D\uFF1A\n * \u8F93\u5165\uFF1Adomain\uFF08\u5F53\u524D\u9879\u76EE\uFF09\u3001keywords\uFF08\u4ECE\u9700\u6C42\u63CF\u8FF0\u63D0\u53D6\uFF09\n * \u83B7\u53D6\uFF1Amatched_services\uFF08\u6D89\u53CA\u7684\u670D\u52A1\u5217\u8868\uFF09\u3001search_priority\uFF08\u68C0\u7D22\u4F18\u5148\u8DEF\u5F84\uFF09\u3001architecture_constraints\uFF08\u67B6\u6784\u7EA6\u675F\uFF09\n * \u4F7F\u7528\uFF1A\u540E\u7EED\u4EE3\u7801\u5B9A\u4F4D\u4F7F\u7528 search_priority \u9650\u5B9A\u8303\u56F4\uFF0C\u65B9\u6848\u8BBE\u8BA1\u68C0\u67E5 architecture_constraints\n * \u517C\u5BB9\u7B56\u7565\uFF1A\u82E5\u672A\u627E\u5230 project.md \u6216\u5173\u952E\u8BCD\u65E0\u5339\u914D\uFF0C\u8F93\u51FA\u8B66\u544A\u5E76\u4F7F\u7528\u5168\u5C40\u68C0\u7D22\n - **\u5DE5\u7A0B\u4EE3\u7801\u68C0\u7D22**\uFF1A\u4F7F\u7528 `@skill:load-project-knowledge` \u8FD4\u56DE\u7684 search_priority \u9650\u5B9A\u68C0\u7D22\u8303\u56F4\uFF0C\u6309\u4F18\u5148\u8DEF\u5F84\u5B9A\u4F4D\u4EE3\u7801\uFF1B\u4EC5\u5F53 Skill \u65E0\u5339\u914D\u7ED3\u679C\u65F6\uFF0C\u624D\u56DE\u9000\u5230 `grep/glob` \u6216\u5168\u5C40\u68C0\u7D22\n - \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u9879\u76EE\u7EA6\u5B9A\uFF08\u63D0\u793A\uFF1A\"\u2713 Loaded project.md\"\uFF09\n - \u5BA1\u67E5 `zhuanspec/project.md`\uFF0C`zhuanspec list` \u548C `zhuanspec list --specs` \u4EE5\u4E86\u89E3\u5F53\u524D\u4E0A\u4E0B\u6587\u3002\n1. **\u6D4B\u8BD5 case \u6765\u6E90\u786E\u8BA4\uFF08\u6700\u5148\u6267\u884C\uFF0C\u7981\u6B62\u8DF3\u8FC7\uFF09**\uFF1A\n \u5728\u8FDB\u884C\u4EFB\u4F55\u6F84\u6E05\u3001\u8BBE\u8BA1\u6216\u7F16\u5199\u4EFB\u4F55\u63D0\u6848\u6587\u4EF6\u4E4B\u524D\uFF0C\u4F7F\u7528\u9009\u9879\u5F0F\u4EA4\u4E92\u8BE2\u95EE\u7528\u6237\uFF1A\n - \u9009\u9879 A\uFF1A\u63D0\u4F9B\u6D4B\u8BD5 case\uFF08\u6709\u73B0\u6210 case\uFF0C\u8D70 TDD \u6A21\u5F0F\uFF09\n - \u9009\u9879 B\uFF1A\u6682\u4E0D\u63D0\u4F9B\u6D4B\u8BD5 case\n - \u9009\u9879 C\uFF1A\u5176\u4ED6\uFF08\u8BF7\u5728\u540E\u7EED\u8865\u5145\u8BF4\u660E\uFF09\n\n \u7528\u6237\u9009\u62E9\"\u63D0\u4F9B\u6D4B\u8BD5 case\"\u65F6\uFF1A\u8FDB\u5165 TDD \u9A71\u52A8\u6A21\u5F0F\n - \u660E\u786E\u544A\u77E5\uFF1A\u6D4B\u8BD5\u7528\u4F8B\u5C06\u7528\u4E8E\u9700\u6C42\u5B9A\u4E49\u3001\u5355\u5143\u6D4B\u8BD5\u751F\u6210\u3001\u5B9E\u65BD\u9A8C\u8BC1\n - \u82E5\u7528\u6237\u63D0\u4F9B\u94FE\u63A5\uFF08\u683C\u5F0F\uFF1A`https://zzcase.zhuanspirit.com/plan/taskDetail/module/{moduleId}/task/{taskId}`\uFF09\uFF0C\u4ECE URL \u63D0\u53D6 `moduleId`\uFF0C\u8C03\u7528 MCP \u5DE5\u5177 `mcp__caseweb__GET_get2` \u8BFB\u53D6\u6570\u636E\uFF1B\u5426\u5219\u624B\u52A8\u5F55\u5165\n - \u521B\u5EFA test-cases.md \u8BB0\u5F55\u6D4B\u8BD5 case \u8BE6\u60C5\uFF08\u6BCF\u4E2A TC-XXX \u542B\u524D\u7F6E\u6761\u4EF6\u3001\u6B65\u9AA4\u3001\u9884\u671F\u7ED3\u679C\u3001\u9A8C\u6536\u70B9\uFF09\n - tasks.md \u4F7F\u7528 `@test-case:TC-XXX` \u6807\u7B7E\u5173\u8054\u4EFB\u52A1\u4E0E\u6D4B\u8BD5 case\n - \u4EFB\u52A1\u5B9E\u65BD\u987A\u5E8F\u8C03\u6574\u4E3A\uFF1A\u5148\u5199\u6D4B\u8BD5 \u2192 \u518D\u5199\u5B9E\u73B0 \u2192 \u9A8C\u8BC1\u6D4B\u8BD5\u901A\u8FC7\n\n \u7528\u6237\u9009\u62E9\"\u6682\u4E0D\u63D0\u4F9B\"\uFF1A\u8DF3\u8FC7\uFF0C\u6309\u5E38\u89C4\u6D41\u7A0B\u7EE7\u7EED\n \u7528\u6237\u9009\u62E9\"\u5176\u4ED6\"\uFF1A\u7B49\u5F85\u7528\u6237\u8865\u5145\u8BF4\u660E\u540E\u7EE7\u7EED\n\n \u26A0\uFE0F **CHECKPOINT [TEST-CASE-INQUIRY]**\uFF1A\n \u65E0\u8BBA\u7528\u6237\u9009\u62E9\u4EC0\u4E48\uFF0C\u5FC5\u987B**\u7ACB\u5373**\u5C06\u7ED3\u679C\u8BB0\u5F55\u5230 tasks.md \u7684 `## Test Case Source Log` \u6BB5\n \uFF08\u82E5 tasks.md \u5C1A\u672A\u521B\u5EFA\uFF0C\u5148\u521B\u5EFA\u5E76\u5199\u5165\u6B64\u6BB5\uFF0C\u5176\u4F59\u5185\u5BB9\u540E\u7EED\u8865\u5145\uFF09\uFF1A\n ```\n ## Test Case Source Log\n - \u7528\u6237\u56DE\u7B54\uFF1A[\u63D0\u4F9B\u6D4B\u8BD5 case / \u6682\u4E0D\u63D0\u4F9B / \u5177\u4F53\u8BF4\u660E]\n - TDD \u6A21\u5F0F\uFF1A[\u542F\u7528 / \u7981\u7528]\n - \uFF08\u5982\u542F\u7528\uFF09\u6D4B\u8BD5 case \u6765\u6E90\uFF1A[\u94FE\u63A5 / \u624B\u52A8\u5F55\u5165 / bicId]\n ```\n \u6B64\u6BB5\u4E0D\u5F97\u4E3A\u7A7A\uFF0Cvalidate --strict \u4F1A**\u65E0\u6761\u4EF6**\u68C0\u67E5\u5176\u5B58\u5728\u4E0E\u5185\u5BB9\uFF0C\u7F3A\u5931\u76F4\u63A5\u62A5 ERROR\u3002\n \u672A\u5B8C\u6210\u6B64 checkpoint \u8BB0\u5F55\u4E4B\u524D\uFF0C\u7981\u6B62\u6267\u884C\u6B65\u9AA4 2 \u53CA\u540E\u7EED\u4EFB\u4F55\u6587\u4EF6\u5199\u5165\u64CD\u4F5C\u3002\n\n2. **\u5F3A\u5236\u6F84\u6E05\u68C0\u67E5\uFF08\u5FC5\u987B\u6267\u884C\uFF0C\u4E0D\u53EF\u8DF3\u8FC7\uFF09**\uFF1A\u5206\u6790\u7528\u6237\u8BF7\u6C42\uFF0C\u8BC6\u522B\u6240\u6709\u4E0D\u786E\u5B9A\u6216\u6A21\u7CCA\u7684\u65B9\u9762\uFF08\u8303\u56F4\u3001\u6280\u672F\u9009\u62E9\u3001\u5B9E\u73B0\u7EC6\u8282\u3001\u6570\u636E\u83B7\u53D6\u6765\u6E90\u3001\u670D\u52A1\u5206\u5C42\u3001\u4F9D\u8D56\u5173\u7CFB\u3001\u4F18\u5148\u7EA7\u3001\u9A8C\u6536\u6807\u51C6\u7B49......\uFF09\u3002\u5982\u679C\u53D1\u73B0\u4EFB\u4F55\u6A21\u7CCA\u4E4B\u5904\uFF0C\u5FC5\u987B\u505C\u6B62\u5E76\u4F7F\u7528**\u9009\u9879\u5F0F\u4EA4\u4E92**\uFF08\u5982 `AskQuestion` \u5DE5\u5177\uFF09\u63D0\u95EE\uFF0C\u83B7\u5F97\u660E\u786E\u7B54\u590D\u540E\u624D\u80FD\u7EE7\u7EED\u3002\u4E25\u7981\u5728\u4E0D\u786E\u5B9A\u7684\u60C5\u51B5\u4E0B\u81EA\u884C\u63A8\u6D4B\u6216\u521B\u5EFA\u63D0\u6848\uFF0C\u4E25\u7981\u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57\u3002\n\n \u26A0\uFE0F **CHECKPOINT [PRE-CLARIFICATION]**:\n You MUST record the pre-clarification result in tasks.md under \"## Pre-Clarification Log\":\n - If questions were asked: Record each question and the user's answer\n - If no clarification needed: Write \"Status: COMPLETED - No clarification needed\" with brief justification\n - This section MUST NOT be empty or contain only HTML comments\n - NEVER proceed to proposal writing without completing this checkpoint\n\n3. \u9009\u62E9\u4E00\u4E2A\u552F\u4E00\u7684\u52A8\u8BCD\u5F00\u5934\u7684 `change-id`\uFF0C\u5E76\u5728 `zhuanspec/changes/<id>/` \u4E0B\u642D\u5EFA `proposal.md`\u3001`tasks.md`\u3001`design.md` \u548C\u89C4\u8303\u589E\u91CF\u3002\n4. \u5C06\u53D8\u66F4\u6620\u5C04\u4E3A\u5177\u4F53\u7684\u529F\u80FD\u6216\u8981\u6C42\uFF0C\u5C06\u591A\u8303\u56F4\u7684\u5DE5\u4F5C\u5206\u89E3\u4E3A\u5177\u6709\u660E\u786E\u5173\u7CFB\u548C\u987A\u5E8F\u7684\u4E0D\u540C\u89C4\u8303\u589E\u91CF\u3002\n5. \u5F53\u89E3\u51B3\u65B9\u6848\u8DE8\u8D8A\u591A\u4E2A\u7CFB\u7EDF\u3001\u5F15\u5165\u65B0\u6A21\u5F0F\u6216\u5728\u63D0\u4EA4\u89C4\u8303\u4E4B\u524D\u9700\u8981\u6743\u8861\u8BA8\u8BBA\u65F6\uFF0C\u5728 `design.md` \u4E2D\u6355\u83B7\u67B6\u6784\u63A8\u7406\u3002\n\n \u26A0\uFE0F **CHECKPOINT [DESIGN-EXTERNAL-DEPENDENCY-GATE]**\uFF08\u63D0\u6848\u9636\u6BB5\u524D\u7F6E\u95ED\u73AF\uFF0C\u5FC5\u987B\u5728 design.md \u65B0\u5EFA/\u66F4\u65B0\u540E\u7ACB\u5373\u6267\u884C\uFF09\uFF1A\n 1. **\u4F9D\u8D56\u8BC6\u522B**\uFF1A\u5168\u91CF\u7F57\u5217 ES / MQ / Redis / SCF-RPC / HTTP / OSS / Config(Apollo) / Job \u516B\u7C7B\u5916\u90E8\u4F9D\u8D56\uFF0C\u6309\u7C7B\u578B\u5206\u6876\uFF1B\u4F9D\u8D56\u6E05\u5355\u4F18\u5148\u4ECE techDesign \u9636\u6BB5\u4EA7\u51FA\u63D0\u53D6\uFF0C\u7F3A\u5931\u65F6\u4ECE\u7528\u6237\u63D0\u4F9B\u7684\u6280\u672F\u65B9\u6848 / specs \u4E2D\u8865\u9F50\n 2. **\u786C\u89C4\u5219\u4F7F\u7528 AskQuestion**\uFF1A\u53EA\u8981\u67D0\u9879\u4F9D\u8D56\u7684\u72B6\u6001 / \u7248\u672C / \u8D1F\u8D23\u65B9 / \u515C\u5E95\u7B56\u7565\u4EFB\u4E00\u5B57\u6BB5\u4E0D\u660E\u786E\uFF0C**\u5FC5\u987B** \u8C03\u7528 `AskQuestion` \u4E00\u6B21\u6027\u5C55\u793A\u9009\u9879\uFF1B\u4E25\u7981\u9ED8\u8BA4\u5199 \u2705 \u6216 \u201C\u5F85\u786E\u8BA4\u201D\u8DF3\u8FC7\n 3. **\u77E9\u9635\u843D\u5730**\uFF1A\u6839\u636E\u7528\u6237\u56DE\u7B54\u5C06\u7ED3\u679C\u5199\u5165 design.md \u7684\u300C\u5916\u90E8\u4F9D\u8D56\u53EF\u7528\u6027\u77E9\u9635\u300D\u6BB5\uFF0C\u8868\u5934\u5FC5\u987B\u4E3A **6 \u5217**\uFF1A\n `| \u4F9D\u8D56\u540D\u79F0 | \u7C7B\u578B | \u72B6\u6001 | \u7248\u672C/\u73AF\u5883 | \u515C\u5E95/\u963B\u585E\u7B56\u7565 | \u8D1F\u8D23\u65B9 |`\n 4. **\u95ED\u73AF\u5B8C\u7ED3**\uFF1A\u672C\u6B65\u9AA4\u7ED3\u675F\u524D\u6240\u6709 techDesign \u9636\u6BB5\u6807\u8BB0\u4E3A \u26A0\uFE0F / \u2753 \u7684\u6761\u76EE\u5FC5\u987B\u6C89\u6DC0\u4E3A \u2705 / \u274C / \u2705+\u515C\u5E95\uFF0C**\u4E0D\u5141\u8BB8\u7559\u767D**\uFF1B\u8BE5\u77E9\u9635\u662F propose / apply / \u96C6\u6210\u9A8C\u8BC1\u9636\u6BB5\u7684\u552F\u4E00\u4E8B\u5B9E\u6E90\n\n \u26A0\uFE0F **CHECKPOINT [DATA-STORAGE-STRATEGY]**\uFF08\u4EC5\u5F53\u6280\u672F\u65B9\u6848\u5305\u542B\u65B0\u589E\u8868 / CREATE TABLE / t_* \u65F6\u5F3A\u5236\u6267\u884C\uFF09\uFF1A\u5FC5\u987B\u7528 `AskQuestion` \u6279\u91CF\u6F84\u6E05 **\u9884\u4F30\u6570\u91CF\u7EA7 / \u67E5\u8BE2\u573A\u666F / \u8BFB\u5199 QPS / \u65F6\u6548\u6027 / \u4E00\u81F4\u6027\uFF08\u542B\u8DE8\u8868\u4E8B\u52A1\uFF09** 5 \u5B57\u6BB5\uFF0C\u5E76\u5728 design.md \u5199\u5165 **8 \u5217** \u300C## \u6570\u636E\u5B58\u50A8\u7B56\u7565\u300D\u8868\uFF1A`| \u8868\u540D | \u9884\u4F30\u6570\u91CF\u7EA7 | \u67E5\u8BE2\u573A\u666F | \u8BFB/\u5199 QPS | \u65F6\u6548\u6027 | \u4E00\u81F4\u6027\uFF08\u542B\u8DE8\u8868\u4E8B\u52A1\uFF09 | \u5B58\u50A8\u7B56\u7565 | \u5907\u6CE8 |`\u3002\u4EFB\u4E00\u5217\u51FA\u73B0 `TBD` / \u7A7A / \u5F85\u8BC4\u4F30 \u2192 \u672A\u901A\u8FC7\uFF0C\u7981\u6B62\u8FDB\u5165\u89C4\u8303\u589E\u91CF\u7F16\u5199\u3002\n\n6. \u5728 `changes/<id>/specs/<capability>/spec.md` \u4E2D\u8D77\u8349\u89C4\u8303\u589E\u91CF\uFF08\u6BCF\u4E2A\u529F\u80FD\u4E00\u4E2A\u6587\u4EF6\u5939\uFF09\uFF0C\u4F7F\u7528 `## ADDED|MODIFIED|REMOVED Requirements`\uFF0C\u6BCF\u4E2A\u8981\u6C42\u81F3\u5C11\u5305\u542B\u4E00\u4E2A `#### Scenario:`\uFF0C\u5E76\u5728\u76F8\u5173\u65F6\u4EA4\u53C9\u5F15\u7528\u76F8\u5173\u529F\u80FD\u3002\n\n \u26A0\uFE0F **CHECKPOINT [SPEC-REQUIREMENT-FORMAT]**\uFF1A\n \u6BCF\u4E2A `### Requirement:` \u5757\u5199\u5B8C\u540E\u5FC5\u987B\u81EA\u68C0\u4EE5\u4E0B\u4E24\u70B9\uFF0C\u8FDD\u53CD\u4EFB\u610F\u4E00\u6761 `zhuanspec validate` \u4F1A\u62A5 ERROR\uFF1A\n 1. **\u5FC5\u987B\u6709\u9700\u6C42\u63CF\u8FF0\u6587\u672C**\uFF1Aheader \u4E4B\u540E\u3001\u7B2C\u4E00\u4E2A `#### Scenario` \u4E4B\u524D\uFF0C\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u884C\u975E\u7A7A\u7684\u9700\u6C42\u63CF\u8FF0\u6587\u672C\uFF1B\u4E0D\u80FD\u76F4\u63A5\u4ECE `### Requirement:` \u8DF3\u5230 `#### Scenario:`\u3002\n 2. **\u7B2C\u4E00\u884C\u63CF\u8FF0\u5FC5\u987B\u5305\u542B SHALL \u6216 MUST**\uFF1A\u9A8C\u8BC1\u5668\u7528 `/\\b(SHALL|MUST)\\b/` \u68C0\u67E5\u7B2C\u4E00\u884C\uFF0C\u7F3A\u5931\u76F4\u63A5 ERROR\u3002\u6B63\u786E\u793A\u4F8B\uFF1A`\u7CFB\u7EDF MUST \u63D0\u4F9B...` / `The system SHALL...`\uFF1B\u9519\u8BEF\u793A\u4F8B\uFF1A\u4EC5\u5199\u666E\u901A\u9648\u8FF0\u53E5\uFF08\u5982\"\u63D0\u4F9B\u5BA2\u6237\u67E5\u8BE2\u80FD\u529B\"\uFF09\u3002\n\n7. **\u53D1\u73B0\u53EF\u7528 Skill \u5E76\u521B\u5EFA tasks.md**\uFF1A\n - \u8FD0\u884C `zhuanspec skills list --json` \u83B7\u53D6\u5F53\u524D\u73AF\u5883\u4E2D\u53EF\u7528\u7684 skill \u5217\u8868\u53CA\u5176 description\n - \u5728 `proposal.md` \u7684 **Skill Mapping** \u6BB5\u4E2D\u57FA\u4E8E skill description \u8FDB\u884C\u8BED\u4E49\u5339\u914D\uFF1A\n - \u4ED4\u7EC6\u9605\u8BFB\u6BCF\u4E2A skill \u7684 description\uFF0C\u7406\u89E3\u5176\u5177\u4F53\u529F\u80FD\u548C\u9002\u7528\u573A\u666F\n - \u53EA\u6709\u5F53\u5B9E\u73B0\u533A\u57DF\u7684\u5B9E\u9645\u529F\u80FD\u4E0E skill description \u660E\u786E\u5339\u914D\u65F6\u624D\u5173\u8054\n - \u7B80\u5355\u7684\u4EE3\u7801\u4FEE\u6539\uFF08\u5982\u679A\u4E3E\u503C\u589E\u5220\uFF09\u5E94\u5339\u914D\u901A\u7528\u7F16\u7801\u89C4\u8303 skill\uFF0C\u800C\u975E\u67B6\u6784\u7EA7 skill\n - \u907F\u514D\u4EC5\u56E0\u6A21\u5757\u540D\u79F0\u6216\u6587\u4EF6\u8DEF\u5F84\u4E2D\u7684\u5173\u952E\u8BCD\u800C\u9519\u8BEF\u5339\u914D\n - \u5728\u8868\u683C\u4E2D\u8BF4\u660E\u5339\u914D\u7406\u7531\n - **\u4EFB\u52A1\u5206\u89E3\u89C4\u5219\uFF08\u6A21\u677F\u9A71\u52A8\uFF09**\uFF1A\n - \u6BCF\u4E2A\u4EFB\u52A1\u6309\u7C7B\u578B\u4F7F\u7528\u56FA\u5B9A\u6A21\u677F\uFF0C\u5FC5\u987B\u586B\u6EE1\u6240\u6709\u5B57\u6BB5\uFF08\u6587\u4EF6 \u2192 \u4F4D\u7F6E \u2192 \u5185\u5BB9 \u2192 \u9A8C\u8BC1\uFF09\uFF1A\n * **\u65B0\u589E\u6587\u4EF6\u4EFB\u52A1**\uFF1A\u5FC5\u987B\u5305\u542B `\u6587\u4EF6`\uFF08\u5B8C\u6574\u76F8\u5BF9\u8DEF\u5F84+\"\u65B0\u589E\"\u6807\u8BB0\uFF09\u3001`\u5185\u5BB9`\uFF08\u7C7B\u5B9A\u4E49\u3001\u4F9D\u8D56\u6CE8\u5165\u3001\u6838\u5FC3\u65B9\u6CD5\u7B7E\u540D+\u8FD4\u56DE\u7C7B\u578B\u3001\u5173\u952E\u903B\u8F91\u6D41\u7A0B\u3001\u5B57\u6BB5\u5217\u8868\uFF09\u3001`\u9A8C\u8BC1`\uFF08\u6B63\u5E38+\u5F02\u5E38\u573A\u666F\u7684\u8F93\u5165\u8F93\u51FA\u65AD\u8A00\uFF09\n * **\u4FEE\u6539\u6587\u4EF6\u4EFB\u52A1**\uFF1A\u5FC5\u987B\u5305\u542B `\u6587\u4EF6`\uFF08\u5B8C\u6574\u76F8\u5BF9\u8DEF\u5F84+\u603B\u884C\u6570\uFF09\u3001`\u4FEE\u6539\u4F4D\u7F6E`\uFF08L\u884C\u53F7\u8303\u56F4+\u51FD\u6570\u540D\uFF09\u3001`\u5185\u5BB9`\uFF08\u5177\u4F53\u6539\u4EC0\u4E48\u548C\u600E\u4E48\u6539\uFF09\u3001`\u9A8C\u8BC1`\uFF08\u4FEE\u6539\u540E\u9884\u671F\u884C\u4E3A+\u56DE\u5F52\u9A8C\u8BC1\uFF09\n - \u4EFB\u52A1\u7F16\u53F7\u4E25\u683C\u4F7F\u7528 N.M \u683C\u5F0F\uFF08\u5982 1.1\u30012.3\uFF09\uFF0C\u4E0D\u5141\u8BB8 3.2a \u7B49\u975E\u6807\u51C6\u7F16\u53F7\n - \u6BCF\u4E2A\u4EFB\u52A1\u5FC5\u987B\u5305\u542B @ref \u6807\u7B7E\u6307\u5411\u6280\u672F\u65B9\u6848\u5177\u4F53\u7AE0\u8282\uFF08\u683C\u5F0F\uFF1A@ref:<tech-spec\u8DEF\u5F84>#\u7AE0\u8282\u7F16\u53F7-\u7AE0\u8282\u540D\u79F0\uFF0C\u8DEF\u5F84\u4E3A\u5B9E\u9645\u5B9A\u4F4D\u5230\u7684\u6280\u672F\u65B9\u6848\u6587\u4EF6\u76F8\u5BF9\u8DEF\u5F84\uFF09\n - **\u6280\u672F\u65B9\u6848\u6444\u53D6**\uFF1A\u5F53\u6280\u672F\u65B9\u6848\u6587\u6863\u5B58\u5728\u65F6\uFF08\u6309\u4F18\u5148\u7EA7\uFF1A\u7528\u6237 --tech-spec \u6307\u5B9A\u8DEF\u5F84 > techDesign/tech-spec.md\uFF09\uFF1A\n * \u9010\u7AE0\u89E3\u6790 DB \u8868\u3001\u63A5\u53E3\u65B9\u6CD5\u3001ES \u7D22\u5F15\u3001MQ\u3001\u914D\u7F6E\u9879\u7B49\u5143\u7D20\n * \u6BCF\u4E2A\u6280\u672F\u5143\u7D20\u5FC5\u987B\u5BF9\u5E94\u81F3\u5C11\u4E00\u4E2A\u4EFB\u52A1\n * \u4EFB\u52A1\u7684\"\u5185\u5BB9\"\u6BB5\u5FC5\u987B\u5F15\u7528\u6280\u672F\u65B9\u6848\u4E2D\u7684\u5177\u4F53\u5B57\u6BB5\u5B9A\u4E49\uFF08\u5982\u8868\u5B57\u6BB5\u5217\u8868\u3001\u63A5\u53E3\u5165\u53C2\u51FA\u53C2\u3001\u679A\u4E3E\u503C\uFF09\n * \u65B0\u589E Coverage Checklist \u6BB5\uFF0C\u786E\u4FDD\u8986\u76D6\u7387 >= 95%\n - **\u7981\u6B62\u6A21\u7CCA\u63CF\u8FF0**\uFF1A\n * \u7981\u6B62\uFF1A\"\u521B\u5EFA CustomerMapper\" \u2014 \u7F3A\u5C11\u6587\u4EF6\u8DEF\u5F84\u3001\u65B9\u6CD5\u5217\u8868\u3001\u5173\u952E\u903B\u8F91\n * \u6B63\u786E\uFF1A\"\u521B\u5EFA CustomerMapper\" + \u6587\u4EF6\u8DEF\u5F84 + \u7EE7\u627F BaseMapper<CustomerEntity> + 3\u4E2A\u81EA\u5B9A\u4E49\u65B9\u6CD5\u7B7E\u540D + \u9A8C\u8BC1\n * \u4EFB\u52A1\u63CF\u8FF0\u5FC5\u987B\u81EA\u5305\u542B\uFF1AAI \u6267\u884C\u65F6\u4E0D\u9700\u8981\u518D\u8BFB\u6280\u672F\u65B9\u6848\u731C\u6D4B\u5B9E\u73B0\u7EC6\u8282\n - \u5C06 `tasks.md` \u8D77\u8349\u4E3A\u6709\u5E8F\u7684\u5C0F\u578B\u3001\u53EF\u9A8C\u8BC1\u5DE5\u4F5C\u9879\u5217\u8868\n - \u4F7F\u7528 `@skill:<real-skill-name>` \u6807\u6CE8\u4E0E skill \u5339\u914D\u7684\u4EFB\u52A1\uFF08\u652F\u6301\u591A\u4E2A\uFF1A`@skill:name1,name2`\uFF09\n - \u4EC5\u5F53 skill \u660E\u786E\u5339\u914D\u4EFB\u52A1\u65F6\u624D\u6807\u6CE8\uFF0C\u6CA1\u6709\u5339\u914D\u7684 skill \u53EF\u7701\u7565\u6807\u7B7E\n\n \u26A0\uFE0F **CHECKPOINT [SKILL-TAGGING]**:\n 1. You MUST run `zhuanspec skills list` first and record discovered skills in the Skill Mapping table\n 2. Every task MUST have either @skill:real-skill-name or @skill:none\n 3. If @skill:none, you MUST provide a justification (e.g., \"pure config change, no skill applies\")\n 4. @skill names MUST match exactly the names returned by `zhuanspec skills list` \u2014 do NOT invent skill names\n 5. The Skill Mapping table in tasks.md MUST NOT be empty\n 6. validate --strict will verify all @skill names exist in the known skill list\n\n \u26A0\uFE0F **CHECKPOINT [TASK-ORDERING]**:\n 1. Tasks in tasks.md MUST be organized under Wave headers (### Wave 1, ### Wave 2, etc.)\n 2. Wave assignment must be computed from @depends relationships (Wave 1 = no deps, Wave N = depends on Wave N-1)\n 3. No task may appear before a task it depends on\n 4. You MUST add a \"## Dependency Analysis\" section at the end with \"Status: COMPLETED\"\n 5. validate --strict will verify task ordering matches computed waves\n 6. \u5982\u679C\u591A\u4E2A\u4EFB\u52A1\u63CF\u8FF0\u4E2D\u5F15\u7528\u4E86\u76F8\u540C\u6587\u4EF6\u8DEF\u5F84\uFF0C\u5FC5\u987B\u5728 \"## File Conflict Analysis\" \u8868\u4E2D\u58F0\u660E\uFF1A\n - \u5404\u4EFB\u52A1\u4FEE\u6539\u7684\u5177\u4F53\u533A\u57DF\uFF08\u51FD\u6570\u540D\u3001\u884C\u53F7\u8303\u56F4\u3001\u914D\u7F6E\u8282\u540D\u79F0\uFF09\n - \u9694\u79BB\u7B56\u7565\uFF1Aparallel\uFF08\u4E0D\u540C\u533A\u57DF\uFF0C\u53EF\u5728\u540C\u4E00 Wave \u5E76\u884C\uFF09\u6216 serial\uFF08\u540C\u533A\u57DF\uFF0C\u5FC5\u987B\u8DE8 Wave \u4E32\u884C\uFF09\n - \u82E5\u6240\u6709\u4EFB\u52A1\u4FEE\u6539\u4E0D\u540C\u6587\u4EF6\uFF0C\u65E0\u51B2\u7A81\u65F6\u8DF3\u8FC7\u6B64\u8868\u6216\u586B\u5199 N/A\n\n8. **\u6D4B\u8BD5 case \u5904\u7406\uFF08\u4EC5 TDD \u6A21\u5F0F\uFF09**\uFF1A\n\n **\u26A0\uFE0F \u6A21\u5F0F\u5224\u65AD**\uFF1A\u6839\u636E\u4EE5\u4E0B\u6761\u4EF6\u5224\u65AD\u5F53\u524D\u662F\u54EA\u79CD\u6A21\u5F0F\uFF1A\n - **\u6709 case \u6A21\u5F0F**\uFF1A\u7528\u6237\u63D0\u4F9B\u6D4B\u8BD5 case \u6765\u6E90\uFF08taskId/bicId\uFF09\u3001\u7528\u6237\u8981\u6C42 TDD \u5DE5\u4F5C\u6D41\u3001\u6216\u660E\u786E\u8981\u6C42\u8BBE\u8BA1\u6D4B\u8BD5 case\n - **\u65E0 case \u6A21\u5F0F**\uFF1A\u666E\u901A spec-driven \u5DE5\u4F5C\u6D41\uFF0C\u7528\u6237\u672A\u63D0\u4F9B\u6D4B\u8BD5 case \u76F8\u5173\u4FE1\u606F\n\n **\u3010\u6709 case \u6A21\u5F0F\u3011**\uFF08\u5FC5\u987B\u6267\u884C\u4EE5\u4E0B\u6B65\u9AA4\uFF09\uFF1A\n - **\u3010\u5F3A\u5236\u3011\u83B7\u53D6\u6D4B\u8BD5 case \u7684\u65B9\u5F0F**\uFF08\u6309\u4F18\u5148\u7EA7\u9009\u62E9\uFF09\uFF1A\n * **\u4F18\u5148**\uFF1A\u68C0\u67E5 `./doc/` \u76EE\u5F55\u4E0B\u662F\u5426\u5B58\u5728 `*-tdd-cases.md` \u6587\u4EF6\uFF08\u7531\u6280\u672F\u65B9\u6848 skill \u81EA\u52A8\u8F6C\u6362\u751F\u6210\uFF09\n - \u5B58\u5728 \u2192 \u76F4\u63A5\u8BFB\u53D6\uFF0C\u65E0\u9700\u91CD\u65B0\u83B7\u53D6\u539F\u59CB case\n - \u4E0D\u5B58\u5728 \u2192 \u4F7F\u7528\u4EE5\u4E0B\u65B9\u5F0F\u83B7\u53D6\u539F\u59CB case\n * \u5982\u679C\u7528\u6237\u63D0\u4F9B\u7684\u662F**\u94FE\u63A5**\uFF08\u5982 zzcase \u5E73\u53F0 URL\uFF09\uFF1A\u4F7F\u7528 `@skill:zzcase-data-fetcher` skill \u76F4\u63A5\u8BFB\u53D6\n * \u5982\u679C\u7528\u6237\u63D0\u4F9B **taskId/bicId**\uFF1A\u4F7F\u7528 `@skill:zzcase-data-fetcher` skill \u901A\u8FC7\u53C2\u6570\u83B7\u53D6\n * **\u7981\u6B62**\u4F7F\u7528 MCP \u5DE5\u5177 `zzcase_get_api_report_queryBaseCase` \u83B7\u53D6\u6D4B\u8BD5 case\n * \u6216\u624B\u52A8\u5F55\u5165\u6D4B\u8BD5 case\n - **\u3010\u5F3A\u5236\u3011\u521B\u5EFA test-cases.md \u6587\u4EF6**\uFF1A\n * \u82E5\u5DF2\u8BFB\u53D6 `./doc/*-tdd-cases.md`\uFF1A\u76F4\u63A5\u590D\u5236\u5185\u5BB9\u5230 `changes/<change-id>/test-cases.md`\uFF0C\u65E0\u9700\u91CD\u65B0\u751F\u6210\n * \u82E5\u4ECE\u539F\u59CB case \u83B7\u53D6\uFF1A\u4F7F\u7528 `getTestCasesTemplate` \u6A21\u677F\uFF08\u4ECE `src/core/templates/index.ts` \u5BFC\u51FA\uFF09\n * \u6587\u4EF6\u8DEF\u5F84\uFF1A`changes/<change-id>/test-cases.md`\n * \u586B\u5199\u83B7\u53D6\u65F6\u95F4\u3001\u6765\u6E90\uFF08tdd-cases.md / taskId/bicId/manual\uFF09\u3001\u6D4B\u8BD5 case \u8BE6\u60C5\n * \u6BCF\u4E2A TC-XXX \u5FC5\u987B\u5305\u542B\uFF1A\u524D\u7F6E\u6761\u4EF6\u3001\u6D4B\u8BD5\u6B65\u9AA4\u3001\u9884\u671F\u7ED3\u679C\u3001\u9A8C\u6536\u70B9\u3001**@layer \u6807\u6CE8\uFF08BE/FE/BOTH\uFF09**\n - **\u3010\u5F3A\u5236\u3011tasks.md @test-case \u6807\u6CE8**\uFF1A\n * \u8BFB\u53D6 test-cases.md \u4E2D\u6240\u6709 TC-XXX \u6761\u76EE\n * \u4E3A tasks.md \u4E2D\u6BCF\u4E2A task\uFF0C**\u6309\u8BED\u4E49\u5339\u914D**\u627E\u5230\u76F8\u5173 Case\uFF1A\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u65B0\u5EFA/\u7F16\u8F91/\u5220\u9664\u300D\u2192 \u5339\u914D\u5BF9\u5E94 CRUD Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u624B\u673A\u53F7\u53BB\u91CD/\u5408\u5E76\u300D\u2192 \u5339\u914D\u624B\u673A\u53F7\u51B2\u7A81\u76F8\u5173 Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u79DF\u6237/\u6743\u9650\u300D\u2192 \u5339\u914D\u6743\u9650\u9694\u79BB\u76F8\u5173 Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300CMQ/\u6D88\u606F\u6D88\u8D39\u300D\u2192 \u5339\u914D MQ \u6D88\u8D39\u76F8\u5173 Case\n - task \u63CF\u8FF0\u4E2D\u6D89\u53CA\u300C\u5BFC\u51FA\u300D\u2192 \u5339\u914D\u5BFC\u51FA\u76F8\u5173 Case\n * \u5339\u914D\u5230 \u2192 \u8FFD\u52A0 `@test-case:TC-XXX`\uFF08\u53EF\u591A\u4E2A\uFF1A`@test-case:TC-022,TC-024`\uFF09\n * \u5339\u914D\u4E0D\u5230 \u2192 \u4E0D\u8FFD\u52A0\uFF0C\u8BE5 task \u8D70\u666E\u901A Apply Agent\n - \u5728 `tasks.md` \u589E\u52A0 **Test Case Coverage** \u8868\u683C\uFF08\u56DB\u5217\u683C\u5F0F\uFF09\uFF1A\n | Task | \u6D4B\u8BD5 Case ID | \u6D4B\u8BD5 Case \u6587\u4EF6\u8DEF\u5F84 | \u8986\u76D6\u573A\u666F |\n |------|-------------|-------------------|----------|\n * \"\u6D4B\u8BD5 Case \u6587\u4EF6\u8DEF\u5F84\" \u5217\u586B\u5199 `changes/<change-id>/test-cases.md`\n - \u4F7F\u7528 `@test-case:TC-XXX` \u5173\u8054\u4EFB\u52A1\u4E0E\u6D4B\u8BD5 case\n\n \u26A0\uFE0F **CHECKPOINT [TEST-CASE-COVERAGE]**\uFF08\u4EC5\u9002\u7528\u4E8E\u6709 case \u6A21\u5F0F\uFF09:\n 1. \u6BCF\u4E2A Requirement \u5E94\u81F3\u5C11\u5BF9\u5E94\u4E00\u4E2A\u6D4B\u8BD5 case\n 2. \u6D4B\u8BD5 case \u5E94\u8986\u76D6\u6B63\u5411\u548C\u5F02\u5E38\u573A\u666F\n 3. **\u5FC5\u987B\u521B\u5EFA test-cases.md \u6587\u4EF6**\uFF08\u4F18\u5148\u590D\u7528 `./doc/*-tdd-cases.md`\uFF0C\u5426\u5219\u4F7F\u7528 `getTestCasesTemplate` \u6A21\u677F\uFF09\n 4. Test Case Coverage \u8868\u683C\u5FC5\u987B\u5305\u542B\u56DB\u5217\uFF1ATask\u3001\u6D4B\u8BD5 Case ID\u3001\u6D4B\u8BD5 Case \u6587\u4EF6\u8DEF\u5F84\u3001\u8986\u76D6\u573A\u666F\n 5. **\u6BCF\u4E2A TC-XXX \u5FC5\u987B\u6709 @layer \u6807\u6CE8**\uFF08BE/FE/BOTH\uFF09\uFF0C\u65E0\u6807\u6CE8\u89C6\u4E3A\u683C\u5F0F\u4E0D\u5B8C\u6574\n 6. **\u6709 @test-case \u6807\u6CE8\u7684 task**\uFF0C\u5FC5\u987B\u901A\u8FC7\u8BED\u4E49\u5339\u914D\u627E\u5230\u5BF9\u5E94 Case\uFF0C\u4E0D\u5F97\u968F\u610F\u6307\u5B9A\u65E0\u5173 Case\n 7. validate --strict \u4F1A\u9A8C\u8BC1\u6D4B\u8BD5 case \u8986\u76D6\u7387\uFF08**\u963B\u585E\u7EA7\u522B**\uFF09\n\n **\u3010\u65E0 case \u6A21\u5F0F\u3011**\uFF08\u8DF3\u8FC7\u6D4B\u8BD5 case \u76F8\u5173\u6B65\u9AA4\uFF09\uFF1A\n - \u4E0D\u521B\u5EFA test-cases.md\n - tasks.md \u4E0D\u9700\u8981 Test Case Coverage \u6BB5\n - validate --strict \u7684 test-case-coverage \u89C4\u5219\u81EA\u52A8\u8DF3\u8FC7\uFF08SKIPPED\uFF09\n - \u5355\u6D4B\u7EDF\u4E00\u5728 Review \u9636\u6BB5\u5904\u7406\n\n9. \u3010\u81EA\u52A8\u9A8C\u8BC1\u4E0E\u4FEE\u590D\u3011\uFF1A\n \u8FD0\u884C `zhuanspec validate <id> --strict --auto-fix` \u8FDB\u884C\u9A8C\u8BC1\uFF1A\n - \u5982\u679C\u9A8C\u8BC1\u901A\u8FC7\uFF08PASS\uFF09\uFF1A\u7EE7\u7EED\u4E0B\u4E00\u6B65\n - \u5982\u679C\u9A8C\u8BC1\u5931\u8D25\uFF08FAIL\uFF09\uFF1A\u81EA\u52A8\u89E6\u53D1\u4FEE\u590D\u5FAA\u73AF\uFF1A\n * CLI \u81EA\u52A8\u5206\u6790\u9519\u8BEF\u539F\u56E0\n * CLI \u81EA\u52A8\u751F\u6210\u4FEE\u590D\u65B9\u6848\u5E76\u6267\u884C\n * \u91CD\u65B0\u9A8C\u8BC1\uFF08\u6700\u591A 3 \u6B21\u5FAA\u73AF\uFF09\n * \u5FAA\u73AF\u7ED3\u675F\u540E\u4ECD\u672A\u901A\u8FC7\uFF1A\u8F93\u51FA\u9519\u8BEF\u62A5\u544A\uFF0C\u7B49\u5F85\u4EBA\u5DE5\u5E72\u9884\n - \u9A8C\u8BC1\u901A\u8FC7\u540E\uFF0C\u8F93\u51FA\u63D0\u6848\u6458\u8981\n\n10. \u3010\u8F93\u51FA\u63D0\u6848\u6458\u8981\u3011\uFF1A\n \u2022 \u53D8\u66F4\u539F\u56E0\u3001\u5185\u5BB9\u3001\u5F71\u54CD\u8303\u56F4\n \u2022 \u5173\u952E Requirements\n \u2022 \u4EFB\u52A1\u6570\u91CF\u548C Wave \u5206\u5E03\n\n11. \u3010\u9009\u9879\u5F0F\u4EA4\u4E92\u786E\u8BA4\u3011\uFF1A\n \u4F7F\u7528 AskQuestion \u5DE5\u5177\u5F39\u51FA\u786E\u8BA4\u5BF9\u8BDD\u6846\uFF1A\n ```\n \u95EE\u9898: \"\u8BF7\u786E\u8BA4\u662F\u5426\u6279\u51C6\u6B64\u63D0\u6848\uFF1F\"\n \u9009\u9879\uFF1A\n A) \u6279\u51C6\uFF0C\u8FDB\u5165\u5B9E\u65BD\u9636\u6BB5\n B) \u9700\u8981\u4FEE\u6539\u63D0\u6848\u5185\u5BB9\n C) \u6682\u4E0D\u6279\u51C6\uFF0C\u7A0D\u540E\u5904\u7406\n D) \u5176\u4ED6\uFF08\u8BF7\u5728\u540E\u7EED\u8865\u5145\u8BF4\u660E\uFF09\n ```\n\n \u7528\u6237\u9009\u62E9\u5904\u7406\uFF1A\n \u2022 \u9009\u62E9\"\u6279\u51C6\"\uFF1A\u521B\u5EFA `.approved` \u6587\u4EF6\uFF0C\u8FDB\u5165 Apply \u9636\u6BB5\n \u2022 \u9009\u62E9\"\u4FEE\u6539\"\uFF1A\u8FD4\u56DE\u6B65\u9AA4 4 \u4FEE\u6539\u63D0\u6848\u5185\u5BB9\n \u2022 \u9009\u62E9\"\u6682\u4E0D\"\uFF1A\u4FDD\u6301\u63D0\u6848\u72B6\u6001\uFF0C\u7B49\u5F85\u540E\u7EED\u5904\u7406\n \u2022 \u9009\u62E9\"\u5176\u4ED6\"\uFF1A\u7B49\u5F85\u7528\u6237\u8865\u5145\u8BF4\u660E\u540E\u7EE7\u7EED\n\n \u26A0\uFE0F **CHECKPOINT [PLAN-APPROVED]**:\n - \u7528\u6237\u5FC5\u987B\u660E\u786E\u9009\u62E9\"\u6279\u51C6\"\u9009\u9879\u624D\u80FD\u8FDB\u5165 Apply \u9636\u6BB5\n - \u672A\u6279\u51C6\u524D\u7981\u6B62\u4EFB\u4F55\u4EE3\u7801\u4FEE\u6539\u64CD\u4F5C\n - PreToolUse Hook \u4F1A\u963B\u65AD\u672A\u6279\u51C6\u72B6\u6001\u7684 Write/Edit \u64CD\u4F5C\n\n### \u9636\u6BB5 2\uFF1A\u5B9E\u65BD\u53D8\u66F4\n\n**\u524D\u7F6E\u68C0\u67E5**\uFF1A\n- \u26A0\uFE0F **CHECKPOINT [PLAN-APPROVED]**: `.approved` \u6587\u4EF6\u5FC5\u987B\u5B58\u5728\u3002\u672A\u6279\u51C6\u7684\u63D0\u6848\u7981\u6B62\u5B9E\u65BD\u3002\n - PreToolUse Hook \u4F1A\u963B\u65AD\u672A\u6279\u51C6\u72B6\u6001\u7684 Write/Edit \u64CD\u4F5C\n - \u5982\u679C `.approved` \u4E0D\u5B58\u5728\uFF0C\u63D0\u793A\u7528\u6237\u5148\u5B8C\u6210 Proposal \u9636\u6BB5\u7684\u6279\u51C6\u6D41\u7A0B\n\n\u5C06\u8FD9\u4E9B\u6B65\u9AA4\u4F5C\u4E3A\u5F85\u529E\u4E8B\u9879\u8DDF\u8E2A\uFF0C\u9010\u4E00\u5B8C\u6210\u3002\n\n0. **\u68C0\u67E5\u77E5\u8BC6\u5E93\u3001\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6\u5E76\u9605\u8BFB proposal.md**\uFF1A\n - \u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u6700\u4F73\u5B9E\u8DF5\u548C\u9677\u9631\n - **\u52A0\u8F7D\u9879\u76EE\u77E5\u8BC6**\uFF1A\u8C03\u7528 `@skill:load-project-knowledge` \u8FDB\u884C\u6E10\u8FDB\u5F0F\u52A0\u8F7D\uFF1A\n * \u8F93\u5165\uFF1Adomain\uFF08\u5F53\u524D\u9879\u76EE\uFF09\u3001keywords\uFF08\u4ECE tasks.md \u63D0\u53D6\uFF09\n * \u83B7\u53D6\uFF1Amatched_services\u3001search_priority\u3001architecture_constraints\n * \u4F7F\u7528\uFF1A\u4EE3\u7801\u5B9A\u4F4D\u4F7F\u7528 search_priority \u9650\u5B9A\u8303\u56F4\uFF0C\u907F\u514D\u5168\u5C40\u68C0\u7D22\u504F\u5DEE\n - **\u5B9E\u65BD\u524D\u5B9A\u4F4D\u4EE3\u7801**\uFF1A\u4F7F\u7528 `@skill:load-project-knowledge` \u8FD4\u56DE\u7684 search_priority \u9650\u5B9A\u68C0\u7D22\u8303\u56F4\uFF0C\u6309\u4F18\u5148\u8DEF\u5F84\u5B9A\u4F4D\u4EE3\u7801\uFF1B\u4EC5\u5F53 Skill \u65E0\u5339\u914D\u7ED3\u679C\u65F6\uFF0C\u624D\u56DE\u9000\u5230 `grep/glob`\n - \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u9879\u76EE\u7EA6\u5B9A\uFF08\u63D0\u793A\uFF1A\"\u2713 Loaded project.md\"\uFF09\n - \u9605\u8BFB proposal.md - \u4E86\u89E3\u8981\u6784\u5EFA\u7684\u5185\u5BB9\n1. **\u9605\u8BFB design.md**\uFF08\u5982\u679C\u5B58\u5728\uFF09 - \u5BA1\u67E5\u6280\u672F\u51B3\u7B56\n2. **\u9605\u8BFB tasks.md** - \u83B7\u53D6\u5B9E\u65BD\u6E05\u5355\n3. **\u5224\u65AD\u6267\u884C\u6A21\u5F0F** - \u6839\u636E tasks.md \u5185\u5BB9\u9009\u62E9\u6267\u884C\u7B56\u7565\uFF1A\n - **\u5982\u679C tasks.md \u5305\u542B `@depends` \u4F9D\u8D56\u58F0\u660E**\uFF1A\n \u2192 \u6309 Wave \u5E76\u884C\u6267\u884C\uFF08\u4F7F\u7528 superpowers:subagent-driven-development skill\uFF09\n - **\u5982\u679C tasks.md \u65E0\u4F9D\u8D56\u58F0\u660E**\uFF1A\n \u2192 \u6309\u987A\u5E8F\u6267\u884C\n4. **\u6309\u987A\u5E8F\u5B9E\u65BD\u4EFB\u52A1**\uFF08\u65E0\u4F9D\u8D56\u58F0\u660E\u65F6\uFF09- \u4FDD\u6301\u7F16\u8F91\u6700\u5C0F\u5316\u3002\u5982\u679C\u4EFB\u52A1\u6807\u6CE8\u4E86 `@skill:<skill-name>`\uFF0C\u76F4\u63A5\u8C03\u7528\u5BF9\u5E94 skill\n - **\u9636\u6BB5\u804C\u8D23\u8981\u6C42**\uFF1AApply \u9636\u6BB5\u4E0D\u751F\u6210\u5355\u6D4B\u6587\u4EF6\uFF1B\u5355\u6D4B\u7EDF\u4E00\u5728 Review \u9636\u6BB5\u751F\u6210\u4E0E\u9A8C\u8BC1\u3002\n5. **\u786E\u8BA4\u5B8C\u6210** - \u5728\u66F4\u65B0\u72B6\u6001\u4E4B\u524D\u786E\u4FDD `tasks.md` \u4E2D\u7684\u6BCF\u4E2A\u9879\u76EE\u90FD\u5DF2\u5B8C\u6210\n6. **\u66F4\u65B0\u6E05\u5355** - \u6240\u6709\u5DE5\u4F5C\u5B8C\u6210\u540E\uFF0C\u5C06\u6BCF\u4E2A\u4EFB\u52A1\u8BBE\u7F6E\u4E3A `- [x]`\n7. **\u7ED3\u675F\u4F1A\u8BDD** - \u6240\u6709\u4EFB\u52A1\u5B8C\u6210\u540E\uFF0C\u8F93\u51FA\u5B8C\u6210\u6458\u8981\u5E76**\u7ACB\u5373\u7ED3\u675F\u5F53\u524D\u4F1A\u8BDD**\uFF08\u786E\u4FDD Stop hook \u88AB\u6B63\u786E\u89E6\u53D1\u4EE5\u6807\u8BB0 apply baseline\uFF09\u3002\u63D0\u793A\u7528\u6237\uFF1A\u5982\u9700\u8FDB\u5165 Review \u9636\u6BB5\uFF0C\u8BF7\u5728\u65B0\u4F1A\u8BDD\u4E2D\u624B\u52A8\u6267\u884C `zhuanspec review <change-id>`\n\n\n### \u9636\u6BB5 3\uFF1AReview\n\n**\u68C0\u67E5\u77E5\u8BC6\u5E93\u3001project.md \u5E76\u6267\u884C\u5BA1\u67E5**\uFF1A\n- \u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u5BA1\u67E5\u6700\u4F73\u5B9E\u8DF5\n- \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u9879\u76EE\u7EA6\u5B9A\uFF08\u63D0\u793A\uFF1A\"\u2713 Loaded project.md\"\uFF09\n\n\u6309\u4E09\u8F68\u987A\u5E8F\u4E32\u884C\u5BA1\u67E5\uFF0C\u6700\u540E\u8FD0\u884C `zhuanspec review <change-id>` \u6C47\u603B\u7ED3\u8BBA\uFF1A\n\n**\u4E09\u8F68\u987A\u5E8F\u4E32\u884C\u673A\u5236\uFF08\u7981\u6B62\u5E76\u884C\uFF09**\uFF1A\n- \u7531\u4E3B Agent \u6309 2.1 \u2192 2.2 \u2192 2.3 \u987A\u5E8F\u9010\u8F68\u6267\u884C\uFF0C\u540E\u4E00\u8F68\u5FC5\u987B\u5728\u524D\u4E00\u8F68 PASS \u540E\u624D\u53EF\u542F\u52A8\u3002\n- **\u8F68\u9053 1\uFF1ASpec-Code \u4E00\u81F4\u6027**\uFF1A\u8FD0\u884C `zhuanspec validate <id> --strict`\uFF0C\u8F93\u51FA `spec-consistency-result.json`\u3002\u8FC7\u4E0D\u4E86\u65F6\u53EA\u4FEE\u4EE3\u7801\uFF0C\u7981\u6B62\u6539 spec\u3002\n- **\u8F68\u9053 2\uFF1AUnit Test\uFF08\u5FC5\u987B\u8C03\u7528 Skill\uFF09**\uFF1A\u4F7F\u7528 Skill \u5DE5\u5177\u8C03\u7528 `generate-mockito-unit-test`\uFF0C\u8F93\u51FA `unit-test-result.json`\uFF08\u767B\u8BB0 `newTestsGenerated` \u6216 `skipReason`\uFF0C\u5E76\u8BBE\u7F6E `schemaVersion: 2`\uFF09\u3002**\u7981\u6B62\u4EBA\u5DE5\u4EE3\u66FF Skill**\u3002\n- **\u8F68\u9053 3\uFF1ACode Review\uFF08\u5FC5\u987B\u8C03\u7528 Skill\uFF09**\uFF1A\u4F7F\u7528 Skill \u5DE5\u5177\u8C03\u7528 `code-review-expert`\uFF0C\u5B8C\u6574\u8DD1\u5B8C 0~11 \u6B65\uFF1B\u8F93\u51FA `code-review-result.json`\uFF0C\u5FC5\u987B\u767B\u8BB0 `skillReportPath` \u6307\u5411 Skill \u751F\u6210\u7684 `doc/code-review-*.md`\uFF0C\u5E76\u8BBE\u7F6E `schemaVersion: 2`\u3002**\u7981\u6B62\u4EBA\u5DE5\u901F\u5BA1/\u624B\u5DE5\u7F16\u9020 JSON**\u3002\n\n**\u6BCF\u8F68\u81EA\u95ED\u73AF**\uFF1A\n- \u6BCF\u8F68\u5185\u90E8\u72EC\u7ACB\u4FEE\u590D\u5FAA\u73AF\uFF08\u6700\u591A 3 \u8F6E\uFF09\n- \u53D1\u73B0\u95EE\u9898\u65F6\u5728\u672C\u8F68\u5185\u4FEE\u590D\u5E76\u91CD\u8DD1\uFF1B\u672C\u8F68\u672A PASS \u7981\u6B62\u542F\u52A8\u540E\u4E00\u8F68\n- \u8F93\u51FA\u72EC\u7ACB\u62A5\u544A\u6587\u4EF6\uFF08\u6309\u8F68\u9053\u987A\u5E8F\uFF09\uFF1A\n - `spec-consistency-result.json`\n - `unit-test-result.json`\n - `code-review-result.json`\uFF08\u542B `skillReportPath`\uFF09\n- \u4E09\u8F68\u5168\u90E8 PASS \u540E\uFF0C\u8FD0\u884C `zhuanspec review <id>` \u6C47\u603B\u751F\u6210 `review-report.md`\n\n**\u9A8C\u6536\u6807\u51C6**\uFF1A\n- review passed\n- critical = 0\n- \u5355\u6D4B\u901A\u8FC7\n- \u4E09\u8F68\u6309\u5E8F\u5168\u90E8 PASS\n\n### \u9636\u6BB5 4\uFF1A\u5F52\u6863\u53D8\u66F4\n\n**\u524D\u7F6E\u68C0\u67E5**\uFF1A\n- \u26A0\uFE0F **CHECKPOINT [REVIEW-PASSED]**: Review \u9636\u6BB5\u5FC5\u987B\u987A\u5E8F\u901A\u8FC7\uFF08\u4E09\u8F68\u6309\u5E8F\u5168\u90E8 PASS\uFF09\n - `review-report.md` \u5B58\u5728\u4E14\u663E\u793A passed\uFF0C\u82E5\u51FA\u73B0 \u26A0\uFE0F legacy schema \u8B66\u544A\u90E8\u5206\u8BF7\u5C3D\u5FEB\u8865\u9F50 `schemaVersion: 2` + \u65B0\u5B57\u6BB5\n - `spec-consistency-result.json`: passed\n - `unit-test-result.json`: tests passed\uFF08`newTestsGenerated` \u6216 `skipReason` \u5DF2\u767B\u8BB0\uFF0C\u65B0\u4EA7\u7269\u542B `schemaVersion: 2`\uFF09\n - `code-review-result.json`: critical = 0\uFF0C`skillReportPath` \u5BF9\u5E94\u7684 `doc/code-review-*.md` \u771F\u5B9E\u5B58\u5728\uFF0C\u65B0\u4EA7\u7269\u542B `schemaVersion: 2`\n\n**\u6B65\u9AA4**\uFF1A\n0. **\u68C0\u67E5\u77E5\u8BC6\u5E93**\uFF1A\u8FD0\u884C `rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u662F\u5426\u6709\u9700\u8981\u6C89\u6DC0\u7684\u77E5\u8BC6\n1. **\u786E\u5B9A\u53D8\u66F4 ID**\uFF1A\u8FD0\u884C `zhuanspec list` \u786E\u8BA4\u8981\u5F52\u6863\u7684\u53D8\u66F4\n2. **\u9A8C\u8BC1 Review \u95E8\u7981**\uFF1A\u786E\u8BA4\u4E0A\u8FF0\u56DB\u4E2A\u7ED3\u679C\u6587\u4EF6\u5B58\u5728\u4E14\u5168\u90E8\u901A\u8FC7\n3. **\u8FD0\u884C\u5F52\u6863\u547D\u4EE4**\uFF1A\u6267\u884C `zhuanspec archive <id> --yes`\uFF08\u4EC5\u5DE5\u5177\u7C7B\u5DE5\u4F5C\u4F7F\u7528 `--skip-specs`\uFF09\n4. **\u9A8C\u8BC1\u5F52\u6863\u7ED3\u679C**\uFF1A\u8FD0\u884C `zhuanspec validate --strict` \u786E\u8BA4\u901A\u8FC7\n5. **\u77E5\u8BC6\u6C89\u6DC0\uFF08\u624B\u52A8\u8865\u5145\uFF09**\uFF1A\u8C03\u7528 `@skill:zhuanspec:knowledge` \u4ECE\u4F1A\u8BDD\u8BB0\u5FC6\u8865\u5145\u77E5\u8BC6\n - CLI \u5DF2\u81EA\u52A8\u4ECE\u53D8\u66F4\u76EE\u5F55\u63D0\u53D6\u7ED3\u6784\u5316\u77E5\u8BC6\n - AI \u9700\u4ECE\u4F1A\u8BDD\u8865\u5145\u9690\u5F0F\u7EA6\u5B9A\u3001\u8C03\u8BD5\u53D1\u73B0\u7B49\n6. **\u4F1A\u8BDD\u5206\u6790**\uFF1A\u8C03\u7528 `@skill:session-analytics` \u5206\u6790\u4F1A\u8BDD\u6307\u6807\u6570\u636E\n7. **\u8F93\u51FA\u53CD\u9988\u94FE\u63A5**\uFF1A\u544A\u77E5\u7528\u6237\u586B\u5199\u4F7F\u7528\u53CD\u9988\uFF1A\n \uD83D\uDCCB https://doc.weixin.qq.com/forms/AJ4AfQfgAAwACwAAwaVABsCNqDXIKn8sf\n\n## \u6267\u884C\u4EFB\u4F55\u4EFB\u52A1\u4E4B\u524D\n\n**\u77E5\u8BC6\u5E93\u68C0\u67E5\uFF1A**\n- [ ] \u641C\u7D22\u76F8\u5173\u9677\u9631\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/troubleshooting/`\n- [ ] \u641C\u7D22\u6700\u4F73\u5B9E\u8DF5\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/best-practices/`\n- [ ] \u9605\u8BFB\u77E5\u8BC6\u7D22\u5F15\uFF1A`cat zhuanspec/knowledge/index.md`\n\n**\u4E0A\u4E0B\u6587\u68C0\u67E5\u6E05\u5355\uFF1A**\n- [ ] \u5728 `specs/[capability]/spec.md` \u4E2D\u9605\u8BFB\u76F8\u5173\u89C4\u8303\n- [ ] \u68C0\u67E5 `changes/` \u4E2D\u7684\u5F85\u5904\u7406\u53D8\u66F4\u662F\u5426\u5B58\u5728\u51B2\u7A81\n- [ ] \u9605\u8BFB `zhuanspec/project.md` \u4E86\u89E3\u7EA6\u5B9A\u3001\u9879\u76EE\u7ED3\u6784\u548C\u76F8\u5173\u529F\u80FD\u6A21\u5757\uFF08\u6309\u9700\u52A0\u8F7D\uFF09\n- [ ] \u8FD0\u884C `zhuanspec list` \u67E5\u770B\u6D3B\u52A8\u53D8\u66F4\n- [ ] \u8FD0\u884C `zhuanspec list --specs` \u67E5\u770B\u73B0\u6709\u529F\u80FD\n\n**\u521B\u5EFA\u89C4\u8303\u4E4B\u524D\uFF1A**\n- **\u68C0\u67E5\u77E5\u8BC6\u5E93**\uFF1A`rg \"[\u5173\u952E\u8BCD]\" zhuanspec/knowledge/` \u641C\u7D22\u76F8\u5173\u9677\u9631\u548C\u6700\u4F73\u5B9E\u8DF5\n- \u59CB\u7EC8\u68C0\u67E5\u529F\u80FD\u662F\u5426\u5DF2\u5B58\u5728\n- \u4F18\u5148\u4FEE\u6539\u73B0\u6709\u89C4\u8303\u800C\u4E0D\u662F\u521B\u5EFA\u91CD\u590D\u9879\n- \u4F7F\u7528 `zhuanspec show [spec]` \u5BA1\u67E5\u5F53\u524D\u72B6\u6001\n- **\u5F3A\u5236\u6F84\u6E05\u8981\u6C42**\uFF1A\u5982\u679C\u8BF7\u6C42\u6709\u4EFB\u4F55\u4E0D\u660E\u786E\u3001\u6A21\u7CCA\u6216\u4E0D\u786E\u5B9A\u7684\u65B9\u9762\uFF0C\u5FC5\u987B\u505C\u6B62\u5E76\u4F7F\u7528**\u9009\u9879\u5F0F\u4EA4\u4E92**\u63D0\u95EE\u3002\u4E25\u7981\u5728\u4E0D\u786E\u5B9A\u7684\u60C5\u51B5\u4E0B\u81EA\u884C\u63A8\u6D4B\u3001\u5047\u8BBE\u6216\u7EE7\u7EED\u521B\u5EFA\u6587\u4EF6\u3002\u4E25\u7981\u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57\u56DE\u7B54\u3002\n\n## \u5F3A\u5236\u6F84\u6E05\u5DE5\u4F5C\u6D41\n\n> **\u6838\u5FC3\u539F\u5219**\uFF1A\u9047\u5230\u4EFB\u4F55\u6A21\u7CCA\u70B9\uFF0C\u5FC5\u987B\u6F84\u6E05\u3002\u4E25\u7981\u731C\u6D4B\u3001\u81C6\u6D4B\u3001\u81EA\u884C\u5047\u8BBE\u3002\n\n### \u6F84\u6E05\u95ED\u73AF\u673A\u5236\n\n\u5728\u521B\u5EFA\u4EFB\u4F55\u63D0\u6848\u6587\u4EF6\u4E4B\u524D\uFF0C\u5FC5\u987B\u6267\u884C\u4EE5\u4E0B\u6D41\u7A0B\uFF1A\n\n```\n\u250C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 1. \u67E5\u9605\u73B0\u6709\u6765\u6E90 \u2502\n\u2502 \u2192 \u89C4\u8303\u3001\u9879\u76EE\u7EA6\u5B9A\u3001\u4EE3\u7801\u5E93\u3001\u4E0A\u4E0B\u6587\u6587\u4EF6 \u2502\n\u2502 \u2192 \u5C1D\u8BD5\u4ECE\u8FD9\u4E9B\u6765\u6E90\u786E\u5B9A\u4FE1\u606F \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 2. \u8BC6\u522B\u6A21\u7CCA\u70B9 \u2502\n\u2502 \u2192 \u5206\u6790\u7528\u6237\u8BF7\u6C42\uFF0C\u5217\u51FA\u4E0D\u786E\u5B9A\u7684\u65B9\u9762 \u2502\n\u2502 \u2192 \u6392\u9664\u53EF\u4EE5\u4ECE\u73B0\u6709\u6765\u6E90\u786E\u5B9A\u7684\u65B9\u9762 \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 3. \u5224\u65AD\u63D0\u95EE\u7B56\u7565 \u2502\n\u2502 \u2192 \u5982\u679C\u4ECD\u6709\u6A21\u7CCA\u70B9\uFF1A\u5FC5\u987B\u63D0\u95EE \u2502\n\u2502 \u2192 \u5982\u679C\u5168\u90E8\u660E\u786E\uFF1A\u7EE7\u7EED\u521B\u5EFA \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 4. \u751F\u6210\u6F84\u6E05\u95EE\u9898 \u2502\n\u2502 \u2192 \u4F18\u5148\u68C0\u67E5 superpowers:brainstorming \u662F\u5426\u53EF\u7528 \u2502\n\u2502 \u2192 \u53EF\u7528\uFF1A\u8C03\u7528\u8BE5\u6280\u80FD\u751F\u6210\u9AD8\u8D28\u91CF\u95EE\u9898 \u2502\n\u2502 \u2192 \u4E0D\u53EF\u7528\uFF1A\u76F4\u63A5\u4F7F\u7528 AskUserQuestion \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 5. \u9009\u9879\u5F0F\u4EA4\u4E92 \u2502\n\u2502 \u2192 2-5 \u4E2A\u9884\u8BBE\u9009\u9879 + \"\u5176\u4ED6\"\u515C\u5E95 \u2502\n\u2502 \u2192 \u7B49\u5F85\u7528\u6237\u9009\u62E9 \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 6. \u5904\u7406\"\u5176\u4ED6\"\u9009\u9879 \u2502\n\u2502 \u2192 \u7528\u6237\u9009\u62E9\"\u5176\u4ED6\"\u540E\u9488\u5BF9\u6027\u8FFD\u95EE \u2502\n\u2502 \u2192 \u4ECD\u4F18\u5148\u4F7F\u7528\u9009\u9879\u5F0F \u2502\n\u251C\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 7. \u5F00\u59CB\u521B\u5EFA \u2502\n\u2502 \u2192 \u53EA\u6709\u5728\u6240\u6709\u6A21\u7CCA\u70B9\u90FD\u660E\u786E\u540E\u624D\u80FD\u521B\u5EFA\u63D0\u6848 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n### \u63D0\u95EE\u7B56\u7565\u9009\u62E9\n\n| \u6280\u80FD\u53EF\u7528\u6027 | \u63D0\u95EE\u65B9\u5F0F | \u8BF4\u660E |\n|-----------|---------|------|\n| superpowers:brainstorming \u53EF\u7528 | \u8C03\u7528\u6280\u80FD\u751F\u6210\u95EE\u9898 | \u9AD8\u8D28\u91CF\u3001\u7ED3\u6784\u5316\u7684\u6F84\u6E05\u95EE\u9898 |\n| superpowers:brainstorming \u4E0D\u53EF\u7528 | AskUserQuestion \u76F4\u63A5\u63D0\u95EE | \u9009\u9879\u5F0F\u4EA4\u4E92\uFF0C\u7B80\u6D01\u9AD8\u6548 |\n\n### Brainstorming \u8C03\u7528\u8FB9\u754C\n\n**\u9002\u7528\u573A\u666F**\uFF1A\n| \u573A\u666F\u7C7B\u578B | \u8C03\u7528\u65B9\u5F0F | \u8BF4\u660E |\n|----------|---------|------|\n| **\u590D\u6742\u6A21\u7CCA** | superpowers:brainstorming | \u8DE8\u6A21\u5757\u3001\u65B0\u67B6\u6784\u3001\u591A\u65B9\u6848\u9009\u62E9 |\n| **\u7B80\u5355\u6F84\u6E05** | AskUserQuestion \u76F4\u63A5\u63D0\u95EE | \u53C2\u6570\u8C03\u6574\u3001\u8303\u56F4\u8FB9\u754C\u3001\u5355\u4E00\u9009\u62E9 |\n| **\u5DF2\u5B8C\u6574\u9700\u6C42** | \u8DF3\u8FC7\u6F84\u6E05 | \u7528\u6237\u63D0\u4F9B\u5B8C\u6574\u9700\u6C42\u6587\u6863 |\n\n**\u8C03\u7528\u7EA6\u675F**\uFF1A\n- \u4EC5\u4F7F\u7528 brainstorming \u7684**\u6F84\u6E05\u63D0\u95EE\u80FD\u529B**\uFF08\u6B65\u9AA43\uFF1A\u9010\u4E00\u63D0\u95EE\u6F84\u6E05\uFF09\n- **\u4E0D\u8FDB\u5165\u5B8C\u6574\u8BBE\u8BA1\u6D41\u7A0B**\uFF08\u6B65\u9AA44-9\uFF1A\u65B9\u6848\u5BF9\u6BD4\u3001\u8BBE\u8BA1\u6587\u6863\uFF09\n- **\u4E0D\u89E6\u53D1 writing-plans skill**\uFF08\u5C5E\u4E8E Apply \u9636\u6BB5\uFF09\n- \u83B7\u5F97\u6F84\u6E05\u540E\u7ACB\u5373\u8FD4\u56DE ZhuanSpec \u63D0\u6848\u6D41\u7A0B\n\n### \u9009\u9879\u5F0F\u4EA4\u4E92\u683C\u5F0F\n\n**\u5FC5\u987B\u9075\u5B88**\uFF1A\n- \u6BCF\u4E2A\u95EE\u9898\u63D0\u4F9B 2-5 \u4E2A\u9884\u8BBE\u9009\u9879\n- \u672B\u5C3E\u5305\u542B\"\u5176\u4ED6\"\u9009\u9879\u4F5C\u4E3A\u515C\u5E95\n- \u7981\u6B62\u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57\n\n**\u793A\u4F8B**\uFF1A\n```json\n{\n \"questions\": [\n {\n \"id\": \"scope\",\n \"prompt\": \"\u60A8\u5E0C\u671B\u6539\u8FDB\u54EA\u4E9B\u65B9\u9762\uFF1F\",\n \"options\": [\n {\"id\": \"security\", \"label\": \"\u5B89\u5168\u6027\"},\n {\"id\": \"ux\", \"label\": \"\u7528\u6237\u4F53\u9A8C\"},\n {\"id\": \"performance\", \"label\": \"\u6027\u80FD\"},\n {\"id\": \"other\", \"label\": \"\u5176\u4ED6\"}\n ],\n \"allow_multiple\": true\n }\n ]\n}\n```\n\n### \u5E38\u89C1\u6A21\u7CCA\u70B9\u6E05\u5355\n\n| \u7C7B\u522B | \u9700\u6F84\u6E05\u7684\u60C5\u51B5 |\n|------|-------------|\n| **\u8303\u56F4** | \u8FB9\u754C\u4E0D\u660E\u786E\uFF08\"\u6539\u8FDB\u6027\u80FD\"\u3001\"\u4F18\u5316\u4EE3\u7801\"\uFF09 |\n| **\u6280\u672F** | \u591A\u79CD\u5B9E\u73B0\u65B9\u5F0F\u4F46\u672A\u6307\u5B9A\u504F\u597D |\n| **\u4F18\u5148\u7EA7** | \u591A\u4E2A\u9700\u6C42\u4F46\u672A\u8BF4\u660E\u987A\u5E8F |\n| **\u9A8C\u6536** | \u4E0D\u6E05\u695A\u5982\u4F55\u5224\u65AD\u5B8C\u6210 |\n| **\u5B9E\u73B0** | \u6570\u636E\u83B7\u53D6\u6765\u6E90\u3001\u670D\u52A1\u5206\u5C42\u3001\u4F9D\u8D56\u5173\u7CFB\u4E0D\u660E\u786E |\n| **\u4F4D\u7F6E** | \u4EE3\u7801\u6539\u52A8\u4F4D\u7F6E\u4E0D\u660E\u786E |\n\n### \u7981\u6B62\u884C\u4E3A\n\n| \u274C \u7981\u6B62 | \u539F\u56E0 |\n|--------|------|\n| \u81EA\u884C\u63A8\u6D4B\u7528\u6237\u610F\u56FE | \u8FDD\u53CD\u4E09\u6761\u94C1\u5F8B |\n| \u8DF3\u8FC7\u6F84\u6E05\u76F4\u63A5\u521B\u5EFA\u6587\u4EF6 | \u8FDD\u53CD No Spec, No Code |\n| \u8981\u6C42\u7528\u6237\u624B\u52A8\u8F93\u5165\u5927\u6BB5\u6587\u5B57 | \u6548\u7387\u4F4E\u3001\u4F53\u9A8C\u5DEE |\n\n---\n\n### \u4E0E\u4E09\u6761\u94C1\u5F8B\u7684\u5173\u7CFB\n\n| \u94C1\u5F8B | \u6F84\u6E05\u5DE5\u4F5C\u6D41\u4F53\u73B0 |\n|------|---------------|\n| **No Spec, No Code** | \u6F84\u6E05\u5B8C\u6210\u540E\u624D\u80FD\u521B\u5EFA\u63D0\u6848 |\n| **Spec is Truth** | \u6F84\u6E05\u7ED3\u679C\u5199\u5165 tasks.md \u7684\"\u6F84\u6E05\u65E5\u5FD7\" |\n| **Reverse Sync** | Apply \u9636\u6BB5\u504F\u79BB\u65F6\u91CD\u65B0\u8FDB\u5165\u6F84\u6E05\u6D41\u7A0B |\n\n### \u641C\u7D22\u6307\u5BFC\n- \u679A\u4E3E\u89C4\u8303\uFF1A`zhuanspec spec list --long`\uFF08\u6216\u4F7F\u7528 `--json` \u7528\u4E8E\u811A\u672C\uFF09\n- \u679A\u4E3E\u53D8\u66F4\uFF1A`zhuanspec list`\uFF08\u6216 `zhuanspec change list --json` - \u5DF2\u5F03\u7528\u4F46\u53EF\u7528\uFF09\n- \u663E\u793A\u8BE6\u7EC6\u4FE1\u606F\uFF1A\n - \u89C4\u8303\uFF1A`zhuanspec show <spec-id> --type spec`\uFF08\u4F7F\u7528 `--json` \u8FDB\u884C\u8FC7\u6EE4\uFF09\n - \u53D8\u66F4\uFF1A`zhuanspec show <change-id> --json --deltas-only`\n- \u5168\u6587\u641C\u7D22\uFF08\u4F7F\u7528 ripgrep\uFF09\uFF1A`rg -n \"Requirement:|Scenario:\" zhuanspec/specs`\n\n## \u5FEB\u901F\u5F00\u59CB\n\n### CLI \u547D\u4EE4\n\n```bash\n# \u57FA\u672C\u547D\u4EE4\nzhuanspec list # \u5217\u51FA\u6D3B\u52A8\u53D8\u66F4\nzhuanspec list --specs # \u5217\u51FA\u89C4\u8303\nzhuanspec show [item] # \u663E\u793A\u53D8\u66F4\u6216\u89C4\u8303\nzhuanspec validate [item] # \u9A8C\u8BC1\u53D8\u66F4\u6216\u89C4\u8303\nzhuanspec archive <change-id> [--yes|-y] # \u90E8\u7F72\u540E\u5F52\u6863\uFF08\u6DFB\u52A0 --yes \u7528\u4E8E\u975E\u4EA4\u4E92\u5F0F\u8FD0\u884C\uFF09\n\n# \u9879\u76EE\u7BA1\u7406\nzhuanspec init [path] # \u521D\u59CB\u5316 ZhuanSpec\nzhuanspec update [path] # \u66F4\u65B0\u8BF4\u660E\u6587\u4EF6\n\n# \u4EA4\u4E92\u6A21\u5F0F\nzhuanspec show # \u63D0\u793A\u9009\u62E9\nzhuanspec validate # \u6279\u91CF\u9A8C\u8BC1\u6A21\u5F0F\n\n# \u8C03\u8BD5\nzhuanspec show [change] --json --deltas-only\nzhuanspec validate [change] --strict\n```\n\n### \u547D\u4EE4\u6807\u5FD7\n\n- `--json` - \u673A\u5668\u53EF\u8BFB\u8F93\u51FA\n- `--type change|spec` - \u6D88\u9664\u9879\u76EE\u6B67\u4E49\n- `--strict` - \u5168\u9762\u9A8C\u8BC1\n- `--no-interactive` - \u7981\u7528\u63D0\u793A\n- `--skip-specs` - \u5F52\u6863\u65F6\u4E0D\u66F4\u65B0\u89C4\u8303\n- `--yes`/`-y` - \u8DF3\u8FC7\u786E\u8BA4\u63D0\u793A\uFF08\u975E\u4EA4\u4E92\u5F0F\u5F52\u6863\uFF09\n\n## \u76EE\u5F55\u7ED3\u6784\n\n```\nzhuanspec/\n\u251C\u2500\u2500 project.md # \u9879\u76EE\u7EA6\u5B9A\n\u251C\u2500\u2500 knowledge/ # \u9879\u76EE\u7EA7\u77E5\u8BC6\u5E93\n\u2502 \u251C\u2500\u2500 index.md # \u77E5\u8BC6\u7D22\u5F15\n\u2502 \u251C\u2500\u2500 troubleshooting/ # \u5E38\u89C1\u95EE\u9898\u4E0E\u9677\u9631\n\u2502 \u251C\u2500\u2500 best-practices/ # \u6700\u4F73\u5B9E\u8DF5\n\u2502 \u2514\u2500\u2500 implicit-conventions/ # \u9690\u5F0F\u7EA6\u5B9A\n\u251C\u2500\u2500 specs/ # \u5F53\u524D\u771F\u5B9E\u72B6\u6001 - \u5DF2\u6784\u5EFA\u7684\u5185\u5BB9\n\u2502 \u2514\u2500\u2500 [capability]/ # \u5355\u4E00\u805A\u7126\u7684\u529F\u80FD\n\u2502 \u251C\u2500\u2500 spec.md # \u8981\u6C42\u548C\u573A\u666F\n\u2502 \u2514\u2500\u2500 design.md # \u6280\u672F\u6A21\u5F0F\n\u251C\u2500\u2500 changes/ # \u63D0\u6848 - \u5E94\u8BE5\u66F4\u6539\u7684\u5185\u5BB9\n\u2502 \u251C\u2500\u2500 [change-name]/\n\u2502 \u2502 \u251C\u2500\u2500 proposal.md # \u539F\u56E0\u3001\u5185\u5BB9\u3001\u5F71\u54CD\n\u2502 \u2502 \u251C\u2500\u2500 tasks.md # \u5B9E\u65BD\u6E05\u5355\n\u2502 \u2502 \u251C\u2500\u2500 design.md # \u6280\u672F\u51B3\u7B56\uFF08\u5FC5\u9009\uFF1B\u77E5\u8BC6\u63D0\u53D6\u6765\u6E90\uFF09\n\u2502 \u2502 \u2514\u2500\u2500 specs/ # \u589E\u91CF\u53D8\u66F4\n\u2502 \u2502 \u2514\u2500\u2500 [capability]/\n\u2502 \u2502 \u2514\u2500\u2500 spec.md # ADDED/MODIFIED/REMOVED\n\u2502 \u2514\u2500\u2500 archive/ # \u5DF2\u5B8C\u6210\u7684\u53D8\u66F4\n```\n\n## \u521B\u5EFA\u53D8\u66F4\u63D0\u6848\n\n### \u51B3\u7B56\u6811\n\n```\n\u65B0\u8BF7\u6C42\uFF1F\n\u251C\u2500 \u4FEE\u590D\u6062\u590D\u89C4\u8303\u884C\u4E3A\u7684 Bug\uFF1F \u2192 \u76F4\u63A5\u4FEE\u590D\n\u251C\u2500 \u62FC\u5199\u9519\u8BEF/\u683C\u5F0F/\u6CE8\u91CA\uFF1F \u2192 \u76F4\u63A5\u4FEE\u590D\n\u251C\u2500 \u65B0\u529F\u80FD/\u80FD\u529B\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\n\u251C\u2500 \u7834\u574F\u6027\u66F4\u6539\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\n\u251C\u2500 \u67B6\u6784\u66F4\u6539\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\n\u2514\u2500 \u4E0D\u660E\u786E\uFF1F \u2192 \u521B\u5EFA\u63D0\u6848\uFF08\u66F4\u5B89\u5168\uFF09\n```\n\n### \u63D0\u6848\u7ED3\u6784\n\n1. **\u521B\u5EFA\u76EE\u5F55\uFF1A** `changes/[change-id]/`\uFF08kebab-case\uFF0C\u52A8\u8BCD\u5F00\u5934\uFF0C\u552F\u4E00\uFF09\n\n2. **\u7F16\u5199 proposal.md\uFF1A**\n```markdown\n# Change: [\u53D8\u66F4\u7684\u7B80\u8981\u63CF\u8FF0]\n\n## \u53D8\u66F4\u539F\u56E0\n[\u5173\u4E8E\u95EE\u9898/\u673A\u4F1A\u7684 1-2 \u53E5\u8BDD]\n\n## \u53D8\u66F4\u5185\u5BB9\n- [\u53D8\u66F4\u7684\u8981\u70B9\u5217\u8868]\n- [\u7528 **BREAKING** \u6807\u8BB0\u7834\u574F\u6027\u66F4\u6539]\n\n## \u5F71\u54CD\u8303\u56F4\n- Affected specs: [\u5217\u51FA\u529F\u80FD]\n- Affected code: [\u5173\u952E\u6587\u4EF6/\u7CFB\u7EDF]\n```\n\n3. **\u521B\u5EFA\u89C4\u8303\u589E\u91CF\uFF1A** `specs/[capability]/spec.md`\n```markdown\n## ADDED Requirements\n### \u9700\u6C42\uFF1ANew Feature\nThe system SHALL provide...\n\n#### \u573A\u666F\uFF1ASuccess case\n- **\u5F53** user performs action\n- **\u5219** expected result\n\n## MODIFIED Requirements\n### \u9700\u6C42\uFF1AExisting Feature\n[\u5B8C\u6574\u7684\u4FEE\u6539\u540E\u8981\u6C42]\n\n## REMOVED Requirements\n### \u9700\u6C42\uFF1AOld Feature\n**Reason**: [\u79FB\u9664\u539F\u56E0]\n**Migration**: [\u5982\u4F55\u5904\u7406]\n```\n\u5982\u679C\u591A\u4E2A\u529F\u80FD\u53D7\u5230\u5F71\u54CD\uFF0C\u5728 `changes/[change-id]/specs/<capability>/spec.md` \u4E0B\u521B\u5EFA\u591A\u4E2A\u589E\u91CF\u6587\u4EF6\u2014\u2014\u6BCF\u4E2A\u529F\u80FD\u4E00\u4E2A\u3002\n\n4. **\u521B\u5EFA tasks.md\uFF1A**\n\n\u5148\u8FD0\u884C `zhuanspec skills list --json` \u53D1\u73B0\u5F53\u524D\u73AF\u5883\u4E2D\u53EF\u7528\u7684 skill \u53CA\u5176 description\uFF0C\u7136\u540E\u57FA\u4E8E\u8BED\u4E49\u5339\u914D\u5728\u4EFB\u52A1\u4E2D\u6807\u6CE8\u771F\u5B9E skill \u540D\u79F0\uFF1A\n\n```markdown\n## 1. \u5B9E\u73B0\n- [ ] 1.1 \u521B\u5EFA\u6570\u636E\u5E93\u8868\u7ED3\u6784 @skill:java-db-schema-standards\n- [ ] 1.2 \u5B9E\u73B0 RPC \u63A5\u53E3 @skill:java-scf-rpc-usage-skill\n- [ ] 1.3 \u6DFB\u52A0\u524D\u7AEF\u7EC4\u4EF6 @skill:kf-fe-frontend-dev\n- [ ] 1.4 \u7F16\u5199\u6D4B\u8BD5 @skill:generate-mockito-unit-test-skill\n```\n> **@skill \u6807\u7B7E**\uFF1A\u521B\u5EFA tasks.md \u524D\uFF0C\u8FD0\u884C `zhuanspec skills list --json` \u53D1\u73B0\u53EF\u7528 skill \u53CA\u5176 description\u3002\u57FA\u4E8E skill description \u8FDB\u884C\u8BED\u4E49\u5339\u914D\uFF1A\n> - \u4ED4\u7EC6\u9605\u8BFB\u6BCF\u4E2A skill \u7684 description\uFF0C\u7406\u89E3\u5176\u5177\u4F53\u529F\u80FD\u548C\u9002\u7528\u573A\u666F\n> - \u53EA\u6709\u5F53\u4EFB\u52A1\u529F\u80FD\u4E0E skill description \u660E\u786E\u5339\u914D\u65F6\u624D\u6807\u6CE8\n> - \u7B80\u5355\u7684\u4EE3\u7801\u4FEE\u6539\uFF08\u5982\u589E\u5220\u679A\u4E3E\u503C\uFF09\u5E94\u5339\u914D\u901A\u7528\u7F16\u7801\u89C4\u8303 skill\uFF0C\u800C\u975E\u67B6\u6784\u7EA7 skill\n> - \u907F\u514D\u4EC5\u56E0\u6587\u4EF6\u540D\u6216\u8DEF\u5F84\u5173\u952E\u8BCD\u800C\u9519\u8BEF\u5339\u914D\n> - \u4F7F\u7528\u771F\u5B9E skill \u540D\u79F0\u6807\u6CE8\uFF0C\u652F\u6301\u591A\u4E2A skill\uFF08`@skill:name1,name2`\uFF09\n> - Apply \u9636\u6BB5 AI \u6839\u636E\u6807\u7B7E\u76F4\u63A5\u8C03\u7528\u5BF9\u5E94 skill\u3002\u65E0\u53EF\u7528 skill \u65F6\u53EF\u7701\u7565\u3002\n\n\u26A0\uFE0F **\u68C0\u67E5\u70B9 [Skill \u6807\u6CE8]**\uFF1A\n1. \u5FC5\u987B\u5148\u8FD0\u884C `zhuanspec skills list` \u5E76\u5728 Skill \u6620\u5C04\u8868\u4E2D\u8BB0\u5F55\u53D1\u73B0\u7684 skill\n2. \u6BCF\u4E2A\u4EFB\u52A1\u5FC5\u987B\u6807\u6CE8 @skill:\u771F\u5B9Eskill\u540D\u79F0 \u6216 @skill:none\n3. \u5982\u679C\u4F7F\u7528 @skill:none\uFF0C\u5FC5\u987B\u63D0\u4F9B\u7406\u7531\uFF08\u4F8B\u5982\uFF1A\"\u7EAF\u914D\u7F6E\u53D8\u66F4\uFF0C\u65E0\u9700 skill\"\uFF09\n4. @skill \u540D\u79F0\u5FC5\u987B\u4E0E `zhuanspec skills list` \u8FD4\u56DE\u7684\u540D\u79F0\u5B8C\u5168\u4E00\u81F4 \u2014\u2014 \u7981\u6B62\u865A\u6784 skill \u540D\u79F0\n5. tasks.md \u4E2D\u7684 Skill \u6620\u5C04\u8868\u4E0D\u80FD\u4E3A\u7A7A\n6. validate --strict \u4F1A\u9A8C\u8BC1\u6240\u6709 @skill \u540D\u79F0\u662F\u5426\u5B58\u5728\u4E8E\u5DF2\u77E5 skill \u5217\u8868\u4E2D\n\n\u26A0\uFE0F **\u68C0\u67E5\u70B9 [\u4EFB\u52A1\u6392\u5E8F]**\uFF1A\n1. tasks.md \u4E2D\u7684\u4EFB\u52A1\u5FC5\u987B\u6309\u6CE2\u6B21\u7EC4\u7EC7\uFF08### \u6CE2\u6B21 1, ### \u6CE2\u6B21 2 \u7B49\uFF09\n2. \u6CE2\u6B21\u5206\u914D\u5FC5\u987B\u6839\u636E @depends \u4F9D\u8D56\u5173\u7CFB\u8BA1\u7B97\uFF08\u6CE2\u6B21 1 = \u65E0\u4F9D\u8D56\uFF0C\u6CE2\u6B21 N = \u4F9D\u8D56\u6CE2\u6B21 N-1\uFF09\n3. \u4EFB\u52A1\u4E0D\u80FD\u51FA\u73B0\u5728\u5176\u4F9D\u8D56\u7684\u4EFB\u52A1\u4E4B\u524D\n4. \u5FC5\u987B\u5728\u6587\u4EF6\u672B\u5C3E\u6DFB\u52A0 \"## \u4F9D\u8D56\u5206\u6790\" \u7AE0\u8282\u5E76\u6807\u660E\"\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\"\n5. validate --strict \u4F1A\u9A8C\u8BC1\u4EFB\u52A1\u6392\u5E8F\u662F\u5426\u4E0E\u8BA1\u7B97\u7684\u6CE2\u6B21\u5339\u914D\n\n## Subagent \u542F\u52A8\u524D\u4E0A\u4E0B\u6587\u51C6\u5907\n\n\u5728\u7F16\u6392\u5C42\u4E3A\u6BCF\u4E2A Subagent \u51C6\u5907\u4E0A\u4E0B\u6587\u65F6\uFF0C\u6309\u4E09\u7EA7\u7B56\u7565\u6CE8\u5165\uFF1A\n\n### L1 \u6838\u5FC3\uFF08\u5168\u91CF\u6CE8\u5165\uFF0C\u5FC5\u987B\u5B8C\u6574\uFF09\n1. \u89E3\u6790\u5F53\u524D\u4EFB\u52A1\u7684 @test-case \u6807\u6CE8 \u2192 \u4ECE test-cases.md \u4E2D\u63D0\u53D6\u5BF9\u5E94 TC \u5168\u6587\n2. \u89E3\u6790\u5F53\u524D\u4EFB\u52A1\u7684 @ref \u6807\u6CE8 \u2192 \u4ECE\u6280\u672F\u65B9\u6848\u6587\u6863\u4E2D\u63D0\u53D6\u5BF9\u5E94\u7AE0\u8282\uFF08\u6309\u4F18\u5148\u7EA7\u67E5\u627E\uFF1A\u7528\u6237 --tech-spec \u6307\u5B9A\u8DEF\u5F84 > techDesign/tech-spec.md\uFF09\n3. \u5B9A\u4F4D\u5F53\u524D\u4EFB\u52A1\u6240\u5C5E\u7684 capability \u2192 \u8BFB\u53D6 specs/<capability>/spec.md\n\n### L2 \u5173\u8054\uFF08\u5168\u91CF\u6CE8\u5165\uFF09\n4. design.md \u5168\u6587\n5. Rules + Knowledge\n6. \u5F53\u524D Wave \u5176\u4ED6\u4EFB\u52A1\u7684\u4E00\u53E5\u8BDD\u6458\u8981 + \u524D\u7F6E Wave \u5B8C\u6210\u7ED3\u679C\u6458\u8981\n\n### L3 \u80CC\u666F\uFF08\u6458\u8981 + \u6309\u9700\u8BFB\u53D6\uFF09\n7. \u6280\u672F\u65B9\u6848\u5176\u4ED6\u7AE0\u8282 \u2192 \u8F93\u51FA\u6E05\u5355\u5F0F\u6458\u8981\uFF08\u201C\u8FD8\u5305\u542B N \u5F20\u8868\uFF1Axxx, yyy, ...\uFF0C\u8BE6\u89C1\u6280\u672F\u65B9\u6848\u6587\u6863\u201D\uFF09\n8. \u5176\u4ED6 spec \u7684 Requirement \u6807\u9898\u5217\u8868 \u2192 \u8F93\u51FA\u6E05\u5355\uFF08\"\u53E6\u6709 M \u4E2A spec\uFF0C\u8BE6\u89C1 specs/ \u76EE\u5F55\"\uFF09\n\n### \u6700\u7EC8\u6821\u9A8C\n- L1+L2 \u603B\u884C\u6570 > 800 \u884C \u2192 \u5BF9 L2 \u4E2D design.md \u505A\u7AE0\u8282\u88C1\u526A\uFF08\u53EA\u4FDD\u7559\u5F53\u524D\u4EFB\u52A1\u76F8\u5173\u7AE0\u8282\uFF09\n- L1 \u4E0D\u5141\u8BB8\u88C1\u526A\n- L3 \u7684\u6458\u8981\u5FC5\u987B\u5305\u542B\u6240\u6709\u5143\u7D20\u540D\u79F0\uFF0C\u4E0D\u5141\u8BB8\u7528\"\u7B49\"\u6216\"...\"\u7701\u7565\n\n5. **\u57FA\u4E8E\u6280\u672F\u65B9\u6848\u9010\u7AE0\u6620\u5C04\u5230 design.md\uFF08\u5FC5\u9009\uFF09**\uFF1A\n\u6BCF\u4E2A\u63D0\u6848\u90FD\u5FC5\u987B\u521B\u5EFA `design.md`\uFF0C\u8BB0\u5F55\u6280\u672F\u51B3\u7B56\u548C\u67B6\u6784\u601D\u8003\u3002\n\n**\u7AE0\u8282\u6620\u5C04\u89C4\u5219**\uFF1A\n- **\u5FC5\u9009\u7AE0\u8282**\uFF08\u6240\u6709\u63D0\u6848\u5FC5\u987B\u5305\u542B\uFF09\uFF1A\u80CC\u666F/Background\u3001\u51B3\u7B56/Decision\u3001\u98CE\u9669/Risks\n- **\u6309\u9700\u7AE0\u8282**\uFF08\u4EC5\u5F53\u6280\u672F\u65B9\u6848\u6D89\u53CA\u65F6\u624D\u751F\u6210\uFF09\uFF1A\n - \u6280\u672F\u65B9\u6848\u6709\u5EFA\u8868 SQL / DDL \u2192 \u751F\u6210 \u6570\u636E\u6A21\u578B/Database Design \u7AE0\u8282\n - \u6280\u672F\u65B9\u6848\u6709\u63A5\u53E3\u5B9A\u4E49 / API / SCF / RPC \u2192 \u751F\u6210 \u63A5\u53E3\u8BBE\u8BA1/API Contract \u7AE0\u8282\n - \u6280\u672F\u65B9\u6848\u6709 ES / MQ / \u7F13\u5B58 \u2192 \u751F\u6210 \u57FA\u7840\u8BBE\u65BD/Infrastructure \u7AE0\u8282\n - \u6280\u672F\u65B9\u6848\u6709\u524D\u7AEF\u8BBE\u8BA1 \u2192 \u751F\u6210 \u524D\u7AEF\u8BBE\u8BA1/Frontend Design \u7AE0\u8282\n -...(\u6309\u7167\u63D0\u4F9B\u7684\u6280\u672F\u65B9\u6848\u8865\u5145 \u603B\u4E4B\u8981\u8986\u76D6\u5168)\n- \u6BCF\u4E2A\u6309\u9700\u7AE0\u8282\u7684\u5185\u5BB9\u4ECE\u6280\u672F\u65B9\u6848\u5BF9\u5E94\u7AE0\u8282\u6620\u5C04\u800C\u6765\n- \u65E0\u6280\u672F\u65B9\u6848\u6587\u6863\u65F6\uFF0C\u4EC5\u6821\u9A8C\u5FC5\u9009\u7AE0\u8282\uFF08\u5411\u540E\u517C\u5BB9\uFF09\n\n```markdown\n## \u80CC\u666F\n[\u80CC\u666F\u3001\u7EA6\u675F\u3001\u5229\u76CA\u76F8\u5173\u8005]\n\n## \u76EE\u6807 / \u975E\u76EE\u6807\n- Goals: [...]\n- Non-Goals: [...]\n\n## \u51B3\u7B56\n- Decision: [\u5185\u5BB9\u548C\u539F\u56E0]\n- Alternatives considered: [\u9009\u9879 + \u7406\u7531]\n\n## \u98CE\u9669 / \u6743\u8861\n- [\u98CE\u9669] \u2192 \u7F13\u89E3\u63AA\u65BD\n\n## \u6700\u4F73\u5B9E\u8DF5\n[\u5B9E\u65BD\u8FC7\u7A0B\u4E2D\u7684\u6700\u4F73\u5B9E\u8DF5\u5EFA\u8BAE]\n\n## \u9690\u5F0F\u7EA6\u5B9A\n[\u56E2\u961F\u7279\u6709\u7684\u9690\u5F0F\u7EA6\u5B9A\u6216\u9ED8\u8BA4\u884C\u4E3A]\n\n## \u8FC1\u79FB\u8BA1\u5212\n[\u6B65\u9AA4\u3001\u56DE\u6EDA]\n\n## \u5F85\u89E3\u51B3\u95EE\u9898\n- [...]\n```\n\n**\u91CD\u8981**\uFF1Adesign.md \u662F\u77E5\u8BC6\u63D0\u53D6\u7684\u4E3B\u8981\u6765\u6E90\uFF0C\u5F52\u6863\u65F6\u4F1A\u81EA\u52A8\u63D0\u53D6\u5176\u4E2D\u7684\u201C\u51B3\u7B56\u201D\u3001\u201C\u6700\u4F73\u5B9E\u8DF5\u201D\u3001\u201C\u9690\u5F0F\u7EA6\u5B9A\u201D\u6C89\u6DC0\u5230\u9879\u76EE\u77E5\u8BC6\u5E93\u3002\n- [...]\n```\n\n## \u89C4\u8303\u6587\u4EF6\u683C\u5F0F\n\n### \u5173\u952E\uFF1A\u573A\u666F\u683C\u5F0F\n\n**\u6B63\u786E**\uFF08\u4F7F\u7528 #### \u6807\u9898\uFF09\uFF1A\n```markdown\n#### \u573A\u666F\uFF1A\u7528\u6237\u767B\u5F55\u6210\u529F\n- **\u5F53** \u63D0\u4F9B\u4E86\u6709\u6548\u51ED\u636E\n- **\u5219** \u8FD4\u56DE JWT token\n```\n\n**\u9519\u8BEF**\uFF08\u4E0D\u8981\u4F7F\u7528\u9879\u76EE\u7B26\u53F7\u6216\u7C97\u4F53\uFF09\uFF1A\n```markdown\n- **\u573A\u666F\uFF1A\u7528\u6237\u767B\u5F55** \u274C\n**\u573A\u666F**\uFF1A\u7528\u6237\u767B\u5F55 \u274C\n### \u573A\u666F\uFF1A\u7528\u6237\u767B\u5F55 \u274C\n```\n\n\u6BCF\u4E2A\u8981\u6C42\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u4E2A\u573A\u666F\u3002\n\n### \u8981\u6C42\u63AA\u8F9E\n- \u5BF9\u89C4\u8303\u6027\u8981\u6C42\u4F7F\u7528 SHALL/MUST\uFF08\u9664\u975E\u6709\u610F\u975E\u89C4\u8303\u6027\uFF0C\u5426\u5219\u907F\u514D\u4F7F\u7528 should/may\uFF09\n\n### \u589E\u91CF\u64CD\u4F5C\n\n- `## ADDED Requirements` - \u65B0\u529F\u80FD\n- `## MODIFIED Requirements` - \u66F4\u6539\u7684\u884C\u4E3A\n- `## REMOVED Requirements` - \u5DF2\u5F03\u7528\u7684\u529F\u80FD\n- `## RENAMED Requirements` - \u540D\u79F0\u66F4\u6539\n\n\u6807\u9898\u4F7F\u7528 `trim(header)` \u5339\u914D - \u5FFD\u7565\u7A7A\u767D\u3002\n\n#### \u4F55\u65F6\u4F7F\u7528 ADDED vs MODIFIED\n- ADDED\uFF1A\u5F15\u5165\u4E00\u4E2A\u65B0\u7684\u529F\u80FD\u6216\u5B50\u529F\u80FD\uFF0C\u53EF\u4EE5\u72EC\u7ACB\u4F5C\u4E3A\u8981\u6C42\u3002\u5F53\u66F4\u6539\u662F\u6B63\u4EA4\u7684\uFF08\u4F8B\u5982\uFF0C\u6DFB\u52A0\"\u659C\u6760\u547D\u4EE4\u914D\u7F6E\"\uFF09\u800C\u4E0D\u662F\u6539\u53D8\u73B0\u6709\u8981\u6C42\u7684\u8BED\u4E49\u65F6\uFF0C\u4F18\u5148\u4F7F\u7528 ADDED\u3002\n- MODIFIED\uFF1A\u66F4\u6539\u73B0\u6709\u8981\u6C42\u7684\u884C\u4E3A\u3001\u8303\u56F4\u6216\u9A8C\u6536\u6807\u51C6\u3002\u59CB\u7EC8\u7C98\u8D34\u5B8C\u6574\u7684\u3001\u66F4\u65B0\u7684\u8981\u6C42\u5185\u5BB9\uFF08\u6807\u9898 + \u6240\u6709\u573A\u666F\uFF09\u3002\u5F52\u6863\u5668\u5C06\u7528\u60A8\u5728\u6B64\u5904\u63D0\u4F9B\u7684\u5185\u5BB9\u66FF\u6362\u6574\u4E2A\u8981\u6C42\uFF1B\u90E8\u5206\u589E\u91CF\u5C06\u4E22\u5931\u5148\u524D\u7684\u8BE6\u7EC6\u4FE1\u606F\u3002\n- RENAMED\uFF1A\u4EC5\u5728\u540D\u79F0\u66F4\u6539\u65F6\u4F7F\u7528\u3002\u5982\u679C\u60A8\u8FD8\u66F4\u6539\u884C\u4E3A\uFF0C\u8BF7\u4F7F\u7528 RENAMED\uFF08\u540D\u79F0\uFF09\u52A0\u4E0A MODIFIED\uFF08\u5185\u5BB9\uFF09\uFF0C\u5F15\u7528\u65B0\u540D\u79F0\u3002\n\n\u5E38\u89C1\u9677\u9631\uFF1A\u4F7F\u7528 MODIFIED \u6DFB\u52A0\u65B0\u5173\u6CE8\u70B9\u800C\u4E0D\u5305\u542B\u5148\u524D\u7684\u6587\u672C\u3002\u8FD9\u4F1A\u5728\u5F52\u6863\u65F6\u5BFC\u81F4\u8BE6\u7EC6\u4FE1\u606F\u4E22\u5931\u3002\u5982\u679C\u60A8\u6CA1\u6709\u660E\u786E\u66F4\u6539\u73B0\u6709\u8981\u6C42\uFF0C\u8BF7\u5728 ADDED \u4E0B\u6DFB\u52A0\u65B0\u8981\u6C42\u3002\n\n\u6B63\u786E\u7F16\u5199 MODIFIED \u8981\u6C42\uFF1A\n1) \u5728 `zhuanspec/specs/<capability>/spec.md` \u4E2D\u627E\u5230\u73B0\u6709\u8981\u6C42\u3002\n2) \u590D\u5236\u6574\u4E2A\u8981\u6C42\u5757\uFF08\u4ECE `### Requirement: ...` \u5230\u5176\u573A\u666F\uFF09\u3002\n3) \u5C06\u5176\u7C98\u8D34\u5230 `## MODIFIED Requirements` \u4E0B\u5E76\u7F16\u8F91\u4EE5\u53CD\u6620\u65B0\u884C\u4E3A\u3002\n4) \u786E\u4FDD\u6807\u9898\u6587\u672C\u5B8C\u5168\u5339\u914D\uFF08\u5FFD\u7565\u7A7A\u767D\uFF09\u5E76\u81F3\u5C11\u4FDD\u7559\u4E00\u4E2A `#### Scenario:`\u3002\n\nRENAMED \u793A\u4F8B\uFF1A\n```markdown\n## RENAMED Requirements\n- FROM: `### \u9700\u6C42\uFF1ALogin`\n- TO: `### \u9700\u6C42\uFF1AUser Authentication`\n```\n\n## \u6545\u969C\u6392\u9664\n\n### \u5E38\u89C1\u9519\u8BEF\n\n**\"\u53D8\u66F4\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u4E2A\u589E\u91CF\"**\n- \u68C0\u67E5 `changes/[name]/specs/` \u662F\u5426\u5B58\u5728 .md \u6587\u4EF6\n- \u9A8C\u8BC1\u6587\u4EF6\u5177\u6709\u64CD\u4F5C\u524D\u7F00\uFF08## ADDED Requirements\uFF09\n\n**\"\u8981\u6C42\u5FC5\u987B\u81F3\u5C11\u6709\u4E00\u4E2A\u573A\u666F\"**\n- \u68C0\u67E5\u573A\u666F\u662F\u5426\u4F7F\u7528 `#### Scenario:` \u683C\u5F0F\uFF084 \u4E2A\u4E95\u53F7\uFF09\n- \u4E0D\u8981\u5BF9\u573A\u666F\u6807\u9898\u4F7F\u7528\u9879\u76EE\u7B26\u53F7\u6216\u7C97\u4F53\n\n**\u9759\u9ED8\u573A\u666F\u89E3\u6790\u5931\u8D25**\n- \u9700\u8981\u7CBE\u786E\u683C\u5F0F\uFF1A`#### Scenario: Name`\n- \u4F7F\u7528\u4EE5\u4E0B\u547D\u4EE4\u8C03\u8BD5\uFF1A`zhuanspec show [change] --json --deltas-only`\n\n### \u9A8C\u8BC1\u63D0\u793A\n\n```bash\n# \u59CB\u7EC8\u4F7F\u7528\u4E25\u683C\u6A21\u5F0F\u8FDB\u884C\u5168\u9762\u68C0\u67E5\nzhuanspec validate [change] --strict\n\n# \u8C03\u8BD5\u589E\u91CF\u89E3\u6790\nzhuanspec show [change] --json | jq '.deltas'\n\n# \u68C0\u67E5\u7279\u5B9A\u8981\u6C42\nzhuanspec show [spec] --json -r 1\n```\n\n## \u7406\u60F3\u8DEF\u5F84\u811A\u672C\n\n```bash\n# 1) \u63A2\u7D22\u5F53\u524D\u72B6\u6001\nzhuanspec spec list --long\nzhuanspec list\n# \u53EF\u9009\u5168\u6587\u641C\u7D22\uFF1A\n# rg -n \"Requirement:|Scenario:\" zhuanspec/specs\n# rg -n \"^#|Requirement:\" zhuanspec/changes\n\n# 2) \u9009\u62E9\u53D8\u66F4 ID \u5E76\u642D\u5EFA\nCHANGE=add-two-factor-auth\nmkdir -p zhuanspec/changes/$CHANGE/{specs/auth}\nprintf \"## \u53D8\u66F4\u539F\u56E0\\n...\\n\\n## \u53D8\u66F4\u5185\u5BB9\\n- ...\\n\\n## \u5F71\u54CD\u8303\u56F4\\n- ...\\n\" > zhuanspec/changes/\\$CHANGE/proposal.md\nprintf \"## 1. \u5B9E\u73B0\n- [ ] 1.1 ...\n\" > zhuanspec/changes/$CHANGE/tasks.md\n\n# 3) \u6DFB\u52A0\u589E\u91CF\uFF08\u793A\u4F8B\uFF09\ncat > zhuanspec/changes/$CHANGE/specs/auth/spec.md << 'EOF'\n## ADDED Requirements\n### \u9700\u6C42\uFF1A\u53CC\u56E0\u7D20\u8BA4\u8BC1\n\u7528\u6237 MUST \u5728\u767B\u5F55\u65F6\u63D0\u4F9B\u7B2C\u4E8C\u4E2A\u8BA4\u8BC1\u56E0\u7D20\u3002\n\n#### \u573A\u666F\uFF1A\u9700\u8981 OTP\n- **\u5F53** \u63D0\u4F9B\u4E86\u6709\u6548\u51ED\u636E\n- **\u5219** \u9700\u8981 OTP \u6311\u6218\nEOF\n\n# 4) \u9A8C\u8BC1\nzhuanspec validate $CHANGE --strict\n```\n\n## \u591A\u529F\u80FD\u793A\u4F8B\n\n```\nzhuanspec/changes/add-2fa-notify/\n\u251C\u2500\u2500 proposal.md\n\u251C\u2500\u2500 tasks.md\n\u2514\u2500\u2500 specs/\n \u251C\u2500\u2500 auth/\n \u2502 \u2514\u2500\u2500 spec.md # ADDED: \u53CC\u56E0\u7D20\u8BA4\u8BC1\n \u2514\u2500\u2500 notifications/\n \u2514\u2500\u2500 spec.md # ADDED: OTP \u90AE\u4EF6\u901A\u77E5\n```\n\nauth/spec.md\n```markdown\n## ADDED Requirements\n### \u9700\u6C42\uFF1A\u53CC\u56E0\u7D20\u8BA4\u8BC1\n...\n```\n\nnotifications/spec.md\n```markdown\n## ADDED Requirements\n### \u9700\u6C42\uFF1AOTP \u90AE\u4EF6\u901A\u77E5\n...\n```\n\n## \u6700\u4F73\u5B9E\u8DF5\n\n### \u7B80\u5355\u4F18\u5148\n- \u9ED8\u8BA4\u65B0\u589E\u4EE3\u7801 <100 \u884C\n- \u5355\u6587\u4EF6\u5B9E\u73B0\uFF0C\u76F4\u5230\u8BC1\u660E\u4E0D\u8DB3\n- \u907F\u514D\u6CA1\u6709\u660E\u786E\u7406\u7531\u7684\u6846\u67B6\n- \u9009\u62E9\u65E0\u804A\u4F46\u7ECF\u8FC7\u9A8C\u8BC1\u7684\u6A21\u5F0F\n\n### \u590D\u6742\u6027\u89E6\u53D1\u6761\u4EF6\n\u4EC5\u5728\u4EE5\u4E0B\u60C5\u51B5\u4E0B\u6DFB\u52A0\u590D\u6742\u6027\uFF1A\n- \u6027\u80FD\u6570\u636E\u8868\u660E\u5F53\u524D\u89E3\u51B3\u65B9\u6848\u592A\u6162\n- \u5177\u4F53\u7684\u89C4\u6A21\u8981\u6C42\uFF08>1000 \u7528\u6237\uFF0C>100MB \u6570\u636E\uFF09\n- \u591A\u4E2A\u7ECF\u8FC7\u9A8C\u8BC1\u7684\u7528\u4F8B\u9700\u8981\u62BD\u8C61\n\n### \u6E05\u6670\u7684\u5F15\u7528\n- \u4F7F\u7528 `file.ts:42` \u683C\u5F0F\u8868\u793A\u4EE3\u7801\u4F4D\u7F6E\n- \u5C06\u89C4\u8303\u5F15\u7528\u4E3A `specs/auth/spec.md`\n- \u94FE\u63A5\u76F8\u5173\u53D8\u66F4\u548C PR\n\n### \u529F\u80FD\u547D\u540D\n- \u4F7F\u7528\u52A8\u8BCD-\u540D\u8BCD\uFF1A`user-auth`\u3001`payment-capture`\n- \u6BCF\u4E2A\u529F\u80FD\u5355\u4E00\u76EE\u7684\n- 10 \u5206\u949F\u53EF\u7406\u89E3\u6027\u89C4\u5219\n- \u5982\u679C\u63CF\u8FF0\u9700\u8981\"AND\"\uFF0C\u5219\u62C6\u5206\n\n### \u53D8\u66F4 ID \u547D\u540D\n- \u4F7F\u7528 kebab-case\uFF0C\u7B80\u77ED\u4E14\u63CF\u8FF0\u6027\uFF1A`add-two-factor-auth`\n- \u4F18\u5148\u4F7F\u7528\u52A8\u8BCD\u5F00\u5934\u7684\u524D\u7F00\uFF1A`add-`\u3001`update-`\u3001`remove-`\u3001`refactor-`\n- \u786E\u4FDD\u552F\u4E00\u6027\uFF1B\u5982\u679C\u5DF2\u4F7F\u7528\uFF0C\u8FFD\u52A0 `-2`\u3001`-3` \u7B49\n\n## \u5DE5\u5177\u9009\u62E9\u6307\u5357\n\n| \u4EFB\u52A1 | \u5DE5\u5177 | \u539F\u56E0 |\n|------|------|-----|\n| \u6309\u6A21\u5F0F\u67E5\u627E\u6587\u4EF6 | Glob | \u5FEB\u901F\u6A21\u5F0F\u5339\u914D |\n| \u641C\u7D22\u4EE3\u7801\u5185\u5BB9 | Grep | \u4F18\u5316\u7684\u6B63\u5219\u8868\u8FBE\u5F0F\u641C\u7D22 |\n| \u8BFB\u53D6\u7279\u5B9A\u6587\u4EF6 | Read | \u76F4\u63A5\u6587\u4EF6\u8BBF\u95EE |\n| \u63A2\u7D22\u672A\u77E5\u8303\u56F4 | Task | \u591A\u6B65\u9AA4\u8C03\u67E5 |\n\n## \u9519\u8BEF\u6062\u590D\n\n### \u53D8\u66F4\u51B2\u7A81\n1. \u8FD0\u884C `zhuanspec list` \u67E5\u770B\u6D3B\u52A8\u53D8\u66F4\n2. \u68C0\u67E5\u91CD\u53E0\u7684\u89C4\u8303\n3. \u4E0E\u53D8\u66F4\u6240\u6709\u8005\u534F\u8C03\n4. \u8003\u8651\u5408\u5E76\u63D0\u6848\n\n### \u9A8C\u8BC1\u5931\u8D25\n1. \u4F7F\u7528 `--strict` \u6807\u5FD7\u8FD0\u884C\n2. \u68C0\u67E5 JSON \u8F93\u51FA\u4EE5\u83B7\u53D6\u8BE6\u7EC6\u4FE1\u606F\n3. \u9A8C\u8BC1\u89C4\u8303\u6587\u4EF6\u683C\u5F0F\n4. \u786E\u4FDD\u573A\u666F\u683C\u5F0F\u6B63\u786E\n\n### \u7F3A\u5C11\u4E0A\u4E0B\u6587\n1. \u9996\u5148\u9605\u8BFB project.md\n2. \u68C0\u67E5\u76F8\u5173\u89C4\u8303\n3. \u5BA1\u67E5\u6700\u8FD1\u7684\u5F52\u6863\n4. \u8BF7\u6C42\u6F84\u6E05\n\n## \u5FEB\u901F\u53C2\u8003\n\n### \u9636\u6BB5\u6307\u793A\u5668\n- `changes/` - \u5DF2\u63D0\u8BAE\uFF0C\u5C1A\u672A\u6784\u5EFA\n- `specs/` - \u5DF2\u6784\u5EFA\u5E76\u90E8\u7F72\n- `archive/` - \u5DF2\u5B8C\u6210\u7684\u53D8\u66F4\n\n### \u6587\u4EF6\u7528\u9014\n- `proposal.md` - \u539F\u56E0\u548C\u5185\u5BB9\n- `tasks.md` - \u5B9E\u65BD\u6B65\u9AA4\n- `design.md` - \u6280\u672F\u51B3\u7B56\n- `spec.md` - \u8981\u6C42\u548C\u884C\u4E3A\n\n### CLI \u8981\u70B9\n```bash\nzhuanspec list # \u6B63\u5728\u8FDB\u884C\u4EC0\u4E48\uFF1F\nzhuanspec show [item] # \u67E5\u770B\u8BE6\u7EC6\u4FE1\u606F\nzhuanspec validate --strict # \u662F\u5426\u6B63\u786E\uFF1F\nzhuanspec archive <change-id> [--yes|-y] # \u6807\u8BB0\u5B8C\u6210\uFF08\u6DFB\u52A0 --yes \u7528\u4E8E\u81EA\u52A8\u5316\uFF09\n```\n\n\u8BB0\u4F4F\uFF1A\u89C4\u8303\u662F\u771F\u76F8\u3002\u53D8\u66F4\u662F\u63D0\u6848\u3002\u4FDD\u6301\u5B83\u4EEC\u540C\u6B65\u3002\n\n## \u4EFB\u52A1\u6267\u884C\u7F16\u6392\n\n\u5F53 apply \u6307\u4EE4\u4E2D\u5305\u542B `<execution_plan>`/task.md\u4E2D\u5305\u542B `@depends` \u65F6\uFF0C\u5FC5\u987B\u6309\u4EE5\u4E0B\u7B56\u7565\u6267\u884C\u4EFB\u52A1\uFF0C\u800C\u975E\u987A\u5E8F\u9010\u4E00\u6267\u884C\u3002\n\n### \u8C03\u5EA6\u89C4\u5219\n\n1. **\u6309 wave \u7F16\u53F7\u4ECE\u5C0F\u5230\u5927**\u4F9D\u6B21\u6267\u884C\uFF0Cwave \u4E4B\u95F4\u4E25\u683C\u4E32\u884C\n2. **\u540C\u4E00 wave \u5185\u7684\u591A\u4E2A task**\uFF1A\u4E3A\u6BCF\u4E2A task \u542F\u52A8\u72EC\u7ACB\u7684 subagent\uFF08Coding \u7C7B\u578B\uFF09\uFF0C\u4F46**\u6700\u5927\u5E76\u884C\u5EA6\u9650\u5236\u4E3A 3 \u4E2A subagent**\n3. **\u8D85\u8FC7 3 \u4E2A\u4EFB\u52A1\u7684 Wave**\uFF1A\u6309 batch \u62C6\u5206\u6267\u884C\uFF0C\u6BCF\u6279\u6700\u591A 3 \u4E2A subagent \u5E76\u884C\uFF0Cbatch \u95F4\u4E32\u884C\u7B49\u5F85\n4. **\u7B49\u5F85\u672C wave \u6240\u6709 subagent \u5B8C\u6210\u540E**\uFF0C\u624D\u542F\u52A8\u4E0B\u4E00 wave\n5. \u540C\u4E00 wave \u5185\u4EC5\u6709\u4E00\u4E2A task \u65F6\uFF0C\u542F\u52A8\u5355\u4E2A subagent \u6267\u884C\n6. **\u53C2\u8003 `<scheduling_summary>` \u4E2D\u7684\u5177\u4F53\u8C03\u5EA6\u6307\u4EE4**\uFF0C\u660E\u786E\u6BCF\u4E2A wave \u9700\u8981\u542F\u52A8\u7684 subagent \u6570\u91CF\u548C\u6267\u884C\u65B9\u5F0F\n7. **\u7F16\u8BD1\u5931\u8D25\u5904\u7406**\uFF1A\u5E76\u884C\u4EFB\u52A1\u7F16\u8BD1\u5931\u8D25\u65F6\uFF0C\u5148\u5C1D\u8BD5\u4FEE\u590D\uFF0C\u65E0\u6CD5\u4FEE\u590D\u5219\u6807\u8BB0\u4E3A BLOCKED\uFF0C\u7EE7\u7EED\u6267\u884C\u540C Wave \u5176\u4ED6\u4EFB\u52A1\n8. **Wave \u5B8C\u6210\u540E\u96C6\u6210\u6D4B\u8BD5**\uFF1A\u6BCF\u4E2A Wave \u5168\u90E8\u4EFB\u52A1\u5904\u7406\u5B8C\u6210\u540E\uFF0C\u8FDB\u5165\u96C6\u6210\u6D4B\u8BD5\u9636\u6BB5\uFF08\u8BE6\u89C1\u300CWave \u96C6\u6210\u9A8C\u8BC1\u300D\u7AE0\u8282\uFF09\n\n### \u8C03\u5EA6\u6307\u4EE4\u683C\u5F0F\n\n\u6267\u884C\u8BA1\u5212\u7684 `<wave>` \u5143\u7D20\u5305\u542B\u4EE5\u4E0B\u5C5E\u6027\u7528\u4E8E\u6307\u5BFC subagent \u8C03\u5EA6\uFF1A\n- `subagent_count`\uFF1A\u8BE5\u6CE2\u6B21\u9700\u8981\u542F\u52A8\u7684 subagent \u6570\u91CF\uFF08\u7B49\u4E8E wave \u5185\u7684\u4EFB\u52A1\u6570\uFF09\n- `execution_mode`\uFF1A\u6267\u884C\u6A21\u5F0F\uFF0C`parallel`\uFF08\u5E76\u884C\uFF09\u6216 `serial`\uFF08\u4E32\u884C\uFF09\n- `max_concurrency`\uFF1A\u6700\u5927\u5E76\u884C\u5EA6\u9650\u5236\uFF08\u9ED8\u8BA4 3\uFF09\n\n\u5F53 Wave \u5185\u4EFB\u52A1\u6570\u8D85\u8FC7 `max_concurrency` \u65F6\uFF0C`<wave>` \u5143\u7D20\u5305\u542B `<batch>` \u5B50\u5143\u7D20\uFF1A\n- `<batch number=\"1\" subagent_count=\"3\">` \u2014 \u6BCF\u6279\u6700\u591A 3 \u4E2A subagent \u5E76\u884C\n- batch \u4E4B\u95F4\u4E32\u884C\u6267\u884C\uFF0C\u524D\u4E00 batch \u5168\u90E8\u5B8C\u6210\u540E\u624D\u542F\u52A8\u4E0B\u4E00 batch\n\n`<scheduling_summary>` \u63D0\u4F9B\u4EBA\u7C7B\u53EF\u8BFB\u7684\u8C03\u5EA6\u6458\u8981\uFF0C\u683C\u5F0F\u5982\u4E0B\uFF1A\n```\nWave 1 \u2192 \u542F\u52A8 1 \u4E2A subagent \u6267\u884C\u8BE5\u6CE2\u6B21\u7684\u5355\u4E2A\u4EFB\u52A1\nWave 2 \u2192 \u542F\u52A8 1 \u4E2A subagent \u6267\u884C\u8BE5\u6CE2\u6B21\u7684\u5355\u4E2A\u4EFB\u52A1\nWave 3 \u2192 \u542F\u52A8 2 \u4E2A subagent \u5E76\u884C\u6267\u884C\u8BE5\u6CE2\u6B21\u7684 2 \u4E2A\u4EFB\u52A1\n```\n\nAI \u52A9\u624B\u5728\u6267\u884C\u65F6**\u5FC5\u987B**\u6309\u7167 `<scheduling_summary>` \u4E2D\u7684\u6307\u4EE4\u542F\u52A8\u5BF9\u5E94\u6570\u91CF\u7684 subagent\u3002\n\n### Subagent \u4E0A\u4E0B\u6587\u9694\u79BB\n\n\u6BCF\u4E2A subagent \u7684 prompt \u4E2D**\u4EC5\u5305\u542B**\uFF1A\n- \u5F53\u524D task \u7684\u63CF\u8FF0\u548C\u9A8C\u6536\u6807\u51C6\n- \u5F53\u524D task \u5173\u8054\u7684 `@skill` \u5185\u5BB9\uFF08\u901A\u8FC7 skill \u540D\u79F0\u89E6\u53D1\u52A0\u8F7D\uFF09\n- \u76F8\u5173\u7684 spec \u6587\u4EF6\u8DEF\u5F84\u548C\u5185\u5BB9\uFF08\u4EC5\u9650\u8BE5 task \u6D89\u53CA\u7684\u90E8\u5206\uFF09\n- \u524D\u5E8F wave \u7684\u5B8C\u6210\u6458\u8981\uFF08\u800C\u975E\u5B8C\u6574\u8F93\u51FA\uFF09\n\n**\u7981\u6B62**\u5411 subagent \u6CE8\u5165\uFF1A\n- \u5176\u4ED6 wave \u7684 task \u8BE6\u60C5\n- \u4E0D\u76F8\u5173\u7684 skill \u5185\u5BB9\n- \u5176\u4ED6 subagent \u7684\u5B8C\u6574\u8F93\u51FA\n\n### \u5B8C\u6210\u540C\u6B65\n\n- \u6BCF\u4E2A subagent \u5B8C\u6210\u540E\uFF0C\u63D0\u53D6\u7B80\u77ED\u7684**\u5B8C\u6210\u6458\u8981**\uFF08\u4FEE\u6539\u4E86\u54EA\u4E9B\u6587\u4EF6\u3001\u5173\u952E\u53D8\u66F4\u70B9\uFF09\n- \u5C06\u6458\u8981\u4F20\u9012\u7ED9\u540E\u7EED wave \u7684 subagent \u4F5C\u4E3A\u4E0A\u4E0B\u6587\n- \u5728 `tasks.md` \u4E2D\u5C06\u5BF9\u5E94\u4EFB\u52A1\u6807\u8BB0\u4E3A `[x]`\n\n### \u964D\u7EA7\u7B56\u7565\n\n\u5F53 AI \u5E73\u53F0\u4E0D\u652F\u6301 subagent \u65F6\uFF0C\u6309\u4EE5\u4E0B\u964D\u7EA7\u7B56\u7565\u6267\u884C\uFF1A\n1. \u4ECD\u6309 wave \u987A\u5E8F\u6267\u884C\u4EFB\u52A1\n2. \u6BCF\u4E2A task \u6267\u884C\u524D\uFF0C\u6E05\u7406\u4E0D\u76F8\u5173\u7684 skill \u4E0A\u4E0B\u6587\n3. \u6BCF\u4E2A task \u6267\u884C\u540E\uFF0C\u4EC5\u4FDD\u7559\u5B8C\u6210\u6458\u8981\uFF0C\u907F\u514D\u4E0A\u4E0B\u6587\u7D2F\u79EF\u81A8\u80C0\n\n---\n\n## Apply \u9636\u6BB5\u4E13\u7528 Agent\n\nApply \u9636\u6BB5\u4F7F\u7528\u4E24\u79CD\u4E13\u7528 Agent \u7C7B\u578B\u6267\u884C\u4EE3\u7801\u5B9E\u65BD\u4EFB\u52A1\uFF0C\u7531\u7F16\u6392 Agent\uFF08\u4E3B Agent\uFF09\u6839\u636E\u4EFB\u52A1\u6807\u6CE8\u9009\u62E9\u3002\n\n**Agent \u5B9A\u4E49\u6587\u4EF6\u8DEF\u5F84**\uFF08\u4F9B Claude/Cursor \u7B49\u5DE5\u5177\u6CE8\u518C\uFF09\uFF1A\n- `agents/zhuanspec/apply-agent.md` - \u666E\u901A\u4EE3\u7801\u5B9E\u65BD Agent\n- `agents/zhuanspec/tdd-apply-agent.md` - TDD \u6A21\u5F0F Agent\n\n### Agent \u7C7B\u578B\u9009\u62E9\u89C4\u5219\uFF08\u53CC\u6761\u4EF6\u5224\u5B9A\uFF09\n\n\u7F16\u6392 Agent \u5728\u4E3A\u6BCF\u4E2A\u4EFB\u52A1\u542F\u52A8 subagent \u524D\uFF0CMUST \u4E25\u683C\u6267\u884C\u4EE5\u4E0B\u53CC\u6761\u4EF6\u5224\u5B9A\uFF1A\n\n| \u6761\u4EF6 1\uFF1A@test-case | \u6761\u4EF6 2\uFF1A\u4EFB\u52A1\u7C7B\u578B | Agent \u7C7B\u578B | \u5B9A\u4E49\u6587\u4EF6 |\n|------|------|-----------|--------|\n| \u65E0 `@test-case` | \u2014\uFF08\u8DF3\u8FC7\uFF09 | `applyAgent` | `agents/zhuanspec/apply-agent.md` |\n| \u6709 `@test-case:TC-XXX` | \u9002\u5408 TDD\uFF08\u540E\u7AEF\u4E1A\u52A1\u903B\u8F91/\u63A5\u53E3\u5B9E\u73B0/\u590D\u6742\u67E5\u8BE2\uFF1B\u524D\u7AEF\u7EC4\u4EF6\u4EA4\u4E92/Hooks/\u8868\u5355\u6821\u9A8C/utils/services \u7B49\u53EF\u6D4B\u884C\u4E3A\uFF09 | `tddApplyAgent` | `agents/zhuanspec/tdd-apply-agent.md` |\n| \u6709 `@test-case:TC-XXX` | \u4E0D\u9002\u5408 TDD\uFF08DDL/\u914D\u7F6E/DTO/ES\u7D22\u5F15/Mapper XML/\u524D\u7AEF\u7EAF\u9759\u6001\u5C55\u793A\uFF09 | `applyAgent`\uFF08\u964D\u7EA7\uFF09 | `agents/zhuanspec/apply-agent.md` |\n\n**\u5224\u5B9A\u539F\u5219**\uFF1A\u6761\u4EF6 2 \u4F9D\u636E**\u662F\u5426\u5B58\u5728\u53EF\u6D4B\u8BD5\u884C\u4E3A**\uFF0C\u4E0E\u6280\u672F\u6808/\u524D\u540E\u7AEF\u65E0\u5173\u3002\u524D\u7AEF\u53EA\u8981\u5305\u542B\u72B6\u6001\u3001\u4EA4\u4E92\u3001Hooks\u3001\u8868\u5355\u6821\u9A8C\u3001utils\u3001services \u7B49\u53EF\u6D4B\u884C\u4E3A\u5373\u5C5E\u4E8E\u9002\u5408 TDD\u3002\n\n**\u4E0D\u9002\u5408 TDD \u7684\u4EFB\u52A1\u7C7B\u578B**\uFF1A\u5EFA\u8868/DDL\uFF08SQL \u811A\u672C\uFF09\u3001\u914D\u7F6E\u53D8\u66F4\uFF08yaml/properties/xml\uFF09\u3001\u7EAF DTO/Entity/Enum \u5B9A\u4E49\u3001ES \u7D22\u5F15\u6A21\u677F/JSON \u8D44\u6E90\u6587\u4EF6\u3001\u524D\u7AEF\u7EAF\u9759\u6001\u5C55\u793A\u7EC4\u4EF6\uFF08\u65E0 state / \u65E0\u4E8B\u4EF6 / \u65E0\u6570\u636E\u5904\u7406\uFF09\u3001Mapper XML/DAO \u63A5\u53E3\u5B9A\u4E49\u3002\n\n**\u9002\u5408 TDD \u7684\u524D\u7AEF\u4EFB\u52A1\u7C7B\u578B\uFF08\u8865\u5145\uFF09**\uFF1A\u7EC4\u4EF6\u4EA4\u4E92\u4E0E\u72B6\u6001\u7BA1\u7406\u3001\u81EA\u5B9A\u4E49 Hooks\u3001\u8868\u5355\u6821\u9A8C\u4E0E\u53D7\u63A7\u903B\u8F91\u3001\u524D\u7AEF utils/services\u3001store/reducer/selector\u3001\u6570\u636E\u683C\u5F0F\u5316\u4E0E\u7BA1\u9053\u3002\u524D\u7AEF\u542B\u72B6\u6001/\u4EA4\u4E92/Hooks/\u8868\u5355\u6821\u9A8C/utils/services \u7684\u4EFB\u52A1\u5C5E\u4E8E\u9002\u5408 TDD\uFF0C\u4E0D\u5F97\u4EE5\"\u524D\u7AEF\"\u4E3A\u7531\u964D\u7EA7\u3002\n\n**\u51B3\u7B56\u8BB0\u5F55\uFF08MANDATORY\uFF09**\uFF1A\u7F16\u6392 Agent MUST \u5728\u542F\u52A8\u6BCF\u4E2A subagent \u7684 prompt \u5F00\u5934\u6CE8\u5165 Agent \u9009\u62E9\u51B3\u7B56\uFF08Agent \u7C7B\u578B/@test-case \u6807\u6CE8/\u4EFB\u52A1\u7C7B\u578B\u5224\u5B9A/TDD \u9002\u7528\u6027\uFF09\uFF0Csubagent MUST \u5C06\u6B64\u51B3\u7B56\u4FE1\u606F\u539F\u6837\u5199\u5165\u4EFB\u52A1\u62A5\u544A\u3002\n\n### Agent \u4F7F\u7528\u65B9\u5F0F\n\n\u7F16\u6392 Agent\uFF08\u4E3B Agent\uFF09\u5728 Wave \u5E76\u884C\u6267\u884C\u65F6\uFF1A\n\n1. **\u9009\u62E9 Agent**\uFF1A\u6839\u636E\u4EFB\u52A1\u7684 `@test-case` \u6807\u6CE8\u548C\u4EFB\u52A1\u7C7B\u578B\uFF0C\u6309\u53CC\u6761\u4EF6\u89C4\u5219\u9009\u62E9\u5BF9\u5E94 Agent \u7C7B\u578B\n2. **\u52A0\u8F7D Agent \u5B9A\u4E49**\uFF1A\u8BFB\u53D6\u5BF9\u5E94 Agent \u5B9A\u4E49\u6587\u4EF6\u83B7\u53D6\u5B8C\u6574\u6307\u4EE4\n3. **\u6CE8\u5165\u4E0A\u4E0B\u6587**\uFF1A\n - \u5F53\u524D task \u7684\u5B8C\u6574\u63CF\u8FF0\n - \u76F8\u5173 spec \u6587\u4EF6\u5185\u5BB9\n - Rules \u548C Knowledge\uFF08\u8E29\u5751\u8B66\u544A\u3001\u6700\u4F73\u5B9E\u8DF5\uFF09\n - \u524D\u5E8F wave \u5B8C\u6210\u6458\u8981\n4. **\u542F\u52A8 Subagent**\uFF1A\u4F7F\u7528 Agent tool \u542F\u52A8 subagent\n5. **\u5904\u7406\u72B6\u6001\u62A5\u544A**\uFF1A\u6839\u636E Agent \u8FD4\u56DE\u7684 Status \u6267\u884C\u540E\u7EED\u64CD\u4F5C\n\n### Rules \u548C Knowledge \u6CE8\u5165\uFF08\u5173\u952E\uFF09\n\n\u7F16\u6392 Agent MUST \u5728\u6BCF\u4E2A subagent prompt \u4E2D\u6CE8\u5165\u4EE5\u4E0B\u4E0A\u4E0B\u6587\uFF1A\n\n**Rules \u52A0\u8F7D**\uFF08\u6839\u636E @skill \u9009\u62E9\u6027\u6CE8\u5165\uFF09\uFF1A\n- `api-design.md` - \u524D\u540E\u7AEF\u63A5\u53E3\u8BBE\u8BA1\u89C4\u8303\uFF08\u6D89\u53CA Controller/API \u65F6\uFF09\n- `dao-standards.md` - Java DAO \u5C42\u89C4\u8303\uFF08\u6D89\u53CA DAO \u65F6\uFF09\n- `coding-standards.md` - KF \u540E\u7AEF\u7F16\u7801\u89C4\u5219\uFF08\u6D89\u53CA Java \u4EE3\u7801\u65F6\uFF09\n- `java-db-schema-standards.md` - MySQL \u6570\u636E\u5E93\u5EFA\u8868\u6539\u8868\u89C4\u8303\n\n**Knowledge \u52A0\u8F7D**\uFF08MUST \u59CB\u7EC8\u6CE8\u5165\uFF09\uFF1A\n- `knowledge/index.md` - \u77E5\u8BC6\u7D22\u5F15\u6458\u8981\n- \u76F8\u5173 `best-practices/` \u5185\u5BB9\uFF08\u6700\u4F73\u5B9E\u8DF5\uFF09\n- \u76F8\u5173 `troubleshooting/` \u5185\u5BB9\uFF08\u8E29\u5751\u8B66\u544A\uFF09\n\n### \u72B6\u6001\u5904\u7406\u7B56\u7565\n\n| Status | \u5904\u7406\u65B9\u5F0F |\n|--------|--------|\n| **DONE** | \u7EE7\u7EED\u4E0B\u4E00\u4EFB\u52A1\uFF0C\u8BB0\u5F55\u5B8C\u6210\u6458\u8981 |\n| **DONE_WITH_CONCERNS** | \u8BC4\u4F30 concerns\uFF0C\u6B63\u786E\u6027\u95EE\u9898\u5148\u4FEE\u590D\uFF0C\u89C2\u5BDF\u6027\u95EE\u9898\u8BB0\u5F55\u540E\u7EE7\u7EED\u3002**MUST \u5C06 concerns \u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\u7684 Concerns \u8FFD\u8E2A\u7AE0\u8282** |\n| **BLOCKED** | \u8BC4\u4F30 blocker \u7C7B\u578B\uFF1A\u63D0\u4F9B\u4E0A\u4E0B\u6587/\u6362\u66F4\u5F3A\u6A21\u578B/\u62C6\u5206\u4EFB\u52A1/\u4FEE\u6539\u8BA1\u5212\u3002**MUST \u5C06 blocker \u539F\u56E0\u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A** |\n| **NEEDS_CONTEXT** | \u63D0\u4F9B\u7F3A\u5931\u4FE1\u606F\u5E76\u91CD\u65B0\u542F\u52A8 subagent |\n\n### Subagent \u4E0A\u4E0B\u6587\u9694\u79BB\u89C4\u5219\n\n**\u5FC5\u987B\u6CE8\u5165**\uFF1A\n- \u5F53\u524D task \u7684\u5B8C\u6574\u63CF\u8FF0\u548C\u9A8C\u6536\u6807\u51C6\n- \u5F53\u524D task \u5173\u8054\u7684 `@skill` \u5185\u5BB9\n- \u76F8\u5173\u7684 spec \u6587\u4EF6\u8DEF\u5F84\u548C\u5185\u5BB9\uFF08\u4EC5\u9650\u8BE5 task \u6D89\u53CA\u7684\u90E8\u5206\uFF09\n- \u524D\u5E8F wave \u7684\u5B8C\u6210\u6458\u8981\uFF08\u800C\u975E\u5B8C\u6574\u8F93\u51FA\uFF09\n- Rules \u548C Knowledge \u4E0A\u4E0B\u6587\n- **\u82E5 task \u6709 `@test-case` \u6807\u6CE8**\uFF1A\u4ECE `test-cases.md` \u4E2D\u63D0\u53D6\u5BF9\u5E94 TC-XXX \u7684\u5B8C\u6574\u5185\u5BB9\uFF08\u542B @layer\u3001BE \u9A8C\u6536\u3001FE \u9A8C\u6536\uFF09\uFF0C\u6CE8\u5165\u7ED9 TDD Apply Agent\n- **design.md \u7684\u5C42\u95F4\u4F9D\u8D56\u89C4\u5219 + \u67B6\u6784\u7EA6\u675F**\uFF08\u6240\u6709 task \u5FC5\u987B\u6CE8\u5165\uFF0C\u786E\u4FDD Agent \u4E86\u89E3\u7981\u6B62\u7684\u8DE8\u5C42\u8C03\u7528\uFF09\n\n**\u7981\u6B62\u6CE8\u5165**\uFF1A\n- \u5176\u4ED6 wave \u7684 task \u8BE6\u60C5\n- \u4E0D\u76F8\u5173\u7684 skill \u5185\u5BB9\n- \u5176\u4ED6 subagent \u7684\u5B8C\u6574\u8F93\u51FA\n\n## Skill \u65AD\u6D41\u6062\u590D\n\n\u5982\u679C\u5728\u6267\u884C @skill \u8FC7\u7A0B\u4E2D\u9047\u5230\u5F02\u5E38\uFF1A\n1. \u8BB0\u5F55\u5F02\u5E38\u5230 progress.json \u7684 skillCalls\n2. \u6807\u8BB0 afterAction: 'skip-and-continue'\n3. \u7EE7\u7EED\u5F53\u524D\u4EFB\u52A1\u7684\u540E\u7EED\u5B9E\u65BD\u6B65\u9AA4\n4. \u5728\u4EFB\u52A1\u5B8C\u6210\u62A5\u544A\u4E2D\u6807\u6CE8 \"Skill [name] skipped due to [reason]\"\n\n\u26A0\uFE0F Skill \u662F\u8F85\u52A9\u5DE5\u5177\uFF0C\u4E0D\u5E94\u963B\u65AD\u4E3B\u6D41\u7A0B\u3002\u4EFB\u4F55 Skill \u5931\u8D25\u90FD\u4E0D\u5E94\u5BFC\u81F4\u4EFB\u52A1\u5931\u8D25\u3002\n\n## Wave \u96C6\u6210\u9A8C\u8BC1\uFF08MANDATORY GATE\uFF09\n\n\u6BCF\u4E2A Wave \u5168\u90E8 Subagent \u5B8C\u6210\u540E\uFF0C\u7F16\u6392 Agent **\u5FC5\u987B**\u6267\u884C\u96C6\u6210\u9A8C\u8BC1\uFF0C**\u4E0D\u5F97\u8DF3\u8FC7**\uFF1A\n\n### A. \u7F16\u8BD1\u5931\u8D25\u5904\u7406\uFF08\u5E76\u884C\u6267\u884C\u8FC7\u7A0B\u4E2D\uFF09\n- \u5E76\u884C\u4EFB\u52A1\u6267\u884C\u4E2D\u9047\u5230\u7F16\u8BD1\u5931\u8D25\u65F6\uFF0C\u9996\u5148\u5C1D\u8BD5\u89E3\u51B3\u7F16\u8BD1\u95EE\u9898\uFF08\u5206\u6790\u9519\u8BEF\u3001\u81EA\u52A8\u4FEE\u590D\uFF09\n- \u4FEE\u590D\u6210\u529F \u2192 \u6807\u8BB0\u4E3A COMPLETED\uFF0C\u7EE7\u7EED\u6267\u884C\n- \u4FEE\u590D\u5931\u8D25 \u2192 \u6807\u8BB0\u4E3A BLOCKED\uFF0C\u7EE7\u7EED\u6267\u884C\u540C Wave \u5176\u4ED6\u4EFB\u52A1\n- \u540C Wave \u6240\u6709\u4EFB\u52A1\uFF08\u542B\u963B\u585E\u4EFB\u52A1\uFF09\u5168\u90E8\u5904\u7406\u5B8C\u6210\u540E \u2192 \u8FDB\u5165\u96C6\u6210\u6D4B\u8BD5\u9636\u6BB5\n\n### B. \u96C6\u6210\u6D4B\u8BD5\u9636\u6BB5\uFF08\u540C Wave \u6240\u6709\u4EFB\u52A1\u5904\u7406\u5B8C\u6210\u540E\uFF0CMANDATORY\uFF09\n1. \u7F16\u8BD1\u68C0\u67E5\uFF08`mvn compile -q` \u6216 `tsc --noEmit`\uFF09\n2. \u5BFC\u5165\u89E3\u6790\u68C0\u67E5\uFF08\u672C Wave \u65B0\u589E import \u662F\u5426\u53EF\u89E3\u6790\uFF09\n3. \u63A5\u53E3\u7B7E\u540D\u4E00\u81F4\u6027\uFF08\u8C03\u7528\u65B9\u53C2\u6570\u4E0E\u5B9A\u4E49\u5339\u914D\uFF09\n4. **Concerns/Blockers \u626B\u63CF**\uFF1A\n - \u626B\u63CF\u672C Wave \u6240\u6709\u4EFB\u52A1\u62A5\u544A\uFF08reports/task-*.md\uFF09\n - \u63D0\u53D6\u72B6\u6001\u4E3A DONE_WITH_CONCERNS \u6216 BLOCKED \u7684\u4EFB\u52A1\n - \u5C06\u5176 concerns/blocker \u539F\u56E0\u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\u7684 Concerns \u8FFD\u8E2A\u7AE0\u8282\n4.1. **\u5916\u90E8\u4F9D\u8D56\u5168\u91CF\u626B\u63CF\u4E0E\u515C\u5E95\u95ED\u73AF\uFF08MANDATORY\uFF0C\u4E0D\u5141\u8BB8\u9057\u6F0F\uFF09**\uFF1A\n \u63D0\u6848\u9636\u6BB5 DESIGN-EXTERNAL-DEPENDENCY-GATE \u7684\u96C6\u6210\u9A8C\u8BC1\u5151\u73B0\u9A8C\u6536\u70B9\uFF0C\u5FC5\u987B\u5B8C\u6574\u4F9D\u5E8F\u6267\u884C\uFF1A\n - **\u4E09\u7C7B\u6765\u6E90\u5168\u91CF\u91C7\u96C6**\uFF1A\u540C\u65F6\u8981\u6C47\u603B\u300A1\u300B\u4ECE design.md \u300C\u5916\u90E8\u4F9D\u8D56\u53EF\u7528\u6027\u77E9\u9635\u300D6 \u5217\u8868\u63D0\u53D6\u539F\u59CB\u6761\u76EE\u30012 \u4ECE\u672C Wave \u4EFB\u52A1\u62A5\u544A\u7684 concern/blocker \u6587\u672C\u4E2D\u6293\u53D6\u5916\u90E8\u4F9D\u8D56\u5173\u952E\u8BCD\u30013 \u5BF9 Wave \u65B0\u589E/\u4FEE\u6539\u6E90\u7801\u505A\u9759\u6001\u626B\u63CF\uFF08`@MessageConsumer`/`RedisTemplate`/`@ApolloJsonValue`/`@XxlJob`/`@ServiceContract` \u7B49\uFF09\n - **8 \u6876\u5206\u7C7B\uFF0C\u6BCF\u6876\u90FD\u5FC5\u987B\u7ED9\u7ED3\u8BBA**\uFF1AES / MQ / Redis / SCF-RPC / HTTP / OSS / Config / Job\uFF1B\u6CA1\u6709\u9879\u5219\u5199 `\u2014` \u5E76\u6CE8\u660E\u201C\u5DF2\u786E\u8BA4\u65E0\u4F9D\u8D56\u201D\uFF0C\u7981\u6B62\u8DF3\u8FC7\u6876\n - **\u72B6\u6001\u4E0D\u660E\u786E\u7684\u6876\u5F3A\u5236 `AskQuestion`**\uFF1A\u5F53 design.md \u77E9\u9635\u6709 \u26A0\uFE0F/\u274C \u4ECD\u88AB Wave \u6D89\u53CA\u3001\u4EE3\u7801\u626B\u63CF\u51FA\u65B0\u4F9D\u8D56\u3001concern \u660E\u786E\u8BF4\u201C\u5360\u4F4D/\u9ED8\u8BA4\u515C\u5E95/\u5F85\u6838\u5B9E\u201D\u3001\u6216\u6876\u7A7A\u4F46\u4EE3\u7801\u6D89\u53CA\u8BE5\u7C7B\u578B\u5173\u952E\u8BCD\uFF08\u4F9D\u8D56\u58F0\u660E\u9057\u6F0F\uFF09\u65F6\uFF0C**\u5FC5\u987B** \u4E00\u6B21\u6027\u6279\u91CF AskQuestion\uFF0C\u4E0D\u5141\u8BB8\u4EC5\u51ED\u201C\u4EFB\u52A1\u72B6\u6001\u4E3A DONE_WITH_CONCERNS + \u6709\u62A5\u544A\u201D\u5C31\u7B97\u95ED\u73AF\n - **\u5199\u56DE\u5BF9\u8D26\u8868**\uFF1A\u5C06\u7ED3\u679C\u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\u7684 **\u5916\u90E8\u4F9D\u8D56\u515C\u5E95\u5BF9\u8D26\u8868**\uFF085 \u5217\uFF1A\u6876 / \u4F9D\u8D56\u6761\u76EE / \u6765\u6E90 / \u89E3\u51B3\u72B6\u6001 / \u540E\u7EED\u52A8\u4F5C\uFF09\uFF1B\u2705+\u515C\u5E95 \u6761\u76EE\u5FC5\u987B\u540C\u6B65\u56DE\u5199 design.md \u77E9\u9635\uFF1B\u6876\u7ED3\u8BBA\u7F3A\u5931 \u2192 \u96C6\u6210\u62A5\u544A\u6574\u4F53\u72B6\u6001\u5F3A\u5236 FAIL\uFF0C\u963B\u65AD\u4E0B\u4E00 Wave\n - **\u5217\u51FA\u5F85\u91CD\u8DD1\u6E05\u5355**\uFF08MANDATORY\uFF09\uFF1A\u6F84\u6E05 \u2260 \u95ED\u73AF\u3002\u626B\u63CF\u672C Wave NEEDS_CONTEXT / BLOCKED \u4EFB\u52A1\uFF0C\u8BC6\u522B\u963B\u65AD\u539F\u56E0\u5DF2\u6F84\u6E05\u7684\u4EFB\u52A1\uFF0C\u5728\u96C6\u6210\u62A5\u544A\u4E2D\u65B0\u589E `## \uD83D\uDD01 \u5F85\u91CD\u8BD5\u4EFB\u52A1\u6E05\u5355` \u6BB5\uFF085 \u5217\uFF1A\u4EFB\u52A1ID / \u539F\u72B6\u6001 / \u963B\u65AD\u539F\u56E0 / \u5DF2\u6F84\u6E05\u4F9D\u8D56 / \u91CD\u8DD1\u6267\u884C\u65B9\uFF09\uFF1B\u7A7A\u5217\u4E5F\u987B\u663E\u5F0F\u5199 `\u2014 \u65E0\u9700\u91CD\u8DD1`\n5. **\u963B\u585E\u4EFB\u52A1\u91CD\u8BD5\uFF08BLOCKED \u222A NEEDS_CONTEXT \u5408\u5E76\u5904\u7406\uFF09**\uFF1A\n - \u91CD\u8BD5\u5BF9\u8C61\uFF1A\uFF081\uFF09\u7F16\u8BD1/\u6D4B\u8BD5\u5931\u8D25\u88AB\u6807 BLOCKED \u7684\u4EFB\u52A1\uFF1B\uFF082\uFF09\u5F85\u91CD\u8DD1\u6E05\u5355\u4E2D\u56E0\u5916\u90E8\u4F9D\u8D56\u5DF2\u6F84\u6E05\u800C\u89E3\u9501\u7684 NEEDS_CONTEXT / BLOCKED \u4EFB\u52A1\n - \u91CD\u8DD1\u524D\u786E\u8BA4 design.md \u77E9\u9635\u5DF2\u5199\u56DE\u6F84\u6E05\u7ED3\u679C\uFF1B\u91CD\u65B0\u542F\u52A8 subagent \u65F6\u5728 prompt \u4E2D\u663E\u5F0F\u6807\u6CE8 `Execution Mode = RETRY`\uFF0C\u5E76\u9644\u5E26\u4E0A\u6B21 concerns \u6458\u8981 + \u672C\u6B21\u5DF2\u6F84\u6E05\u4F9D\u8D56\u6761\u76EE + \u6700\u65B0\u77E9\u9635\u7247\u6BB5\n - \u91CD\u8BD5\u540E\u4ECD\u5931\u8D25 \u2192 \u4FDD\u7559 BLOCKED \u8BB0\u5F55\u5230\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A\uFF0C\u6574\u4F53\u72B6\u6001\u5F3A\u5236 FAIL\n5. **\u751F\u6210\u96C6\u6210\u6D4B\u8BD5\u62A5\u544A**\uFF08MANDATORY\uFF0C\u4E0D\u5F97\u8DF3\u8FC7\uFF09\uFF1A\n - \u62A5\u544A\u8DEF\u5F84\uFF1A`changes/<change-id>/reports/wave-{N}-integration-report.md`\n - \u8BB0\u5F55\u6240\u6709\u4EFB\u52A1\u6267\u884C\u7ED3\u679C\u3001\u7F16\u8BD1\u68C0\u67E5\u7ED3\u679C\u3001\u963B\u585E\u4EFB\u52A1\u91CD\u8BD5\u7ED3\u679C\n - **MUST \u5305\u542B Concerns \u8FFD\u8E2A\u7AE0\u8282**\uFF0C\u5217\u51FA\u6240\u6709 DONE_WITH_CONCERNS \u548C BLOCKED \u4EFB\u52A1\u53CA\u5176\u7591\u8651\n - \u6574\u4F53\u72B6\u6001\uFF1A\u6240\u6709\u68C0\u67E5\u901A\u8FC7\u4E14\u65E0\u672A\u89E3\u51B3\u7684\u963B\u585E\u4EFB\u52A1 \u2192 PASS\n - **\u672A\u751F\u6210\u62A5\u544A\u6587\u4EF6 \u2192 \u963B\u65AD\uFF0C\u4E0D\u5F97\u8FDB\u5165\u4E0B\u4E00 Wave**\n6. TC \u8986\u76D6\u5FEB\u7167\u5BF9\u6BD4\uFF08\u5982 tc-implementation-verify Skill \u5DF2\u5B89\u88C5\uFF09\uFF1A\n - \u751F\u6210 `metrics/tc-snapshot-wave-N.json`\n - \u4E0E\u524D\u4E00 Wave \u5FEB\u7167\u5BF9\u6BD4\n - \u56DE\u5F52\uFF08implemented \u2192 missing\uFF09\u2192 \u963B\u65AD\n - \u8FDB\u5C55\uFF08missing \u2192 implemented\uFF09\u2192 \u8BB0\u5F55\n\n\u6240\u6709\u4EFB\u52A1\u5B8C\u6210\uFF08\u542B\u963B\u585E\u4EFB\u52A1\u91CD\u8BD5\uFF09\u4E14\u9A8C\u8BC1\u901A\u8FC7 \u2192 \u8BB0\u5F55 Wave \u5B8C\u6210\u72B6\u6001\uFF0C\u8FDB\u5165\u4E0B\u4E00 Wave\u3002\n\u4EFB\u4F55\u68C0\u67E5\u5931\u8D25 \u2192 \u4FEE\u590D\u540E\u624D\u8FDB\u5165\u4E0B\u4E00 Wave\u3002\n\n## \u5168\u91CF TC \u5B9E\u73B0\u9A8C\u8BC1\uFF08\u5168\u90E8\u4EFB\u52A1\u5B8C\u6210\u540E\u3001\u5BA1\u67E5\u95E8\u7981\u524D\uFF09\n\n\u6240\u6709 Wave \u5B8C\u6210\u540E\uFF0C\u8FDB\u5165\u5BA1\u67E5\u95E8\u7981\u4E4B\u524D\uFF0C\u7F16\u6392 Agent \u6267\u884C\uFF1A\n1. \u68C0\u67E5\u63D0\u6848\u76EE\u5F55\u4E2D\u662F\u5426\u5B58\u5728 `test-cases.md`\n2. \u82E5\u5B58\u5728\uFF0C\u6309 `tc-implementation-verify` Skill \u5B9A\u4E49\u6267\u884C\uFF1A\n - \u89E3\u6790 `test-cases.md` \u4E2D\u6240\u6709 TC \u7684\u9A8C\u8BC1\u70B9\n - \u5728\u9879\u76EE\u6E90\u4EE3\u7801\u4E2D\u641C\u7D22\u9A8C\u8BC1\u70B9\u5BF9\u5E94\u5B9E\u73B0\uFF08\u6392\u9664\u6D4B\u8BD5\u4EE3\u7801\uFF09\n - \u5C06\u7ED3\u679C\u5199\u5165 `metrics/tc-verify-result.json`\n3. \u82E5\u5B58\u5728 `missing` \u6216 `partial` TC \u2192 \u6682\u505C\u5E76\u8F93\u51FA\u672A\u5B9E\u73B0\u6E05\u5355\n4. \u82E5\u4E0D\u5B58\u5728 `test-cases.md` \u2192 \u8DF3\u8FC7\uFF0C\u76F4\u63A5\u8FDB\u5165\u5BA1\u67E5\u95E8\u7981\u9636\u6BB5\n\n---\n\n### Rules \u548C Knowledge \u6CE8\u5165\u793A\u4F8B\n\n\u7F16\u6392 Agent \u5728\u542F\u52A8 subagent \u65F6\u7684 prompt \u793A\u4F8B\uFF1A\n\n```markdown\n## Rules \u548C Knowledge \u4E0A\u4E0B\u6587\uFF08\u5FC5\u987B\u9075\u5FAA\uFF09\n\n### \u76F8\u5173 Rules\n[\u6839\u636E @skill \u6807\u6CE8\u6CE8\u5165\u5BF9\u5E94 rules \u5185\u5BB9\uFF0C\u5982 api-design.md]\n\n### Knowledge - \u6700\u4F73\u5B9E\u8DF5\n[\u6CE8\u5165 best-practices \u5185\u5BB9]\n\n### Knowledge - \u8E29\u5751\u8B66\u544A\n[\u6CE8\u5165 troubleshooting \u5185\u5BB9\uFF0C\u5982\u6709]\n\n\u26A0\uFE0F **\u91CD\u8981**: \u4EE5\u4E0B rules \u548C knowledge MUST \u5728\u5B9E\u65BD\u8FC7\u7A0B\u4E2D\u9075\u5FAA\u3002\n\u5982\u6709\u4EFB\u4F55\u4E0D\u786E\u5B9A\uFF0C\u62A5\u544A NEEDS_CONTEXT \u72B6\u6001\u3002\n```\n";
|
|
2
2
|
//# sourceMappingURL=agents-template.d.ts.map
|
|
@@ -379,7 +379,7 @@ Wave: W/N | Phase: Apply
|
|
|
379
379
|
- **阶段职责要求**:Apply 阶段不生成单测文件;单测统一在 Review 阶段生成与验证。
|
|
380
380
|
5. **确认完成** - 在更新状态之前确保 \`tasks.md\` 中的每个项目都已完成
|
|
381
381
|
6. **更新清单** - 所有工作完成后,将每个任务设置为 \`- [x]\`
|
|
382
|
-
7.
|
|
382
|
+
7. **结束会话** - 所有任务完成后,输出完成摘要并**立即结束当前会话**(确保 Stop hook 被正确触发以标记 apply baseline)。提示用户:如需进入 Review 阶段,请在新会话中手动执行 \`zhuanspec review <change-id>\`
|
|
383
383
|
|
|
384
384
|
|
|
385
385
|
### 阶段 3:Review
|
|
@@ -50,7 +50,7 @@ const CODEX_DEFAULT_HOOKS = [
|
|
|
50
50
|
},
|
|
51
51
|
{
|
|
52
52
|
event: 'PostToolUse',
|
|
53
|
-
matcher: 'Write|Edit|Read|Grep|Glob|Bash|Skill|Agent|mcp__.*',
|
|
53
|
+
matcher: 'Write|Edit|apply_patch|Read|Grep|Glob|Bash|Skill|Agent|mcp__.*',
|
|
54
54
|
command: 'ZHUANSPEC_HOST=codex zhuanspec-hook record-progress --json',
|
|
55
55
|
statusMessage: '📝 Recording progress...',
|
|
56
56
|
},
|
|
@@ -652,7 +652,10 @@ const applySteps = `**步骤**
|
|
|
652
652
|
- 若存在,按 \`tc-implementation-verify\` Skill 定义执行:解析所有 TC 验证点,在源代码中搜索对应实现,将结果写入 \`metrics/tc-verify-result.json\`
|
|
653
653
|
- 若存在 \`missing\` 或 \`partial\` TC:暂停并输出未实现清单,由用户决定是否继续,选项式提问
|
|
654
654
|
- 若不存在 \`test-cases.md\`:跳过此步骤
|
|
655
|
-
10.
|
|
655
|
+
10. **结束会话(强制闪断,禁止继续)** - TC 验证通过或跳过后,输出 Apply 阶段完成摘要,然后**立即结束当前会话**。
|
|
656
|
+
- ❗ **禁止选项式提问是否进入 review**;禁止在同一会话内自动触发 review 命令
|
|
657
|
+
- 提示用户:“✅ Apply 阶段已完成。如需进入 Review 阶段,请在新会话中执行 \`zhuanspec review <change-id>\`”
|
|
658
|
+
- 原因:确保 Stop hook 被正确触发,正确标记 apply phaseBaseline,保障后续纠正记录机制正常工作`;
|
|
656
659
|
const applySubagentMandate = `
|
|
657
660
|
=== ⚠️ 核心执行机制:Subagent 并行(MANDATORY,读到此处即已授权) ===
|
|
658
661
|
- 本 Apply 阶段由用户通过斜杠命令 / Skill 显式触发,等同于用户已 **预授权 subagent 并行 spawn**。
|