Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,4 @@ See [doc/howto/TESTING.md](doc/howto/TESTING.md) for full testing guide.
1. **Structured logging** — `zap.SugaredLogger` with `Debugw`/`Infow`/`Errorw(msg, key, val, ...)`. Never unstructured methods.
2. **Interfaces for behavior, structs for data** — use interfaces for behavioral contracts (Consumer, Controller, Storage). Use structs for data containers, configs, and registries (TopicRegistry, SubscriptionConfig).
3. **Value types over pointers** — prefer value types for structs, configs, and return values. Use `(T, bool)` to signal absence instead of `*T`. Pointers only when mutation or shared ownership is needed.
4. **Errors for failures, not control flow** — reserve `error` returns for unexpected or infrastructure failures. Use result types (structs, bools) for expected outcomes like `(Result, error)` or `(T, bool)`. Avoid sentinel errors that represent non-failure states.
9 changes: 9 additions & 0 deletions extension/mergechecker/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
load("@rules_go//go:def.bzl", "go_library")

go_library(
name = "mergechecker",
srcs = ["mergechecker.go"],
importpath = "github.com/uber/submitqueue/extension/mergechecker",
visibility = ["//visibility:public"],
deps = ["//entity"],
)
21 changes: 21 additions & 0 deletions extension/mergechecker/mergechecker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package mergechecker

import (
"context"

"github.com/uber/submitqueue/entity"
)

// MergeChecker predicts whether a request's changes can merge cleanly.
type MergeChecker interface {
// Check is a fail-fast validation that optimistically assesses the
// mergeability of the request. A positive result does not guarantee
// that the changes will apply cleanly at merge finalization time.
Check(ctx context.Context, request entity.Request) (Result, error)
}

// Result holds the outcome of a merge check.
type Result struct {
// Mergeable is true if the request's changes are expected to merge cleanly.
Mergeable bool
}