Files
Assistant/modules/epistemics/domain/truth.go
m 53f86e4176
CI / test (push) Successful in 25s
CI / test (pull_request) Successful in 21s
feat(epistemics): persist truth bundles with source provenance
2026-08-22 15:16:42 +03:00

32 lines
1.8 KiB
Go

package domain
import (
"errors"
"strings"
"git.cin.su/m/Assistant/contracts/epistemics"
)
var ErrInvalidTruthBundle = errors.New("invalid truth bundle")
func CompileObservedClaim(source epistemics.Source, snapshot epistemics.SourceSnapshot, excerpt epistemics.SourceExcerpt, statement string, observedAt int64, conflict epistemics.ConflictState) (epistemics.TruthBundle, error) {
if strings.TrimSpace(statement) == "" || observedAt < 1 {
return epistemics.TruthBundle{}, ErrInvalidTruthBundle
}
citation, err := epistemics.ResolveCitation(source, snapshot, excerpt, epistemics.EvidenceObserved, epistemics.CoverageComplete, conflict, observedAt)
if err != nil {
return epistemics.TruthBundle{}, ErrInvalidTruthBundle
}
observation := epistemics.Observation{ID: epistemics.ObservationID("observation:" + string(excerpt.ID)), SourceSnapshot: snapshot.ID, Excerpt: excerpt.ID, Text: excerpt.Text, ObservedAt: observedAt}
claim := epistemics.Claim{ID: epistemics.ClaimID("claim:" + string(excerpt.ID)), Statement: statement, ObservationID: observation.ID, CitationID: citation.ID, Verification: epistemics.VerificationUnverified}
state := epistemics.BeliefProvisional
if conflict == epistemics.ConflictPresent || conflict == epistemics.ConflictUnknown {
state = epistemics.BeliefConflicted
}
bundle := epistemics.TruthBundle{Source: source, Snapshot: snapshot, Excerpt: excerpt, Observation: observation, Claim: claim, Belief: epistemics.Belief{ID: epistemics.BeliefID("belief:" + string(excerpt.ID)), ClaimID: claim.ID, State: state}, Citation: citation}
if bundle.Observation.SourceSnapshot != snapshot.ID || bundle.Claim.ObservationID != bundle.Observation.ID || bundle.Claim.CitationID != bundle.Citation.ID || bundle.Belief.ClaimID != bundle.Claim.ID {
return epistemics.TruthBundle{}, ErrInvalidTruthBundle
}
return bundle, nil
}