From bf73dcd1eaefb6d152cfd544508c998db7271521 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Tue, 25 Aug 2026 01:37:23 +0300 Subject: [PATCH] Keep ordinary why questions conversational --- modules/work/domain/planning.go | 11 +++++++++-- modules/work/domain/planning_test.go | 7 +++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/modules/work/domain/planning.go b/modules/work/domain/planning.go index 03dee3b..04f8d8d 100644 --- a/modules/work/domain/planning.go +++ b/modules/work/domain/planning.go @@ -170,7 +170,7 @@ func addScenarioPlan(input work.PlanningInput, millis int64, candidate *work.Pla addRequirement(candidate, capability.CapabilityKindSendEmail, "send email only after authority", epistemics.VerificationNotApplicable, millis) addStep(candidate, work.PlanStepPrepare, "Resolve recipient and appropriate communication channel.", 1, millis) addStep(candidate, work.PlanStepCommunicate, "Prepare the message for a communication adapter; do not send without authority.", 2, millis) - case containsAny(lower, "тормозит", "медлен", "производительн", "разберись", "почему"): + case technicalInvestigationRequest(lower): addRequirement(candidate, capability.CapabilityKindInspectProject, "inspect project context", epistemics.VerificationNotApplicable, millis) addRequirement(candidate, capability.CapabilityKindReadDatabase, "collect database performance observations", epistemics.VerificationUnknown, millis) addRequirement(candidate, capability.CapabilityKindQueryLogs, "collect runtime/log observations", epistemics.VerificationUnknown, millis) @@ -208,7 +208,14 @@ func addScenarioPlan(input work.PlanningInput, millis int64, candidate *work.Pla } func requiresDurableWork(lower string) bool { - return containsAny(lower, "тормозит", "медлен", "производительн", "разберись", "почему", "добавь", "поддержк", "возможность", "реализ", "патч", "исправь", "установи", "большую модель") + return technicalInvestigationRequest(lower) || containsAny(lower, "добавь", "поддержк", "возможность", "реализ", "патч", "исправь", "установи", "большую модель") +} + +func technicalInvestigationRequest(lower string) bool { + if containsAny(lower, "тормозит", "медлен", "производительн") { + return true + } + return containsAny(lower, "разберись", "почему", "проанализ") && containsAny(lower, "код", "проект", "сервис", "прилож", "ошиб", "лог", "база", "сервер", "модул", "упо") } func addRequirement(candidate *work.PlanCandidate, kind capability.CapabilityKind, purpose string, precondition epistemics.VerificationState, millis int64) { diff --git a/modules/work/domain/planning_test.go b/modules/work/domain/planning_test.go index 24e30f7..55f157f 100644 --- a/modules/work/domain/planning_test.go +++ b/modules/work/domain/planning_test.go @@ -99,6 +99,13 @@ func TestHelpPathComplexWorkMaterializesDurablePlanning(t *testing.T) { } } +func TestOrdinaryWhyQuestionDoesNotBecomeTechnicalWork(t *testing.T) { + path := DetermineHelpPath(planningInputForTest("Почему небо голубое?", "QUESTION", epistemics.VerificationNotApplicable)) + if path.NeedsDurableGoal || path.NeedsDurableWork || path.NeedsDurablePlan || path.Kind == work.HelpPathDurableWork { + t.Fatalf("ordinary knowledge question took %s path: %+v", path.Kind, path) + } +} + func TestHelpPathCapabilityGapDoesNotBecomeCodexTask(t *testing.T) { path := DetermineHelpPath(planningInputForTest("Подключи интеграцию с неизвестным сервисом, которого сейчас нет.", "DIRECTIVE", epistemics.VerificationNotApplicable)) if path.Kind != work.HelpPathCapabilityGap || !path.CapabilityGap { -- 2.54.0