From 7899c745b05548f4139b98487f2d6c0bf5a6c51d Mon Sep 17 00:00:00 2001 From: Abhinav Gupta Date: Sat, 24 Oct 2026 11:15:47 -0700 Subject: [PATCH] github: Rebuild native stacks after merged prefixes Removing or reordering an open stack member can require unstacking and recreating native membership. Merged downstack PRs prevented that replacement because the compiler rejected any merged member and execution required an empty resource after unstacking. The active suffix stayed in its old stack with stale base branches. Allow replacement after a merged prefix by recording the historical merged PRs in the unstack instruction. Those PRs can remain in the old resource without preventing the released open PRs from being retargeted and stacked anew. Queued or auto-merge members still prevent replacement, and any other retained member stops dependent writes. --- internal/forge/github/integration_test.go | 89 +++--- internal/forge/github/stack_program.go | 10 +- .../forge/github/stack_program_compile.go | 33 ++- .../forge/github/stack_program_execute.go | 22 +- .../github/stack_program_execute_test.go | 6 +- .../stack_reconciliation_property_test.go | 36 +++ .../forge/github/stack_reconciliation_test.go | 52 ++-- internal/forge/github/stacks_test.go | 55 +++- .../activeBranch | 1 + .../bottomBranch | 2 +- .../removedBranch | 1 + .../topBranch | 2 +- ...tion_stackReplacementWithMergedMember.yaml | 262 +++++++++++++----- 13 files changed, 411 insertions(+), 160 deletions(-) create mode 100644 internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/activeBranch create mode 100644 internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/removedBranch diff --git a/internal/forge/github/integration_test.go b/internal/forge/github/integration_test.go index 2c8be6db1..6804f78bb 100644 --- a/internal/forge/github/integration_test.go +++ b/internal/forge/github/integration_test.go @@ -300,8 +300,11 @@ func TestIntegration_stackReplacementWithMergedMember(t *testing.T) { bottomBranch := fixturetest.New(_fixtures, "bottomBranch", func() string { return "stack-merged-bottom-" + randomString(8) }).Get(t) - insertedBranch := fixturetest.New(_fixtures, "insertedBranch", func() string { - return "stack-merged-inserted-" + randomString(8) + activeBranch := fixturetest.New(_fixtures, "activeBranch", func() string { + return "stack-merged-active-" + randomString(8) + }).Get(t) + removedBranch := fixturetest.New(_fixtures, "removedBranch", func() string { + return "stack-merged-removed-" + randomString(8) }).Get(t) topBranch := fixturetest.New(_fixtures, "topBranch", func() string { return "stack-merged-top-" + randomString(8) @@ -310,25 +313,28 @@ func TestIntegration_stackReplacementWithMergedMember(t *testing.T) { if forgetest.Update() { builder := forgetest.NewRepositoryBuilder(t, remoteURL) t.Cleanup(func() { - for _, branch := range []string{topBranch, insertedBranch, bottomBranch} { + for _, branch := range []string{topBranch, removedBranch, activeBranch, bottomBranch} { builder.DeleteRemoteBranch(branch) } }) - // Create one linear ancestry. - // The initial native stack omits inserted. - // After bottom merges, adding inserted would require replacing a stack - // whose historical bottom member cannot be removed. + // The initial native stack follows this branch ancestry: // // main // | // bottom (merged before replacement) // | - // inserted + // active + // | + // removed (omitted from the desired stack) // | // top + // + // After bottom merges, reconcile active -> top. + // The removed PR must stay open and keep its base; + // only its native membership is removed. builder.CheckoutBranch("main") - for _, branch := range []string{bottomBranch, insertedBranch, topBranch} { + for _, branch := range []string{bottomBranch, activeBranch, removedBranch, topBranch} { builder.CreateBranch(branch) builder.CheckoutBranch(branch) builder.WriteFile(branch+".txt", "commit for "+branch) @@ -373,18 +379,26 @@ func TestIntegration_stackReplacementWithMergedMember(t *testing.T) { }) require.NoError(t, err, "create bottom change") openChanges = append(openChanges, bottom.ID) - inserted, err := repo.SubmitChange(t.Context(), forge.SubmitChangeRequest{ - Subject: "Native stack merged-member middle " + insertedBranch, + active, err := repo.SubmitChange(t.Context(), forge.SubmitChangeRequest{ + Subject: "Native stack merged-member active " + activeBranch, Body: "Native stack merged-member integration test", Base: bottomBranch, - Head: insertedBranch, + Head: activeBranch, }) - require.NoError(t, err, "create inserted change") - openChanges = append(openChanges, inserted.ID) + require.NoError(t, err, "create active change") + openChanges = append(openChanges, active.ID) + removed, err := repo.SubmitChange(t.Context(), forge.SubmitChangeRequest{ + Subject: "Native stack merged-member removed " + removedBranch, + Body: "Native stack merged-member integration test", + Base: activeBranch, + Head: removedBranch, + }) + require.NoError(t, err, "create removed change") + openChanges = append(openChanges, removed.ID) top, err := repo.SubmitChange(t.Context(), forge.SubmitChangeRequest{ Subject: "Native stack merged-member top " + topBranch, Body: "Native stack merged-member integration test", - Base: bottomBranch, + Base: removedBranch, Head: topBranch, }) require.NoError(t, err, "create top change") @@ -392,7 +406,9 @@ func TestIntegration_stackReplacementWithMergedMember(t *testing.T) { plan, err := repo.PlanStackUpdate(t.Context(), []forge.StackChange{ {Change: bottom.ID, BaseBranch: "main"}, - {Change: top.ID, BaseChange: bottom.ID, BaseBranch: bottomBranch}, + {Change: active.ID, BaseChange: bottom.ID, BaseBranch: bottomBranch}, + {Change: removed.ID, BaseChange: active.ID, BaseBranch: activeBranch}, + {Change: top.ID, BaseChange: removed.ID, BaseBranch: removedBranch}, }) require.NoError(t, err, "plan initial native stack") require.NoError(t, plan.Execute(t.Context()), "create initial native stack") @@ -420,13 +436,12 @@ func TestIntegration_stackReplacementWithMergedMember(t *testing.T) { openChanges = openChanges[1:] desired := []forge.StackChange{ - {Change: bottom.ID, BaseBranch: "main"}, - {Change: inserted.ID, BaseChange: bottom.ID, BaseBranch: bottomBranch}, - {Change: top.ID, BaseChange: inserted.ID, BaseBranch: insertedBranch}, + {Change: active.ID, BaseBranch: "main"}, + {Change: top.ID, BaseChange: active.ID, BaseBranch: activeBranch}, } plan, err = repo.PlanStackUpdate(t.Context(), desired) - require.NoError(t, err, "plan replacement around merged member") - require.NoError(t, plan.Execute(t.Context()), "leave merged-member stack unchanged") + require.NoError(t, err, "plan removal after merged prefix") + require.NoError(t, plan.Execute(t.Context()), "replace the active stack") pullRequests, err := gatewayClient.PullRequestsForStackUpdate( t.Context(), @@ -434,21 +449,31 @@ func TestIntegration_stackReplacementWithMergedMember(t *testing.T) { cfg.Repo, []int{ bottom.ID.(*github.PR).Number, - inserted.ID.(*github.PR).Number, + active.ID.(*github.PR).Number, + removed.ID.(*github.PR).Number, top.ID.(*github.PR).Number, }, ) - require.NoError(t, err, "read native stack after omitted replacement") - require.Len(t, pullRequests, 3) - require.NotNil(t, pullRequests[1]) - assert.Nil(t, pullRequests[1].Stack) + require.NoError(t, err, "read native stack after removal") + require.Len(t, pullRequests, 4) + require.NotNil(t, pullRequests[0]) + assert.Equal(t, githubgateway.PullRequestStateMerged, pullRequests[0].State) require.NotNil(t, pullRequests[2]) - require.NotNil(t, pullRequests[2].Stack) - assert.NotEqual(t, insertedBranch, pullRequests[2].BaseRefName) - assert.Equal(t, []githubgateway.PullRequestStackMember{ - {Number: bottom.ID.(*github.PR).Number, State: githubgateway.PullRequestStateMerged}, - {Number: top.ID.(*github.PR).Number, State: githubgateway.PullRequestStateOpen}, - }, pullRequests[2].Stack.Members) + assert.Equal(t, githubgateway.PullRequestStateOpen, pullRequests[2].State) + assert.Nil(t, pullRequests[2].Stack, "removed PR remains open but unstacked") + assert.Equal(t, activeBranch, pullRequests[2].BaseRefName) + + for _, pr := range []*githubgateway.StackUpdatePullRequest{pullRequests[1], pullRequests[3]} { + require.NotNil(t, pr) + require.NotNil(t, pr.Stack) + assert.Equal(t, []githubgateway.PullRequestStackMember{ + {Number: active.ID.(*github.PR).Number, State: githubgateway.PullRequestStateOpen}, + {Number: top.ID.(*github.PR).Number, State: githubgateway.PullRequestStateOpen}, + }, pr.Stack.Members) + } + assert.Equal(t, pullRequests[1].Stack.Number, pullRequests[3].Stack.Number) + assert.Equal(t, "main", pullRequests[1].BaseRefName) + assert.Equal(t, activeBranch, pullRequests[3].BaseRefName) } func TestIntegration_DivergentStackMerge(t *testing.T) { diff --git a/internal/forge/github/stack_program.go b/internal/forge/github/stack_program.go index 452209e06..2e44104d2 100644 --- a/internal/forge/github/stack_program.go +++ b/internal/forge/github/stack_program.go @@ -22,11 +22,17 @@ type githubStackTry struct { func (githubStackTry) isGitHubStackInstruction() {} -// githubStackUnstack requires complete dissolution of an existing native stack. -// Retained members count as failure even when the API call succeeds. +// githubStackUnstack releases an existing stack's unmerged members. +// Historical merged members may remain in the old resource; +// retaining any other member blocks the dependent replacement. type githubStackUnstack struct { // StackNumber identifies the existing stack within the repository. StackNumber int + + // MergedPullRequests lists members already merged when the plan was built. + // Their retained membership cannot prevent retargeting or restacking + // the released open PRs. + MergedPullRequests []int } func (githubStackUnstack) isGitHubStackInstruction() {} diff --git a/internal/forge/github/stack_program_compile.go b/internal/forge/github/stack_program_compile.go index 3a0328a27..ff566c4a5 100644 --- a/internal/forge/github/stack_program_compile.go +++ b/internal/forge/github/stack_program_compile.go @@ -2,7 +2,6 @@ package github import ( "fmt" - "slices" "go.abhg.dev/gs/internal/gateway/github" ) @@ -46,7 +45,7 @@ func (c *githubStackCompiler) try(body func()) { // selection emits an append or new membership for the selected paths. // Incompatible existing membership is dissolved first; -// if GitHub would retain members, it emits only a warning. +// queued or auto-merge members prevent replacement and produce a warning. func (c *githubStackCompiler) selection(selection githubStackSelection) { // GitHub can grow a native stack at its top, but cannot insert, remove, // or reorder individual members in place. @@ -64,20 +63,24 @@ func (c *githubStackCompiler) selection(selection githubStackSelection) { } if remoteStack := selection.remoteStack; remoteStack != nil { - // GitHub retains merged and locked members when unstacking. - // A replacement must dissolve the whole object before any base - // or new membership write can use the desired topology. - if slices.ContainsFunc(remoteStack.Members, func(member github.PullRequestStackMember) bool { - return member.Locked || member.State == github.PullRequestStateMerged - }) { - c.warnings = append(c.warnings, fmt.Sprintf( - "#%d: Leaving pull request and its upstack in existing GitHub native stack #%d: merged, queued, or auto-merge pull requests prevent restructuring", - selection.paths[0][0].number, - remoteStack.Number, - )) - return + // Unstack can leave historical merged members in the old resource. + // Replacement needs the open PRs released, not that history erased. + // Record the merged IDs so execution can distinguish harmless history + // from members that GitHub could not release. + unstack := githubStackUnstack{StackNumber: remoteStack.Number} + for _, member := range remoteStack.Members { + if member.State == github.PullRequestStateMerged { + unstack.MergedPullRequests = append(unstack.MergedPullRequests, member.Number) + } else if member.Locked { + c.warnings = append(c.warnings, fmt.Sprintf( + "#%d: Leaving pull request and its upstack in existing GitHub native stack #%d: queued or auto-merge pull requests prevent restructuring", + selection.paths[0][0].number, + remoteStack.Number, + )) + return + } } - c.instructions = append(c.instructions, githubStackUnstack{StackNumber: remoteStack.Number}) + c.instructions = append(c.instructions, unstack) } // Unstack shares the selection's scope, so its failure skips all paths. diff --git a/internal/forge/github/stack_program_execute.go b/internal/forge/github/stack_program_execute.go index 4001dac61..d1862fee1 100644 --- a/internal/forge/github/stack_program_execute.go +++ b/internal/forge/github/stack_program_execute.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "slices" "go.abhg.dev/gs/internal/gateway/github" ) @@ -81,17 +82,22 @@ func (e *githubStackExecutor) unstack(ctx context.Context, instruction githubSta if err != nil { return fmt.Errorf("unstack GitHub native stack #%d: %w", instruction.StackNumber, err) } - // GitHub can successfully unstack only part of a resource: - // it releases eligible members but retains merged or locked members. - // The compiled replacement assumes complete dissolution, not an arbitrary - // released subset, so API success alone does not satisfy its prerequisite. - // Report retained membership as failure before dependent writes can run; - // any members already released remain released. - if len(result.RemainingPullRequests) > 0 { + // Only the released PRs participate in the replacement. + // Historical members known to be merged cannot become open again, + // so their remaining in the old resource does not invalidate the plan. + // Any other remainder may still block a base or membership write; + // stop before dependent instructions run, even though some PRs were released. + var retained []int + for _, number := range result.RemainingPullRequests { + if !slices.Contains(instruction.MergedPullRequests, number) { + retained = append(retained, number) + } + } + if len(retained) > 0 { return fmt.Errorf( "unstack GitHub native stack #%d: GitHub retained pull requests %v", instruction.StackNumber, - result.RemainingPullRequests, + retained, ) } return nil diff --git a/internal/forge/github/stack_program_execute_test.go b/internal/forge/github/stack_program_execute_test.go index 01c70b0b6..2f9b42dda 100644 --- a/internal/forge/github/stack_program_execute_test.go +++ b/internal/forge/github/stack_program_execute_test.go @@ -90,10 +90,10 @@ func TestExecuteGitHubStackProgram_retainedMembersBlockReplacement(t *testing.T) &github.UnstackPullRequestStackInput{ Owner: "acme", Repo: "repo", StackNumber: 42, }, - ).Return(&github.UnstackPullRequestStackResult{RemainingPullRequests: []int{1}}, nil) + ).Return(&github.UnstackPullRequestStackResult{RemainingPullRequests: []int{1, 2}}, nil) program := githubStackProgram{ githubStackTry{Body: []githubStackInstruction{ - githubStackUnstack{StackNumber: 42}, + githubStackUnstack{StackNumber: 42, MergedPullRequests: []int{1}}, githubStackTry{Body: []githubStackInstruction{ githubStackChangeBase{PullRequestNumber: 2, PullRequestID: "PR_2", BaseBranch: "main"}, githubStackCreate{PullRequests: []int{2, 3}}, @@ -108,7 +108,7 @@ func TestExecuteGitHubStackProgram_retainedMembersBlockReplacement(t *testing.T) } err := executeGitHubStackProgram(t.Context(), repository, program) - require.EqualError(t, err, "unstack GitHub native stack #42: GitHub retained pull requests [1]") + require.EqualError(t, err, "unstack GitHub native stack #42: GitHub retained pull requests [2]") } func TestExecuteGitHubStackProgram_nestedFailuresDoNotEscapeTry(t *testing.T) { diff --git a/internal/forge/github/stack_reconciliation_property_test.go b/internal/forge/github/stack_reconciliation_property_test.go index 4f65eea96..7c6cb543a 100644 --- a/internal/forge/github/stack_reconciliation_property_test.go +++ b/internal/forge/github/stack_reconciliation_property_test.go @@ -88,6 +88,12 @@ func TestReconcileGitHubStacks_validTransitions(t *testing.T) { } } for number, pr := range model.pullRequests { + // Replacing an active suffix must not rewrite its merged history, + // even when those historical PRs also appear in the desired forest. + if pr.state == github.PullRequestStateMerged { + assert.Equal(t, beforeBases[number], pr.base, "changed merged PR #%d base", number) + continue + } if pr.base == beforeBases[number] { continue } @@ -140,6 +146,36 @@ func TestStackResourceModel_restructure(t *testing.T) { })) } +func TestStackResourceModel_restructureAfterMergedPrefix(t *testing.T) { + model := &stackResourceModel{ + pullRequests: map[int]*stackResourceModelPR{ + 1: {head: "a", base: "main", state: github.PullRequestStateMerged, headInRepository: true}, + 2: {head: "b", base: "main", state: github.PullRequestStateOpen, headInRepository: true}, + 3: {head: "c", base: "b", state: github.PullRequestStateOpen, headInRepository: true}, + 4: {head: "d", base: "c", state: github.PullRequestStateOpen, headInRepository: true}, + }, + stacks: map[int][]int{42: {1, 2, 3, 4}}, + nextStack: 42, + } + result, err := model.UnstackPullRequestStack(t.Context(), &github.UnstackPullRequestStackInput{ + Owner: "acme", Repo: "repo", StackNumber: 42, + }) + require.NoError(t, err) + assert.Equal(t, []int{1}, result.RemainingPullRequests) + assert.Equal(t, []int{1}, model.stacks[42]) + + // Historical membership on #1 does not prevent recreating the released + // active suffix without #3. Removing #3 leaves its PR and base unchanged. + require.NoError(t, model.UpdatePullRequest(t.Context(), &github.UpdatePullRequestInput{ + PullRequestID: "4", BaseRefName: new("b"), + })) + require.NoError(t, model.CreatePullRequestStack(t.Context(), &github.CreatePullRequestStackInput{ + Owner: "acme", Repo: "repo", PullRequests: []int{2, 4}, + })) + assert.Equal(t, map[int][]int{42: {1}, 43: {2, 4}}, model.stacks) + assert.Equal(t, "b", model.pullRequests[3].base) +} + // stackResourceModel models GitHub's native stack operations. // It excludes Git commits, transport, and path selection. // It enforces GitHub's observed write restrictions diff --git a/internal/forge/github/stack_reconciliation_test.go b/internal/forge/github/stack_reconciliation_test.go index 83a1aaa41..73c4fefed 100644 --- a/internal/forge/github/stack_reconciliation_test.go +++ b/internal/forge/github/stack_reconciliation_test.go @@ -197,6 +197,34 @@ func TestReconcileGitHubStacks(t *testing.T) { }, }}, }, + { + name: "ReplaceWithMergedPrefix", + give: func() []githubStackChange { + stack := &github.PullRequestStack{ + Number: 42, + Members: []github.PullRequestStackMember{ + {Number: 1, State: github.PullRequestStateMerged}, + {Number: 2, State: github.PullRequestStateOpen}, + }, + } + merged := openChange(1, 0, "main", "main", stack) + merged.pullRequest.State = github.PullRequestStateMerged + return []githubStackChange{ + merged, + openChange(3, 1, "a", "a", nil), + openChange(2, 3, "c", "a", stack), + } + }(), + want: githubStackProgram{githubStackTry{ + Body: []githubStackInstruction{ + githubStackUnstack{StackNumber: 42, MergedPullRequests: []int{1}}, + githubStackTry{Body: []githubStackInstruction{ + githubStackChangeBase{PullRequestNumber: 2, PullRequestID: "PR_2", BaseBranch: "c"}, + githubStackCreate{PullRequests: []int{3, 2}}, + }}, + }, + }}, + }, { name: "ReconnectAboveMergedChange", give: []githubStackChange{ @@ -557,29 +585,7 @@ func TestReconcileGitHubStacks_errors(t *testing.T) { openChange(2, 3, "c", "a", lockedStack(42, 1, 2)), }, wantWarnings: []string{ - "#1: Leaving pull request and its upstack in existing GitHub native stack #42: merged, queued, or auto-merge pull requests prevent restructuring", - }, - }, - { - name: "LeaveReplacementWithMergedMember", - give: func() []githubStackChange { - stack := &github.PullRequestStack{ - Number: 42, - Members: []github.PullRequestStackMember{ - {Number: 1, State: github.PullRequestStateMerged}, - {Number: 2, State: github.PullRequestStateOpen}, - }, - } - merged := openChange(1, 0, "main", "main", stack) - merged.pullRequest.State = github.PullRequestStateMerged - return []githubStackChange{ - merged, - openChange(3, 1, "a", "a", nil), - openChange(2, 3, "c", "a", stack), - } - }(), - wantWarnings: []string{ - "#3: Leaving pull request and its upstack in existing GitHub native stack #42: merged, queued, or auto-merge pull requests prevent restructuring", + "#1: Leaving pull request and its upstack in existing GitHub native stack #42: queued or auto-merge pull requests prevent restructuring", }, }, { diff --git a/internal/forge/github/stacks_test.go b/internal/forge/github/stacks_test.go index c02fb61b6..5c0c72936 100644 --- a/internal/forge/github/stacks_test.go +++ b/internal/forge/github/stacks_test.go @@ -128,6 +128,42 @@ func TestRepository_UpdateStackRemovesMember(t *testing.T) { require.NoError(t, err) } +func TestRepository_UpdateStackRemovesMemberAfterMergedPrefix(t *testing.T) { + gateway := NewMockGithubGateway(gomock.NewController(t)) + stack := &github.PullRequestStack{ + Number: 42, + Members: []github.PullRequestStackMember{ + {Number: 1, State: github.PullRequestStateMerged}, + {Number: 2, State: github.PullRequestStateOpen}, + {Number: 3, State: github.PullRequestStateOpen}, + {Number: 4, State: github.PullRequestStateOpen}, + }, + } + expectPullRequests(t, gateway, map[int]*github.StackUpdatePullRequest{ + 2: stackPullRequest("PR_2", "main", stack), + 4: stackPullRequest("PR_4", "removed", stack), + }) + // Drop #3 from the active chain without including historical #1 in either + // the request or the replacement stack. GitHub may retain #1 on unstack. + gomock.InOrder( + gateway.EXPECT().UnstackPullRequestStack(gomock.Any(), &github.UnstackPullRequestStackInput{ + Owner: "acme", Repo: "repo", StackNumber: 42, + }).Return(&github.UnstackPullRequestStackResult{RemainingPullRequests: []int{1}}, nil), + gateway.EXPECT().UpdatePullRequest(gomock.Any(), &github.UpdatePullRequestInput{ + PullRequestID: "PR_4", BaseRefName: new("bottom"), + }).Return(nil), + gateway.EXPECT().CreatePullRequestStack(gomock.Any(), &github.CreatePullRequestStackInput{ + Owner: "acme", Repo: "repo", PullRequests: []int{2, 4}, + }).Return(nil), + ) + + err := executeStackUpdate(t.Context(), newStackRepository(t, gateway), []forge.StackChange{ + {Change: &PR{Number: 2}, BaseBranch: "main"}, + {Change: &PR{Number: 4}, BaseChange: &PR{Number: 2}, BaseBranch: "bottom"}, + }) + require.NoError(t, err) +} + func TestRepository_UpdateStackSplitsExistingStack(t *testing.T) { gateway := NewMockGithubGateway(gomock.NewController(t)) stack := newPullRequestStack(42, 1, 2) @@ -154,6 +190,7 @@ func TestRepository_UpdateStackLeavesLockedStackUnchanged(t *testing.T) { stack := &github.PullRequestStack{ Number: 42, Members: []github.PullRequestStackMember{ + {Number: 4, State: github.PullRequestStateMerged}, {Number: 1, State: github.PullRequestStateOpen}, {Number: 2, State: github.PullRequestStateOpen, Locked: true}, }, @@ -174,10 +211,10 @@ func TestRepository_UpdateStackLeavesLockedStackUnchanged(t *testing.T) { }) require.NoError(t, err) assert.Contains(t, logs.String(), - "#1: Leaving pull request and its upstack in existing GitHub native stack #42: merged, queued, or auto-merge pull requests prevent restructuring") + "#1: Leaving pull request and its upstack in existing GitHub native stack #42: queued or auto-merge pull requests prevent restructuring") } -func TestRepository_UpdateStackLeavesMergedMemberStackUnchanged(t *testing.T) { +func TestRepository_UpdateStackReplacesStackWithMergedPrefix(t *testing.T) { gateway := NewMockGithubGateway(gomock.NewController(t)) stack := &github.PullRequestStack{ Number: 42, @@ -193,6 +230,17 @@ func TestRepository_UpdateStackLeavesMergedMemberStackUnchanged(t *testing.T) { 2: stackPullRequest("PR_2", "a", stack), 3: stackPullRequest("PR_3", "a", nil), }) + gomock.InOrder( + gateway.EXPECT().UnstackPullRequestStack(gomock.Any(), &github.UnstackPullRequestStackInput{ + Owner: "acme", Repo: "repo", StackNumber: 42, + }).Return(&github.UnstackPullRequestStackResult{}, nil), + gateway.EXPECT().UpdatePullRequest(gomock.Any(), &github.UpdatePullRequestInput{ + PullRequestID: "PR_2", BaseRefName: new("c"), + }).Return(nil), + gateway.EXPECT().CreatePullRequestStack(gomock.Any(), &github.CreatePullRequestStackInput{ + Owner: "acme", Repo: "repo", PullRequests: []int{3, 2}, + }).Return(nil), + ) var logs strings.Builder repo := newStackRepository(t, gateway) @@ -203,8 +251,7 @@ func TestRepository_UpdateStackLeavesMergedMemberStackUnchanged(t *testing.T) { {Change: &PR{Number: 2}, BaseChange: &PR{Number: 3}, BaseBranch: "c"}, }) require.NoError(t, err) - assert.Contains(t, logs.String(), - "#3: Leaving pull request and its upstack in existing GitHub native stack #42: merged, queued, or auto-merge pull requests prevent restructuring") + assert.NotContains(t, logs.String(), "Leaving pull request") } func TestRepository_PlanStackUpdateDoesNotWrite(t *testing.T) { diff --git a/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/activeBranch b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/activeBranch new file mode 100644 index 000000000..a94579880 --- /dev/null +++ b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/activeBranch @@ -0,0 +1 @@ +"stack-merged-active-eidAprfb" \ No newline at end of file diff --git a/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/bottomBranch b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/bottomBranch index 82228653e..0d7a5abc9 100644 --- a/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/bottomBranch +++ b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/bottomBranch @@ -1 +1 @@ -"stack-merged-bottom-5nHARMp1" \ No newline at end of file +"stack-merged-bottom-WhHgsnJP" \ No newline at end of file diff --git a/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/removedBranch b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/removedBranch new file mode 100644 index 000000000..1a1fd30c2 --- /dev/null +++ b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/removedBranch @@ -0,0 +1 @@ +"stack-merged-removed-PXZk6D5F" \ No newline at end of file diff --git a/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/topBranch b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/topBranch index 57c7b1da0..765c20d8c 100644 --- a/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/topBranch +++ b/internal/forge/github/testdata/TestIntegration_stackReplacementWithMergedMember/topBranch @@ -1 +1 @@ -"stack-merged-top-Bubo7AXB" \ No newline at end of file +"stack-merged-top-pbHO3APN" \ No newline at end of file diff --git a/internal/forge/github/testdata/fixtures/TestIntegration_stackReplacementWithMergedMember.yaml b/internal/forge/github/testdata/fixtures/TestIntegration_stackReplacementWithMergedMember.yaml index 6c4526523..368b75968 100644 --- a/internal/forge/github/testdata/fixtures/TestIntegration_stackReplacementWithMergedMember.yaml +++ b/internal/forge/github/testdata/fixtures/TestIntegration_stackReplacementWithMergedMember.yaml @@ -19,14 +19,13 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - uncompressed: true body: '{"data":{"repository":{"id":"R_kgDOMVd0xg"}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 263.586958ms + duration: 361.591583ms - id: 1 request: proto: HTTP/1.1 @@ -34,7 +33,7 @@ interactions: proto_minor: 1 content_length: 360 host: api.github.com - body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"main","headRefName":"stack-merged-bottom-5nHARMp1","title":"Native stack merged-member bottom stack-merged-bottom-5nHARMp1","body":"Native stack merged-member integration test"}}}' + body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"main","headRefName":"stack-merged-bottom-WhHgsnJP","title":"Native stack merged-member bottom stack-merged-bottom-WhHgsnJP","body":"Native stack merged-member integration test"}}}' headers: Content-Type: - application/json @@ -45,21 +44,21 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABAvuKFw","number":202,"url":"https://github.com/test-owner/test-repo/pull/202"}}}}' + body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebPkw","number":219,"url":"https://github.com/test-owner/test-repo/pull/219"}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 1.117561709s + duration: 1.434633s - id: 2 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 388 + content_length: 384 host: api.github.com - body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"stack-merged-bottom-5nHARMp1","headRefName":"stack-merged-inserted-aX9bGOqd","title":"Native stack merged-member middle stack-merged-inserted-aX9bGOqd","body":"Native stack merged-member integration test"}}}' + body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"stack-merged-bottom-WhHgsnJP","headRefName":"stack-merged-active-eidAprfb","title":"Native stack merged-member active stack-merged-active-eidAprfb","body":"Native stack merged-member integration test"}}}' headers: Content-Type: - application/json @@ -70,22 +69,21 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - uncompressed: true - body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABAvuKWg","number":203,"url":"https://github.com/test-owner/test-repo/pull/203"}}}}' + body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebQkA","number":220,"url":"https://github.com/test-owner/test-repo/pull/220"}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 1.009610792s + duration: 2.009465208s - id: 3 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 375 + content_length: 387 host: api.github.com - body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"stack-merged-bottom-5nHARMp1","headRefName":"stack-merged-top-Bubo7AXB","title":"Native stack merged-member top stack-merged-top-Bubo7AXB","body":"Native stack merged-member integration test"}}}' + body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"stack-merged-active-eidAprfb","headRefName":"stack-merged-removed-PXZk6D5F","title":"Native stack merged-member removed stack-merged-removed-PXZk6D5F","body":"Native stack merged-member integration test"}}}' headers: Content-Type: - application/json @@ -96,14 +94,39 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABAvuKow","number":204,"url":"https://github.com/test-owner/test-repo/pull/204"}}}}' + body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebRVA","number":221,"url":"https://github.com/test-owner/test-repo/pull/221"}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 1.0364035s + duration: 1.280121584s - id: 4 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 376 + host: api.github.com + body: '{"query":"mutation($input:CreatePullRequestInput!){createPullRequest(input: $input){pullRequest{id,number,url}}}","variables":{"input":{"repositoryId":"R_kgDOMVd0xg","baseRefName":"stack-merged-removed-PXZk6D5F","headRefName":"stack-merged-top-pbHO3APN","title":"Native stack merged-member top stack-merged-top-pbHO3APN","body":"Native stack merged-member integration test"}}}' + headers: + Content-Type: + - application/json + url: https://api.github.com/graphql + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: '{"data":{"createPullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebR8Q","number":222,"url":"https://github.com/test-owner/test-repo/pull/222"}}}}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 1.420483375s + - id: 5 request: proto: HTTP/1.1 proto_major: 1 @@ -118,21 +141,21 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: '[{"id":560657,"number":201,"node_id":"PRS_kwDOMVd0xs4ACI4R","url":"https://api.github.com/repos/test-owner/test-repo/stacks/201","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:33Z","pull_requests":[{"number":198,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-bottom-dLKjmtVW","sha":"07b6e8cb44f5e5d13cd8a029a83bea789909d247"}},{"number":200,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-fqg9w5za","sha":"3ef6501dce36b8774c06c95b0fbc46418ede856c"}}]},{"id":560655,"number":197,"node_id":"PRS_kwDOMVd0xs4ACI4P","url":"https://api.github.com/repos/test-owner/test-repo/stacks/197","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:15Z","pull_requests":[{"number":193,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-bottom-Hydxxy1R","sha":"2ceeaa5efc3791ef3c43e7463cfb74adda1b4de3"}},{"number":196,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-inserted-WNuOA0uR","sha":"1b604a1deff0517ee22c665f662db6d42cec2921"}},{"number":194,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-top-92YL4XjC","sha":"8590f670baa89e5b535210911353c9cbdfa2d0fc"}}]},{"id":560648,"number":191,"node_id":"PRS_kwDOMVd0xs4ACI4I","url":"https://api.github.com/repos/test-owner/test-repo/stacks/191","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:35:35Z","pull_requests":[{"number":189,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-geOs2I70","sha":"d09aa9285a4200d6ec0a1454033a5302a8c15f94"}},{"number":190,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-VEtQX9yQ","sha":"7b6309fa47e62cd6b9984a4e9dc1c1081756fd76"}},{"number":192,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-ip5EzT1K","sha":"0e2fa2c652ecd15211e206798f0c6790c360ccdd"}}]},{"id":313473,"number":174,"node_id":"PRS_kwDOMVd0xs4ABMiB","url":"https://api.github.com/repos/test-owner/test-repo/stacks/174","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:40:09Z","pull_requests":[{"number":170,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:15Z","head":{"ref":"divergent-stack-a-pO7wJfwF","sha":"cbba7e8dcfec641a88f530c0ccc7c8ce535aeeae"}},{"number":171,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:16Z","head":{"ref":"divergent-stack-b-9iT5TOLK","sha":"04f50ba691258ef2c136849b1ad0a9e45a6d964a"}},{"number":172,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:17Z","head":{"ref":"divergent-stack-c-iXygp4Wc","sha":"5e059d8b881a4c03271f7bd6eff43496fb7bfba2"}}]},{"id":313446,"number":169,"node_id":"PRS_kwDOMVd0xs4ABMhm","url":"https://api.github.com/repos/test-owner/test-repo/stacks/169","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:39:16Z","pull_requests":[{"number":165,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:22Z","head":{"ref":"divergent-stack-a-ZwG2QqxN","sha":"bad73a03fe75bb84a66c18758f6a33e964fa5623"}},{"number":166,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-b-VxbXF3H4","sha":"1835fe77d5079914c4050ce7f480688f4de316b0"}},{"number":167,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-c-MAlCUfYp","sha":"09d733256cafd094d360cb399794138c766a1fef"}}]},{"id":302729,"number":160,"node_id":"PRS_kwDOMVd0xs4ABJ6J","url":"https://api.github.com/repos/test-owner/test-repo/stacks/160","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:18:42Z","pull_requests":[{"number":158,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:46Z","head":{"ref":"merge-range-bottom-bZiK8Eda","sha":"24777ef044c0a4bc712d1345bf9c0ed8b791197b"}},{"number":159,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:47Z","head":{"ref":"merge-range-top-hIOTMX1T","sha":"bb58f1370879a404c18b51898dcf2e08ea740727"}}]},{"id":302716,"number":157,"node_id":"PRS_kwDOMVd0xs4ABJ58","url":"https://api.github.com/repos/test-owner/test-repo/stacks/157","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:17:41Z","pull_requests":[{"number":155,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-bottom-0tvkFGY5","sha":"5c1b178950b3b777fb9ebbede6d383db05d22467"}},{"number":156,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-top-J25jZjmP","sha":"12a7613a380b2b58338e3860d2f328f7cdff03b0"}}]},{"id":302692,"number":154,"node_id":"PRS_kwDOMVd0xs4ABJ5k","url":"https://api.github.com/repos/test-owner/test-repo/stacks/154","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:15:44Z","pull_requests":[{"number":152,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-bottom-K06vsatq","sha":"da0f854fa38886c46c4e140f6ccbbf97a0617fda"}},{"number":153,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-top-UQMItpa9","sha":"408a67f73119d0e8394e8f82eeca982994ed20be"}}]},{"id":302586,"number":151,"node_id":"PRS_kwDOMVd0xs4ABJ36","url":"https://api.github.com/repos/test-owner/test-repo/stacks/151","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:06:06Z","pull_requests":[{"number":149,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-bottom-j0y6OqrT","sha":"11e275c782e6d64ef1453ca2a4e1509f8ef1d10a"}},{"number":150,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-top-G8bqRe1G","sha":"4cb95e7edc28838635b54236918b825a9130fcb8"}}]},{"id":302031,"number":147,"node_id":"PRS_kwDOMVd0xs4ABJvP","url":"https://api.github.com/repos/test-owner/test-repo/stacks/147","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T03:16:01Z","pull_requests":[{"number":145,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-dW4RtWmC","sha":"b5bec1eaccc7a5fb6d5ac747c67832c156bf51bd"}},{"number":146,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-g3WXJxSb","sha":"f740dffc87f2ddf00824f1a09d2c24b70811b247"}},{"number":148,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-gampXI6B","sha":"711662448930f8a00d161c842fb0ee8d401c994e"}}]},{"id":167872,"number":144,"node_id":"PRS_kwDOMVd0xs4AAo_A","url":"https://api.github.com/repos/test-owner/test-repo/stacks/144","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T12:16:14Z","pull_requests":[{"number":140,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:48Z","head":{"ref":"probe-autodelete-20260805-9c4e-a","sha":"920069c11160c4fe98a1b7e346be68ca51d59b73"}},{"number":141,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:49Z","head":{"ref":"probe-autodelete-20260805-9c4e-b","sha":"1007602d9b285fe3c2825da02aaf020c4f0ecdd7"}},{"number":142,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:50Z","head":{"ref":"probe-autodelete-20260805-9c4e-c","sha":"d0753d932262f7b817599a792e317f5339a5849d"}}]},{"id":167438,"number":139,"node_id":"PRS_kwDOMVd0xs4AAo4O","url":"https://api.github.com/repos/test-owner/test-repo/stacks/139","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T11:55:14Z","pull_requests":[{"number":135,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:56Z","head":{"ref":"probe-divergence-20260805-7f3c-a","sha":"b70346dd87e33f1b0182223edee11f43a3a9db66"}},{"number":136,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:57Z","head":{"ref":"probe-divergence-20260805-7f3c-b","sha":"f5367dbc180b397617065a700e42df50f7646329"}},{"number":137,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:58Z","head":{"ref":"probe-divergence-20260805-7f3c-c","sha":"f820a52d526b01daba6bd583066d97dd03d33fcd"}}]},{"id":101032,"number":134,"node_id":"PRS_kwDOMVd0xs4AAYqo","url":"https://api.github.com/repos/test-owner/test-repo/stacks/134","base":{"ref":"main"},"open":false,"created_at":"2026-08-02T06:04:41Z","pull_requests":[{"number":132,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:07Z","head":{"ref":"gs-native-stack-probe-019fbe36-base","sha":"640dd83224aabd95f66ff91912b26f08f33edbbd"}},{"number":133,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:08Z","head":{"ref":"gs-native-stack-probe-019fbe36-top","sha":"67d6b814fe522ff1e3d850fcf6b1cdc02ac11b43"}}]}]' + body: '[{"id":2278657,"number":218,"node_id":"PRS_kwDOMVd0xs4AIsUB","url":"https://api.github.com/repos/test-owner/test-repo/stacks/218","base":{"ref":"main"},"open":false,"created_at":"2026-10-18T16:08:19Z","pull_requests":[{"number":216,"state":"closed","draft":false,"merged_at":"2026-10-18T16:08:23Z","head":{"ref":"merge-range-bottom-AqDRPUhB","sha":"d04387efe5e7e7f1344034e2a65258e319a0f36e"}},{"number":217,"state":"closed","draft":false,"merged_at":"2026-10-18T16:08:24Z","head":{"ref":"merge-range-top-ctA0TmUW","sha":"36c049b2ead051439c9eb51841cac117261ce381"}}]},{"id":2271158,"number":215,"node_id":"PRS_kwDOMVd0xs4AIqe2","url":"https://api.github.com/repos/test-owner/test-repo/stacks/215","base":{"ref":"main"},"open":false,"created_at":"2026-10-18T04:22:48Z","pull_requests":[{"number":211,"state":"closed","draft":false,"merged_at":"2026-10-18T04:22:55Z","head":{"ref":"divergent-stack-a-wPasYoEw","sha":"6f744c548111eece46eb593d449d710efcf29f7c"}},{"number":212,"state":"closed","draft":false,"merged_at":"2026-10-18T04:22:56Z","head":{"ref":"divergent-stack-b-RXgPDCuH","sha":"bb9a9493a90e0769ff78277a7a7ba06b557a3085"}},{"number":213,"state":"closed","draft":false,"merged_at":"2026-10-18T04:22:57Z","head":{"ref":"divergent-stack-c-FTpKOYLu","sha":"96d2f03f21d8380640a3a7c37aca8230e2a7e78b"}}]},{"id":2271127,"number":210,"node_id":"PRS_kwDOMVd0xs4AIqeX","url":"https://api.github.com/repos/test-owner/test-repo/stacks/210","base":{"ref":"main"},"open":false,"created_at":"2026-10-18T04:19:22Z","pull_requests":[{"number":206,"state":"closed","draft":false,"merged_at":"2026-10-18T04:19:28Z","head":{"ref":"divergent-stack-a-ZWPj8xhh","sha":"062d9e3117627eb4ad3cd3dd78b2122599a07540"}},{"number":207,"state":"closed","draft":false,"merged_at":"2026-10-18T04:19:29Z","head":{"ref":"divergent-stack-b-RYgd6SHK","sha":"f125136bda5d9bf7415b30e55081bc5a18f130c5"}},{"number":208,"state":"closed","draft":false,"merged_at":"2026-10-18T04:19:30Z","head":{"ref":"divergent-stack-c-RmxtuoEw","sha":"4da1c03c6877aa428970b6694cfb729b1f31dceb"}}]},{"id":560920,"number":205,"node_id":"PRS_kwDOMVd0xs4ACI8Y","url":"https://api.github.com/repos/test-owner/test-repo/stacks/205","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T03:01:58Z","pull_requests":[{"number":202,"state":"closed","draft":false,"merged_at":"2026-08-24T03:02:00Z","head":{"ref":"stack-merged-bottom-5nHARMp1","sha":"fc61323edd0740e8026c2745083f77a644ab668e"}},{"number":204,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-Bubo7AXB","sha":"381be2239426e81ac49c336904cf1a7c55baf08e"}}]},{"id":560657,"number":201,"node_id":"PRS_kwDOMVd0xs4ACI4R","url":"https://api.github.com/repos/test-owner/test-repo/stacks/201","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:33Z","pull_requests":[{"number":198,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-bottom-dLKjmtVW","sha":"07b6e8cb44f5e5d13cd8a029a83bea789909d247"}},{"number":200,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-fqg9w5za","sha":"3ef6501dce36b8774c06c95b0fbc46418ede856c"}}]},{"id":560655,"number":197,"node_id":"PRS_kwDOMVd0xs4ACI4P","url":"https://api.github.com/repos/test-owner/test-repo/stacks/197","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:15Z","pull_requests":[{"number":193,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-bottom-Hydxxy1R","sha":"2ceeaa5efc3791ef3c43e7463cfb74adda1b4de3"}},{"number":196,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-inserted-WNuOA0uR","sha":"1b604a1deff0517ee22c665f662db6d42cec2921"}},{"number":194,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-top-92YL4XjC","sha":"8590f670baa89e5b535210911353c9cbdfa2d0fc"}}]},{"id":560648,"number":191,"node_id":"PRS_kwDOMVd0xs4ACI4I","url":"https://api.github.com/repos/test-owner/test-repo/stacks/191","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:35:35Z","pull_requests":[{"number":189,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-geOs2I70","sha":"d09aa9285a4200d6ec0a1454033a5302a8c15f94"}},{"number":190,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-VEtQX9yQ","sha":"7b6309fa47e62cd6b9984a4e9dc1c1081756fd76"}},{"number":192,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-ip5EzT1K","sha":"0e2fa2c652ecd15211e206798f0c6790c360ccdd"}}]},{"id":313473,"number":174,"node_id":"PRS_kwDOMVd0xs4ABMiB","url":"https://api.github.com/repos/test-owner/test-repo/stacks/174","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:40:09Z","pull_requests":[{"number":170,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:15Z","head":{"ref":"divergent-stack-a-pO7wJfwF","sha":"cbba7e8dcfec641a88f530c0ccc7c8ce535aeeae"}},{"number":171,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:16Z","head":{"ref":"divergent-stack-b-9iT5TOLK","sha":"04f50ba691258ef2c136849b1ad0a9e45a6d964a"}},{"number":172,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:17Z","head":{"ref":"divergent-stack-c-iXygp4Wc","sha":"5e059d8b881a4c03271f7bd6eff43496fb7bfba2"}}]},{"id":313446,"number":169,"node_id":"PRS_kwDOMVd0xs4ABMhm","url":"https://api.github.com/repos/test-owner/test-repo/stacks/169","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:39:16Z","pull_requests":[{"number":165,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:22Z","head":{"ref":"divergent-stack-a-ZwG2QqxN","sha":"bad73a03fe75bb84a66c18758f6a33e964fa5623"}},{"number":166,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-b-VxbXF3H4","sha":"1835fe77d5079914c4050ce7f480688f4de316b0"}},{"number":167,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-c-MAlCUfYp","sha":"09d733256cafd094d360cb399794138c766a1fef"}}]},{"id":302729,"number":160,"node_id":"PRS_kwDOMVd0xs4ABJ6J","url":"https://api.github.com/repos/test-owner/test-repo/stacks/160","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:18:42Z","pull_requests":[{"number":158,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:46Z","head":{"ref":"merge-range-bottom-bZiK8Eda","sha":"24777ef044c0a4bc712d1345bf9c0ed8b791197b"}},{"number":159,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:47Z","head":{"ref":"merge-range-top-hIOTMX1T","sha":"bb58f1370879a404c18b51898dcf2e08ea740727"}}]},{"id":302716,"number":157,"node_id":"PRS_kwDOMVd0xs4ABJ58","url":"https://api.github.com/repos/test-owner/test-repo/stacks/157","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:17:41Z","pull_requests":[{"number":155,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-bottom-0tvkFGY5","sha":"5c1b178950b3b777fb9ebbede6d383db05d22467"}},{"number":156,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-top-J25jZjmP","sha":"12a7613a380b2b58338e3860d2f328f7cdff03b0"}}]},{"id":302692,"number":154,"node_id":"PRS_kwDOMVd0xs4ABJ5k","url":"https://api.github.com/repos/test-owner/test-repo/stacks/154","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:15:44Z","pull_requests":[{"number":152,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-bottom-K06vsatq","sha":"da0f854fa38886c46c4e140f6ccbbf97a0617fda"}},{"number":153,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-top-UQMItpa9","sha":"408a67f73119d0e8394e8f82eeca982994ed20be"}}]},{"id":302586,"number":151,"node_id":"PRS_kwDOMVd0xs4ABJ36","url":"https://api.github.com/repos/test-owner/test-repo/stacks/151","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:06:06Z","pull_requests":[{"number":149,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-bottom-j0y6OqrT","sha":"11e275c782e6d64ef1453ca2a4e1509f8ef1d10a"}},{"number":150,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-top-G8bqRe1G","sha":"4cb95e7edc28838635b54236918b825a9130fcb8"}}]},{"id":302031,"number":147,"node_id":"PRS_kwDOMVd0xs4ABJvP","url":"https://api.github.com/repos/test-owner/test-repo/stacks/147","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T03:16:01Z","pull_requests":[{"number":145,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-dW4RtWmC","sha":"b5bec1eaccc7a5fb6d5ac747c67832c156bf51bd"}},{"number":146,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-g3WXJxSb","sha":"f740dffc87f2ddf00824f1a09d2c24b70811b247"}},{"number":148,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-gampXI6B","sha":"711662448930f8a00d161c842fb0ee8d401c994e"}}]},{"id":167872,"number":144,"node_id":"PRS_kwDOMVd0xs4AAo_A","url":"https://api.github.com/repos/test-owner/test-repo/stacks/144","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T12:16:14Z","pull_requests":[{"number":140,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:48Z","head":{"ref":"probe-autodelete-20260805-9c4e-a","sha":"920069c11160c4fe98a1b7e346be68ca51d59b73"}},{"number":141,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:49Z","head":{"ref":"probe-autodelete-20260805-9c4e-b","sha":"1007602d9b285fe3c2825da02aaf020c4f0ecdd7"}},{"number":142,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:50Z","head":{"ref":"probe-autodelete-20260805-9c4e-c","sha":"d0753d932262f7b817599a792e317f5339a5849d"}}]},{"id":167438,"number":139,"node_id":"PRS_kwDOMVd0xs4AAo4O","url":"https://api.github.com/repos/test-owner/test-repo/stacks/139","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T11:55:14Z","pull_requests":[{"number":135,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:56Z","head":{"ref":"probe-divergence-20260805-7f3c-a","sha":"b70346dd87e33f1b0182223edee11f43a3a9db66"}},{"number":136,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:57Z","head":{"ref":"probe-divergence-20260805-7f3c-b","sha":"f5367dbc180b397617065a700e42df50f7646329"}},{"number":137,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:58Z","head":{"ref":"probe-divergence-20260805-7f3c-c","sha":"f820a52d526b01daba6bd583066d97dd03d33fcd"}}]},{"id":101032,"number":134,"node_id":"PRS_kwDOMVd0xs4AAYqo","url":"https://api.github.com/repos/test-owner/test-repo/stacks/134","base":{"ref":"main"},"open":false,"created_at":"2026-08-02T06:04:41Z","pull_requests":[{"number":132,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:07Z","head":{"ref":"gs-native-stack-probe-019fbe36-base","sha":"640dd83224aabd95f66ff91912b26f08f33edbbd"}},{"number":133,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:08Z","head":{"ref":"gs-native-stack-probe-019fbe36-top","sha":"67d6b814fe522ff1e3d850fcf6b1cdc02ac11b43"}}]}]' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 169.542083ms - - id: 5 + duration: 246.740083ms + - id: 6 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 395 + content_length: 651 host: api.github.com - body: '{"query":"query($owner:String!,$repo:String!,$pr0:Int!,$pr1:Int!){repository(owner: $owner, name: $repo){pr0:pullRequest(number: $pr0){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr1:pullRequest(number: $pr1){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}}}}","variables":{"owner":"test-owner","pr0":202,"pr1":204,"repo":"test-repo"}}' + body: '{"query":"query($owner:String!,$repo:String!,$pr0:Int!,$pr1:Int!,$pr2:Int!,$pr3:Int!){repository(owner: $owner, name: $repo){pr0:pullRequest(number: $pr0){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr1:pullRequest(number: $pr1){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr2:pullRequest(number: $pr2){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr3:pullRequest(number: $pr3){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}}}}","variables":{"owner":"test-owner","pr0":219,"pr1":220,"pr2":221,"pr3":222,"repo":"test-repo"}}' headers: Content-Type: - application/json @@ -143,23 +166,22 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - uncompressed: true - body: '{"data":{"repository":{"pr0":{"id":"PR_kwDOMVd0xs8AAAABAvuKFw","state":"OPEN","headRefName":"stack-merged-bottom-5nHARMp1","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr1":{"id":"PR_kwDOMVd0xs8AAAABAvuKow","state":"OPEN","headRefName":"stack-merged-top-Bubo7AXB","baseRefName":"stack-merged-bottom-5nHARMp1","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null}}}}' + body: '{"data":{"repository":{"pr0":{"id":"PR_kwDOMVd0xs8AAAABKebPkw","state":"OPEN","headRefName":"stack-merged-bottom-WhHgsnJP","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr1":{"id":"PR_kwDOMVd0xs8AAAABKebQkA","state":"OPEN","headRefName":"stack-merged-active-eidAprfb","baseRefName":"stack-merged-bottom-WhHgsnJP","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr2":{"id":"PR_kwDOMVd0xs8AAAABKebRVA","state":"OPEN","headRefName":"stack-merged-removed-PXZk6D5F","baseRefName":"stack-merged-active-eidAprfb","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr3":{"id":"PR_kwDOMVd0xs8AAAABKebR8Q","state":"OPEN","headRefName":"stack-merged-top-pbHO3APN","baseRefName":"stack-merged-removed-PXZk6D5F","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 271.415292ms - - id: 6 + duration: 324.683958ms + - id: 7 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 28 + content_length: 36 host: api.github.com body: | - {"pull_requests":[202,204]} + {"pull_requests":[219,220,221,222]} headers: Content-Type: - application/json @@ -169,17 +191,17 @@ interactions: proto: HTTP/2.0 proto_major: 2 proto_minor: 0 - content_length: 3414 - body: '{"id":560920,"number":205,"node_id":"PRS_kwDOMVd0xs4ACI8Y","url":"https://api.github.com/repos/test-owner/test-repo/stacks/205","base":{"ref":"main"},"open":true,"created_at":"2026-08-24T03:01:58Z","pull_requests":[{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/202","id":4345006615,"number":202,"head":{"ref":"stack-merged-bottom-5nHARMp1","sha":"fc61323edd0740e8026c2745083f77a644ab668e","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"main","sha":"64adfb2f4b54a69373ea283c80837cc220eb94ba","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABAvuKFw","title":"Native stack merged-member bottom stack-merged-bottom-5nHARMp1","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/202","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}},{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/204","id":4345006755,"number":204,"head":{"ref":"stack-merged-top-Bubo7AXB","sha":"e5d10f885f53524b4714f90981d9f74209c40100","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"stack-merged-bottom-5nHARMp1","sha":"fc61323edd0740e8026c2745083f77a644ab668e","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABAvuKow","title":"Native stack merged-member top stack-merged-top-Bubo7AXB","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/204","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}}]}' + content_length: 6653 + body: '{"id":2569430,"number":223,"node_id":"PRS_kwDOMVd0xs4AJzTW","url":"https://api.github.com/repos/test-owner/test-repo/stacks/223","base":{"ref":"main"},"open":true,"created_at":"2026-10-24T18:20:30Z","pull_requests":[{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/219","id":4997959571,"number":219,"head":{"ref":"stack-merged-bottom-WhHgsnJP","sha":"56b966bfe4ccee2e2cdb9593033a2bffe17f63fe","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"main","sha":"0737d87c1d17ef15d71fb7899de0eb6f79a5aa55","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebPkw","title":"Native stack merged-member bottom stack-merged-bottom-WhHgsnJP","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/219","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}},{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/220","id":4997959824,"number":220,"head":{"ref":"stack-merged-active-eidAprfb","sha":"8906e1dc96550d4d22d4ea2e606a4211a8055190","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"stack-merged-bottom-WhHgsnJP","sha":"56b966bfe4ccee2e2cdb9593033a2bffe17f63fe","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebQkA","title":"Native stack merged-member active stack-merged-active-eidAprfb","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/220","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}},{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/221","id":4997960020,"number":221,"head":{"ref":"stack-merged-removed-PXZk6D5F","sha":"27eb60476fbb62b56acd6d85c583f76a74b85189","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"stack-merged-active-eidAprfb","sha":"8906e1dc96550d4d22d4ea2e606a4211a8055190","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebRVA","title":"Native stack merged-member removed stack-merged-removed-PXZk6D5F","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/221","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}},{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/222","id":4997960177,"number":222,"head":{"ref":"stack-merged-top-pbHO3APN","sha":"7f8ecb4caaf67af83b236f6004c9d0b49ee482f2","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"stack-merged-removed-PXZk6D5F","sha":"27eb60476fbb62b56acd6d85c583f76a74b85189","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebR8Q","title":"Native stack merged-member top stack-merged-top-pbHO3APN","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/222","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}}]}' headers: Content-Length: - - "3414" + - "6653" Content-Type: - application/json; charset=utf-8 status: 201 Created code: 201 - duration: 373.003292ms - - id: 7 + duration: 1.075884084s + - id: 8 request: proto: HTTP/1.1 proto_major: 1 @@ -191,30 +213,30 @@ interactions: headers: Content-Type: - application/json - url: https://api.github.com/repos/test-owner/test-repo/pulls/202/merge-async + url: https://api.github.com/repos/test-owner/test-repo/pulls/219/merge-async method: PUT response: proto: HTTP/2.0 proto_major: 2 proto_minor: 0 - content_length: 226 - body: '{"status":"pending","details":{"message":"Merge request enqueued.","uuid":"be3ffd73-5436-4c0f-b6c3-5413ddac44df","merge_method":"squash","merge_action":"default","expected_head_sha":"fc61323edd0740e8026c2745083f77a644ab668e"}}' + content_length: 247 + body: '{"status":"pending","details":{"message":"Merge request enqueued.","uuid":"2f220a5f-276b-4c1a-840c-a7a2997fc6e5","merge_method":"squash","merge_action":"default","expected_head_sha":"56b966bfe4ccee2e2cdb9593033a2bffe17f63fe","bypass_rules":false}}' headers: Content-Length: - - "226" + - "247" Content-Type: - application/json; charset=utf-8 status: 202 Accepted code: 202 - duration: 228.392083ms - - id: 8 + duration: 363.970417ms + - id: 9 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 content_length: 426 host: api.github.com - body: '{"query":"query($number:Int!$owner:String!$repo:String!){repository(owner: $owner, name: $repo){pullRequest(number: $number){id,number,url,title,state,headRefOid,baseRefName,isDraft,headRepository{owner{login},name},labels(first: 100){nodes{name}},reviewRequests(first: 100){nodes{requestedReviewer{... on Actor{login}}}},assignees(first: 100){nodes{login}}}}}","variables":{"number":202,"owner":"test-owner","repo":"test-repo"}}' + body: '{"query":"query($number:Int!$owner:String!$repo:String!){repository(owner: $owner, name: $repo){pullRequest(number: $number){id,number,url,title,state,headRefOid,baseRefName,isDraft,headRepository{owner{login},name},labels(first: 100){nodes{name}},reviewRequests(first: 100){nodes{requestedReviewer{... on Actor{login}}}},assignees(first: 100){nodes{login}}}}}","variables":{"number":219,"owner":"test-owner","repo":"test-repo"}}' headers: Content-Type: - application/json @@ -225,14 +247,14 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"repository":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABAvuKFw","number":202,"url":"https://github.com/test-owner/test-repo/pull/202","title":"Native stack merged-member bottom stack-merged-bottom-5nHARMp1","state":"MERGED","headRefOid":"fc61323edd0740e8026c2745083f77a644ab668e","baseRefName":"main","isDraft":false,"headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"labels":{"nodes":[]},"reviewRequests":{"nodes":[]},"assignees":{"nodes":[]}}}}}' + body: '{"data":{"repository":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebPkw","number":219,"url":"https://github.com/test-owner/test-repo/pull/219","title":"Native stack merged-member bottom stack-merged-bottom-WhHgsnJP","state":"MERGED","headRefOid":"56b966bfe4ccee2e2cdb9593033a2bffe17f63fe","baseRefName":"main","isDraft":false,"headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"labels":{"nodes":[]},"reviewRequests":{"nodes":[]},"assignees":{"nodes":[]}}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 267.005375ms - - id: 9 + duration: 277.3295ms + - id: 10 request: proto: HTTP/1.1 proto_major: 1 @@ -247,21 +269,21 @@ interactions: proto_minor: 0 content_length: -1 uncompressed: true - body: '[{"id":560920,"number":205,"node_id":"PRS_kwDOMVd0xs4ACI8Y","url":"https://api.github.com/repos/test-owner/test-repo/stacks/205","base":{"ref":"main"},"open":true,"created_at":"2026-08-24T03:01:58Z","pull_requests":[{"number":202,"state":"closed","draft":false,"merged_at":"2026-08-24T03:02:00Z","head":{"ref":"stack-merged-bottom-5nHARMp1","sha":"fc61323edd0740e8026c2745083f77a644ab668e"}},{"number":204,"state":"open","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-Bubo7AXB","sha":"381be2239426e81ac49c336904cf1a7c55baf08e"}}]},{"id":560657,"number":201,"node_id":"PRS_kwDOMVd0xs4ACI4R","url":"https://api.github.com/repos/test-owner/test-repo/stacks/201","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:33Z","pull_requests":[{"number":198,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-bottom-dLKjmtVW","sha":"07b6e8cb44f5e5d13cd8a029a83bea789909d247"}},{"number":200,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-fqg9w5za","sha":"3ef6501dce36b8774c06c95b0fbc46418ede856c"}}]},{"id":560655,"number":197,"node_id":"PRS_kwDOMVd0xs4ACI4P","url":"https://api.github.com/repos/test-owner/test-repo/stacks/197","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:15Z","pull_requests":[{"number":193,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-bottom-Hydxxy1R","sha":"2ceeaa5efc3791ef3c43e7463cfb74adda1b4de3"}},{"number":196,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-inserted-WNuOA0uR","sha":"1b604a1deff0517ee22c665f662db6d42cec2921"}},{"number":194,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-top-92YL4XjC","sha":"8590f670baa89e5b535210911353c9cbdfa2d0fc"}}]},{"id":560648,"number":191,"node_id":"PRS_kwDOMVd0xs4ACI4I","url":"https://api.github.com/repos/test-owner/test-repo/stacks/191","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:35:35Z","pull_requests":[{"number":189,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-geOs2I70","sha":"d09aa9285a4200d6ec0a1454033a5302a8c15f94"}},{"number":190,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-VEtQX9yQ","sha":"7b6309fa47e62cd6b9984a4e9dc1c1081756fd76"}},{"number":192,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-ip5EzT1K","sha":"0e2fa2c652ecd15211e206798f0c6790c360ccdd"}}]},{"id":313473,"number":174,"node_id":"PRS_kwDOMVd0xs4ABMiB","url":"https://api.github.com/repos/test-owner/test-repo/stacks/174","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:40:09Z","pull_requests":[{"number":170,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:15Z","head":{"ref":"divergent-stack-a-pO7wJfwF","sha":"cbba7e8dcfec641a88f530c0ccc7c8ce535aeeae"}},{"number":171,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:16Z","head":{"ref":"divergent-stack-b-9iT5TOLK","sha":"04f50ba691258ef2c136849b1ad0a9e45a6d964a"}},{"number":172,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:17Z","head":{"ref":"divergent-stack-c-iXygp4Wc","sha":"5e059d8b881a4c03271f7bd6eff43496fb7bfba2"}}]},{"id":313446,"number":169,"node_id":"PRS_kwDOMVd0xs4ABMhm","url":"https://api.github.com/repos/test-owner/test-repo/stacks/169","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:39:16Z","pull_requests":[{"number":165,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:22Z","head":{"ref":"divergent-stack-a-ZwG2QqxN","sha":"bad73a03fe75bb84a66c18758f6a33e964fa5623"}},{"number":166,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-b-VxbXF3H4","sha":"1835fe77d5079914c4050ce7f480688f4de316b0"}},{"number":167,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-c-MAlCUfYp","sha":"09d733256cafd094d360cb399794138c766a1fef"}}]},{"id":302729,"number":160,"node_id":"PRS_kwDOMVd0xs4ABJ6J","url":"https://api.github.com/repos/test-owner/test-repo/stacks/160","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:18:42Z","pull_requests":[{"number":158,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:46Z","head":{"ref":"merge-range-bottom-bZiK8Eda","sha":"24777ef044c0a4bc712d1345bf9c0ed8b791197b"}},{"number":159,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:47Z","head":{"ref":"merge-range-top-hIOTMX1T","sha":"bb58f1370879a404c18b51898dcf2e08ea740727"}}]},{"id":302716,"number":157,"node_id":"PRS_kwDOMVd0xs4ABJ58","url":"https://api.github.com/repos/test-owner/test-repo/stacks/157","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:17:41Z","pull_requests":[{"number":155,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-bottom-0tvkFGY5","sha":"5c1b178950b3b777fb9ebbede6d383db05d22467"}},{"number":156,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-top-J25jZjmP","sha":"12a7613a380b2b58338e3860d2f328f7cdff03b0"}}]},{"id":302692,"number":154,"node_id":"PRS_kwDOMVd0xs4ABJ5k","url":"https://api.github.com/repos/test-owner/test-repo/stacks/154","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:15:44Z","pull_requests":[{"number":152,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-bottom-K06vsatq","sha":"da0f854fa38886c46c4e140f6ccbbf97a0617fda"}},{"number":153,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-top-UQMItpa9","sha":"408a67f73119d0e8394e8f82eeca982994ed20be"}}]},{"id":302586,"number":151,"node_id":"PRS_kwDOMVd0xs4ABJ36","url":"https://api.github.com/repos/test-owner/test-repo/stacks/151","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:06:06Z","pull_requests":[{"number":149,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-bottom-j0y6OqrT","sha":"11e275c782e6d64ef1453ca2a4e1509f8ef1d10a"}},{"number":150,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-top-G8bqRe1G","sha":"4cb95e7edc28838635b54236918b825a9130fcb8"}}]},{"id":302031,"number":147,"node_id":"PRS_kwDOMVd0xs4ABJvP","url":"https://api.github.com/repos/test-owner/test-repo/stacks/147","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T03:16:01Z","pull_requests":[{"number":145,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-dW4RtWmC","sha":"b5bec1eaccc7a5fb6d5ac747c67832c156bf51bd"}},{"number":146,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-g3WXJxSb","sha":"f740dffc87f2ddf00824f1a09d2c24b70811b247"}},{"number":148,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-gampXI6B","sha":"711662448930f8a00d161c842fb0ee8d401c994e"}}]},{"id":167872,"number":144,"node_id":"PRS_kwDOMVd0xs4AAo_A","url":"https://api.github.com/repos/test-owner/test-repo/stacks/144","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T12:16:14Z","pull_requests":[{"number":140,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:48Z","head":{"ref":"probe-autodelete-20260805-9c4e-a","sha":"920069c11160c4fe98a1b7e346be68ca51d59b73"}},{"number":141,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:49Z","head":{"ref":"probe-autodelete-20260805-9c4e-b","sha":"1007602d9b285fe3c2825da02aaf020c4f0ecdd7"}},{"number":142,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:50Z","head":{"ref":"probe-autodelete-20260805-9c4e-c","sha":"d0753d932262f7b817599a792e317f5339a5849d"}}]},{"id":167438,"number":139,"node_id":"PRS_kwDOMVd0xs4AAo4O","url":"https://api.github.com/repos/test-owner/test-repo/stacks/139","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T11:55:14Z","pull_requests":[{"number":135,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:56Z","head":{"ref":"probe-divergence-20260805-7f3c-a","sha":"b70346dd87e33f1b0182223edee11f43a3a9db66"}},{"number":136,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:57Z","head":{"ref":"probe-divergence-20260805-7f3c-b","sha":"f5367dbc180b397617065a700e42df50f7646329"}},{"number":137,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:58Z","head":{"ref":"probe-divergence-20260805-7f3c-c","sha":"f820a52d526b01daba6bd583066d97dd03d33fcd"}}]},{"id":101032,"number":134,"node_id":"PRS_kwDOMVd0xs4AAYqo","url":"https://api.github.com/repos/test-owner/test-repo/stacks/134","base":{"ref":"main"},"open":false,"created_at":"2026-08-02T06:04:41Z","pull_requests":[{"number":132,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:07Z","head":{"ref":"gs-native-stack-probe-019fbe36-base","sha":"640dd83224aabd95f66ff91912b26f08f33edbbd"}},{"number":133,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:08Z","head":{"ref":"gs-native-stack-probe-019fbe36-top","sha":"67d6b814fe522ff1e3d850fcf6b1cdc02ac11b43"}}]}]' + body: '[{"id":2569430,"number":223,"node_id":"PRS_kwDOMVd0xs4AJzTW","url":"https://api.github.com/repos/test-owner/test-repo/stacks/223","base":{"ref":"main"},"open":true,"created_at":"2026-10-24T18:20:30Z","pull_requests":[{"number":219,"state":"closed","draft":false,"merged_at":"2026-10-24T18:20:33Z","head":{"ref":"stack-merged-bottom-WhHgsnJP","sha":"56b966bfe4ccee2e2cdb9593033a2bffe17f63fe"}},{"number":220,"state":"open","draft":false,"merged_at":null,"head":{"ref":"stack-merged-active-eidAprfb","sha":"1a74e59527dc7382943866c1a69828c52920a38e"}},{"number":221,"state":"open","draft":false,"merged_at":null,"head":{"ref":"stack-merged-removed-PXZk6D5F","sha":"121ef3572e4bcefc2287f4557525a7b75a4234fa"}},{"number":222,"state":"open","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-pbHO3APN","sha":"f0e4f300f8ec28f19c47b3dd416c98ea9b72b0b9"}}]},{"id":2278657,"number":218,"node_id":"PRS_kwDOMVd0xs4AIsUB","url":"https://api.github.com/repos/test-owner/test-repo/stacks/218","base":{"ref":"main"},"open":false,"created_at":"2026-10-18T16:08:19Z","pull_requests":[{"number":216,"state":"closed","draft":false,"merged_at":"2026-10-18T16:08:23Z","head":{"ref":"merge-range-bottom-AqDRPUhB","sha":"d04387efe5e7e7f1344034e2a65258e319a0f36e"}},{"number":217,"state":"closed","draft":false,"merged_at":"2026-10-18T16:08:24Z","head":{"ref":"merge-range-top-ctA0TmUW","sha":"36c049b2ead051439c9eb51841cac117261ce381"}}]},{"id":2271158,"number":215,"node_id":"PRS_kwDOMVd0xs4AIqe2","url":"https://api.github.com/repos/test-owner/test-repo/stacks/215","base":{"ref":"main"},"open":false,"created_at":"2026-10-18T04:22:48Z","pull_requests":[{"number":211,"state":"closed","draft":false,"merged_at":"2026-10-18T04:22:55Z","head":{"ref":"divergent-stack-a-wPasYoEw","sha":"6f744c548111eece46eb593d449d710efcf29f7c"}},{"number":212,"state":"closed","draft":false,"merged_at":"2026-10-18T04:22:56Z","head":{"ref":"divergent-stack-b-RXgPDCuH","sha":"bb9a9493a90e0769ff78277a7a7ba06b557a3085"}},{"number":213,"state":"closed","draft":false,"merged_at":"2026-10-18T04:22:57Z","head":{"ref":"divergent-stack-c-FTpKOYLu","sha":"96d2f03f21d8380640a3a7c37aca8230e2a7e78b"}}]},{"id":2271127,"number":210,"node_id":"PRS_kwDOMVd0xs4AIqeX","url":"https://api.github.com/repos/test-owner/test-repo/stacks/210","base":{"ref":"main"},"open":false,"created_at":"2026-10-18T04:19:22Z","pull_requests":[{"number":206,"state":"closed","draft":false,"merged_at":"2026-10-18T04:19:28Z","head":{"ref":"divergent-stack-a-ZWPj8xhh","sha":"062d9e3117627eb4ad3cd3dd78b2122599a07540"}},{"number":207,"state":"closed","draft":false,"merged_at":"2026-10-18T04:19:29Z","head":{"ref":"divergent-stack-b-RYgd6SHK","sha":"f125136bda5d9bf7415b30e55081bc5a18f130c5"}},{"number":208,"state":"closed","draft":false,"merged_at":"2026-10-18T04:19:30Z","head":{"ref":"divergent-stack-c-RmxtuoEw","sha":"4da1c03c6877aa428970b6694cfb729b1f31dceb"}}]},{"id":560920,"number":205,"node_id":"PRS_kwDOMVd0xs4ACI8Y","url":"https://api.github.com/repos/test-owner/test-repo/stacks/205","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T03:01:58Z","pull_requests":[{"number":202,"state":"closed","draft":false,"merged_at":"2026-08-24T03:02:00Z","head":{"ref":"stack-merged-bottom-5nHARMp1","sha":"fc61323edd0740e8026c2745083f77a644ab668e"}},{"number":204,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-Bubo7AXB","sha":"381be2239426e81ac49c336904cf1a7c55baf08e"}}]},{"id":560657,"number":201,"node_id":"PRS_kwDOMVd0xs4ACI4R","url":"https://api.github.com/repos/test-owner/test-repo/stacks/201","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:33Z","pull_requests":[{"number":198,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-bottom-dLKjmtVW","sha":"07b6e8cb44f5e5d13cd8a029a83bea789909d247"}},{"number":200,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-merged-top-fqg9w5za","sha":"3ef6501dce36b8774c06c95b0fbc46418ede856c"}}]},{"id":560655,"number":197,"node_id":"PRS_kwDOMVd0xs4ACI4P","url":"https://api.github.com/repos/test-owner/test-repo/stacks/197","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:36:15Z","pull_requests":[{"number":193,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-bottom-Hydxxy1R","sha":"2ceeaa5efc3791ef3c43e7463cfb74adda1b4de3"}},{"number":196,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-inserted-WNuOA0uR","sha":"1b604a1deff0517ee22c665f662db6d42cec2921"}},{"number":194,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-replace-top-92YL4XjC","sha":"8590f670baa89e5b535210911353c9cbdfa2d0fc"}}]},{"id":560648,"number":191,"node_id":"PRS_kwDOMVd0xs4ACI4I","url":"https://api.github.com/repos/test-owner/test-repo/stacks/191","base":{"ref":"main"},"open":false,"created_at":"2026-08-24T02:35:35Z","pull_requests":[{"number":189,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-geOs2I70","sha":"d09aa9285a4200d6ec0a1454033a5302a8c15f94"}},{"number":190,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-VEtQX9yQ","sha":"7b6309fa47e62cd6b9984a4e9dc1c1081756fd76"}},{"number":192,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-ip5EzT1K","sha":"0e2fa2c652ecd15211e206798f0c6790c360ccdd"}}]},{"id":313473,"number":174,"node_id":"PRS_kwDOMVd0xs4ABMiB","url":"https://api.github.com/repos/test-owner/test-repo/stacks/174","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:40:09Z","pull_requests":[{"number":170,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:15Z","head":{"ref":"divergent-stack-a-pO7wJfwF","sha":"cbba7e8dcfec641a88f530c0ccc7c8ce535aeeae"}},{"number":171,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:16Z","head":{"ref":"divergent-stack-b-9iT5TOLK","sha":"04f50ba691258ef2c136849b1ad0a9e45a6d964a"}},{"number":172,"state":"closed","draft":false,"merged_at":"2026-08-12T13:40:17Z","head":{"ref":"divergent-stack-c-iXygp4Wc","sha":"5e059d8b881a4c03271f7bd6eff43496fb7bfba2"}}]},{"id":313446,"number":169,"node_id":"PRS_kwDOMVd0xs4ABMhm","url":"https://api.github.com/repos/test-owner/test-repo/stacks/169","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T13:39:16Z","pull_requests":[{"number":165,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:22Z","head":{"ref":"divergent-stack-a-ZwG2QqxN","sha":"bad73a03fe75bb84a66c18758f6a33e964fa5623"}},{"number":166,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-b-VxbXF3H4","sha":"1835fe77d5079914c4050ce7f480688f4de316b0"}},{"number":167,"state":"closed","draft":false,"merged_at":"2026-08-12T13:39:23Z","head":{"ref":"divergent-stack-c-MAlCUfYp","sha":"09d733256cafd094d360cb399794138c766a1fef"}}]},{"id":302729,"number":160,"node_id":"PRS_kwDOMVd0xs4ABJ6J","url":"https://api.github.com/repos/test-owner/test-repo/stacks/160","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:18:42Z","pull_requests":[{"number":158,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:46Z","head":{"ref":"merge-range-bottom-bZiK8Eda","sha":"24777ef044c0a4bc712d1345bf9c0ed8b791197b"}},{"number":159,"state":"closed","draft":false,"merged_at":"2026-08-12T04:18:47Z","head":{"ref":"merge-range-top-hIOTMX1T","sha":"bb58f1370879a404c18b51898dcf2e08ea740727"}}]},{"id":302716,"number":157,"node_id":"PRS_kwDOMVd0xs4ABJ58","url":"https://api.github.com/repos/test-owner/test-repo/stacks/157","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:17:41Z","pull_requests":[{"number":155,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-bottom-0tvkFGY5","sha":"5c1b178950b3b777fb9ebbede6d383db05d22467"}},{"number":156,"state":"closed","draft":false,"merged_at":"2026-08-12T04:17:45Z","head":{"ref":"merge-range-top-J25jZjmP","sha":"12a7613a380b2b58338e3860d2f328f7cdff03b0"}}]},{"id":302692,"number":154,"node_id":"PRS_kwDOMVd0xs4ABJ5k","url":"https://api.github.com/repos/test-owner/test-repo/stacks/154","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:15:44Z","pull_requests":[{"number":152,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-bottom-K06vsatq","sha":"da0f854fa38886c46c4e140f6ccbbf97a0617fda"}},{"number":153,"state":"closed","draft":false,"merged_at":"2026-08-12T04:15:48Z","head":{"ref":"merge-range-top-UQMItpa9","sha":"408a67f73119d0e8394e8f82eeca982994ed20be"}}]},{"id":302586,"number":151,"node_id":"PRS_kwDOMVd0xs4ABJ36","url":"https://api.github.com/repos/test-owner/test-repo/stacks/151","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T04:06:06Z","pull_requests":[{"number":149,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-bottom-j0y6OqrT","sha":"11e275c782e6d64ef1453ca2a4e1509f8ef1d10a"}},{"number":150,"state":"closed","draft":false,"merged_at":"2026-08-12T04:06:10Z","head":{"ref":"merge-range-top-G8bqRe1G","sha":"4cb95e7edc28838635b54236918b825a9130fcb8"}}]},{"id":302031,"number":147,"node_id":"PRS_kwDOMVd0xs4ABJvP","url":"https://api.github.com/repos/test-owner/test-repo/stacks/147","base":{"ref":"main"},"open":false,"created_at":"2026-08-12T03:16:01Z","pull_requests":[{"number":145,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-bottom-dW4RtWmC","sha":"b5bec1eaccc7a5fb6d5ac747c67832c156bf51bd"}},{"number":146,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-middle-g3WXJxSb","sha":"f740dffc87f2ddf00824f1a09d2c24b70811b247"}},{"number":148,"state":"closed","draft":false,"merged_at":null,"head":{"ref":"stack-top-gampXI6B","sha":"711662448930f8a00d161c842fb0ee8d401c994e"}}]},{"id":167872,"number":144,"node_id":"PRS_kwDOMVd0xs4AAo_A","url":"https://api.github.com/repos/test-owner/test-repo/stacks/144","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T12:16:14Z","pull_requests":[{"number":140,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:48Z","head":{"ref":"probe-autodelete-20260805-9c4e-a","sha":"920069c11160c4fe98a1b7e346be68ca51d59b73"}},{"number":141,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:49Z","head":{"ref":"probe-autodelete-20260805-9c4e-b","sha":"1007602d9b285fe3c2825da02aaf020c4f0ecdd7"}},{"number":142,"state":"closed","draft":false,"merged_at":"2026-08-05T12:18:50Z","head":{"ref":"probe-autodelete-20260805-9c4e-c","sha":"d0753d932262f7b817599a792e317f5339a5849d"}}]},{"id":167438,"number":139,"node_id":"PRS_kwDOMVd0xs4AAo4O","url":"https://api.github.com/repos/test-owner/test-repo/stacks/139","base":{"ref":"main"},"open":false,"created_at":"2026-08-05T11:55:14Z","pull_requests":[{"number":135,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:56Z","head":{"ref":"probe-divergence-20260805-7f3c-a","sha":"b70346dd87e33f1b0182223edee11f43a3a9db66"}},{"number":136,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:57Z","head":{"ref":"probe-divergence-20260805-7f3c-b","sha":"f5367dbc180b397617065a700e42df50f7646329"}},{"number":137,"state":"closed","draft":false,"merged_at":"2026-08-05T11:55:58Z","head":{"ref":"probe-divergence-20260805-7f3c-c","sha":"f820a52d526b01daba6bd583066d97dd03d33fcd"}}]},{"id":101032,"number":134,"node_id":"PRS_kwDOMVd0xs4AAYqo","url":"https://api.github.com/repos/test-owner/test-repo/stacks/134","base":{"ref":"main"},"open":false,"created_at":"2026-08-02T06:04:41Z","pull_requests":[{"number":132,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:07Z","head":{"ref":"gs-native-stack-probe-019fbe36-base","sha":"640dd83224aabd95f66ff91912b26f08f33edbbd"}},{"number":133,"state":"closed","draft":false,"merged_at":"2026-08-02T06:05:08Z","head":{"ref":"gs-native-stack-probe-019fbe36-top","sha":"67d6b814fe522ff1e3d850fcf6b1cdc02ac11b43"}}]}]' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 218.222125ms - - id: 10 + duration: 253.492542ms + - id: 11 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 523 + content_length: 395 host: api.github.com - body: '{"query":"query($owner:String!,$repo:String!,$pr0:Int!,$pr1:Int!,$pr2:Int!){repository(owner: $owner, name: $repo){pr0:pullRequest(number: $pr0){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr1:pullRequest(number: $pr1){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr2:pullRequest(number: $pr2){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}}}}","variables":{"owner":"test-owner","pr0":202,"pr1":203,"pr2":204,"repo":"test-repo"}}' + body: '{"query":"query($owner:String!,$repo:String!,$pr0:Int!,$pr1:Int!){repository(owner: $owner, name: $repo){pr0:pullRequest(number: $pr0){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr1:pullRequest(number: $pr1){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}}}}","variables":{"owner":"test-owner","pr0":220,"pr1":222,"repo":"test-repo"}}' headers: Content-Type: - application/json @@ -272,21 +294,21 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"repository":{"pr0":{"id":"PR_kwDOMVd0xs8AAAABAvuKFw","state":"MERGED","headRefName":"stack-merged-bottom-5nHARMp1","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4ACI8Y"}},"pr1":{"id":"PR_kwDOMVd0xs8AAAABAvuKWg","state":"OPEN","headRefName":"stack-merged-inserted-aX9bGOqd","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr2":{"id":"PR_kwDOMVd0xs8AAAABAvuKow","state":"OPEN","headRefName":"stack-merged-top-Bubo7AXB","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4ACI8Y"}}}}}' + body: '{"data":{"repository":{"pr0":{"id":"PR_kwDOMVd0xs8AAAABKebQkA","state":"OPEN","headRefName":"stack-merged-active-eidAprfb","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4AJzTW"}},"pr1":{"id":"PR_kwDOMVd0xs8AAAABKebR8Q","state":"OPEN","headRefName":"stack-merged-top-pbHO3APN","baseRefName":"stack-merged-removed-PXZk6D5F","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4AJzTW"}}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 283.38425ms - - id: 11 + duration: 256.84525ms + - id: 12 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 content_length: 263 host: api.github.com - body: '{"query":"query($ids:[ID!]!){nodes(ids: $ids){... on PullRequestStack{id,number,entries(first: 100){nodes{pullRequest{number,state,mergeQueueEntry{id},autoMergeRequest{enabledAt}}},pageInfo{endCursor,hasNextPage}}}}}","variables":{"ids":["PRS_kwDOMVd0xs4ACI8Y"]}}' + body: '{"query":"query($ids:[ID!]!){nodes(ids: $ids){... on PullRequestStack{id,number,entries(first: 100){nodes{pullRequest{number,state,mergeQueueEntry{id},autoMergeRequest{enabledAt}}},pageInfo{endCursor,hasNextPage}}}}}","variables":{"ids":["PRS_kwDOMVd0xs4AJzTW"]}}' headers: Content-Type: - application/json @@ -297,21 +319,43 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"nodes":[{"id":"PRS_kwDOMVd0xs4ACI8Y","number":205,"entries":{"nodes":[{"pullRequest":{"number":202,"state":"MERGED","mergeQueueEntry":null,"autoMergeRequest":null}},{"pullRequest":{"number":204,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}}],"pageInfo":{"endCursor":"Mg","hasNextPage":false}}}]}}' + body: '{"data":{"nodes":[{"id":"PRS_kwDOMVd0xs4AJzTW","number":223,"entries":{"nodes":[{"pullRequest":{"number":219,"state":"MERGED","mergeQueueEntry":null,"autoMergeRequest":null}},{"pullRequest":{"number":220,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}},{"pullRequest":{"number":221,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}},{"pullRequest":{"number":222,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}}],"pageInfo":{"endCursor":"NA","hasNextPage":false}}}]}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 303.385916ms - - id: 12 + duration: 294.822959ms + - id: 13 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 523 + content_length: 0 host: api.github.com - body: '{"query":"query($owner:String!,$repo:String!,$pr0:Int!,$pr1:Int!,$pr2:Int!){repository(owner: $owner, name: $repo){pr0:pullRequest(number: $pr0){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr1:pullRequest(number: $pr1){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr2:pullRequest(number: $pr2){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}}}}","variables":{"owner":"test-owner","pr0":202,"pr1":203,"pr2":204,"repo":"test-repo"}}' + url: https://api.github.com/repos/test-owner/test-repo/stacks/223/unstack + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + uncompressed: true + body: '{"id":2569430,"number":223,"node_id":"PRS_kwDOMVd0xs4AJzTW","url":"https://api.github.com/repos/test-owner/test-repo/stacks/223","base":{"ref":"main"},"open":false,"created_at":"2026-10-24T18:20:30Z","pull_requests":[{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/219","id":4997959571,"number":219,"head":{"ref":"stack-merged-bottom-WhHgsnJP","sha":"56b966bfe4ccee2e2cdb9593033a2bffe17f63fe","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"main","sha":"0737d87c1d17ef15d71fb7899de0eb6f79a5aa55","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebPkw","title":"Native stack merged-member bottom stack-merged-bottom-WhHgsnJP","state":"closed","merged_at":"2026-10-24T18:20:33Z","draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/219","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}}]}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 623.108792ms + - id: 14 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 217 + host: api.github.com + body: '{"query":"mutation($input:UpdatePullRequestInput!){updatePullRequest(input: $input){clientMutationId}}","variables":{"input":{"pullRequestId":"PR_kwDOMVd0xs8AAAABKebR8Q","baseRefName":"stack-merged-active-eidAprfb"}}}' headers: Content-Type: - application/json @@ -322,21 +366,49 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"repository":{"pr0":{"id":"PR_kwDOMVd0xs8AAAABAvuKFw","state":"MERGED","headRefName":"stack-merged-bottom-5nHARMp1","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4ACI8Y"}},"pr1":{"id":"PR_kwDOMVd0xs8AAAABAvuKWg","state":"OPEN","headRefName":"stack-merged-inserted-aX9bGOqd","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr2":{"id":"PR_kwDOMVd0xs8AAAABAvuKow","state":"OPEN","headRefName":"stack-merged-top-Bubo7AXB","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4ACI8Y"}}}}}' + body: '{"data":{"updatePullRequest":{"clientMutationId":null}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 262.820042ms - - id: 13 + duration: 1.106086708s + - id: 15 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 - content_length: 263 + content_length: 28 host: api.github.com - body: '{"query":"query($ids:[ID!]!){nodes(ids: $ids){... on PullRequestStack{id,number,entries(first: 100){nodes{pullRequest{number,state,mergeQueueEntry{id},autoMergeRequest{enabledAt}}},pageInfo{endCursor,hasNextPage}}}}}","variables":{"ids":["PRS_kwDOMVd0xs4ACI8Y"]}}' + body: | + {"pull_requests":[220,222]} + headers: + Content-Type: + - application/json + url: https://api.github.com/repos/test-owner/test-repo/stacks + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: 3415 + body: '{"id":2569434,"number":224,"node_id":"PRS_kwDOMVd0xs4AJzTa","url":"https://api.github.com/repos/test-owner/test-repo/stacks/224","base":{"ref":"main"},"open":true,"created_at":"2026-10-24T18:20:44Z","pull_requests":[{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/220","id":4997959824,"number":220,"head":{"ref":"stack-merged-active-eidAprfb","sha":"1a74e59527dc7382943866c1a69828c52920a38e","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"main","sha":"603c39c70127593914102f399a58d6c427c07dcd","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebQkA","title":"Native stack merged-member active stack-merged-active-eidAprfb","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/220","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}},{"url":"https://api.github.com/repos/test-owner/test-repo/pulls/222","id":4997960177,"number":222,"head":{"ref":"stack-merged-top-pbHO3APN","sha":"f0e4f300f8ec28f19c47b3dd416c98ea9b72b0b9","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"base":{"ref":"stack-merged-active-eidAprfb","sha":"1a74e59527dc7382943866c1a69828c52920a38e","repo":{"id":827815110,"url":"https://api.github.com/repos/test-owner/test-repo","name":"test-repo"}},"node_id":"PR_kwDOMVd0xs8AAAABKebR8Q","title":"Native stack merged-member top stack-merged-top-pbHO3APN","state":"open","merged_at":null,"draft":false,"html_url":"https://github.com/test-owner/test-repo/pull/222","user":{"login":"test-owner","id":41730,"node_id":"MDQ6VXNlcjQxNzMw","avatar_url":"https://avatars.githubusercontent.com/u/41730?v=4","gravatar_id":"","url":"https://api.github.com/users/test-owner","html_url":"https://github.com/test-owner","followers_url":"https://api.github.com/users/test-owner/followers","following_url":"https://api.github.com/users/test-owner/following{/other_user}","gists_url":"https://api.github.com/users/test-owner/gists{/gist_id}","starred_url":"https://api.github.com/users/test-owner/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/test-owner/subscriptions","organizations_url":"https://api.github.com/users/test-owner/orgs","repos_url":"https://api.github.com/users/test-owner/repos","events_url":"https://api.github.com/users/test-owner/events{/privacy}","received_events_url":"https://api.github.com/users/test-owner/received_events","type":"User","user_view_type":"public","site_admin":false}}]}' + headers: + Content-Length: + - "3415" + Content-Type: + - application/json; charset=utf-8 + status: 201 Created + code: 201 + duration: 1.086445083s + - id: 16 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 651 + host: api.github.com + body: '{"query":"query($owner:String!,$repo:String!,$pr0:Int!,$pr1:Int!,$pr2:Int!,$pr3:Int!){repository(owner: $owner, name: $repo){pr0:pullRequest(number: $pr0){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr1:pullRequest(number: $pr1){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr2:pullRequest(number: $pr2){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}},pr3:pullRequest(number: $pr3){id,state,headRefName,baseRefName,headRepository{owner{login},name},stack{id}}}}","variables":{"owner":"test-owner","pr0":219,"pr1":220,"pr2":221,"pr3":222,"repo":"test-repo"}}' headers: Content-Type: - application/json @@ -347,22 +419,46 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - uncompressed: true - body: '{"data":{"nodes":[{"id":"PRS_kwDOMVd0xs4ACI8Y","number":205,"entries":{"nodes":[{"pullRequest":{"number":202,"state":"MERGED","mergeQueueEntry":null,"autoMergeRequest":null}},{"pullRequest":{"number":204,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}}],"pageInfo":{"endCursor":"Mg","hasNextPage":false}}}]}}' + body: '{"data":{"repository":{"pr0":{"id":"PR_kwDOMVd0xs8AAAABKebPkw","state":"MERGED","headRefName":"stack-merged-bottom-WhHgsnJP","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4AJzTW"}},"pr1":{"id":"PR_kwDOMVd0xs8AAAABKebQkA","state":"OPEN","headRefName":"stack-merged-active-eidAprfb","baseRefName":"main","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4AJzTa"}},"pr2":{"id":"PR_kwDOMVd0xs8AAAABKebRVA","state":"OPEN","headRefName":"stack-merged-removed-PXZk6D5F","baseRefName":"stack-merged-active-eidAprfb","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":null},"pr3":{"id":"PR_kwDOMVd0xs8AAAABKebR8Q","state":"OPEN","headRefName":"stack-merged-top-pbHO3APN","baseRefName":"stack-merged-active-eidAprfb","headRepository":{"owner":{"login":"test-owner"},"name":"test-repo"},"stack":{"id":"PRS_kwDOMVd0xs4AJzTa"}}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 236.136625ms - - id: 14 + duration: 292.044834ms + - id: 17 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 286 + host: api.github.com + body: '{"query":"query($ids:[ID!]!){nodes(ids: $ids){... on PullRequestStack{id,number,entries(first: 100){nodes{pullRequest{number,state,mergeQueueEntry{id},autoMergeRequest{enabledAt}}},pageInfo{endCursor,hasNextPage}}}}}","variables":{"ids":["PRS_kwDOMVd0xs4AJzTW","PRS_kwDOMVd0xs4AJzTa"]}}' + headers: + Content-Type: + - application/json + url: https://api.github.com/graphql + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: '{"data":{"nodes":[{"id":"PRS_kwDOMVd0xs4AJzTW","number":223,"entries":{"nodes":[{"pullRequest":{"number":219,"state":"MERGED","mergeQueueEntry":null,"autoMergeRequest":null}}],"pageInfo":{"endCursor":"MQ","hasNextPage":false}}},{"id":"PRS_kwDOMVd0xs4AJzTa","number":224,"entries":{"nodes":[{"pullRequest":{"number":220,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}},{"pullRequest":{"number":222,"state":"OPEN","mergeQueueEntry":null,"autoMergeRequest":null}}],"pageInfo":{"endCursor":"Mg","hasNextPage":false}}}]}}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 410.1315ms + - id: 18 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 content_length: 188 host: api.github.com - body: '{"query":"mutation($input:UpdatePullRequestInput!){updatePullRequest(input: $input){pullRequest{id}}}","variables":{"input":{"pullRequestId":"PR_kwDOMVd0xs8AAAABAvuKow","state":"CLOSED"}}}' + body: '{"query":"mutation($input:UpdatePullRequestInput!){updatePullRequest(input: $input){pullRequest{id}}}","variables":{"input":{"pullRequestId":"PR_kwDOMVd0xs8AAAABKebR8Q","state":"CLOSED"}}}' headers: Content-Type: - application/json @@ -373,22 +469,46 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - uncompressed: true - body: '{"data":{"updatePullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABAvuKow"}}}}' + body: '{"data":{"updatePullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebR8Q"}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 1.123948458s - - id: 15 + duration: 1.068539208s + - id: 19 + request: + proto: HTTP/1.1 + proto_major: 1 + proto_minor: 1 + content_length: 188 + host: api.github.com + body: '{"query":"mutation($input:UpdatePullRequestInput!){updatePullRequest(input: $input){pullRequest{id}}}","variables":{"input":{"pullRequestId":"PR_kwDOMVd0xs8AAAABKebRVA","state":"CLOSED"}}}' + headers: + Content-Type: + - application/json + url: https://api.github.com/graphql + method: POST + response: + proto: HTTP/2.0 + proto_major: 2 + proto_minor: 0 + content_length: -1 + body: '{"data":{"updatePullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebRVA"}}}}' + headers: + Content-Type: + - application/json; charset=utf-8 + status: 200 OK + code: 200 + duration: 945.083625ms + - id: 20 request: proto: HTTP/1.1 proto_major: 1 proto_minor: 1 content_length: 188 host: api.github.com - body: '{"query":"mutation($input:UpdatePullRequestInput!){updatePullRequest(input: $input){pullRequest{id}}}","variables":{"input":{"pullRequestId":"PR_kwDOMVd0xs8AAAABAvuKWg","state":"CLOSED"}}}' + body: '{"query":"mutation($input:UpdatePullRequestInput!){updatePullRequest(input: $input){pullRequest{id}}}","variables":{"input":{"pullRequestId":"PR_kwDOMVd0xs8AAAABKebQkA","state":"CLOSED"}}}' headers: Content-Type: - application/json @@ -399,10 +519,10 @@ interactions: proto_major: 2 proto_minor: 0 content_length: -1 - body: '{"data":{"updatePullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABAvuKWg"}}}}' + body: '{"data":{"updatePullRequest":{"pullRequest":{"id":"PR_kwDOMVd0xs8AAAABKebQkA"}}}}' headers: Content-Type: - application/json; charset=utf-8 status: 200 OK code: 200 - duration: 968.710708ms + duration: 959.096041ms