package main import ( "context" "testing" "time" "git.cin.su/m/Assistant/contracts/capability" "git.cin.su/m/Assistant/contracts/epistemics" "git.cin.su/m/Assistant/contracts/interaction" ) type learningEpistemicsStub struct { experiences []epistemics.ExperienceRecord } func (s *learningEpistemicsStub) SaveSystemExpectation(context.Context, epistemics.SystemExpectation) error { return nil } func (s *learningEpistemicsStub) SaveExperienceRecord(_ context.Context, value epistemics.ExperienceRecord) error { s.experiences = append(s.experiences, value) return nil } func (s *learningEpistemicsStub) SaveReflectionCandidate(context.Context, epistemics.ReflectionCandidate) error { return nil } type learningCapabilityStub struct { loadCalls int saveCalls int } func (s *learningCapabilityStub) LoadSkillProfile(context.Context, capability.SkillProfileID) (capability.SkillProfile, error) { s.loadCalls++ return capability.SkillProfile{}, nil } func (s *learningCapabilityStub) SaveSkillProfile(context.Context, capability.SkillProfile) error { s.saveCalls++ return nil } func TestGenericCorrectionDoesNotDegradeReminderSkill(t *testing.T) { epistemicsStore := &learningEpistemicsStub{} capabilityStore := &learningCapabilityStub{} recorder := learningRecorder{epistemics: epistemicsStore, capability: capabilityStore} recorder.recordCorrection(context.Background(), correctionLearningInput{ Intent: interaction.OriginalHumanIntent{ID: "intent-1"}, Utterance: interaction.HumanUtterance{ID: "utterance-1"}, At: time.UnixMilli(1000), }) if capabilityStore.loadCalls != 0 || capabilityStore.saveCalls != 0 { t.Fatalf("generic correction must not mutate reminder skill: load=%d save=%d", capabilityStore.loadCalls, capabilityStore.saveCalls) } if len(epistemicsStore.experiences) != 1 || epistemicsStore.experiences[0].SkillRef != "" { t.Fatalf("generic correction must remain evidence without a reminder skill reference: %#v", epistemicsStore.experiences) } }