fix(tm):建立 Trusted 唯一性与 Supersede 治理

This commit is contained in:
2026-09-18 06:44:14 +08:00
parent e486f1aaaa
commit ff1adb91ee
37 changed files with 2679 additions and 530 deletions
+66 -9
View File
@@ -479,9 +479,10 @@ const (
type TranslationMemoryMatchKind string
const (
TranslationMemoryMatchStrongExact TranslationMemoryMatchKind = "strong_exact"
TranslationMemoryMatchCandidateExact TranslationMemoryMatchKind = "candidate_exact"
TranslationMemoryMatchSourceOnly TranslationMemoryMatchKind = "source_only"
TranslationMemoryMatchStrongExact TranslationMemoryMatchKind = "strong_exact"
TranslationMemoryMatchTrustedConflict TranslationMemoryMatchKind = "trusted_conflict"
TranslationMemoryMatchCandidateExact TranslationMemoryMatchKind = "candidate_exact"
TranslationMemoryMatchSourceOnly TranslationMemoryMatchKind = "source_only"
)
// TranslationMemorySummaryParams selects an optional Rust-owned TM database.
@@ -504,16 +505,19 @@ type TranslationMemoryConfirmParams struct {
RecordID string `json:"record_id"`
Reviewer string `json:"reviewer"`
Reason string `json:"reason,omitempty"`
SupersedeRecordID string `json:"supersede_record_id,omitempty"`
}
// TranslationMemorySummary mirrors translation.memory.summary data.
type TranslationMemorySummary struct {
SchemaVersion uint64 `json:"schema_version"`
RecordCount uint64 `json:"record_count"`
TrustedCount uint64 `json:"trusted_count"`
CandidateCount uint64 `json:"candidate_count"`
SupersededCount uint64 `json:"superseded_count"`
RejectedCount uint64 `json:"rejected_count"`
SchemaVersion uint64 `json:"schema_version"`
RecordCount uint64 `json:"record_count"`
TrustedCount uint64 `json:"trusted_count"`
CandidateCount uint64 `json:"candidate_count"`
SupersededCount uint64 `json:"superseded_count"`
RejectedCount uint64 `json:"rejected_count"`
TrustedConflictGroupCount uint64 `json:"trusted_conflict_group_count"`
CurrentTrustedCount uint64 `json:"current_trusted_count,omitempty"`
}
// TranslationMemorySummaryReport distinguishes a missing database from an
@@ -591,6 +595,47 @@ type TranslationMemoryConfirmReport struct {
Entry TranslationMemoryEntry `json:"entry"`
}
// TranslationMemoryConflict groups all records sharing one exact source
// identity when more than one current Trusted record exists.
type TranslationMemoryConflict struct {
SourceText string `json:"source_text"`
SourceHash string `json:"source_hash"`
SourceContext TranslationMemoryContext `json:"source_context,omitempty"`
SourceContextHash string `json:"source_context_hash"`
TrustedRecordIDs []string `json:"trusted_record_ids"`
Records []TranslationMemoryEntry `json:"records"`
}
// TranslationMemoryConflictsParams lists current Trusted conflicts.
type TranslationMemoryConflictsParams struct {
TranslationMemoryPath string `json:"translation_memory_path,omitempty"`
Limit *uint64 `json:"limit,omitempty"`
}
// TranslationMemoryConflictsReport mirrors translation.memory.conflicts data.
type TranslationMemoryConflictsReport struct {
Available bool `json:"available"`
Path string `json:"path"`
Conflicts []TranslationMemoryConflict `json:"conflicts"`
Reason string `json:"reason,omitempty"`
}
// TranslationMemoryResolveConflictParams resolves one exact-identity conflict.
type TranslationMemoryResolveConflictParams struct {
TranslationMemoryPath string `json:"translation_memory_path,omitempty"`
WinnerRecordID string `json:"winner_record_id"`
ExpectedTrustedRecordIDs []string `json:"expected_trusted_record_ids"`
Reviewer string `json:"reviewer"`
Reason string `json:"reason"`
}
// TranslationMemoryResolveConflictReport mirrors the conflict resolution result.
type TranslationMemoryResolveConflictReport struct {
Available bool `json:"available"`
Path string `json:"path"`
Entry TranslationMemoryEntry `json:"entry"`
}
// GlossaryReviewStatus is the Rust-owned term review state.
type GlossaryReviewStatus string
@@ -1067,6 +1112,18 @@ func (c *Client) TranslationMemoryConfirm(ctx context.Context, params Translatio
return &out, err
}
func (c *Client) TranslationMemoryConflicts(ctx context.Context, params TranslationMemoryConflictsParams) (*TranslationMemoryConflictsReport, error) {
var out TranslationMemoryConflictsReport
_, err := c.Call(ctx, "translation.memory.conflicts", params, &out)
return &out, err
}
func (c *Client) TranslationMemoryResolveConflict(ctx context.Context, params TranslationMemoryResolveConflictParams) (*TranslationMemoryResolveConflictReport, error) {
var out TranslationMemoryResolveConflictReport
_, err := c.Call(ctx, "translation.memory.resolve_conflict", params, &out)
return &out, err
}
func (c *Client) GlossarySummary(ctx context.Context, params GlossarySummaryParams) (*GlossarySummaryReport, error) {
var out GlossarySummaryReport
_, err := c.Call(ctx, "translation.glossary.summary", params, &out)