Files
knowledge-governance/internal/qaopsquality/quality.go
T
姚章浩 533db535f1
build / build (push) Successful in 1m12s
feat(qaops): 接入真实模型补缺任务与总表看板
按已确认需求提供独立安全模型配置、真实探测、正式字典字段评估与原问题译中,持久批次支持只补空白、暂停恢复、有限重试、幂等和逐字段依据。覆盖固定规则、本地语言、组织关联与主表有效看板共用治理侧读模型,保留源生产和冻结历史。

验证:完整 make verify 退出0,702项Go与329项前端通过;默认118项外部/隔离集成明确跳过,另跑完整镜像及组织隔离PG竞态。12并发、输入漂移、过期租约、暂停/恢复及有限重试通过。用户授权的百炼 deepseek-v4.1-flash 完成真实后台与浏览器评估/翻译;552行、16列、11块看板及完整PNG、独立配置页测试/保存、重开恢复和零JS异常通过。仅非业务样本外发,自动处理关闭,原payload不变。

上线前治理库已做导出快照原生备份并真实恢复,60表行数与17个QA表内容哈希一致;不修改DobotAI生产或隧道。本提交时尚未部署,线上验收须独立完成。
2026-10-19 14:29:49 +08:00

101 lines
3.3 KiB
Go

package qaopsquality
import (
"encoding/json"
"errors"
"github.com/jackc/pgx/v5/pgxpool"
"knowledge-governance/internal/dobotaiops"
"time"
)
var ErrInvalid = errors.New("invalid quality request")
var ErrConflict = errors.New("quality input or review revision changed")
var ErrUnavailable = errors.New("quality store unavailable")
var ErrNotFound = errors.New("quality input snapshot not found")
var ErrSnapshotMissing = errors.New("only quality metadata was observed for this input")
type Fields struct {
Coverage string `json:"coverage"`
Correctness string `json:"correctness"`
ProductCategory string `json:"product_category"`
ProblemType string `json:"problem_type"`
RootCause string `json:"root_cause"`
ExclusionReason string `json:"exclusion_reason"`
}
type SaveRequest struct {
InputHash string `json:"input_hash"`
InputEpoch int64 `json:"input_epoch"`
BaseRevision int64 `json:"base_revision"`
Nonce string `json:"nonce"`
Fields Fields `json:"fields"`
Reason string `json:"reason"`
}
type Review struct {
Revision int64 `json:"revision"`
InputEpoch int64 `json:"input_epoch"`
InputHash string `json:"input_hash"`
Fields Fields `json:"fields"`
Reason string `json:"reason"`
Reviewer string `json:"reviewer"`
CreatedAt time.Time `json:"created_at"`
}
type Check struct {
InputAvailable bool `json:"input_available"`
ID int64 `json:"id"`
InputEpoch int64 `json:"input_epoch"`
InputHash string `json:"input_hash"`
Result dobotaiops.CoverageCheck `json:"result"`
Source dobotaiops.SourceCoverage `json:"source"`
CreatedAt time.Time `json:"created_at"`
}
type View struct {
EffectiveSource string `json:"effective_source,omitempty"`
InputHash string `json:"input_hash"`
InputEpoch int64 `json:"input_epoch"`
Revision int64 `json:"revision"`
State string `json:"state"`
Automatic Check `json:"automatic"`
LatestReview *Review `json:"latest_review"`
Effective Fields `json:"effective"`
}
type History struct {
Reviews []Review `json:"reviews"`
Checks []Check `json:"checks"`
NextReview int64 `json:"next_review"`
NextCheck int64 `json:"next_check"`
}
type Summary struct {
Rates Rates `json:"rates"`
Total int `json:"total"`
Reviewed int `json:"reviewed"`
Unreviewed int `json:"unreviewed"`
Stale int `json:"stale"`
PendingConfirmation int `json:"pending_confirmation"`
RuleUncovered int `json:"rule_uncovered"`
}
type Receipt struct {
View View `json:"view"`
SavedRevision int64 `json:"saved_revision"`
Replayed bool `json:"replayed"`
}
type Evidence struct {
Result dobotaiops.CoverageCheck
Hash string
Payload json.RawMessage
Record dobotaiops.Record
}
type Snapshot struct {
InputEpoch int64 `json:"input_epoch"`
InputHash string `json:"input_hash"`
Payload json.RawMessage `json:"payload"`
CreatedAt time.Time `json:"created_at"`
}
type Store struct {
pool *pgxpool.Pool
tenant string
}
func NewStore(pool *pgxpool.Pool, tenant string) *Store { return &Store{pool: pool, tenant: tenant} }