package domain_test import ( "git.cin.su/m/Assistant/contracts/capability" "git.cin.su/m/Assistant/modules/capability/domain" "testing" ) func TestReflexActiveRequiresEvidenceAndFallbacks(t *testing.T) { v := capability.ReflexRevision{ReflexID: "r", SourceSkillRevision: 1, Kind: capability.ReflexRule, ImplementationRef: "rule", Lifecycle: capability.ReflexActive, RecordedAt: 1} if domain.ValidateReflexRevision(v) == nil { t.Fatal("active reflex without evidence") } v.ValidationEvidenceRefs = []capability.SkillEvidenceRef{"eval"} if err := domain.ValidateReflexRevision(v); err != nil { t.Fatal(err) } if domain.ReflexFallback(capability.FastPathDecision{Decision: capability.FastPathEscalate}) != "skill->reasoning" { t.Fatal("missing escalation") } } func TestReflexRequiresStableSkillAndShadowDivergenceOnlyRequestsReview(t *testing.T) { skill := capability.SkillProfile{ID: "s", Revision: 4, Name: "bounded", Description: "bounded", Status: capability.SkillActive, ConfidenceMillis: 900, RecordedAtUnixMillis: 1, VerifiedOutcomeCount: 3} candidate, err := domain.CandidateReflex(skill, capability.ReflexRevision{ReflexID: "r", Revision: 1, Kind: capability.ReflexRule, ImplementationRef: "rule", RecordedAt: 1}, "verifier:success", 2) if err != nil || candidate.Lifecycle != capability.ReflexCandidate { t.Fatalf("candidate=%#v err=%v", candidate, err) } active, err := domain.ValidateAndActivateReflex(candidate, "evaluation:independent", true, 3) if err != nil || active.Lifecycle != capability.ReflexActive { t.Fatalf("active=%#v err=%v", active, err) } next, review, err := domain.ObserveShadow(active, capability.ShadowComparison{ReflexID: "r", ReflexRevision: active.Revision, EvidenceRefs: []capability.SkillEvidenceRef{"shadow:1"}, VerifierPassed: false, Diverged: true, ObservedAt: 4}) if err != nil || !review || next.Lifecycle != capability.ReflexStale { t.Fatalf("next=%#v review=%t err=%v", next, review, err) } }