Files
kandev/docs/plans/github-pr-merge-queue/task-01-backend-queue-aware-merge.md
2026-08-24 11:09:03 +00:00

2.2 KiB

id, title, status, wave, depends_on, plan, spec
id title status wave depends_on plan spec
01-backend-queue-aware-merge Backend queue-aware merge done 1
plan.md ../../specs/integrations/requirements/github-pr-merge-queue.md

Task 01: Backend Queue-Aware Merge

Inputs

  • docs/specs/integrations/requirements/github-pr-merge-queue.md
  • docs/plans/github-pr-merge-queue/plan.md
  • apps/backend/AGENTS.md

Likely Files

  • apps/backend/internal/github/client.go
  • apps/backend/internal/github/gh_client.go
  • apps/backend/internal/github/pat_client.go
  • apps/backend/internal/github/mock_client.go
  • apps/backend/internal/github/noop_client.go
  • apps/backend/internal/github/service_pr.go
  • apps/backend/internal/github/controller.go
  • apps/backend/internal/github/graphql.go
  • apps/backend/internal/github/models.go
  • apps/backend/internal/github/store.go
  • apps/backend/internal/github/service_pr_watch.go
  • apps/backend/internal/task/statussummary/projector_pr.go
  • Their focused *_test.go files

Acceptance

  • GitHub merge requests use the asynchronous endpoint with merge_action=default and preserve allowed merge-method selection.
  • Provider responses normalize to explicit merged or queued outcomes, including already-queued idempotency, and unknown results fail closed.
  • The workspace-scoped HTTP endpoint returns the normalized outcome while retaining auth routing, cache invalidation, validation, and error mapping.
  • The existing GraphQL status sync observes queue state, one-based position, and optional estimate; persistence preserves queue-unaware reads, clears authoritative exits and terminal states, and the bounded task projection exposes the queued state with multi-PR attention ranking.

Verification

make -C apps/backend test ARGS='./internal/github/...'

Dependencies And Risks

  • No task dependency.
  • GitHub's asynchronous API response shapes and HTTP statuses must be captured from the official contract rather than inferred from the synchronous API.
  • Both PAT and gh CLI transports must remain behaviorally identical.

Results

  • make -C apps/backend test ARGS='./internal/github/...' passed (the Make target executed the full backend go test -tags fts5 ./... suite).