STET

agent_patch

runs/2026-02-28__13-38-10__gpt-5-3-codex/flux-pr-1260/flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-3-codex/agent-logs/agent.patch

4454 bytes

Back to adjudication
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-3-codex/app/v2/pkg/engine/resolve/resolve.go b/app/v2/pkg/engine/resolve/resolve.go
index 0d0bed5..d5de56e 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-3-codex/app/v2/pkg/engine/resolve/resolve.go
+++ b/app/v2/pkg/engine/resolve/resolve.go
@@ -964,9 +964,6 @@ func (r *Resolver) AsyncUnsubscribeClient(connectionID int64) error {
 }
 
 func (r *Resolver) ResolveGraphQLSubscription(ctx *Context, subscription *GraphQLSubscription, writer SubscriptionResponseWriter) error {
-	if subscription.Trigger.Source == nil {
-		return errors.New("no data source found")
-	}
 	input, err := r.subscriptionInput(ctx, subscription)
 	if err != nil {
 		msg := []byte(`{"errors":[{"message":"invalid input"}]}`)
@@ -1000,6 +997,10 @@ func (r *Resolver) ResolveGraphQLSubscription(ctx *Context, subscription *GraphQ
 		return nil
 	}
 
+	if subscription.Trigger.Source == nil {
+		return errors.New("no data source found")
+	}
+
 	xxh := pool.Hash64.Get()
 	defer pool.Hash64.Put(xxh)
 	err = subscription.Trigger.Source.UniqueRequestID(ctx, input, xxh)
@@ -1073,9 +1074,6 @@ func (r *Resolver) ResolveGraphQLSubscription(ctx *Context, subscription *GraphQ
 }
 
 func (r *Resolver) AsyncResolveGraphQLSubscription(ctx *Context, subscription *GraphQLSubscription, writer SubscriptionResponseWriter, id SubscriptionIdentifier) (err error) {
-	if subscription.Trigger.Source == nil {
-		return errors.New("no data source found")
-	}
 	input, err := r.subscriptionInput(ctx, subscription)
 	if err != nil {
 		msg := []byte(`{"errors":[{"message":"invalid input"}]}`)
@@ -1109,6 +1107,10 @@ func (r *Resolver) AsyncResolveGraphQLSubscription(ctx *Context, subscription *G
 		return nil
 	}
 
+	if subscription.Trigger.Source == nil {
+		return errors.New("no data source found")
+	}
+
 	xxh := pool.Hash64.Get()
 	defer pool.Hash64.Put(xxh)
 	err = subscription.Trigger.Source.UniqueRequestID(ctx, input, xxh)
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-3-codex/app/v2/pkg/engine/resolve/resolve_test.go b/app/v2/pkg/engine/resolve/resolve_test.go
index 44b9f4c..7cecfb2 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-3-codex/app/v2/pkg/engine/resolve/resolve_test.go
+++ b/app/v2/pkg/engine/resolve/resolve_test.go
@@ -5320,6 +5320,52 @@ func TestResolver_ResolveGraphQLSubscription(t *testing.T) {
 		}, recorder.Messages())
 	})
 
+	t.Run("renders query plan with trigger without starting stream when source is nil (async)", func(t *testing.T) {
+		c, cancel := context.WithCancel(context.Background())
+		defer cancel()
+
+		resolver, plan, recorder, id := setup(c, nil)
+
+		ctx := &Context{
+			ctx: context.Background(),
+			ExecutionOptions: ExecutionOptions{
+				SkipLoader:                 true,
+				IncludeQueryPlanInResponse: true,
+			},
+		}
+
+		err := resolver.AsyncResolveGraphQLSubscription(ctx, plan, recorder, id)
+		assert.NoError(t, err)
+		recorder.AwaitComplete(t, defaultTimeout)
+		assert.Equal(t, 1, len(recorder.Messages()))
+		assert.ElementsMatch(t, []string{
+			`{"data":null,"extensions":{"queryPlan":{"version":"1","kind":"Sequence","trigger":{"kind":"Trigger","path":"counter","subgraphName":"counter","subgraphId":"0","fetchId":0,"query":"subscription { counter }"}}}}`,
+		}, recorder.Messages())
+	})
+
+	t.Run("renders query plan with trigger without starting stream when source is nil (sync)", func(t *testing.T) {
+		c, cancel := context.WithCancel(context.Background())
+		defer cancel()
+
+		resolver, plan, recorder, _ := setup(c, nil)
+
+		ctx := &Context{
+			ctx: context.Background(),
+			ExecutionOptions: ExecutionOptions{
+				SkipLoader:                 true,
+				IncludeQueryPlanInResponse: true,
+			},
+		}
+
+		err := resolver.ResolveGraphQLSubscription(ctx, plan, recorder)
+		assert.NoError(t, err)
+		recorder.AwaitComplete(t, defaultTimeout)
+		assert.Equal(t, 1, len(recorder.Messages()))
+		assert.ElementsMatch(t, []string{
+			`{"data":null,"extensions":{"queryPlan":{"version":"1","kind":"Sequence","trigger":{"kind":"Trigger","path":"counter","subgraphName":"counter","subgraphId":"0","fetchId":0,"query":"subscription { counter }"}}}}`,
+		}, recorder.Messages())
+	})
+
 	t.Run("renders query plan with trigger and additional data", func(t *testing.T) {
 		c, cancel := context.WithCancel(context.Background())
 		defer cancel()