From 75a853393907209ca3e6ccf5a122fcc6d2d65e7b Mon Sep 17 00:00:00 2001 From: Mikhail Date: Wed, 26 Aug 2026 09:47:49 +0300 Subject: [PATCH] Reject distance sources without measured evidence --- cmd/core-runtime/main.go | 12 ++++++++++++ cmd/core-runtime/main_test.go | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/cmd/core-runtime/main.go b/cmd/core-runtime/main.go index 6ab33f3..3b32028 100644 --- a/cmd/core-runtime/main.go +++ b/cmd/core-runtime/main.go @@ -1847,6 +1847,9 @@ func researchFindingMatchesIntent(query string, finding epistemics.ResearchFindi if ticketSearchQuery(query) && !ticketFindingMatchesDestination(query, finding) { return false } + if distanceResearchQuery(query) && !containsDistanceEvidence(finding.Excerpt.Text) { + return false + } if !nearestFlightQuery(query) { return true } @@ -1876,6 +1879,15 @@ func researchFindingMatchesIntent(query string, finding epistemics.ResearchFindi return true } +func distanceResearchQuery(query string) bool { + lower := strings.ToLower(query) + return strings.Contains(lower, "расстоян") || strings.Contains(lower, "километр") +} + +func containsDistanceEvidence(value string) bool { + return regexp.MustCompile(`(?i)\b\d[\d\s]*\s*(?:км|километр)`).MatchString(value) +} + func ticketSearchQuery(query string) bool { return interactiondomain.TicketSearchDestination(query) != "" } diff --git a/cmd/core-runtime/main_test.go b/cmd/core-runtime/main_test.go index 2c74324..a0764d5 100644 --- a/cmd/core-runtime/main_test.go +++ b/cmd/core-runtime/main_test.go @@ -70,6 +70,18 @@ func TestTicketReplyRejectsGenericCategoryPageWithoutDestination(t *testing.T) { } } +func TestDistanceReplyRejectsCalculatorPageWithoutDistance(t *testing.T) { + query := "расстояние между Москве и Сочи в километрах по прямой и по дороге" + calculator := epistemics.ResearchFinding{Source: epistemics.Source{Title: "Расчет расстояний"}, Excerpt: epistemics.SourceExcerpt{Text: "Калькулятор рассчитывает точное расстояние между городами."}} + if researchFindingMatchesIntent(query, calculator) { + t.Fatal("distance calculator landing page was presented without a measured distance") + } + measured := epistemics.ResearchFinding{Source: epistemics.Source{Title: "Маршрут"}, Excerpt: epistemics.SourceExcerpt{Text: "Расстояние по дороге составляет 1 620 км."}} + if !researchFindingMatchesIntent(query, measured) { + t.Fatal("measured distance evidence was rejected") + } +} + func TestResearchReplyRejectsGenericLandingPageForConcreteIdentifier(t *testing.T) { result := epistemics.ResearchResult{Findings: []epistemics.ResearchFinding{{ State: epistemics.FindingSupported, -- 2.54.0