Each rdev step now gets a role-filtered overlay so writing discipline stays out of the template. User needs, system requirements, review minutes, and upload indexes fail the quality gate when IDs, decisions, or attachment indexes are incomplete. Co-authored-by: Cursor <cursoragent@cursor.com>
53 lines
1.5 KiB
Go
53 lines
1.5 KiB
Go
package workflow
|
|
|
|
import "fmt"
|
|
|
|
// ExecutorRegistry 执行器注册表(schema v2 发布校验与运行时解析)。
|
|
var ExecutorRegistry = map[string]struct{}{
|
|
"bizdev.stage.v1": {},
|
|
"squad.system_reqs.v1": {},
|
|
"squad.test_manager.v1": {},
|
|
"squad.rdev_doc.v1": {},
|
|
"bizdev.intake.v1": {},
|
|
"bizdev.research.v1": {},
|
|
"bizdev.feasibility.v1": {},
|
|
"bizdev.feasibility_dev.v1": {},
|
|
"bizdev.user_requirements.v1": {},
|
|
"bizdev.prelim_design.v1": {},
|
|
"bizdev.cdo_quote.v1": {},
|
|
"software.doc.v1": {},
|
|
}
|
|
|
|
// QualityGateRegistry 确定性质量门禁注册表。
|
|
var QualityGateRegistry = map[string]struct{}{
|
|
"quality.system_reqs.v2": {},
|
|
"quality.test_manager.v2": {},
|
|
"quality.generic.v1": {},
|
|
"quality.rd_user_needs.v1": {},
|
|
"quality.rd_system_reqs.v1": {},
|
|
"quality.rd_review_minutes.v1": {},
|
|
"quality.rd_upload_index.v1": {},
|
|
}
|
|
|
|
// ValidateExecutorKey 校验执行器已注册。
|
|
func ValidateExecutorKey(key string) error {
|
|
if key == "" {
|
|
return fmt.Errorf("executor_key required")
|
|
}
|
|
if _, ok := ExecutorRegistry[key]; !ok {
|
|
return fmt.Errorf("unknown executor_key %q", key)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// ValidateQualityGateKey 校验质量门禁已注册。
|
|
func ValidateQualityGateKey(key string) error {
|
|
if key == "" {
|
|
return nil
|
|
}
|
|
if _, ok := QualityGateRegistry[key]; !ok {
|
|
return fmt.Errorf("unknown quality_gate_key %q", key)
|
|
}
|
|
return nil
|
|
}
|