Skip to content

Commit d66c36d

Browse files
committed
v6.62.0: Phase 2 mandatory trigger guarantee
1 parent 58fe006 commit d66c36d

11 files changed

Lines changed: 92 additions & 11 deletions

‎CHANGELOG.en.md‎

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

33
---
44

5+
## v6.62.0 (2026-08-16) — Phase 2 Mandatory Trigger Guarantee Mechanism
6+
7+
### Core Fixes
8+
9+
- **analyze.ts**: Changed Phase 2 trigger condition from `platforms.length > 1` to `platforms.length > 0`
10+
- **analyze.ts**: Added warning log: if no platform list detected, output clear warning and suggestion
11+
- **analyze.ts**: Comment explanation: even with only 1 platform, need to generate that platform's exclusive documents (TECH.md, TEST.md, etc.)
12+
13+
### Root Cause
14+
15+
v6.61.0's trigger condition was `if (platforms.length > 1)`, causing:
16+
1. **Single-platform projects don't trigger Phase 2**: But single-platform projects still need to generate that platform's exclusive documents
17+
2. **Silent failure when no platform list**: If CONSTITUTION.md doesn't configure platform list, CLI outputs no提示, user doesn't know they need to manually execute Phase 2
18+
19+
### Fix Approach
20+
21+
**Mandatory guarantee mechanism**:
22+
```typescript
23+
// Old: Only trigger for multi-platform
24+
if (platforms.length > 1) { ... }
25+
26+
// New: Trigger as long as there are platforms (regardless of count)
27+
if (platforms.length > 0) {
28+
// Auto-trigger Phase 2
29+
} else {
30+
// Output warning, guide user to check CONSTITUTION.md
31+
logger.warn('⚠️ No platform list detected, please check .speccore/CONSTITUTION.md');
32+
}
33+
```
34+
35+
**Guarantee effect**:
36+
- ✅ Multi-platform projects: Auto-trigger Phase 2
37+
- ✅ Single-platform projects: Also trigger Phase 2 (generate that platform's exclusive documents)
38+
- ✅ No platform list: Output clear warning, guide user to fix
39+
40+
---
41+
542
## v6.61.0 (2026-08-16) — CLI Auto Loop Phase 1 → Phase 2
643

744
### Core Fixes

‎CHANGELOG.md‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,40 @@
1+
## v6.62.0 (2026-08-16) — Phase 2 强制触发保证机制
2+
3+
### 核心修复
4+
5+
- **analyze.ts**: 修改 Phase 2 触发条件:从 `platforms.length > 1` 改为 `platforms.length > 0`
6+
- **analyze.ts**: 新增警告日志:如果未检测到端列表,输出明确警告和建议
7+
- **analyze.ts**: 注释说明:即使只有 1 个端,也需要生成该端的专属文档(TECH.md、TEST.md 等)
8+
9+
### 问题根因
10+
11+
v6.61.0 的触发条件是 `if (platforms.length > 1)`,导致:
12+
1. **单端项目不会触发 Phase 2**:但单端项目仍然需要生成该端的专属文档
13+
2. **无端列表时静默失败**:如果 CONSTITUTION.md 没有配置端列表,CLI 不会输出任何提示,用户不知道需要手动执行 Phase 2
14+
15+
### 修复方案
16+
17+
**强制保证机制**:
18+
```typescript
19+
// 旧版:只有多端才触发
20+
if (platforms.length > 1) { ... }
21+
22+
// 新版:只要有端就触发(无论数量)
23+
if (platforms.length > 0) {
24+
// 自动触发 Phase 2
25+
} else {
26+
// 输出警告,指导用户检查 CONSTITUTION.md
27+
logger.warn('⚠️ 未检测到端列表,请检查 .speccore/CONSTITUTION.md');
28+
}
29+
```
30+
31+
**保证效果**:
32+
- ✅ 多端项目:自动触发 Phase 2
33+
- ✅ 单端项目:也会触发 Phase 2(生成该端的专属文档)
34+
- ✅ 无端列表:输出明确警告,指导用户修复
35+
36+
---
37+
138
## v6.61.0 (2026-08-16) — CLI 自动循环执行 Phase 1 → Phase 2
239

340
### 核心修复

‎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.61.0",
3+
"version": "6.62.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: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -446,11 +446,14 @@ export async function analyzeCommand(options: AnalyzeOptions): Promise<void> {
446446
} catch {}
447447
}
448448

449-
// ── v6.61.0+: Phase 1 完成后自动触发 Phase 2 ──
449+
// ── v6.62.0+: Phase 1 完成后强制触发 Phase 2(多端项目)──
450450
if (!options.phase && !isTaskLevel && options.iteration) {
451-
// 检查是否有多个端
451+
// 检查是否有端列表
452452
const platforms = await parsePlatformList();
453-
if (platforms.length > 1) {
453+
454+
// 强制保证:只要有端列表(无论数量),就必须执行 Phase 2
455+
// 原因:即使只有 1 个端,也需要生成该端的专属文档(TECH.md、TEST.md 等)
456+
if (platforms.length > 0) {
454457
logger.info('');
455458
logger.info(`🔄 Phase 1 已完成,检测到 ${platforms.length} 个端 (${platforms.join(', ')})`);
456459
logger.info('🚀 自动进入 Phase 2:生成各端专属文档...');
@@ -469,6 +472,10 @@ export async function analyzeCommand(options: AnalyzeOptions): Promise<void> {
469472
process.stdout.write(`[SPECCORE_PROMPT]\n${phase2Prompt}`);
470473
process.exitCode = 10;
471474
return;
475+
} else {
476+
// 如果没有检测到端列表,输出警告
477+
logger.warn('⚠️ 未检测到端列表,请检查 .speccore/CONSTITUTION.md 是否配置了「端列表」');
478+
logger.warn(' 建议:在 CONSTITUTION.md 中添加端列表,或手动执行 speccore analyze --phase 2 -I <迭代名>');
472479
}
473480
}
474481

‎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.61.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.62.0 · 2026-08-10</div></div></body></html>

0 commit comments

Comments
 (0)