Skip to content

Commit 58fe006

Browse files
committed
v6.61.0: CLI auto loop Phase 1 → Phase 2
1 parent a3fcc5b commit 58fe006

11 files changed

Lines changed: 160 additions & 12 deletions

‎CHANGELOG.en.md‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,48 @@
22

33
---
44

5+
## v6.61.0 (2026-08-16) — CLI Auto Loop Phase 1 → Phase 2
6+
7+
### Core Fixes
8+
9+
- **analyze.ts**: Restored Phase 1/Phase 2 step logic, but CLI auto-triggers Phase 2 after Phase 1 completion
10+
- **analyze.ts**: Added detection logic at end of apply mode: if Phase 1 just completed and multiple platforms exist, auto-output Phase 2 prompt
11+
- **analyze.ts**: Added Phase 2 prompt code block (guides AI to Read Phase 1 output and generate platform-specific documents)
12+
- **analyze.ts**: Removed v6.60.0's "generate all documents at once" logic
13+
14+
### Root Cause
15+
16+
v6.60.0 removed Phase 1/Phase 2 step logic, generating all documents at once. But this caused:
17+
1. Excessive AI Token consumption (processing 10+ documents simultaneously)
18+
2. Reduced document quality (AI attention分散)
19+
3. Cannot leverage "chain generation" advantage (Read previous document before generating next)
20+
4. Platform documents cannot reference global context (global/TECH.md, etc.)
21+
22+
### Fix Approach
23+
24+
**Preserve advantages of phased approach**:
25+
- Phase 1: Generate global documents (global/REQUIREMENT.md, ANALYSIS.md, DEPS.md, etc.)
26+
- Phase 2: Generate platform-specific documents ({platform}/TECH.md, TEST.md, UI_SPEC.md, etc.), referencing Phase 1 output
27+
28+
**But improve UX**:
29+
- CLI detects platform count after Phase 1 completion
30+
- If multiple platforms exist, auto-output Phase 2 prompt, no need for user to manually execute second command
31+
- User only needs to run `speccore analyze --prompt -I iter` once, CLI auto-completes Phase 1 → Phase 2 flow
32+
33+
### Workflow
34+
35+
```bash
36+
# User executes one command
37+
speccore analyze --prompt -I meeting-upgrade
38+
39+
# CLI outputs Phase 1 prompt → AI generates global docs → AI writes back via --apply
40+
# CLI detects Phase 1 complete + multiple platforms → auto-outputs Phase 2 prompt
41+
# AI generates platform-specific docs → AI writes back via --apply
42+
# Done!
43+
```
44+
45+
---
46+
547
## v6.60.0 (2026-08-16) — Remove Phase 1/Phase 2 Step Logic, Generate All Documents at Once
648

749
### Core Fixes

‎CHANGELOG.md‎

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,45 @@
1+
## v6.61.0 (2026-08-16) — CLI 自动循环执行 Phase 1 → Phase 2
2+
3+
### 核心修复
4+
5+
- **analyze.ts**: 恢复 Phase 1/Phase 2 分步逻辑,但 CLI 在 Phase 1 完成后自动触发 Phase 2
6+
- **analyze.ts**: 在 apply 模式结尾添加检测逻辑:如果刚完成 Phase 1 且有多个端,自动输出 Phase 2 prompt
7+
- **analyze.ts**: 新增 Phase 2 prompt 代码块(指导 AI Read Phase 1 产出并生成各端专属文档)
8+
- **analyze.ts**: 删除 v6.60.0 的"一次性生成所有文档"逻辑
9+
10+
### 问题根因
11+
12+
v6.60.0 移除了 Phase 1/Phase 2 分步逻辑,改为一次性生成所有文档。但这导致:
13+
1. AI Token 消耗过大(同时处理 10+ 个文档)
14+
2. 文档质量下降(AI 注意力分散)
15+
3. 无法充分利用"链式生成"的优势(Read 前一个文档再生成下一个)
16+
4. 各端文档无法参考全局上下文(global/TECH.md 等)
17+
18+
### 修复方案
19+
20+
**保留分阶段的优势**:
21+
- Phase 1: 生成全局文档(global/REQUIREMENT.md、ANALYSIS.md、DEPS.md 等)
22+
- Phase 2: 生成各端专属文档({端}/TECH.md、TEST.md、UI_SPEC.md 等),参考 Phase 1 产出
23+
24+
**但改进用户体验**:
25+
- CLI 在 Phase 1 完成后自动检测端数量
26+
- 如果有多个端,自动输出 Phase 2 prompt,无需用户手动执行第二次命令
27+
- 用户只需要执行一次 `speccore analyze --prompt -I iter`,CLI 自动完成 Phase 1 → Phase 2 流转
28+
29+
### 工作流程
30+
31+
```bash
32+
# 用户执行一次命令
33+
speccore analyze --prompt -I meeting-upgrade
34+
35+
# CLI 输出 Phase 1 prompt → AI 生成全局文档 → AI 通过 --apply 写回
36+
# CLI 检测到 Phase 1 完成 + 有多个端 → 自动输出 Phase 2 prompt
37+
# AI 生成各端专属文档 → AI 通过 --apply 写回
38+
# 完成!
39+
```
40+
41+
---
42+
143
## v6.60.0 (2026-08-16) — 移除 Phase 1/Phase 2 分步逻辑,一次性生成所有文档
244

345
### 核心修复

‎package.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "speccore",
3-
"version": "6.60.0",
3+
"version": "6.61.0",
44
"description": "SpecCore - Code by Spec, Not by Vibe.",
55
"main": "dist/index.js",
66
"types": "dist/index.d.ts",

‎src/commands/analyze.ts‎

Lines changed: 68 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,33 @@ export async function analyzeCommand(options: AnalyzeOptions): Promise<void> {
445445
logger.info('🧠 知识图谱已刷新');
446446
} catch {}
447447
}
448+
449+
// ── v6.61.0+: Phase 1 完成后自动触发 Phase 2 ──
450+
if (!options.phase && !isTaskLevel && options.iteration) {
451+
// 检查是否有多个端
452+
const platforms = await parsePlatformList();
453+
if (platforms.length > 1) {
454+
logger.info('');
455+
logger.info(`🔄 Phase 1 已完成,检测到 ${platforms.length} 个端 (${platforms.join(', ')})`);
456+
logger.info('🚀 自动进入 Phase 2:生成各端专属文档...');
457+
logger.info('');
458+
459+
// 自动输出 Phase 2 的 prompt
460+
const phase2Prompt = await buildMultiDocPrompt('analyze', {
461+
iteration: options.iteration,
462+
task: options.task,
463+
type: options.type,
464+
scope: options.scope,
465+
withCode: options.withCode,
466+
platform: options.platform,
467+
phase: '2' // ← 关键:设置为 Phase 2
468+
});
469+
process.stdout.write(`[SPECCORE_PROMPT]\n${phase2Prompt}`);
470+
process.exitCode = 10;
471+
return;
472+
}
473+
}
474+
448475
return;
449476
}
450477

@@ -1054,9 +1081,17 @@ async function buildMultiDocPrompt(command: string, ctx: { iteration?: string; t
10541081
};
10551082
const includeDocs = isTask ? (DOC_MATRIX[taskType] || DOC_MATRIX['feature']) : DOC_MATRIX['feature'];
10561083

1057-
// ── v6.60.0+: 一次性生成所有文档(不再分 Phase 1/Phase 2)──
1058-
// AI 在一次执行中同时生成 global/ 和 {端}/ 的所有文档
1084+
// ── v6.61.0+: 恢复 Phase 1/Phase 2 分步逻辑,但 CLI 自动触发 Phase 2 ──
1085+
// Phase 1: 生成全局文档(global/REQUIREMENT.md、ANALYSIS.md、DEPS.md 等)
1086+
// Phase 2: 生成各端专属文档({端}/TECH.md、TEST.md、UI_SPEC.md 等)
1087+
const GLOBAL_DOCS = ['REQUIREMENT.md', 'ANALYSIS.md', 'TECH.md', 'RISK.md', 'DEPS.md', 'REVIEW.md', 'MONITOR.md'];
1088+
const PLATFORM_DOCS = ['TECH.md', 'TEST.md', 'UI_SPEC.md'];
10591089
let taskDocs = docs.filter(([n]) => includeDocs.includes(n));
1090+
if (ctx.phase === '1') {
1091+
taskDocs = taskDocs.filter(([n]) => GLOBAL_DOCS.includes(n));
1092+
} else if (ctx.phase === '2') {
1093+
taskDocs = taskDocs.filter(([n]) => PLATFORM_DOCS.includes(n));
1094+
}
10601095

10611096
// ── 任务级文档覆盖:00-specs/ 使用任务级文档集(v6.44.0+) ──
10621097
if (isTask && !ctx.phase) {
@@ -1193,8 +1228,36 @@ async function buildMultiDocPrompt(command: string, ctx: { iteration?: string; t
11931228
prompt += `- 全局跨端文档写入 020-specs/global/(REQUIREMENT.md、DEPS.md、RISK.md 等)\n`;
11941229
prompt += `- **不要生成**其他端的子目录和文档\n`;
11951230
}
1196-
// v6.60.0+: 一次性生成所有文档(global/ + {端}/)
1197-
prompt += `## 要求\n1. Read .speccore/PATTERNS/TEMPLATES/specs/ 下的专业模板(如目录不存在或为空,用你的专业知识自由撰写,绝不允许产出一行垃圾)\n`;
1231+
// ── v6.61.0+: 阶段专属指令(Phase 2)──
1232+
if (ctx.phase === '2') {
1233+
prompt += `## 要求\n\n`;
1234+
prompt += `### Step 1: 读取全局上下文(Phase 1 产出)\n`;
1235+
prompt += `依次 Read 以下文件,建立全局技术架构认知:\n`;
1236+
prompt += `- Read .speccore/CONSTITUTION.md\n`;
1237+
prompt += `- Read 020-specs/PLATFORMS.md → 获取端列表\n`;
1238+
prompt += `- Read 020-specs/global/REQUIREMENT.md → 需求规格\n`;
1239+
prompt += `- Read 020-specs/global/ANALYSIS.md → 分析报告\n`;
1240+
prompt += `- Read 020-specs/global/TECH.md → 整体技术架构\n`;
1241+
prompt += `- Read 020-specs/global/RISK.md、DEPS.md、REVIEW.md、MONITOR.md(如存在)\n\n`;
1242+
prompt += `### Step 2: 为每个端撰写专属文档\n`;
1243+
prompt += `根据全局上下文,为 PLATFORMS.md 中的**每个端**分别撰写:\n`;
1244+
prompt += `- **{端}/TECH.md**:该端专属技术方案(必须对齐 global/TECH.md 架构)\n`;
1245+
prompt += ` - ⚠️ **必须包含「业务-代码映射」章节**:在 TECH.md 末尾添加表格,列出本端涉及的业务模块及其对应的代码实体(文件/表/API/组件等),关系类型由你根据技术栈自主决定(如 api_controller、uses_table、page、component、route、middleware、interceptor、gateway 等)\n`;
1246+
prompt += ` - 表格格式:| 业务模块 | 代码实体 | 关系类型 | 说明 |\n`;
1247+
prompt += ` - 示例:| 会议室档案 | backend/RoomController.java | api_controller | REST 控制器 |\n`;
1248+
prompt += ` - 示例:| 会议室档案 | admin-web/src/pages/RoomList.vue | page | 列表页 |\n`;
1249+
prompt += `- **{端}/TEST.md**:该端专属测试计划\n`;
1250+
prompt += `- **{端}/UI_SPEC.md**:该端专属 UI 规格(仅前端端需要)\n\n`;
1251+
prompt += `### Step 3: 一致性检查\n`;
1252+
prompt += `- 各端 TECH.md 的技术选型必须与 global/TECH.md 一致\n`;
1253+
prompt += `- UI_SPEC.md 的字段映射必须与后端 API 响应字段一一对应\n`;
1254+
prompt += `- TEST.md 必须覆盖 REQUIREMENT.md 中该端的验收标准\n\n`;
1255+
prompt += `### 写入方式\n`;
1256+
prompt += `逐端写入,每个端一次 --apply 调用:\n`;
1257+
prompt += `speccore analyze --apply '{"TECH.md":"...","TEST.md":"...","UI_SPEC.md":"..."}' -I ${iter} --platform {端名}\n\n`;
1258+
} else {
1259+
// v6.61.0+: 一次性生成所有文档(global/ + {端}/)
1260+
prompt += `## 要求\n1. Read .speccore/PATTERNS/TEMPLATES/specs/ 下的专业模板(如目录不存在或为空,用你的专业知识自由撰写,绝不允许产出一行垃圾)\n`;
11981261
const templateMap: Record<string, string> = {
11991262
'ANALYSIS.md': 'ANALYSIS-template.md', 'TECH.md': 'TECH-template.md', 'TEST.md': 'TEST-template.md',
12001263
'REVIEW.md': 'REVIEW-template.md', 'RISK.md': 'RISK-template.md', 'DEPS.md': 'DEPS-template.md',
@@ -1319,6 +1382,7 @@ async function buildMultiDocPrompt(command: string, ctx: { iteration?: string; t
13191382
prompt += `- **{端}/MONITOR.md**:该端专属监控指标\n`;
13201383
prompt += `- **{端}/UI_SPEC.md**:前端端专属 UI 规格,字段映射必须与后端 API 响应字段一一对应\n`;
13211384
prompt += `- 分析完成后会自动生成 QUALITY_AUDIT.md 质量报告,检查各端内容是否完整\n`;
1385+
}
13221386
// 步骤 2-7 已在上面的 phase 分支中处理
13231387
const taskFlag = isTask && ctx.task ? ` --task ${ctx.task}` : '';
13241388
const platformFlag = ctx.platform ? ` --platform ${ctx.platform}` : '';

‎templates/html/speccore-ask-guide.html‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77
.match-result{padding:10px 0}.match-summary{font-weight:600;font-size:14px;margin-bottom:12px}.match-detail{color:var(--muted);font-size:12px;line-height:1.6}
88
/* Pipeline */
99
.pipeline-title{font-weight:600;margin-bottom:16px}.pipeline-steps{display:flex;flex-direction:column;gap:10px}.pipe-step{display:flex;gap:14px;padding:12px 14px;background:rgba(99,102,241,.04);border-left:2px solid var(--purple);border-radius:0 8px 8px 0}.pipe-step .pipe-num{font-family:Orbitron;font-size:20px;font-weight:900;color:var(--purple);min-width:36px}.pipe-step .pipe-cmd{font-weight:600;color:var(--green)}.pipe-step .pipe-args{color:var(--muted);font-size:11px}.pipe-step .pipe-desc{color:var(--muted);font-size:10px;margin-top:4px}.pipe-step .pipe-dep{font-size:9px;color:var(--orange);margin-top:4px}.confirm-bar{text-align:center;padding:14px;margin-top:16px;background:rgba(99,102,241,.08);border:1px dashed rgba(99,102,241,.2);border-radius:8px;color:var(--purple);font-size:12px}
10-
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{text-shadow:0 0 20px rgba(14,165,233,.35),0 0 60px rgba(14,165,233,.12)!important}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"我想做一个登录功能"</div><div class="badge">🗺️ 任务指引</div><div class="guide-title">已为你规划「新功能开发全流程」(8 步)</div><div class="guide-steps"><div class="guide-step"><div class="step-num">1</div><div class="step-body"><div class="step-cmd">speccore init</div><div class="step-desc">初始化项目(如果还没有)</div></div></div><div class="guide-step"><div class="step-num">2</div><div class="step-body"><div class="step-cmd">speccore doc2spec -f PRD.docx --iter {iteration}</div><div class="step-desc">导入 PRD 文档,AI 分析生成需求规格</div></div></div><div class="guide-step"><div class="step-num">3</div><div class="step-body"><div class="step-cmd">speccore analyze --iteration {iteration} --audit</div><div class="step-desc">AI 分析需求,生成审计报告</div></div></div><div class="guide-step"><div class="step-num">4</div><div class="step-body"><div class="step-cmd">speccore split -f REQUIREMENT.md</div><div class="step-desc">将需求拆分为独立开发任务</div></div></div><div class="guide-step"><div class="step-num">5</div><div class="step-body"><div class="step-cmd">speccore plan --all</div><div class="step-desc">生成任务执行计划,确定优先级和依赖</div></div></div><div class="guide-step"><div class="step-num">6</div><div class="step-body"><div class="step-cmd">speccore execute --auto</div><div class="step-desc">按计划依次执行开发任务</div></div></div><div class="guide-step"><div class="step-num">7</div><div class="step-body"><div class="step-cmd">speccore pr --auto</div><div class="step-desc">代码提交后创建 Pull Request</div></div></div><div class="guide-step"><div class="step-num">8</div><div class="step-body"><div class="step-cmd">speccore done --all</div><div class="step-desc">全部完成后归档收尾</div></div></div></div><div style="text-align:center;margin-top:16px"><a href="../../speccore-ask-onboarding.html" style="color:var(--cyan);font-size:11px;text-decoration:none">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v6.60.0 · 2026-08-10</div></div></body></html>
10+
.footer{text-align:center;color:var(--muted);font-size:10px;margin-top:24px;padding-top:16px;border-top:1px solid rgba(255,255,255,.04)}h1{text-shadow:0 0 20px rgba(14,165,233,.35),0 0 60px rgba(14,165,233,.12)!important}@keyframes cardGlow{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:1;transform:scale(1.6)}}.card-bg{position:absolute;inset:0;pointer-events:none;z-index:0;background:radial-gradient(ellipse at 25% 10%,rgba(14,165,233,.25) 0%,transparent 70%);animation:cardGlow 3s ease-in-out infinite;transform-origin:top center}@keyframes titleGlow{0%,100%{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15)}50%{text-shadow:0 0 30px rgba(14,165,233,.7),0 0 80px rgba(14,165,233,.3)}}h1,h2{text-shadow:0 0 20px rgba(14,165,233,.4),0 0 60px rgba(14,165,233,.15);animation:titleGlow 3s ease-in-out infinite}</style></head><body><div class="scanlines"></div><div class="card"><div class="card-bg"></div><div class="vline l"></div><div class="vline r"></div><h1>SPECCORE ASK</h1><div class="query">"我想做一个登录功能"</div><div class="badge">🗺️ 任务指引</div><div class="guide-title">已为你规划「新功能开发全流程」(8 步)</div><div class="guide-steps"><div class="guide-step"><div class="step-num">1</div><div class="step-body"><div class="step-cmd">speccore init</div><div class="step-desc">初始化项目(如果还没有)</div></div></div><div class="guide-step"><div class="step-num">2</div><div class="step-body"><div class="step-cmd">speccore doc2spec -f PRD.docx --iter {iteration}</div><div class="step-desc">导入 PRD 文档,AI 分析生成需求规格</div></div></div><div class="guide-step"><div class="step-num">3</div><div class="step-body"><div class="step-cmd">speccore analyze --iteration {iteration} --audit</div><div class="step-desc">AI 分析需求,生成审计报告</div></div></div><div class="guide-step"><div class="step-num">4</div><div class="step-body"><div class="step-cmd">speccore split -f REQUIREMENT.md</div><div class="step-desc">将需求拆分为独立开发任务</div></div></div><div class="guide-step"><div class="step-num">5</div><div class="step-body"><div class="step-cmd">speccore plan --all</div><div class="step-desc">生成任务执行计划,确定优先级和依赖</div></div></div><div class="guide-step"><div class="step-num">6</div><div class="step-body"><div class="step-cmd">speccore execute --auto</div><div class="step-desc">按计划依次执行开发任务</div></div></div><div class="guide-step"><div class="step-num">7</div><div class="step-body"><div class="step-cmd">speccore pr --auto</div><div class="step-desc">代码提交后创建 Pull Request</div></div></div><div class="guide-step"><div class="step-num">8</div><div class="step-body"><div class="step-cmd">speccore done --all</div><div class="step-desc">全部完成后归档收尾</div></div></div></div><div style="text-align:center;margin-top:16px"><a href="../../speccore-ask-onboarding.html" style="color:var(--cyan);font-size:11px;text-decoration:none">← 返回 ask 引导页</a></div><div class="footer">由 SpecCore 驱动 · v6.61.0 · 2026-08-10</div></div></body></html>

0 commit comments

Comments
 (0)