diff --git a/cmd/mesh-controller/moved.go b/cmd/mesh-controller/moved.go index ca5c03e9..88596958 100644 --- a/cmd/mesh-controller/moved.go +++ b/cmd/mesh-controller/moved.go @@ -16,6 +16,7 @@ import ( sdkdelivery "git.novox.be/novox/mesh-sdk/go/delivery" "git.novox.be/novox/mesh-sdk/go/catalogue" + "git.novox.be/novox/mesh-sdk/go/kvlimit" "git.novox.be/novox/mesh-sdk/go/process" "github.com/novox/mesh-controller/internal/broker" "github.com/novox/mesh-controller/internal/inventory" @@ -180,7 +181,12 @@ func (k keepingDeliveryMerges) KeepDeliveryMerge(ctx context.Context, emitter st if err != nil { return fmt.Errorf("%w: the bucket of mesh-delivery's merges: %w", link.ErrTryAgain, err) } - if _, err := kv.Put(ctx, deliveryMergeKey(d.Owner, d.Repo, d.Number, d.HeadSHA), body); err != nil { + // Through kvlimit (sweep 2026-10-30, issue 774): a word too large for the bucket is refused before it is put, and + // is an answer, never "not now" — retried, it held the forge's merges for a day (10054 on de-spiegel's merge). + if _, err := kvlimit.Put(ctx, kv, deliveryMergeKey(d.Owner, d.Repo, d.Number, d.HeadSHA), body); err != nil { + if errors.Is(err, kvlimit.ErrTooLarge) { + return err + } return fmt.Errorf("%w: %w", link.ErrTryAgain, err) } if k.kept != nil {