agent_patch
runs/2026-02-28__13-38-10__gpt-5-4/flux-pr-1260/flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/agent-logs/agent.patch
7406 bytes
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/visitor.go b/app/v2/pkg/engine/plan/visitor.go
index 3a95e8f..3c7eb0c 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/plan/visitor.go
+++ b/app/v2/pkg/engine/plan/visitor.go
@@ -1279,6 +1279,10 @@ func (v *Visitor) configureSubscription(config *objectFetchConfiguration) {
subscription := config.planner.ConfigureSubscription()
v.subscription.Trigger.Variables = subscription.Variables
v.subscription.Trigger.Source = subscription.DataSource
+ v.subscription.Trigger.SourceID = config.sourceID
+ v.subscription.Trigger.SourceName = config.sourceName
+ v.subscription.Trigger.FetchID = config.fetchID
+ v.subscription.Trigger.QueryPlan = subscription.QueryPlan
v.subscription.Trigger.PostProcessing = subscription.PostProcessing
v.resolveInputTemplates(config, &subscription.Input, &v.subscription.Trigger.Variables)
v.subscription.Trigger.Input = []byte(subscription.Input)
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/postprocess/postprocess.go b/app/v2/pkg/engine/postprocess/postprocess.go
index fa63dd2..1ad5c11 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/postprocess/postprocess.go
+++ b/app/v2/pkg/engine/postprocess/postprocess.go
@@ -205,6 +205,9 @@ func (p *Processor) createFetchTree(res *resolve.GraphQLResponse) {
func (p *Processor) appendTriggerToFetchTree(res *resolve.GraphQLSubscription) {
// Using json parser here because input is not yet valid JSON
v, _ := jsonparser.GetString(res.Trigger.Input, "body", "query")
+ if v == "" && res.Trigger.QueryPlan != nil {
+ v = res.Trigger.QueryPlan.Query
+ }
rootData := res.Response.Data
if rootData == nil || len(rootData.Fields) == 0 {
@@ -216,16 +219,31 @@ func (p *Processor) appendTriggerToFetchTree(res *resolve.GraphQLSubscription) {
return
}
+ fetchID := res.Trigger.FetchID
+ if fetchID == 0 {
+ fetchID = info.FetchID
+ }
+
+ sourceID := res.Trigger.SourceID
+ if sourceID == "" && len(info.Source.IDs) > 0 {
+ sourceID = info.Source.IDs[0]
+ }
+
+ sourceName := res.Trigger.SourceName
+ if sourceName == "" && len(info.Source.Names) > 0 {
+ sourceName = info.Source.Names[0]
+ }
+
res.Response.Fetches.Trigger = &resolve.FetchTreeNode{
Kind: resolve.FetchTreeNodeKindTrigger,
Item: &resolve.FetchItem{
Fetch: &resolve.SingleFetch{
FetchDependencies: resolve.FetchDependencies{
- FetchID: info.FetchID,
+ FetchID: fetchID,
},
Info: &resolve.FetchInfo{
- DataSourceID: info.Source.IDs[0],
- DataSourceName: info.Source.Names[0],
+ DataSourceID: sourceID,
+ DataSourceName: sourceName,
QueryPlan: &resolve.QueryPlan{
Query: v,
},
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/postprocess/postprocess_test.go b/app/v2/pkg/engine/postprocess/postprocess_test.go
index 19ca66f..5e287c1 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/postprocess/postprocess_test.go
+++ b/app/v2/pkg/engine/postprocess/postprocess_test.go
@@ -390,6 +390,66 @@ func TestProcess_ExtractFetches(t *testing.T) {
}
}
+func TestProcess_SubscriptionTriggerMetadata(t *testing.T) {
+ pre := &plan.SubscriptionResponsePlan{
+ Response: &resolve.GraphQLSubscription{
+ Trigger: resolve.GraphQLSubscriptionTrigger{
+ Input: []byte(`{"body":{"query":"subscription SubscriptionName { counter }"}}`),
+ SourceID: "subgraph-id",
+ SourceName: "subgraph-name",
+ FetchID: 7,
+ },
+ Response: &resolve.GraphQLResponse{
+ Data: &resolve.Object{
+ Fields: []*resolve.Field{
+ {
+ Name: []byte("counter"),
+ Value: &resolve.Integer{
+ Path: []string{"counter"},
+ },
+ Info: &resolve.FieldInfo{
+ Name: "counter",
+ FetchID: 1,
+ Source: resolve.TypeFieldSource{
+ IDs: []string{"field-subgraph-id"},
+ Names: []string{"field-subgraph-name"},
+ },
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+ processor := NewProcessor(
+ DisableDeduplicateSingleFetches(),
+ DisableCreateConcreteSingleFetchTypes(),
+ DisableMergeFields(),
+ DisableCreateParallelNodes(),
+ DisableAddMissingNestedDependencies(),
+ )
+
+ actual := processor.Process(pre)
+ subscriptionPlan, ok := actual.(*plan.SubscriptionResponsePlan)
+ if !ok {
+ t.Fatalf("expected subscription plan, got %T", actual)
+ }
+
+ trigger := subscriptionPlan.Response.Response.Fetches.Trigger
+ if assert.NotNil(t, trigger) && assert.NotNil(t, trigger.Item) {
+ fetch, ok := trigger.Item.Fetch.(*resolve.SingleFetch)
+ if !ok {
+ t.Fatalf("expected single fetch trigger, got %T", trigger.Item.Fetch)
+ }
+ assert.Equal(t, 7, fetch.FetchDependencies.FetchID)
+ assert.Equal(t, "subgraph-id", fetch.Info.DataSourceID)
+ assert.Equal(t, "subgraph-name", fetch.Info.DataSourceName)
+ assert.Equal(t, "subscription SubscriptionName { counter }", fetch.Info.QueryPlan.Query)
+ assert.Equal(t, "counter", trigger.Item.ResponsePath)
+ }
+}
+
func TestProcess_ExtractServiceNames(t *testing.T) {
type TestCase struct {
name string
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/resolve/resolve_test.go b/app/v2/pkg/engine/resolve/resolve_test.go
index 44b9f4c..7c8b2e2 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/resolve/resolve_test.go
+++ b/app/v2/pkg/engine/resolve/resolve_test.go
@@ -5295,9 +5295,11 @@ func TestResolver_ResolveGraphQLSubscription(t *testing.T) {
c, cancel := context.WithCancel(context.Background())
defer cancel()
+ started := atomic.Bool{}
fakeStream := createFakeStream(func(counter int) (message string, done bool) {
return fmt.Sprintf(`{"data":{"counter":%d}}`, counter), counter == 0
}, 100*time.Millisecond, func(input []byte) {
+ started.Store(true)
assert.Equal(t, `{"method":"POST","url":"http://localhost:4000","body":{"query":"subscription { counter }"}}`, string(input))
})
@@ -5315,6 +5317,7 @@ func TestResolver_ResolveGraphQLSubscription(t *testing.T) {
assert.NoError(t, err)
recorder.AwaitComplete(t, defaultTimeout)
assert.Equal(t, 1, len(recorder.Messages()))
+ assert.False(t, started.Load())
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())
diff --git a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/resolve/response.go b/app/v2/pkg/engine/resolve/response.go
index f8e0c60..3da1b29 100644
--- a/tmp/agent-patch-flux-pr-1260.1-of-1.2026-02-28__13-38-10__gpt-5-4/app/v2/pkg/engine/resolve/response.go
+++ b/app/v2/pkg/engine/resolve/response.go
@@ -19,6 +19,10 @@ type GraphQLSubscriptionTrigger struct {
InputTemplate InputTemplate
Variables Variables
Source SubscriptionDataSource
+ SourceID string
+ SourceName string
+ FetchID int
+ QueryPlan *QueryPlan
PostProcessing PostProcessingConfiguration
}