speccore 8.3.34 → 8.3.36

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.
@@ -1 +1 @@
1
- {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
@@ -1103,7 +1103,8 @@ async function analyzeCommand(options) {
1103
1103
  const fp = (0, path_1.join)(goldenDir, reqFilePath);
1104
1104
  await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
1105
1105
  let finalContent = content;
1106
- if (reqFilePath.startsWith('clarified-') && !content.startsWith('---')) {
1106
+ // v8.3.35: 新文件名格式 {feature-name}-clarified.md
1107
+ if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
1107
1108
  finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
1108
1109
  }
1109
1110
  await (0, fs_extra_1.writeFile)(fp, finalContent);
@@ -1119,7 +1120,8 @@ async function analyzeCommand(options) {
1119
1120
  const fp = (0, path_1.join)(goldenDir, reqFilePath.replace(/^converted\//, ''));
1120
1121
  await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
1121
1122
  let finalContent = content;
1122
- if (reqFilePath.startsWith('converted/clarified-') && !content.startsWith('---')) {
1123
+ // v8.3.35: 新文件名格式 {feature-name}-clarified.md
1124
+ if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
1123
1125
  finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
1124
1126
  }
1125
1127
  await (0, fs_extra_1.writeFile)(fp, finalContent);
@@ -1492,7 +1494,8 @@ async function analyzeCommand(options) {
1492
1494
  const fp = (0, path_1.join)(goldenDir, reqFilePath);
1493
1495
  await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
1494
1496
  let finalContent = content;
1495
- if (reqFilePath.startsWith('clarified-') && !content.startsWith('---')) {
1497
+ // v8.3.35: 新文件名格式 {feature-name}-clarified.md
1498
+ if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
1496
1499
  finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
1497
1500
  }
1498
1501
  await (0, fs_extra_1.writeFile)(fp, finalContent);
@@ -1507,7 +1510,8 @@ async function analyzeCommand(options) {
1507
1510
  const fp = (0, path_1.join)(goldenDir, reqFilePath.replace(/^converted\//, ''));
1508
1511
  await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
1509
1512
  let finalContent = content;
1510
- if (reqFilePath.startsWith('converted/clarified-') && !content.startsWith('---')) {
1513
+ // v8.3.35: 新文件名格式 {feature-name}-clarified.md
1514
+ if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
1511
1515
  finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
1512
1516
  }
1513
1517
  await (0, fs_extra_1.writeFile)(fp, finalContent);
@@ -4112,7 +4116,7 @@ sequenceDiagram
4112
4116
  prompt += `**Step 3**: 补充:验收标准(AC)、功能边界、业务规则、异常处理、数据模型\n`;
4113
4117
  prompt += `**Step 4**: 输出澄清后的文档,使用以下标记格式:\n`;
4114
4118
  prompt += `\`\`\`
4115
- [CLARIFY:requirements/clarified-{feature-name}.md]
4119
+ [CLARIFY:requirements/{feature-name}-clarified.md]
4116
4120
  ---
4117
4121
  source: "原始文档路径"
4118
4122
  clarified-at: "${now}"
@@ -4140,7 +4144,7 @@ status: "clarified"
4140
4144
  ...
4141
4145
  \`\`\`
4142
4146
  `;
4143
- prompt += `**Step 5**: 用 Read 工具验证文件已正确写入 \`{迭代}/020-specs/requirements/clarified-{feature-name}.md\`\n`;
4147
+ prompt += `**Step 5**: 用 Read 工具验证文件已正确写入 \`{迭代}/020-specs/requirements/{feature-name}-clarified.md\`\n`;
4144
4148
  prompt += `**Step 6**: 基于澄清后的需求继续 Phase 1 分析\n\n`;
4145
4149
  prompt += `### ⚠️ 重要提醒\n\n`;
4146
4150
  prompt += `- **如果输出中没有 [CLARIFY:xxx] 标记的澄清文档,--apply 阶段将拒绝写入所有分析结果**\n`;
@@ -4257,7 +4261,7 @@ status: "clarified"
4257
4261
  catch {
4258
4262
  // 回退:静态列表
4259
4263
  prompt += `- \`020-specs/overview/\` 下的 REQUIREMENT.md, ANALYSIS.md, TECH.md, DEPS.md, RISK.md, REVIEW.md, MONITOR.md, FUNCTION_MAP.md, INTERACTION_MAP.md, DEV_GUIDE.md\n`;
4260
- prompt += `- \`020-specs/{端名}/\` 下的 TECH.md, TEST.md, UI_SPEC.md, DEV_GUIDE.md\n\n`;
4264
+ prompt += `- \`020-specs/{功能模块}/{端名}/\` 下的 TECH.md, TEST.md, UI_SPEC.md, DEV_GUIDE.md\n\n`;
4261
4265
  }
4262
4266
  prompt += `\n**注意**:\n`;
4263
4267
  prompt += `- 只覆盖上述已存在的文件,不要创建新文件或新目录\n`;
@@ -4352,7 +4356,7 @@ status: "clarified"
4352
4356
  prompt += `- Read 020-specs/overview/REQUIREMENT.md → 迭代综合需求规格\n`;
4353
4357
  prompt += `- Read 020-specs/overview/TECH.md → 迭代综合技术架构\n`;
4354
4358
  prompt += `- Read 020-specs/overview/ANALYSIS.md → 迭代综合分析报告\n`;
4355
- prompt += `- Read 020-specs/{本任务端名}/TECH.md → 该端专属技术方案\n\n`;
4359
+ prompt += `- Read 020-specs/{功能模块}/{本任务端名}/TECH.md → 该端专属技术方案\n\n`;
4356
4360
  prompt += `### Step 3: 撰写任务级深度分析文档\n\n`;
4357
4361
  prompt += `**REQ.md** — 本任务的需求规格(不是 overview/REQUIREMENT.md 的复制):\n`;
4358
4362
  prompt += `- 明确本任务的验收标准(可测试的、具体的)\n`;
@@ -4379,7 +4383,7 @@ status: "clarified"
4379
4383
  prompt += `- 当前是**迭代级分析**,需产出全部 8 个文档,覆盖需求→技术→测试→评审→风险→依赖→监控→UI规格\n`;
4380
4384
  if (ctx.platform) {
4381
4385
  prompt += `- **只分析 ${ctx.platform} 端**:从 CONSTITUTION.md 读取端列表,但只生成 ${ctx.platform} 端的专属文档\n`;
4382
- prompt += `- 在 020-specs/${ctx.platform}/ 下写入该端专属文档(ANALYSIS.md、TECH.md、TEST.md 等)\n`;
4386
+ prompt += `- 在 020-specs/{功能模块}/${ctx.platform}/ 下写入该端专属文档(ANALYSIS.md、TECH.md、TEST.md 等)\n`;
4383
4387
  prompt += `- 迭代综合文档写入 020-specs/overview/(REQUIREMENT.md、DEPS.md、RISK.md 等)\n`;
4384
4388
  prompt += `- **不要生成**其他端的子目录和文档\n`;
4385
4389
  }
@@ -5248,11 +5252,11 @@ async function buildClarifyPhasePrompt(iteration) {
5248
5252
  prompt += ` - 记录取舍:每轮迭代记录「采纳/拒绝/待确认」的决策\n\n`;
5249
5253
  prompt += `## Step 5: 确认写入\n\n`;
5250
5254
  prompt += `当用户确认 "满意,可以写入" 后:\n\n`;
5251
- prompt += `1. 将最终版 PRD 写入 \`020-specs/requirements/clarified-{源文件名}-{日期}.md\`(黄金需求目录)\n`;
5252
- prompt += `2. 同时生成 \`020-specs/requirements/clarified-{源文件名}-{日期}-diff.md\` 保存最终对比报告\n`;
5255
+ prompt += `1. 将最终版 PRD 写入 \`020-specs/requirements/{源文件名}-clarified.md\`(黄金需求目录)\n`;
5256
+ prompt += `2. 同时生成 \`020-specs/requirements/{源文件名}-clarified-diff.md\` 保存最终对比报告\n`;
5253
5257
  prompt += `3. 使用以下命令写入:\n\n`;
5254
5258
  prompt += `\`\`\`bash\n`;
5255
- prompt += `speccore analyze --apply '{"020-specs/requirements/clarified-xxx.md":"...","020-specs/requirements/clarified-xxx-diff.md":"..."}' -I ${iteration}\n`;
5259
+ prompt += `speccore analyze --apply '{"020-specs/requirements/xxx-clarified.md":"...","020-specs/requirements/xxx-clarified-diff.md":"..."}' -I ${iteration}\n`;
5256
5260
  prompt += `\`\`\`\n\n`;
5257
5261
  prompt += `> 注意:写入后 CLI 会自动推进到需求确认阶段。\n`;
5258
5262
  return await injectGraphSummary(prompt);
@@ -5288,7 +5292,7 @@ async function buildConfirmCheckPrompt(iteration) {
5288
5292
  }
5289
5293
  prompt += `## 确认检查清单\n\n`;
5290
5294
  prompt += `请逐项确认:\n\n`;
5291
- prompt += `- [ ] clarified-*.md 已写入 \`020-specs/requirements/\`(黄金需求目录)\n`;
5295
+ prompt += `- [ ] *-clarified.md 已写入 \`020-specs/requirements/\`(黄金需求目录)\n`;
5292
5296
  prompt += `- [ ] 验收标准可测试、可量化\n`;
5293
5297
  prompt += `- [ ] 功能边界明确(不做什么)\n`;
5294
5298
  prompt += `- [ ] 业务流程完整(含异常分支)\n`;