Files
Agent-System/internal/workflowdef/catalog_policy.go
weichenandCursor 909384c335 feat(workflow): SWBOOT-02..04 software manifests and catalog allowlist
Add software_bootstrap/delivery v2 manifests, expand selectable keys to
five, keep medical doc-count gates, and filter catalog by product_domain.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 15:39:01 +00:00

126 lines
3.8 KiB
Go

package workflowdef
// 正式项目可选工作流(唯一对外目录)。
// 包含医疗三工作流 + 纯软件 bootstrap/delivery;不得把医疗语义硬塞进软件 key。
const (
OfficialKeyMain = "main"
OfficialKeyProductManager = "product_manager"
OfficialKeyTestManager = "test_manager"
OfficialKeySoftwareBootstrap = "software_bootstrap"
OfficialKeySoftwareDelivery = "software_delivery"
)
var officialWorkflowKeys = map[string]struct{}{
OfficialKeyMain: {},
OfficialKeyProductManager: {},
OfficialKeyTestManager: {},
OfficialKeySoftwareBootstrap: {},
OfficialKeySoftwareDelivery: {},
}
var medicalWorkflowKeys = map[string]struct{}{
OfficialKeyMain: {},
OfficialKeyProductManager: {},
OfficialKeyTestManager: {},
}
var officialWorkflowNames = map[string]string{
OfficialKeyMain: "商务对接流程",
OfficialKeyProductManager: "智能产品经理流程",
OfficialKeyTestManager: "智能测试工程师流程",
OfficialKeySoftwareBootstrap: "软件项目自举流程",
OfficialKeySoftwareDelivery: "软件交付迭代流程",
}
var officialCatalogOrder = map[string]int{
OfficialKeyMain: 10,
OfficialKeyProductManager: 20,
OfficialKeyTestManager: 30,
OfficialKeySoftwareBootstrap: 40,
OfficialKeySoftwareDelivery: 50,
}
var officialProductDomains = map[string][]string{
OfficialKeyMain: {"medical_device", "non_medical_software"},
OfficialKeyProductManager: {"medical_device", "non_medical_software"},
OfficialKeyTestManager: {"medical_device", "non_medical_software"},
OfficialKeySoftwareBootstrap: {"non_medical_software"},
OfficialKeySoftwareDelivery: {"non_medical_software"},
}
// IsOfficialWorkflowKey 是否为正式可选工作流 key(医疗三 + 软件两)。
func IsOfficialWorkflowKey(key string) bool {
_, ok := officialWorkflowKeys[key]
return ok
}
// IsMedicalWorkflowKey 是否为医疗既有三工作流(固定文档数等门禁仍仅约束它们)。
func IsMedicalWorkflowKey(key string) bool {
_, ok := medicalWorkflowKeys[key]
return ok
}
// IsSoftwareWorkflowKey 是否为纯软件正式工作流。
func IsSoftwareWorkflowKey(key string) bool {
return key == OfficialKeySoftwareBootstrap || key == OfficialKeySoftwareDelivery
}
// OfficialWorkflowName 返回正式对外名称。
func OfficialWorkflowName(key string) string {
if name, ok := officialWorkflowNames[key]; ok {
return name
}
return key
}
// OfficialCatalogOrder 返回目录排序权重。
func OfficialCatalogOrder(key string) int {
if order, ok := officialCatalogOrder[key]; ok {
return order
}
return 9999
}
// OfficialWorkflowKeys 返回正式可选 key 列表(稳定顺序)。
func OfficialWorkflowKeys() []string {
return []string{
OfficialKeyMain,
OfficialKeyProductManager,
OfficialKeyTestManager,
OfficialKeySoftwareBootstrap,
OfficialKeySoftwareDelivery,
}
}
// MedicalWorkflowKeys 返回医疗三 key(稳定顺序)。
func MedicalWorkflowKeys() []string {
return []string{OfficialKeyMain, OfficialKeyProductManager, OfficialKeyTestManager}
}
// SoftwareWorkflowKeys 返回软件两 key(稳定顺序)。
func SoftwareWorkflowKeys() []string {
return []string{OfficialKeySoftwareBootstrap, OfficialKeySoftwareDelivery}
}
// CompatibleWithProductDomain 判断工作流是否与项目产品域兼容。
// 空 domain 视为不过滤(兼容旧项目);软件 key 在 medical_device 下不可选。
func CompatibleWithProductDomain(workflowKey, productDomain string) bool {
if !IsOfficialWorkflowKey(workflowKey) {
return false
}
domain := productDomain
if domain == "" {
return true
}
allowed, ok := officialProductDomains[workflowKey]
if !ok {
return false
}
for _, d := range allowed {
if d == domain {
return true
}
}
return false
}