Files
knowledge-governance/internal/qaopsquality/quality.go
T
姚章浩 09b2c1dce5
build / build (push) Successful in 1m17s
fix(qa): 表头筛选并统一未覆盖正确性待确认
修正筛选入口位置:五项条件在表头就地选择,保持完整集筛选与无感续载。
统一固定规则:未覆盖一律待确认,原问答/人工模型证据不改写,已覆盖仍保留点踩优先。
验证:行为红绿、前端/Go全套及隔离PostgreSQL全mirror竞态通过;完整本地门禁与原生备份真实恢复通过。
2026-10-25 13:58:08 +08:00

105 lines
3.7 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 ErrDownvoted = errors.New("active downvote forces incorrect correctness")
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 {
CorrectnessRule string `json:"correctness_rule,omitempty"`
FeedbackRule string `json:"feedback_rule,omitempty"`
MasterFeedback *dobotaiops.RecordFeedback `json:"-"`
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} }