{"record":{"id":"afe7bc4c61d29cdb","repo":"gastownhall/beads","slug":"merge-slot-not-found-s-run-bd-merge-slot-creat","errorCode":null,"errorMessage":"merge slot not found: %s (run 'bd merge-slot create' first): %w","messagePattern":"merge slot not found: (.+?) \\(run 'bd merge-slot create' first\\): %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"internal/storage/merge_slot.go","lineNumber":68,"sourceCode":"\t\tStatus:      types.StatusOpen,\n\t\tPriority:    0,\n\t}\n\tif err := s.CreateIssue(ctx, issue, actor); err != nil {\n\t\treturn nil, fmt.Errorf(\"merge-slot create: %w\", err)\n\t}\n\tif err := s.AddLabel(ctx, slotID, mergeSlotLabel, actor); err != nil {\n\t\t// Non-fatal: label is cosmetic.\n\t\t_ = err\n\t}\n\treturn s.GetIssue(ctx, slotID)\n}\n\n// MergeSlotCheckImpl is the shared implementation of Storage.MergeSlotCheck.\nfunc MergeSlotCheckImpl(ctx context.Context, s Storage) (*MergeSlotStatus, error) {\n\tslotID := MergeSlotID(ctx, s)\n\tslot, err := s.GetIssue(ctx, slotID)\n\tif err != nil || slot == nil {\n\t\treturn nil, fmt.Errorf(\"merge slot not found: %s (run 'bd merge-slot create' first): %w\",\n\t\t\tslotID, ErrNotFound)\n\t}\n\tmeta := parseSlotMeta(slot)\n\treturn &MergeSlotStatus{\n\t\tSlotID:    slotID,\n\t\tAvailable: slot.Status == types.StatusOpen,\n\t\tHolder:    meta.Holder,\n\t\tWaiters:   meta.Waiters,\n\t}, nil\n}\n\n// MergeSlotAcquireImpl is the shared implementation of Storage.MergeSlotAcquire.\n// It uses RunInTransaction to ensure atomic check-and-set, preventing two\n// agents from simultaneously acquiring the slot.\nfunc MergeSlotAcquireImpl(ctx context.Context, s Storage, holder, actor string, wait bool) (*MergeSlotResult, error) {\n\tif holder == \"\" {\n\t\treturn nil, fmt.Errorf(\"merge-slot acquire: holder must not be empty\")\n\t}","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/internal/storage/merge_slot.go#L50-L86","documentation":"MergeSlotCheckImpl looks up the canonical slot bead (<prefix>-merge-slot) via GetIssue; if the lookup errors or returns nil, it returns this sentinel error wrapping ErrNotFound. It simply means the merge slot has never been created in this store (or the issue_prefix changed so the expected ID no longer matches).","triggerScenarios":"Calling MergeSlotCheck (bd merge-slot status) before ever running 'bd merge-slot create' in this repo, or after issue_prefix config changed so MergeSlotID now points at a different, nonexistent bead ID.","commonSituations":"Fresh clone/brand-new database where the slot was never created; team renamed the prefix (e.g. gt → bd) so old slot beads are orphaned under a different ID; slot bead accidentally deleted.","solutions":["Run 'bd merge-slot create' to create the slot — the error message tells you exactly this","Check the issue_prefix config; if it changed, either update it back or create the slot under the new prefix","Look for an orphaned '<oldprefix>-merge-slot' bead and migrate/relabel it if you want to preserve history","Verify you are pointed at the intended database (right .beads dir / Dolt remote)"],"exampleFix":"// before\nstatus, err := store.MergeSlotCheck(ctx)\nif err != nil { return err } // not found on fresh repo\n// after\nslot, err := store.MergeSlotCreate(ctx, actor) // idempotent; creates if missing\nif err != nil { return err }\nstatus, err := store.MergeSlotCheck(ctx)","handlingStrategy":"fallback","validationCode":"// probe cheaply before reading status\nslotID := \"bd-merge-slot\" // or derive from prefix\nif _, err := store.GetIssue(ctx, slotID); err != nil {\n\t_, _ = store.MergeSlotCreate(ctx, actor) // create-if-missing\n}","typeGuard":"func mergeSlotExists(ctx context.Context, s storage.Storage) bool {\n\tslot, err := s.GetIssue(ctx, storage.MergeSlotID(ctx, s))\n\treturn err == nil && slot != nil\n}","tryCatchPattern":"status, err := store.MergeSlotCheck(ctx)\nif err != nil && strings.Contains(err.Error(), \"merge slot not found\") {\n\tif _, err := store.MergeSlotCreate(ctx, actor); err != nil { return err }\n\tstatus, err = store.MergeSlotCheck(ctx)\n}","preventionTips":["Run 'bd merge-slot create' as part of repo/agent bootstrap","Keep issue_prefix consistent across all agents and tooling","Never delete beads labeled gt:slot in cleanup jobs","Verify you are operating on the intended database before merge operations"],"tags":["merge-queue","not-found","setup"],"backgroundTag":"merge-slot-not-found","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}