feat(GOV-002): 增加 PRD 与开发审查门禁

This commit is contained in:
2026-08-12 18:26:31 +08:00
parent 40f3b2ef6f
commit fb4383f541
38 changed files with 609 additions and 14 deletions
+19
View File
@@ -4,6 +4,7 @@ const FEATURE_ID_PATTERN = /^(?:FEAT-[A-Z]{2,8}|GOV)-\d{3}$/;
const REQUIRED_FEATURE_FILES = Object.freeze([
'manifest.yaml',
'prd.md',
'requirements.md',
'design.md',
'implementation-plan.md',
@@ -15,10 +16,17 @@ const REQUIRED_FEATURE_FILES = Object.freeze([
'gitnexus/comparison.md',
'qa/test-results.md',
'qa/visual-qa.md',
'review/code-review.md',
'review/standards-review.md',
'release-notes.md',
'rollback.md',
]);
const REVIEW_FILES = Object.freeze([
'review/code-review.md',
'review/standards-review.md',
]);
/**
* 功能编号是需求、设计、代码提交、测试结果和发布记录之间的主关联键。
* 严格限制格式可以避免路径穿越、临时名称以及后续无法检索的模糊编号。
@@ -49,3 +57,14 @@ export function getFeatureDirectory(repositoryRoot, featureId, slug) {
export function getRequiredFeatureFiles() {
return [...REQUIRED_FEATURE_FILES];
}
/**
* Review 报告不能只靠“文件存在”通过门禁。这里要求报告使用固定的最终结论行,
* 避免 pending、blocked 或 changes_required 被一段其他说明文字意外判定为通过。
*/
export function getUnpassedReviewFiles(reviewReports) {
return REVIEW_FILES.filter((file) => {
const content = reviewReports.get(file) ?? '';
return !/^最终结论:passed$/m.test(content);
});
}