533db535f1
build / build (push) Successful in 1m12s
按已确认需求提供独立安全模型配置、真实探测、正式字典字段评估与原问题译中,持久批次支持只补空白、暂停恢复、有限重试、幂等和逐字段依据。覆盖固定规则、本地语言、组织关联与主表有效看板共用治理侧读模型,保留源生产和冻结历史。 验证:完整 make verify 退出0,702项Go与329项前端通过;默认118项外部/隔离集成明确跳过,另跑完整镜像及组织隔离PG竞态。12并发、输入漂移、过期租约、暂停/恢复及有限重试通过。用户授权的百炼 deepseek-v4.1-flash 完成真实后台与浏览器评估/翻译;552行、16列、11块看板及完整PNG、独立配置页测试/保存、重开恢复和零JS异常通过。仅非业务样本外发,自动处理关闭,原payload不变。 上线前治理库已做导出快照原生备份并真实恢复,60表行数与17个QA表内容哈希一致;不修改DobotAI生产或隧道。本提交时尚未部署,线上验收须独立完成。
101 lines
3.3 KiB
Go
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} }
|