refactor(mrqueue): remove mrqueue package, use beads for MRs (gt-dqi)
Remove the mrqueue side-channel from gastown. The merge queue now uses
beads merge-request wisps exclusively, not parallel .beads/mq/*.json files.
Changes:
- Delete internal/mrqueue/ package (~830 lines removed)
- Move scoring logic to internal/refinery/score.go
- Update Refinery engineer to query beads via ReadyWithType("merge-request")
- Add MRInfo struct to replace mrqueue.MR
- Add ClaimMR/ReleaseMR methods using beads assignee field
- Update HandleMergeReady to not create duplicate queue entries
- Update gt refinery commands (claim, release, unclaimed) to use beads
- Stub out MQEventSource (no longer needed)
The Refinery now:
- Lists MRs via beads.ReadyWithType("merge-request")
- Claims via beads.Update(..., {Assignee: worker})
- Closes via beads.CloseWithReason("merged", mrID)
- Blocks on conflicts via beads.AddDependency(mrID, taskID)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -4,14 +4,13 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/steveyegge/gastown/internal/mail"
|
||||
"github.com/steveyegge/gastown/internal/mrqueue"
|
||||
)
|
||||
|
||||
// DefaultRefineryHandler provides the default implementation for Refinery protocol handlers.
|
||||
// It receives MERGE_READY messages from the Witness and adds work to the merge queue.
|
||||
// It receives MERGE_READY messages from the Witness and acknowledges verified work.
|
||||
// Note: The Refinery now queries beads directly for merge requests (via ReadyWithType).
|
||||
type DefaultRefineryHandler struct {
|
||||
// Rig is the name of the rig this refinery processes.
|
||||
Rig string
|
||||
@@ -19,9 +18,6 @@ type DefaultRefineryHandler struct {
|
||||
// WorkDir is the working directory for operations.
|
||||
WorkDir string
|
||||
|
||||
// Queue is the merge request queue.
|
||||
Queue *mrqueue.Queue
|
||||
|
||||
// Router is used to send mail messages.
|
||||
Router *mail.Router
|
||||
|
||||
@@ -34,7 +30,6 @@ func NewRefineryHandler(rig, workDir string) *DefaultRefineryHandler {
|
||||
return &DefaultRefineryHandler{
|
||||
Rig: rig,
|
||||
WorkDir: workDir,
|
||||
Queue: mrqueue.New(workDir),
|
||||
Router: mail.NewRouter(workDir),
|
||||
Output: os.Stdout,
|
||||
}
|
||||
@@ -46,10 +41,10 @@ func (h *DefaultRefineryHandler) SetOutput(w io.Writer) {
|
||||
}
|
||||
|
||||
// HandleMergeReady handles a MERGE_READY message from Witness.
|
||||
// When a polecat's work is verified and ready, the Refinery:
|
||||
// 1. Validates the merge request
|
||||
// 2. Adds it to the merge queue
|
||||
// 3. Acknowledges receipt
|
||||
// When a polecat's work is verified and ready, the Refinery acknowledges receipt.
|
||||
//
|
||||
// NOTE: The merge-request bead is created by `gt done`, so we no longer need
|
||||
// to add to the mrqueue here. The Refinery queries beads directly for ready MRs.
|
||||
func (h *DefaultRefineryHandler) HandleMergeReady(payload *MergeReadyPayload) error {
|
||||
_, _ = fmt.Fprintf(h.Output, "[Refinery] MERGE_READY received for polecat %s\n", payload.Polecat)
|
||||
_, _ = fmt.Fprintf(h.Output, " Branch: %s\n", payload.Branch)
|
||||
@@ -64,25 +59,10 @@ func (h *DefaultRefineryHandler) HandleMergeReady(payload *MergeReadyPayload) er
|
||||
return fmt.Errorf("missing polecat in MERGE_READY payload")
|
||||
}
|
||||
|
||||
// Create merge request (ID is generated by Submit if empty)
|
||||
mr := &mrqueue.MR{
|
||||
Branch: payload.Branch,
|
||||
Worker: payload.Polecat,
|
||||
SourceIssue: payload.Issue,
|
||||
Target: "main", // Default target, could be passed in payload
|
||||
Rig: payload.Rig,
|
||||
Title: fmt.Sprintf("Merge %s work on %s", payload.Polecat, payload.Issue),
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
|
||||
// Add to queue
|
||||
if err := h.Queue.Submit(mr); err != nil {
|
||||
_, _ = fmt.Fprintf(h.Output, "[Refinery] Error adding to queue: %v\n", err)
|
||||
return fmt.Errorf("failed to add merge request to queue: %w", err)
|
||||
}
|
||||
|
||||
_, _ = fmt.Fprintf(h.Output, "[Refinery] ✓ Added to merge queue: %s\n", mr.ID)
|
||||
_, _ = fmt.Fprintf(h.Output, " Queue length: %d\n", h.Queue.Count())
|
||||
// The merge-request bead is created by `gt done` with gt:merge-request label.
|
||||
// The Refinery queries beads directly via ReadyWithType("merge-request").
|
||||
// No need to add to mrqueue - that was a duplicate tracking file.
|
||||
_, _ = fmt.Fprintf(h.Output, "[Refinery] ✓ Work verified - Refinery will pick up MR via beads query\n")
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user