From 870392dc092c852f48ba09b032c71105d81fb378 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 1 Sep 2026 23:35:27 +0300 Subject: [PATCH] fix(epistemics): normalize applicability conditions --- modules/epistemics/domain/experience.go | 3 +++ modules/epistemics/domain/experience_test.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/modules/epistemics/domain/experience.go b/modules/epistemics/domain/experience.go index 1afddc4..8da7971 100644 --- a/modules/epistemics/domain/experience.go +++ b/modules/epistemics/domain/experience.go @@ -50,6 +50,9 @@ func NewExperienceRecord(value epistemics.ExperienceRecord) (epistemics.Experien if value.VerificationEvidence == nil { value.VerificationEvidence = []epistemics.EvidenceRef{} } + if value.ApplicabilityConditions == nil { + value.ApplicabilityConditions = []string{} + } return value, nil } diff --git a/modules/epistemics/domain/experience_test.go b/modules/epistemics/domain/experience_test.go index a05d958..5253d5f 100644 --- a/modules/epistemics/domain/experience_test.go +++ b/modules/epistemics/domain/experience_test.go @@ -85,3 +85,22 @@ func TestFastPathDeclineReturnsToThinkingInsteadOfGuessing(t *testing.T) { t.Fatalf("decline should preserve reflection/escalation evidence, candidate=%#v ok=%v err=%v", candidate, ok, err) } } + +func TestExperienceNormalizesApplicabilityConditionsForNonNullPersistence(t *testing.T) { + experience, err := NewExperienceRecord(epistemics.ExperienceRecord{ + SourceKind: epistemics.ExperienceSourceInteraction, + OriginalIntentID: "intent-1", + SourceUtteranceID: "utterance-4", + HelpMethod: epistemics.HelpMethodClarification, + ExpectedOutcome: epistemics.OutcomeSuccess, + ActualOutcome: epistemics.OutcomeUserCorrected, + ConfidenceMillis: 1000, + RecordedAtUnixMillis: 1300, + }) + if err != nil { + t.Fatal(err) + } + if experience.ApplicabilityConditions == nil { + t.Fatal("applicability conditions must be non-nil before repository persistence") + } +}