package application import ( "context" "git.cin.su/m/Assistant/contracts/epistemics" domain "git.cin.su/m/Assistant/modules/epistemics/domain" ) type TruthBundleStore interface { SaveTruthBundle(context.Context, epistemics.TruthBundle, int64) error } // EvaluateAndPersist evaluates only supplied immutable connector evidence and // persists the exact source chain used by each candidate. It never performs a // network fetch and never promotes a belief to verified state. func EvaluateAndPersist(ctx context.Context, request epistemics.ResearchEvaluationRequest, store TruthBundleStore, evaluatedAtUnixMillis int64) (epistemics.ResearchResult, error) { result, err := (ResearchService{Connector: staticConnector{candidates: request.Candidates}}).Evaluate(ctx, request.Plan, evaluatedAtUnixMillis) if err != nil { return epistemics.ResearchResult{}, err } for _, candidate := range request.Candidates { bundle, err := domain.CompileObservedClaim(candidate.Source, candidate.Snapshot, candidate.Excerpt, candidate.Statement, candidate.Snapshot.CapturedAtUnixMillis, candidate.Conflict) if err != nil { return epistemics.ResearchResult{}, err } if err := store.SaveTruthBundle(ctx, bundle, evaluatedAtUnixMillis); err != nil { return epistemics.ResearchResult{}, err } } return result, nil } type staticConnector struct { candidates []epistemics.ResearchCandidate } func (c staticConnector) Collect(context.Context, epistemics.ResearchPlan) ([]epistemics.ResearchCandidate, error) { return c.candidates, nil }