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
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()