Files
weichenandCursor b550911667 feat(squad): load rdev overlays and enforce document gates
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>
2026-09-19 10:12:10 +00:00

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
}