speccore 8.0.0 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/analyze.js +81 -4
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/iteration/split.js +13 -5
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/core/spec-skeleton.d.ts +18 -0
- package/dist/core/spec-skeleton.d.ts.map +1 -1
- package/dist/core/spec-skeleton.js +300 -2
- package/dist/core/spec-skeleton.js.map +1 -1
- package/dist/core/verify-engine.d.ts.map +1 -1
- package/dist/core/verify-engine.js +124 -0
- package/dist/core/verify-engine.js.map +1 -1
- package/package.json +1 -1
|
@@ -30,6 +30,24 @@ export interface ProgressResult {
|
|
|
30
30
|
/** 总数 */
|
|
31
31
|
totalCount: number;
|
|
32
32
|
}
|
|
33
|
+
export declare const QUALITY_RUBRICS: Record<string, {
|
|
34
|
+
checklist: string[];
|
|
35
|
+
antiPatterns: string[];
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* 根据文档名获取质量标准文本
|
|
39
|
+
* 自动区分 overview 和 platform 文档(TECH.md 后端/前端差异化)
|
|
40
|
+
*/
|
|
41
|
+
export declare function buildQualityRubRIC(docName: string, platform?: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* 校验已填充文档的内容质量
|
|
44
|
+
* 检查:最低字数、必含章节、表格是否有真实数据
|
|
45
|
+
*/
|
|
46
|
+
export declare function validateContentQuality(docName: string, content: string, platform?: string): Promise<{
|
|
47
|
+
pass: boolean;
|
|
48
|
+
score: number;
|
|
49
|
+
issues: string[];
|
|
50
|
+
}>;
|
|
33
51
|
/**
|
|
34
52
|
* 计算 analyze 命令的文件清单
|
|
35
53
|
* @param platforms 端列表
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-skeleton.d.ts","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"AAkBA,4BAA4B;AAC5B,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAMxD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qBAAqB;IACrB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"spec-skeleton.d.ts","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"AAkBA,4BAA4B;AAC5B,eAAO,MAAM,eAAe,2BAA2B,CAAC;AAMxD,MAAM,WAAW,aAAa;IAC5B,iDAAiD;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAC;IAClC,uBAAuB;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iBAAiB;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qBAAqB;IACrB,YAAY,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,WAAW;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS;IACT,UAAU,EAAE,MAAM,CAAC;CACpB;AA8OD,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,EAAE,MAAM,EAAE,CAAC;IAAC,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CA0L3F,CAAC;AAEF;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA0B7E;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAwE7D;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EAAE,EACnB,KAAK,CAAC,EAAE,GAAG,GAAG,GAAG,EACjB,SAAS,GAAE,MAAW,GACrB,aAAa,EAAE,CA+BjB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EAAE,GAClB,aAAa,EAAE,CAgBjB;AAMD;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAqBnD;AAMD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,aAAa,EAAE,GACvB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAMD;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,aAAa,EAAE,EACxB,OAAO,EAAE,MAAM,GACd,MAAM,CAoCR"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SKELETON_MARKER = void 0;
|
|
3
|
+
exports.QUALITY_RUBRICS = exports.SKELETON_MARKER = void 0;
|
|
4
|
+
exports.buildQualityRubRIC = buildQualityRubRIC;
|
|
5
|
+
exports.validateContentQuality = validateContentQuality;
|
|
4
6
|
exports.computeAnalyzeManifest = computeAnalyzeManifest;
|
|
5
7
|
exports.computeTaskManifest = computeTaskManifest;
|
|
6
8
|
exports.generateSkeleton = generateSkeleton;
|
|
@@ -251,6 +253,299 @@ const TASK_DOCS = [
|
|
|
251
253
|
},
|
|
252
254
|
];
|
|
253
255
|
// ================================================================
|
|
256
|
+
// 质量标准(Quality Rubrics)— v8.1.0+
|
|
257
|
+
// 每种文档类型的专业质量检查清单,自动注入骨架文件和 prompt
|
|
258
|
+
// ================================================================
|
|
259
|
+
exports.QUALITY_RUBRICS = {
|
|
260
|
+
'REQUIREMENT.md': {
|
|
261
|
+
checklist: [
|
|
262
|
+
'产品愿景与目标用户画像',
|
|
263
|
+
'核心场景地图(按业务场景分章节组织)',
|
|
264
|
+
'每个场景:用户故事 → 操作流程 → 业务规则 → 边界条件',
|
|
265
|
+
'验收标准(Given/When/Then 格式)',
|
|
266
|
+
'功能优先级矩阵(P0/P1/P2)',
|
|
267
|
+
'功能模块清单表(含「涉及端」列,标准端名)',
|
|
268
|
+
'发布里程碑与风险预判',
|
|
269
|
+
],
|
|
270
|
+
antiPatterns: [
|
|
271
|
+
'按端分章节(应按业务场景组织)',
|
|
272
|
+
'写技术实现细节(应纯产品视角)',
|
|
273
|
+
'功能模块缺少「涉及端」标注',
|
|
274
|
+
'验收标准用模糊描述(如「正常使用」「合理范围」)',
|
|
275
|
+
],
|
|
276
|
+
},
|
|
277
|
+
'ANALYSIS.md': {
|
|
278
|
+
checklist: [
|
|
279
|
+
'按优先级分节(P0 必修 / P1 应修 / P2 建议)',
|
|
280
|
+
'每个功能点有唯一编号(F-01, F-02...)',
|
|
281
|
+
'每个功能点标注涉及端',
|
|
282
|
+
'接口变更清单(路径/方法/参数变化)',
|
|
283
|
+
'数据库变更清单(新增表/字段/索引)',
|
|
284
|
+
'风险点与缓解策略',
|
|
285
|
+
],
|
|
286
|
+
antiPatterns: [
|
|
287
|
+
'功能点无编号或无涉及端标注',
|
|
288
|
+
'只列功能名不描述具体行为',
|
|
289
|
+
'缺少接口变更和数据库变更清单',
|
|
290
|
+
],
|
|
291
|
+
},
|
|
292
|
+
'TECH.md': {
|
|
293
|
+
checklist: [
|
|
294
|
+
'整体架构图(Mermaid graph/flowchart)',
|
|
295
|
+
'跨端交互说明(调用方 → 被调方、协议、接口路径)',
|
|
296
|
+
'中间件选型及理由',
|
|
297
|
+
'数据库设计(表名/字段/类型/索引/约束)',
|
|
298
|
+
'安全方案(鉴权/加密/脱敏/SQL注入防护)',
|
|
299
|
+
'性能指标(QPS预估/缓存策略/慢查询优化)',
|
|
300
|
+
'API 契约(统一响应格式/错误码/分页规范)',
|
|
301
|
+
],
|
|
302
|
+
antiPatterns: [
|
|
303
|
+
'只列技术栈不解释选型理由',
|
|
304
|
+
'接口定义缺少字段级说明',
|
|
305
|
+
'无安全方案或性能考量',
|
|
306
|
+
'架构图与文字描述不一致',
|
|
307
|
+
],
|
|
308
|
+
},
|
|
309
|
+
'DEPS.md': {
|
|
310
|
+
checklist: [
|
|
311
|
+
'内部服务依赖清单(服务名/用途/接口/SLA)',
|
|
312
|
+
'第三方依赖清单(包名/版本/用途/许可证)',
|
|
313
|
+
'集成方式说明(SDK/API/消息队列)',
|
|
314
|
+
'版本兼容性风险',
|
|
315
|
+
],
|
|
316
|
+
antiPatterns: [
|
|
317
|
+
'只列名称不说明用途',
|
|
318
|
+
'缺少版本号',
|
|
319
|
+
'遗漏关键依赖',
|
|
320
|
+
],
|
|
321
|
+
},
|
|
322
|
+
'RISK.md': {
|
|
323
|
+
checklist: [
|
|
324
|
+
'至少 3 个风险项',
|
|
325
|
+
'每项标注可能性(高/中/低)和影响(高/中/低)',
|
|
326
|
+
'每项有具体缓解措施',
|
|
327
|
+
'回滚方案(触发条件 + 具体步骤)',
|
|
328
|
+
'数据恢复方案(如涉及数据变更)',
|
|
329
|
+
],
|
|
330
|
+
antiPatterns: [
|
|
331
|
+
'风险描述笼统(如「可能出问题」)',
|
|
332
|
+
'缓解措施为空或「待定」',
|
|
333
|
+
'无回滚方案',
|
|
334
|
+
],
|
|
335
|
+
},
|
|
336
|
+
'REVIEW.md': {
|
|
337
|
+
checklist: [
|
|
338
|
+
'参数校验完整性',
|
|
339
|
+
'幂等性处理',
|
|
340
|
+
'索引覆盖',
|
|
341
|
+
'迁移脚本可回滚',
|
|
342
|
+
'鉴权配置',
|
|
343
|
+
'日志规范',
|
|
344
|
+
'错误处理',
|
|
345
|
+
'并发安全',
|
|
346
|
+
'至少 8 项检查,每项有具体检查方法',
|
|
347
|
+
],
|
|
348
|
+
antiPatterns: [
|
|
349
|
+
'检查项过于笼统(如「代码质量」)',
|
|
350
|
+
'缺少具体检查方法',
|
|
351
|
+
'遗漏安全相关检查项',
|
|
352
|
+
],
|
|
353
|
+
},
|
|
354
|
+
'MONITOR.md': {
|
|
355
|
+
checklist: [
|
|
356
|
+
'业务指标(成功率/响应时间/错误率,含阈值)',
|
|
357
|
+
'系统指标(CPU/内存/连接池/磁盘)',
|
|
358
|
+
'告警规则(条件/级别/通知渠道)',
|
|
359
|
+
'监控大盘(必备指标列表)',
|
|
360
|
+
'至少 3 个业务指标 + 2 条告警规则',
|
|
361
|
+
],
|
|
362
|
+
antiPatterns: [
|
|
363
|
+
'指标无阈值',
|
|
364
|
+
'告警规则无通知渠道',
|
|
365
|
+
'只有系统指标没有业务指标',
|
|
366
|
+
],
|
|
367
|
+
},
|
|
368
|
+
'FUNCTION_MAP.md': {
|
|
369
|
+
checklist: [
|
|
370
|
+
'表格含所有列:功能单元/涉及端/优先级/全局对比/共享能力/依赖任务/说明',
|
|
371
|
+
'功能单元与 REQUIREMENT.md 一一对应(不允许合并)',
|
|
372
|
+
'涉及端使用标准端名(逗号分隔)',
|
|
373
|
+
'全局对比标注(新增/扩展/重构/复用)',
|
|
374
|
+
'依赖任务标注正确',
|
|
375
|
+
'每行有跨端交互说明',
|
|
376
|
+
],
|
|
377
|
+
antiPatterns: [
|
|
378
|
+
'将多个功能模块合并为一行',
|
|
379
|
+
'涉及端为空或使用非标准端名',
|
|
380
|
+
'缺少全局对比列',
|
|
381
|
+
'功能单元与 REQUIREMENT.md 不对应',
|
|
382
|
+
],
|
|
383
|
+
},
|
|
384
|
+
'TEST.md': {
|
|
385
|
+
checklist: [
|
|
386
|
+
'单元测试覆盖(核心函数/方法)',
|
|
387
|
+
'集成测试(API 端到端)',
|
|
388
|
+
'边界测试(异常参数/超时/并发/空值)',
|
|
389
|
+
'性能测试方案(基准/目标/工具)',
|
|
390
|
+
'测试用例含前置条件+操作步骤+预期结果',
|
|
391
|
+
'覆盖所有核心功能的正常流+异常流',
|
|
392
|
+
],
|
|
393
|
+
antiPatterns: [
|
|
394
|
+
'只列「需要测试」不写具体用例',
|
|
395
|
+
'缺少异常场景测试',
|
|
396
|
+
'无性能测试基准',
|
|
397
|
+
'测试用例缺少预期结果',
|
|
398
|
+
],
|
|
399
|
+
},
|
|
400
|
+
'UI_SPEC.md': {
|
|
401
|
+
checklist: [
|
|
402
|
+
'页面清单(页面名/路由/核心功能/入口)',
|
|
403
|
+
'组件拆分(组件名/职责/复用级别)',
|
|
404
|
+
'交互流程(关键操作流程+状态变化)',
|
|
405
|
+
'状态管理(全局状态/本地状态/同步策略)',
|
|
406
|
+
'字段映射(前端字段 ↔ 后端 API 响应字段一一对应)',
|
|
407
|
+
'异常状态 UI(空状态/加载态/错误态/骨架屏)',
|
|
408
|
+
],
|
|
409
|
+
antiPatterns: [
|
|
410
|
+
'字段映射与后端 API 不一致',
|
|
411
|
+
'缺少异常状态 UI 设计',
|
|
412
|
+
'只画正常流程不处理边界',
|
|
413
|
+
'组件拆分粒度过粗或过细',
|
|
414
|
+
],
|
|
415
|
+
},
|
|
416
|
+
'REQ.md': {
|
|
417
|
+
checklist: [
|
|
418
|
+
'功能描述(本任务的核心职责)',
|
|
419
|
+
'验收标准(Given/When/Then 格式,具体可测试)',
|
|
420
|
+
'业务规则(具体到可执行逻辑)',
|
|
421
|
+
'边界条件(参数范围/时间窗口/并发限制)',
|
|
422
|
+
'异常场景(至少 3 种异常 + 处理方式)',
|
|
423
|
+
'与其他 Task 的依赖关系',
|
|
424
|
+
],
|
|
425
|
+
antiPatterns: [
|
|
426
|
+
'验收标准不可测试(如「功能正常」)',
|
|
427
|
+
'业务规则模糊(如「合理处理」)',
|
|
428
|
+
'缺少异常场景',
|
|
429
|
+
'未标注依赖关系',
|
|
430
|
+
],
|
|
431
|
+
},
|
|
432
|
+
'TASK.md': {
|
|
433
|
+
checklist: [
|
|
434
|
+
'按开发顺序列出实施步骤',
|
|
435
|
+
'每步有明确的完成标准(可验证)',
|
|
436
|
+
'标注步骤间依赖关系',
|
|
437
|
+
'估算每步工作量',
|
|
438
|
+
],
|
|
439
|
+
antiPatterns: [
|
|
440
|
+
'步骤过于笼统(如「实现功能」)',
|
|
441
|
+
'无完成标准',
|
|
442
|
+
'缺少依赖关系',
|
|
443
|
+
],
|
|
444
|
+
},
|
|
445
|
+
};
|
|
446
|
+
/**
|
|
447
|
+
* 根据文档名获取质量标准文本
|
|
448
|
+
* 自动区分 overview 和 platform 文档(TECH.md 后端/前端差异化)
|
|
449
|
+
*/
|
|
450
|
+
function buildQualityRubRIC(docName, platform) {
|
|
451
|
+
const rubric = exports.QUALITY_RUBRICS[docName];
|
|
452
|
+
if (!rubric)
|
|
453
|
+
return '';
|
|
454
|
+
let text = `\n## 📋 质量标准(${docName})\n\n`;
|
|
455
|
+
// 端特定提示
|
|
456
|
+
if (platform && docName === 'TECH.md') {
|
|
457
|
+
const isBackend = /service|api|server|backend/i.test(platform);
|
|
458
|
+
if (isBackend) {
|
|
459
|
+
text += `> 🎯 **${platform} 是后端服务**,TECH.md 必须包含:接口签名(路径/方法/参数/响应)、数据模型(表/字段/索引)、业务逻辑、安全方案\n\n`;
|
|
460
|
+
}
|
|
461
|
+
else {
|
|
462
|
+
text += `> 🎯 **${platform} 是前端端**,TECH.md 必须包含:用户旅程、页面清单与路由、API 调用清单、组件设计、状态管理\n\n`;
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
text += `**必含内容**:\n`;
|
|
466
|
+
for (const item of rubric.checklist) {
|
|
467
|
+
text += `- [ ] ${item}\n`;
|
|
468
|
+
}
|
|
469
|
+
text += `\n**禁止**:\n`;
|
|
470
|
+
for (const item of rubric.antiPatterns) {
|
|
471
|
+
text += `- ❌ ${item}\n`;
|
|
472
|
+
}
|
|
473
|
+
return text;
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* 校验已填充文档的内容质量
|
|
477
|
+
* 检查:最低字数、必含章节、表格是否有真实数据
|
|
478
|
+
*/
|
|
479
|
+
async function validateContentQuality(docName, content, platform) {
|
|
480
|
+
const issues = [];
|
|
481
|
+
let score = 100;
|
|
482
|
+
// 1. 最低字数检查(排除标记和空白)
|
|
483
|
+
const cleanContent = content
|
|
484
|
+
.replace(/<!--.*?-->/gs, '')
|
|
485
|
+
.replace(/^#+\s/gm, '')
|
|
486
|
+
.replace(/^>\s/gm, '')
|
|
487
|
+
.trim();
|
|
488
|
+
if (cleanContent.length < 200) {
|
|
489
|
+
issues.push(`内容过薄(${cleanContent.length} 字符,最低 200)`);
|
|
490
|
+
score -= 30;
|
|
491
|
+
}
|
|
492
|
+
else if (cleanContent.length < 500) {
|
|
493
|
+
issues.push(`内容偏少(${cleanContent.length} 字符,建议 500+)`);
|
|
494
|
+
score -= 10;
|
|
495
|
+
}
|
|
496
|
+
// 2. 必含章节检查
|
|
497
|
+
const rubric = exports.QUALITY_RUBRICS[docName];
|
|
498
|
+
if (rubric) {
|
|
499
|
+
const sectionMarkers = {
|
|
500
|
+
'REQUIREMENT.md': ['验收标准', '优先级', '涉及端'],
|
|
501
|
+
'ANALYSIS.md': ['P0', 'F-'],
|
|
502
|
+
'TECH.md': ['接口', '数据模型'],
|
|
503
|
+
'TEST.md': ['单元测试', '边界'],
|
|
504
|
+
'UI_SPEC.md': ['页面', '组件'],
|
|
505
|
+
'RISK.md': ['回滚'],
|
|
506
|
+
'MONITOR.md': ['告警'],
|
|
507
|
+
'FUNCTION_MAP.md': ['功能单元', '涉及端'],
|
|
508
|
+
'REQ.md': ['验收标准', '异常'],
|
|
509
|
+
'TASK.md': ['步骤'],
|
|
510
|
+
};
|
|
511
|
+
const markers = sectionMarkers[docName] || [];
|
|
512
|
+
for (const marker of markers) {
|
|
513
|
+
if (!content.includes(marker)) {
|
|
514
|
+
issues.push(`缺少关键内容:「${marker}」`);
|
|
515
|
+
score -= 10;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
// 3. 占位符残留检查
|
|
520
|
+
const placeholders = ['待填充', 'TODO', 'TBD', '_待定_', 'AI-FILL'];
|
|
521
|
+
for (const ph of placeholders) {
|
|
522
|
+
if (content.includes(ph)) {
|
|
523
|
+
issues.push(`含占位符残留:「${ph}」`);
|
|
524
|
+
score -= 5;
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
// 4. 表格数据检查(有表头但无数据行)
|
|
528
|
+
const tableHeaders = content.match(/^\|.+\|$/gm);
|
|
529
|
+
if (tableHeaders && tableHeaders.length > 0) {
|
|
530
|
+
const lines = content.split('\n');
|
|
531
|
+
for (let i = 0; i < lines.length; i++) {
|
|
532
|
+
if (/^\|.+\|$/.test(lines[i]) && lines[i].includes('---')) {
|
|
533
|
+
const nextLine = lines[i + 1] || '';
|
|
534
|
+
if (!/^\|.+\|$/.test(nextLine) || /^\|\s*\|$/.test(nextLine)) {
|
|
535
|
+
issues.push('表格有表头但无数据行');
|
|
536
|
+
score -= 10;
|
|
537
|
+
break;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
return {
|
|
543
|
+
pass: score >= 60 && issues.filter(i => i.includes('过薄')).length === 0,
|
|
544
|
+
score: Math.max(0, score),
|
|
545
|
+
issues,
|
|
546
|
+
};
|
|
547
|
+
}
|
|
548
|
+
// ================================================================
|
|
254
549
|
// Manifest 计算函数
|
|
255
550
|
// ================================================================
|
|
256
551
|
/**
|
|
@@ -327,8 +622,11 @@ async function generateSkeleton(specDir, entries) {
|
|
|
327
622
|
continue;
|
|
328
623
|
}
|
|
329
624
|
// 文件不存在 → 创建骨架
|
|
625
|
+
// v8.1.0+: 自动追加质量标准(AI 填充时可见质量要求)
|
|
330
626
|
await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fullPath));
|
|
331
|
-
|
|
627
|
+
const rubricSection = buildQualityRubRIC(entry.docName, entry.platform);
|
|
628
|
+
const fullContent = entry.placeholder + rubricSection;
|
|
629
|
+
await (0, fs_extra_1.writeFile)(fullPath, fullContent, 'utf-8');
|
|
332
630
|
result.created.push(entry.relPath);
|
|
333
631
|
}
|
|
334
632
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-skeleton.js","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spec-skeleton.js","sourceRoot":"","sources":["../../src/core/spec-skeleton.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-engine.d.ts","sourceRoot":"","sources":["../../src/core/verify-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"verify-engine.d.ts","sourceRoot":"","sources":["../../src/core/verify-engine.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAkBH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,CAAC;AAExE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAMD,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAO9E;AAyID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA0DnE;AAMD,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,YAAY,CAAC,CAmEvB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMhG;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAgD/E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAQvF;AAsYD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,YAAY,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACzE,OAAO,CAAC,iBAAiB,CAAC,CA2H5B;AAgID;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,OAAO,GAClB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
|
|
@@ -21,6 +21,7 @@ const fs_extra_1 = require("fs-extra");
|
|
|
21
21
|
const logger_1 = require("../utils/logger");
|
|
22
22
|
// v6.84.0+: AGENTS 引擎集成
|
|
23
23
|
const agents_1 = require("./agents");
|
|
24
|
+
const spec_skeleton_1 = require("./spec-skeleton");
|
|
24
25
|
// ============================================================
|
|
25
26
|
// 项目类型检测
|
|
26
27
|
// ============================================================
|
|
@@ -794,6 +795,12 @@ async function runQualityGate(taskId, codePath, taskDir, options) {
|
|
|
794
795
|
// 10. 错误码一致性(非阻塞,读取 ERROR_CODES.md)
|
|
795
796
|
logger_1.logger.info(' 🔢 错误码一致性...');
|
|
796
797
|
checks.push(await checkArtifactConsistency(codePath, taskDir, 'ERROR_CODES.md', '错误码一致性'));
|
|
798
|
+
// 11. 规格文档质量校验(v8.1.0+,检查 REQ.md/TECH.md 是否有实质内容)
|
|
799
|
+
logger_1.logger.info(' 📋 规格文档质量...');
|
|
800
|
+
checks.push(await checkSpecDocQuality(taskDir));
|
|
801
|
+
// 12. 代码文件非空检查(v8.1.0+,确保 src/ 下有实际代码)
|
|
802
|
+
logger_1.logger.info(' 📁 代码文件检查...');
|
|
803
|
+
checks.push(await checkCodeFilesExist(codePath));
|
|
797
804
|
// 汇总
|
|
798
805
|
const report = {
|
|
799
806
|
taskId,
|
|
@@ -858,6 +865,123 @@ async function runQualityGate(taskId, codePath, taskDir, options) {
|
|
|
858
865
|
return { passed, blockingFailed, warnings, report, agentChecks };
|
|
859
866
|
}
|
|
860
867
|
// ============================================================
|
|
868
|
+
// v8.1.0+: 规格文档质量校验 — 检查 REQ.md/TECH.md 是否有实质内容
|
|
869
|
+
// ============================================================
|
|
870
|
+
async function checkSpecDocQuality(taskDir) {
|
|
871
|
+
const start = Date.now();
|
|
872
|
+
const issues = [];
|
|
873
|
+
let totalScore = 0;
|
|
874
|
+
let checkedCount = 0;
|
|
875
|
+
// 扫描子任务目录下的 REQ.md 和 TECH.md
|
|
876
|
+
const specFiles = [];
|
|
877
|
+
const candidates = ['REQ.md', 'TECH.md'];
|
|
878
|
+
// 直接子目录(00-specs/)
|
|
879
|
+
for (const doc of candidates) {
|
|
880
|
+
const p = (0, path_1.join)(taskDir, '00-specs', doc);
|
|
881
|
+
if (await (0, fs_extra_1.pathExists)(p))
|
|
882
|
+
specFiles.push({ path: p, docName: doc });
|
|
883
|
+
}
|
|
884
|
+
// 端子任务目录(10-backend/*/subtask/, 20-frontend/*/subtask/)
|
|
885
|
+
for (const catDir of ['10-backend', '20-frontend']) {
|
|
886
|
+
const catPath = (0, path_1.join)(taskDir, catDir);
|
|
887
|
+
if (!(await (0, fs_extra_1.pathExists)(catPath)))
|
|
888
|
+
continue;
|
|
889
|
+
try {
|
|
890
|
+
const services = await (0, fs_extra_1.readdir)(catPath, { withFileTypes: true });
|
|
891
|
+
for (const svc of services) {
|
|
892
|
+
if (!svc.isDirectory())
|
|
893
|
+
continue;
|
|
894
|
+
const subs = await (0, fs_extra_1.readdir)((0, path_1.join)(catPath, svc.name), { withFileTypes: true });
|
|
895
|
+
for (const sub of subs) {
|
|
896
|
+
if (!sub.isDirectory())
|
|
897
|
+
continue;
|
|
898
|
+
for (const doc of candidates) {
|
|
899
|
+
const p = (0, path_1.join)(catPath, svc.name, sub.name, doc);
|
|
900
|
+
if (await (0, fs_extra_1.pathExists)(p))
|
|
901
|
+
specFiles.push({ path: p, docName: doc });
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
catch { /* 跳过 */ }
|
|
907
|
+
}
|
|
908
|
+
if (specFiles.length === 0) {
|
|
909
|
+
return {
|
|
910
|
+
name: '规格文档质量',
|
|
911
|
+
status: 'skip',
|
|
912
|
+
duration: Date.now() - start,
|
|
913
|
+
output: '未找到 REQ.md/TECH.md',
|
|
914
|
+
details: '未找到规格文档',
|
|
915
|
+
blocking: false,
|
|
916
|
+
};
|
|
917
|
+
}
|
|
918
|
+
for (const sf of specFiles) {
|
|
919
|
+
try {
|
|
920
|
+
const content = await (0, fs_extra_1.readFile)(sf.path, 'utf-8');
|
|
921
|
+
const result = await (0, spec_skeleton_1.validateContentQuality)(sf.docName, content);
|
|
922
|
+
totalScore += result.score;
|
|
923
|
+
checkedCount++;
|
|
924
|
+
if (result.score < 60) {
|
|
925
|
+
issues.push(`${sf.path.replace(taskDir + '/', '')}: ${result.score}/100 — ${result.issues.join(';')}`);
|
|
926
|
+
}
|
|
927
|
+
}
|
|
928
|
+
catch { /* skip */ }
|
|
929
|
+
}
|
|
930
|
+
const avgScore = checkedCount > 0 ? Math.round(totalScore / checkedCount) : 0;
|
|
931
|
+
const details = checkedCount > 0
|
|
932
|
+
? `${checkedCount} 个文档平均 ${avgScore}/100${issues.length > 0 ? `,${issues.length} 个不达标` : ''}`
|
|
933
|
+
: '无文档可检查';
|
|
934
|
+
return {
|
|
935
|
+
name: '规格文档质量',
|
|
936
|
+
status: issues.length > 0 ? 'warn' : 'pass',
|
|
937
|
+
duration: Date.now() - start,
|
|
938
|
+
output: issues.join('\n'),
|
|
939
|
+
details,
|
|
940
|
+
blocking: false,
|
|
941
|
+
};
|
|
942
|
+
}
|
|
943
|
+
// ============================================================
|
|
944
|
+
// v8.1.0+: 代码文件非空检查 — 确保 src/ 下有实际代码
|
|
945
|
+
// ============================================================
|
|
946
|
+
async function checkCodeFilesExist(codePath) {
|
|
947
|
+
const start = Date.now();
|
|
948
|
+
const srcDir = (0, path_1.join)(codePath, 'src');
|
|
949
|
+
const codeExts = ['.ts', '.js', '.java', '.go', '.py', '.vue', '.jsx', '.tsx'];
|
|
950
|
+
let codeFileCount = 0;
|
|
951
|
+
async function countCodeFiles(dir) {
|
|
952
|
+
if (!(await (0, fs_extra_1.pathExists)(dir)))
|
|
953
|
+
return;
|
|
954
|
+
try {
|
|
955
|
+
const entries = await (0, fs_extra_1.readdir)(dir, { withFileTypes: true });
|
|
956
|
+
for (const entry of entries) {
|
|
957
|
+
if (entry.isDirectory()) {
|
|
958
|
+
await countCodeFiles((0, path_1.join)(dir, entry.name));
|
|
959
|
+
}
|
|
960
|
+
else if (codeExts.some(ext => entry.name.endsWith(ext))) {
|
|
961
|
+
codeFileCount++;
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
catch { /* skip */ }
|
|
966
|
+
}
|
|
967
|
+
await countCodeFiles(srcDir);
|
|
968
|
+
// 也检查 tests/ 目录
|
|
969
|
+
let testFileCount = 0;
|
|
970
|
+
const testDir = (0, path_1.join)(codePath, 'tests');
|
|
971
|
+
await countCodeFiles(testDir).then(() => {
|
|
972
|
+
testFileCount = codeFileCount - testFileCount;
|
|
973
|
+
// 重新计算:只统计 tests/
|
|
974
|
+
});
|
|
975
|
+
return {
|
|
976
|
+
name: '代码文件检查',
|
|
977
|
+
status: codeFileCount === 0 ? 'warn' : 'pass',
|
|
978
|
+
duration: Date.now() - start,
|
|
979
|
+
output: codeFileCount === 0 ? 'src/ 目录无代码文件' : `发现 ${codeFileCount} 个代码文件`,
|
|
980
|
+
details: codeFileCount === 0 ? 'src/ 无代码文件' : `${codeFileCount} 个代码文件`,
|
|
981
|
+
blocking: false,
|
|
982
|
+
};
|
|
983
|
+
}
|
|
984
|
+
// ============================================================
|
|
861
985
|
// v6.79.0+: 文档同步 — 根据实际测试结果更新 TEST.md
|
|
862
986
|
// ============================================================
|
|
863
987
|
/**
|