diff --git a/internal/router/actioncandidate_test.go b/internal/router/actioncandidate_test.go index 103d8f6..252f1b0 100644 --- a/internal/router/actioncandidate_test.go +++ b/internal/router/actioncandidate_test.go @@ -4,12 +4,16 @@ import ( "testing" ) -// TestResolveActionCandidate_RouteSource pins that an act with HasFn=true -// produces a candidate from the route, not the matcher. +// TestResolveActionCandidate_RouteSource pins that an act with a resolved +// CapabilitySelection produces a candidate from the route, not the matcher. func TestResolveActionCandidate_RouteSource(t *testing.T) { dec := Decision{ Intent: IntentAct, Slots: Slots{Fn: "restart", Args: []string{"nginx"}, HasFn: true}, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Args: []string{"nginx"}, Resolved: true, + Method: ActionResolutionExtractorRaw, + }, } c := ResolveActionCandidate(dec, nil) if !c.ActionResolved() { @@ -80,7 +84,7 @@ func TestResolveActionCandidate_NonAct(t *testing.T) { } // TestResolveActionCandidate_Stage0Match pins that a stage-0 act (which -// sets HasFn=true) produces a route-sourced candidate. +// has a resolved CapabilitySelection) produces a route-sourced candidate. func TestResolveActionCandidate_Stage0Match(t *testing.T) { dec := Decision{ Intent: IntentAct, @@ -88,6 +92,11 @@ func TestResolveActionCandidate_Stage0Match(t *testing.T) { Confidence: 1.0, Slots: Slots{Fn: "restart", Args: []string{"nginx"}, HasFn: true}, Producer: RouteProducerGrammar, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Args: []string{"nginx"}, Resolved: true, + Method: ActionResolutionGrammarMatcher, InputKind: SelectionDeterministic, + Producer: RouteProducerGrammar, Confidence: 1.0, + }, } c := ResolveActionCandidate(dec, nil) if !c.ActionResolved() { @@ -364,6 +373,10 @@ func TestResolveActionCandidate_GrammarFixed(t *testing.T) { Fn: "resolve_item", HasFn: true, ResolvedBy: ActionResolutionGrammarFixed, }, + CapabilitySelection: CapabilitySelection{ + Fn: "resolve_item", Resolved: true, + Method: ActionResolutionGrammarFixed, InputKind: SelectionDeterministic, + }, } c := ResolveActionCandidate(dec, nil) if !c.ActionResolved() { @@ -386,6 +399,10 @@ func TestResolveActionCandidate_GrammarMatcher(t *testing.T) { Fn: "restart", Args: []string{"nginx"}, HasFn: true, ResolvedBy: ActionResolutionGrammarMatcher, }, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Args: []string{"nginx"}, Resolved: true, + Method: ActionResolutionGrammarMatcher, InputKind: SelectionDeterministic, + }, } c := ResolveActionCandidate(dec, nil) if !c.ActionResolved() { @@ -406,6 +423,11 @@ func TestResolveActionCandidate_ExtractorRaw(t *testing.T) { ResolvedBy: ActionResolutionExtractorRaw, }, Producer: RouteProducerClassifier, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Resolved: true, + Method: ActionResolutionExtractorRaw, InputKind: SelectionDeterministic, + Producer: RouteProducerClassifier, + }, } c := ResolveActionCandidate(dec, nil) if !c.ActionResolved() { @@ -430,6 +452,11 @@ func TestResolveActionCandidate_ExtractorLLMText(t *testing.T) { ResolvedBy: ActionResolutionExtractorLLMText, }, Producer: RouteProducerLLM, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Resolved: true, + Method: ActionResolutionExtractorLLMText, InputKind: SelectionLLMText, + Producer: RouteProducerLLM, + }, } c := ResolveActionCandidate(dec, nil) if !c.ActionResolved() { @@ -481,7 +508,8 @@ func TestResolveActionCandidate_UnresolvedNoFalseMethod(t *testing.T) { } // TestResolveActionCandidate_PropagatesResolvedBy pins that ResolvedBy -// travels from Slots through to ActionCandidate for every route-sourced case. +// travels from CapabilitySelection through to ActionCandidate for every +// route-sourced case. func TestResolveActionCandidate_PropagatesResolvedBy(t *testing.T) { methods := []ActionResolutionMethod{ ActionResolutionGrammarFixed, @@ -494,6 +522,9 @@ func TestResolveActionCandidate_PropagatesResolvedBy(t *testing.T) { dec := Decision{ Intent: IntentAct, Slots: Slots{Fn: "restart", HasFn: true, ResolvedBy: m}, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Resolved: true, Method: m, + }, } c := ResolveActionCandidate(dec, nil) if c.ResolvedBy != m { @@ -513,6 +544,10 @@ func TestResolveActionCandidate_FnArgsIdentical(t *testing.T) { Fn: "restart", Args: []string{"nginx"}, HasFn: true, ResolvedBy: ActionResolutionGrammarMatcher, }, + CapabilitySelection: CapabilitySelection{ + Fn: "restart", Args: []string{"nginx"}, Resolved: true, + Method: ActionResolutionGrammarMatcher, + }, } c := ResolveActionCandidate(dec, nil) if c.Fn != "restart" || len(c.Args) != 1 || c.Args[0] != "nginx" {