828c2c5fa0
build / build (push) Successful in 1m6s
使用完整筛选范围的当前有效结论计算覆盖率和正确率,人工优先,失效与对应待确认/未评估/不计入排除;零分母返回null,界面展示原始分子分母和排除构成,前端拒绝不守恒或比例不一致的响应。 验证:make verify退出码0,Go658及前端257通过,91项声明可选集成跳过;隔离PG、三包竞态及合成/真实只读源浏览器验证通过。无新增迁移,不接AI模型,不改绩效,不写源库;本批未推送或部署,8088运行版保持0.1.21。
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package qaopsquality
|
|
|
|
type Rate struct {
|
|
Numerator int `json:"numerator"`
|
|
Denominator int `json:"denominator"`
|
|
Percent *float64 `json:"percent"`
|
|
}
|
|
type RateBreakdown struct {
|
|
Covered int `json:"covered"`
|
|
Uncovered int `json:"uncovered"`
|
|
Partial int `json:"partial"`
|
|
Pending int `json:"pending"`
|
|
Unassessed int `json:"unassessed"`
|
|
Excluded int `json:"excluded"`
|
|
Stale int `json:"stale"`
|
|
CoveredCorrect int `json:"covered_correct"`
|
|
CoveredIncorrect int `json:"covered_incorrect"`
|
|
CoveredPending int `json:"covered_pending"`
|
|
CoveredUnassessed int `json:"covered_unassessed"`
|
|
}
|
|
type Rates struct {
|
|
PolicyVersion string `json:"policy_version"`
|
|
Coverage Rate `json:"coverage"`
|
|
Correctness Rate `json:"correctness"`
|
|
Breakdown RateBreakdown `json:"breakdown"`
|
|
}
|
|
|
|
func ComputeRates(views map[string]View) Rates {
|
|
out := Rates{PolicyVersion: "quality-rates-human-first-v1"}
|
|
b := &out.Breakdown
|
|
for _, v := range views {
|
|
if v.State == "stale" {
|
|
b.Stale++
|
|
continue
|
|
}
|
|
switch v.Effective.Coverage {
|
|
case "covered":
|
|
b.Covered++
|
|
switch v.Effective.Correctness {
|
|
case "correct":
|
|
b.CoveredCorrect++
|
|
case "incorrect":
|
|
b.CoveredIncorrect++
|
|
case "pending":
|
|
b.CoveredPending++
|
|
default:
|
|
b.CoveredUnassessed++
|
|
}
|
|
case "uncovered":
|
|
b.Uncovered++
|
|
case "partial":
|
|
b.Partial++
|
|
case "pending":
|
|
b.Pending++
|
|
case "excluded":
|
|
b.Excluded++
|
|
default:
|
|
b.Unassessed++
|
|
}
|
|
}
|
|
out.Coverage = makeRate(b.Covered, b.Covered+b.Uncovered+b.Partial)
|
|
out.Correctness = makeRate(b.CoveredCorrect, b.CoveredCorrect+b.CoveredIncorrect)
|
|
return out
|
|
}
|
|
func makeRate(numerator, denominator int) Rate {
|
|
r := Rate{Numerator: numerator, Denominator: denominator}
|
|
if denominator > 0 {
|
|
p := 100 * float64(numerator) / float64(denominator)
|
|
r.Percent = &p
|
|
}
|
|
return r
|
|
}
|