Files
Assistant/tests/research_runtime/persisted_research_test.go
m 7a14973e9a
CI / test (push) Successful in 25s
CI / test (pull_request) Successful in 23s
feat(research): run private evidence persistence runtime
2026-08-22 15:23:43 +03:00

30 lines
1.6 KiB
Go

package research_runtime_test
import (
"context"
"testing"
"git.cin.su/m/Assistant/contracts/epistemics"
"git.cin.su/m/Assistant/modules/epistemics/application"
)
type store struct{ saved []epistemics.TruthBundle }
func (s *store) SaveTruthBundle(_ context.Context, value epistemics.TruthBundle, _ int64) error {
s.saved = append(s.saved, value)
return nil
}
func TestEvaluateAndPersistStoresExactCandidateChain(t *testing.T) {
candidate := epistemics.ResearchCandidate{
PropositionKey: "p1", Statement: "fact", Source: epistemics.Source{ID: "source-1", Kind: "repo", Locator: "file:///repo/doc", Title: "doc"},
Snapshot: epistemics.SourceSnapshot{ID: "snapshot-1", SourceID: "source-1", ContentDigest: "sha256:x", CapturedAtUnixMillis: 10, Freshness: epistemics.FreshnessCurrent},
Excerpt: epistemics.SourceExcerpt{ID: "excerpt-1", SnapshotID: "snapshot-1", Text: "fact", Start: 0, End: 4}, Evidence: epistemics.EvidenceObserved, Coverage: epistemics.CoverageComplete, Conflict: epistemics.ConflictNone,
}
store := &store{}
result, err := application.EvaluateAndPersist(context.Background(), epistemics.ResearchEvaluationRequest{Plan: epistemics.ResearchPlan{ID: "plan-1", Question: "q", SourceClasses: []string{"repo"}, FreshnessPolicy: "current"}, Candidates: []epistemics.ResearchCandidate{candidate}}, store, 20)
if err != nil || len(result.Findings) != 1 || len(store.saved) != 1 || store.saved[0].Excerpt.ID != candidate.Excerpt.ID || store.saved[0].Source.Locator != candidate.Source.Locator {
t.Fatalf("result=%#v saved=%#v err=%v", result, store.saved, err)
}
}