Skip to content

refactor: migrate merge terminology to land - #674

Open
behinddwalls wants to merge 1 commit into
mainfrom
land-terminology
Open

refactor: migrate merge terminology to land#674
behinddwalls wants to merge 1 commit into
mainfrom
land-terminology

Conversation

@behinddwalls

@behinddwalls behinddwalls commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

Summary

Why?

SubmitQueue uses land as the domain verb for integrating changes, while merge is reserved for the MERGE land strategy, Git primitives, and external provider terminology.

What?

Rename merge-oriented API contracts, queue topics, controllers, extensions, entities, configuration, environment variables, wiring, tooling, and documentation to land terminology. Preserve the LandStrategy MERGE value and its Git merge-commit behavior.

Test Plan

  • make proto
  • make fmt
  • make build
  • make test
  • make lint-binary lint-license lint-message-id lint-queue-shard
  • make tidy and make gazelle produced no changes

@behinddwalls
behinddwalls marked this pull request as ready for review September 4, 2026 03:30
@behinddwalls
behinddwalls requested review from a team and sbalabanov as code owners September 4, 2026 03:30
## Summary

### Why?

SubmitQueue uses land as the domain verb for integrating changes, while merge is reserved for the MERGE land strategy, Git primitives, and external provider terminology.

### What?

Rename merge-oriented API contracts, queue topics, controllers, extensions, entities, configuration, environment variables, wiring, tooling, and documentation to land terminology. Preserve the LandStrategy MERGE value and its Git merge-commit behavior.

## Test Plan

- ✅ `make proto`
- ✅ `make fmt`
- ✅ `make build`
- ✅ `make test`
- ✅ `make lint-binary lint-license lint-message-id lint-queue-shard`
- ✅ `make tidy` and `make gazelle` produced no changes

# Conflicts:
#	service/submitqueue/gateway/server/mapper/land.go
#	service/submitqueue/gateway/server/mapper/land_test.go

# Please enter the commit message for your changes. Lines starting
# with '#' will be kept; you may remove them yourself if you want to.
# An empty message aborts the commit.
#
# interactive rebase in progress; onto c9ee7a8
# Last command done (1 command done):
#    pick a7aac77 # refactor: migrate merge terminology to land
# No commands remaining.
# You are currently rebasing branch 'land-terminology' on 'c9ee7a84'.
#
# Changes to be committed:
#	modified:   AGENTS.md
#	modified:   Makefile
#	modified:   README.md
#	modified:   api/base/hook/README.md
#	modified:   api/base/hook/hook_test.go
#	modified:   api/base/hook/protopb/hook.pb.go
#	renamed:    api/base/mergestrategy/proto/BUILD.bazel -> api/base/landstrategy/proto/BUILD.bazel
#	renamed:    api/base/mergestrategy/proto/mergestrategy.proto -> api/base/landstrategy/proto/landstrategy.proto
#	renamed:    api/base/mergestrategy/protopb/BUILD.bazel -> api/base/landstrategy/protopb/BUILD.bazel
#	renamed:    api/base/mergestrategy/protopb/mergestrategy.pb.go -> api/base/landstrategy/protopb/landstrategy.pb.go
#	modified:   api/base/messagequeue/proto/messagequeue.proto
#	modified:   api/runway/messagequeue/BUILD.bazel
#	modified:   api/runway/messagequeue/README.md
#	renamed:    api/runway/messagequeue/merge.go -> api/runway/messagequeue/land.go
#	renamed:    api/runway/messagequeue/merge_test.go -> api/runway/messagequeue/land_test.go
#	modified:   api/runway/messagequeue/proto/BUILD.bazel
#	renamed:    api/runway/messagequeue/proto/merge.proto -> api/runway/messagequeue/proto/land.proto
#	modified:   api/runway/messagequeue/protopb/BUILD.bazel
#	renamed:    api/runway/messagequeue/protopb/merge.pb.go -> api/runway/messagequeue/protopb/land.pb.go
#	modified:   api/runway/messagequeue/topics.go
#	modified:   api/submitqueue/gateway/proto/gateway.proto
#	modified:   api/submitqueue/gateway/protopb/BUILD.bazel
#	modified:   api/submitqueue/gateway/protopb/gateway.pb.go
#	modified:   api/submitqueue/gateway/protopb/gateway.pb.yarpc.go
#	modified:   api/submitqueue/gateway/protopb/gateway_grpc.pb.go
#	modified:   doc/howto/QUICKSTART.md
#	modified:   doc/howto/TESTING.md
#	modified:   doc/rfc/change-uri.md
#	modified:   doc/rfc/consumer-gate.md
#	modified:   doc/rfc/hook-framework.md
#	modified:   doc/rfc/index.md
#	modified:   doc/rfc/messagequeue-contract.md
#	modified:   doc/rfc/runway/workflow.md
#	modified:   doc/rfc/sql-queue-rfc.md
#	modified:   doc/rfc/stovepipe/steps/build.md
#	modified:   doc/rfc/stovepipe/steps/process.md
#	modified:   doc/rfc/stovepipe/workflow.md
#	modified:   doc/rfc/submitqueue/extension-contract.md
#	modified:   doc/rfc/submitqueue/modular-queue-wiring.md
#	modified:   doc/rfc/submitqueue/speculation-generator-best-first.md
#	modified:   doc/rfc/submitqueue/speculation.md
#	modified:   doc/rfc/submitqueue/workflow.md
#	renamed:    platform/base/mergestrategy/BUILD.bazel -> platform/base/landstrategy/BUILD.bazel
#	new file:   platform/base/landstrategy/landstrategy.go
#	deleted:    platform/base/mergestrategy/mergestrategy.go
#	modified:   platform/errs/README.md
#	modified:   platform/extension/consumergate/file/store_test.go
#	modified:   platform/extension/messagequeue/README.md
#	modified:   platform/extension/messagequeue/mysql/README.md
#	modified:   platform/extension/messagequeue/mysql/ctl/README.md
#	modified:   platform/extension/messagequeue/mysql/schema/queue_messages.sql
#	modified:   platform/git/exec/gitexec.go
#	modified:   platform/hook/README.md
#	modified:   platform/hook/dlq.go
#	modified:   platform/metrics/README.md
#	modified:   platform/metrics/metrics.go
#	modified:   platform/publish/publish_test.go
#	modified:   runway/README.md
#	modified:   runway/controller/dlq/dlq.go
#	modified:   runway/controller/dlq/dlq_test.go
#	renamed:    runway/controller/merge/BUILD.bazel -> runway/controller/land/BUILD.bazel
#	renamed:    runway/controller/merge/merge.go -> runway/controller/land/land.go
#	renamed:    runway/controller/merge/merge_test.go -> runway/controller/land/land_test.go
#	renamed:    runway/controller/mergeconflictcheck/BUILD.bazel -> runway/controller/landconflictcheck/BUILD.bazel
#	renamed:    runway/controller/mergeconflictcheck/mergeconflictcheck.go -> runway/controller/landconflictcheck/landconflictcheck.go
#	renamed:    runway/controller/mergeconflictcheck/mergeconflictcheck_test.go -> runway/controller/landconflictcheck/landconflictcheck_test.go
#	renamed:    runway/extension/merger/BUILD.bazel -> runway/extension/lander/BUILD.bazel
#	renamed:    runway/extension/merger/fake/BUILD.bazel -> runway/extension/lander/fake/BUILD.bazel
#	renamed:    runway/extension/merger/fake/fake.go -> runway/extension/lander/fake/fake.go
#	renamed:    runway/extension/merger/fake/fake_test.go -> runway/extension/lander/fake/fake_test.go
#	renamed:    runway/extension/merger/git/BUILD.bazel -> runway/extension/lander/git/BUILD.bazel
#	renamed:    runway/extension/merger/git/README.md -> runway/extension/lander/git/README.md
#	renamed:    runway/extension/merger/git/author.go -> runway/extension/lander/git/author.go
#	renamed:    runway/extension/merger/git/changeref.go -> runway/extension/lander/git/changeref.go
#	renamed:    runway/extension/merger/git/git_merger.go -> runway/extension/lander/git/git_lander.go
#	renamed:    runway/extension/merger/git/git_merger_test.go -> runway/extension/lander/git/git_lander_test.go
#	renamed:    runway/extension/merger/git/headbranch.go -> runway/extension/lander/git/headbranch.go
#	renamed:    runway/extension/merger/git/headbranch_test.go -> runway/extension/lander/git/headbranch_test.go
#	renamed:    runway/extension/merger/git/objects.go -> runway/extension/lander/git/objects.go
#	renamed:    runway/extension/merger/merger.go -> runway/extension/lander/lander.go
#	renamed:    runway/extension/merger/mock/BUILD.bazel -> runway/extension/lander/mock/BUILD.bazel
#	new file:   runway/extension/lander/mock/lander_mock.go
#	renamed:    runway/extension/merger/noop/BUILD.bazel -> runway/extension/lander/noop/BUILD.bazel
#	renamed:    runway/extension/merger/noop/noop.go -> runway/extension/lander/noop/noop.go
#	renamed:    runway/extension/merger/noop/noop_test.go -> runway/extension/lander/noop/noop_test.go
#	deleted:    runway/extension/merger/mock/merger_mock.go
#	modified:   service/README.md
#	modified:   service/runway/README.md
#	modified:   service/runway/server/BUILD.bazel
#	modified:   service/runway/server/Dockerfile
#	modified:   service/runway/server/checkout.go
#	modified:   service/runway/server/checkout_test.go
#	modified:   service/runway/server/config.go
#	modified:   service/runway/server/config_test.go
#	modified:   service/runway/server/docker-compose.yml
#	modified:   service/runway/server/gitruntime.go
#	modified:   service/runway/server/main.go
#	modified:   service/submitqueue/README.md
#	modified:   service/submitqueue/demo/provider/README.md
#	new file:   service/submitqueue/demo/provider/fake/land.yaml
#	deleted:    service/submitqueue/demo/provider/fake/merge.yaml
#	modified:   service/submitqueue/demo/provider/git/BUILD.bazel
#	renamed:    service/submitqueue/demo/provider/git/merge.yaml -> service/submitqueue/demo/provider/git/land.yaml
#	modified:   service/submitqueue/demo/provider/git/profiles.yaml
#	renamed:    service/submitqueue/demo/provider/github/merge.yaml -> service/submitqueue/demo/provider/github/land.yaml
#	modified:   service/submitqueue/demo/requests/BUILD.bazel
#	modified:   service/submitqueue/demo/requests/fake.go
#	modified:   service/submitqueue/demo/requests/git.go
#	modified:   service/submitqueue/demo/requests/main.go
#	modified:   service/submitqueue/demo/requests/main_test.go
#	modified:   service/submitqueue/docker-compose.fake.yml
#	modified:   service/submitqueue/docker-compose.git.yml
#	modified:   service/submitqueue/docker-compose.provider.yml
#	modified:   service/submitqueue/docker-compose.yml
#	modified:   service/submitqueue/gateway/client/main.go
#	modified:   service/submitqueue/gateway/server/mapper/BUILD.bazel
#	modified:   service/submitqueue/gateway/server/mapper/land.go
#	modified:   service/submitqueue/gateway/server/mapper/land_test.go
#	modified:   service/submitqueue/gateway/server/queues.yaml
#	modified:   service/submitqueue/orchestrator/server/config.go
#	modified:   service/submitqueue/orchestrator/server/config_test.go
#	modified:   stovepipe/README.md
#	modified:   submitqueue/client/BUILD.bazel
#	modified:   submitqueue/client/land.go
#	modified:   submitqueue/core/batch/transition_test.go
#	modified:   submitqueue/core/changeset/README.md
#	modified:   submitqueue/core/changeset/changeset.go
#	modified:   submitqueue/core/request/request_test.go
#	modified:   submitqueue/core/topickey/topickey.go
#	modified:   submitqueue/entity/BUILD.bazel
#	modified:   submitqueue/entity/batch.go
#	modified:   submitqueue/entity/batch_test.go
#	modified:   submitqueue/entity/land.go
#	renamed:    submitqueue/entity/merge_result.go -> submitqueue/entity/land_check_result.go
#	modified:   submitqueue/entity/land_test.go
#	modified:   submitqueue/entity/push_result.go
#	modified:   submitqueue/entity/request.go
#	modified:   submitqueue/entity/request_log.go
#	modified:   submitqueue/entity/request_test.go
#	modified:   submitqueue/entity/speculation.go
#	modified:   submitqueue/extension/changeprovider/git/README.md
#	renamed:    submitqueue/extension/mergechecker/BUILD.bazel -> submitqueue/extension/landchecker/BUILD.bazel
#	renamed:    submitqueue/extension/mergechecker/fake/BUILD.bazel -> submitqueue/extension/landchecker/fake/BUILD.bazel
#	renamed:    submitqueue/extension/mergechecker/fake/fake.go -> submitqueue/extension/landchecker/fake/fake.go
#	renamed:    submitqueue/extension/mergechecker/fake/fake_test.go -> submitqueue/extension/landchecker/fake/fake_test.go
#	renamed:    submitqueue/extension/mergechecker/github/BUILD.bazel -> submitqueue/extension/landchecker/github/BUILD.bazel
#	renamed:    submitqueue/extension/mergechecker/github/checker.go -> submitqueue/extension/landchecker/github/checker.go
#	renamed:    submitqueue/extension/mergechecker/github/checker_test.go -> submitqueue/extension/landchecker/github/checker_test.go
#	renamed:    submitqueue/extension/mergechecker/github/graphql.go -> submitqueue/extension/landchecker/github/graphql.go
#	renamed:    submitqueue/extension/mergechecker/github/graphql_test.go -> submitqueue/extension/landchecker/github/graphql_test.go
#	renamed:    submitqueue/extension/mergechecker/github/validate.go -> submitqueue/extension/landchecker/github/validate.go
#	renamed:    submitqueue/extension/mergechecker/github/validate_test.go -> submitqueue/extension/landchecker/github/validate_test.go
#	renamed:    submitqueue/extension/mergechecker/mergechecker.go -> submitqueue/extension/landchecker/landchecker.go
#	renamed:    submitqueue/extension/mergechecker/mock/BUILD.bazel -> submitqueue/extension/landchecker/mock/BUILD.bazel
#	renamed:    submitqueue/extension/mergechecker/mock/mergechecker_mock.go -> submitqueue/extension/landchecker/mock/landchecker_mock.go
#	modified:   submitqueue/extension/speculation/allocator/sticky/sticky.go
#	modified:   submitqueue/extension/speculation/generator/bestfirst/README.md
#	modified:   submitqueue/extension/speculation/generator/bestfirst/bestfirst_test.go
#	modified:   submitqueue/extension/speculation/scorer/scorer.go
#	modified:   submitqueue/extension/speculation/speculator/README.md
#	modified:   submitqueue/extension/speculation/speculator/speculator.go
#	modified:   submitqueue/extension/speculation/speculator/standard/README.md
#	modified:   submitqueue/extension/storage/mysql/BUILD.bazel
#	modified:   submitqueue/extension/storage/mysql/batch_store_test.go
#	modified:   submitqueue/extension/storage/mysql/request_store_test.go
#	modified:   submitqueue/gateway/controller/BUILD.bazel
#	modified:   submitqueue/gateway/controller/cancel.go
#	modified:   submitqueue/gateway/controller/land_test.go
#	modified:   submitqueue/orchestrator/BUILD.bazel
#	modified:   submitqueue/orchestrator/README.md
#	modified:   submitqueue/orchestrator/controller/README.md
#	modified:   submitqueue/orchestrator/controller/batch/BUILD.bazel
#	modified:   submitqueue/orchestrator/controller/batch/batch_test.go
#	modified:   submitqueue/orchestrator/controller/cancel/cancel.go
#	modified:   submitqueue/orchestrator/controller/cancel/cancel_test.go
#	modified:   submitqueue/orchestrator/controller/conclude/conclude.go
#	modified:   submitqueue/orchestrator/controller/dependencyanalysis/dependencyanalysis.go
#	modified:   submitqueue/orchestrator/controller/dependencyanalysis/dependencyanalysis_test.go
#	modified:   submitqueue/orchestrator/controller/dlq/BUILD.bazel
#	modified:   submitqueue/orchestrator/controller/dlq/README.md
#	modified:   submitqueue/orchestrator/controller/dlq/batch.go
#	modified:   submitqueue/orchestrator/controller/dlq/batch_test.go
#	modified:   submitqueue/orchestrator/controller/dlq/dlq.go
#	modified:   submitqueue/orchestrator/controller/dlq/dlq_test.go
#	renamed:    submitqueue/orchestrator/controller/dlq/mergeconflictsignal.go -> submitqueue/orchestrator/controller/dlq/landconflictsignal.go
#	renamed:    submitqueue/orchestrator/controller/dlq/mergeconflictsignal_test.go -> submitqueue/orchestrator/controller/dlq/landconflictsignal_test.go
#	renamed:    submitqueue/orchestrator/controller/dlq/mergesignal.go -> submitqueue/orchestrator/controller/dlq/landsignal.go
#	renamed:    submitqueue/orchestrator/controller/dlq/mergesignal_test.go -> submitqueue/orchestrator/controller/dlq/landsignal_test.go
#	modified:   submitqueue/orchestrator/controller/dlq/request_test.go
#	modified:   submitqueue/orchestrator/controller/dlq/speculate.go
#	renamed:    submitqueue/orchestrator/controller/merge/BUILD.bazel -> submitqueue/orchestrator/controller/land/BUILD.bazel
#	renamed:    submitqueue/orchestrator/controller/merge/merge.go -> submitqueue/orchestrator/controller/land/land.go
#	renamed:    submitqueue/orchestrator/controller/merge/merge_test.go -> submitqueue/orchestrator/controller/land/land_test.go
#	renamed:    submitqueue/orchestrator/controller/mergeconflictsignal/BUILD.bazel -> submitqueue/orchestrator/controller/landconflictsignal/BUILD.bazel
#	renamed:    submitqueue/orchestrator/controller/mergeconflictsignal/mergeconflictsignal.go -> submitqueue/orchestrator/controller/landconflictsignal/landconflictsignal.go
#	renamed:    submitqueue/orchestrator/controller/mergeconflictsignal/mergeconflictsignal_test.go -> submitqueue/orchestrator/controller/landconflictsignal/landconflictsignal_test.go
#	renamed:    submitqueue/orchestrator/controller/mergesignal/BUILD.bazel -> submitqueue/orchestrator/controller/landsignal/BUILD.bazel
#	renamed:    submitqueue/orchestrator/controller/mergesignal/mergesignal.go -> submitqueue/orchestrator/controller/landsignal/landsignal.go
#	renamed:    submitqueue/orchestrator/controller/mergesignal/mergesignal_test.go -> submitqueue/orchestrator/controller/landsignal/landsignal_test.go
#	modified:   submitqueue/orchestrator/controller/speculate/check.go
#	modified:   submitqueue/orchestrator/controller/speculate/check_test.go
#	modified:   submitqueue/orchestrator/controller/speculate/dispatch.go
#	modified:   submitqueue/orchestrator/controller/speculate/doc.go
#	modified:   submitqueue/orchestrator/controller/speculate/finalize.go
#	modified:   submitqueue/orchestrator/controller/speculate/outcome.go
#	modified:   submitqueue/orchestrator/controller/speculate/outcome_test.go
#	modified:   submitqueue/orchestrator/controller/speculate/run.go
#	modified:   submitqueue/orchestrator/controller/speculate/run_test.go
#	modified:   submitqueue/orchestrator/controller/speculate/snapshot.go
#	modified:   submitqueue/orchestrator/controller/speculate/speculate.go
#	modified:   submitqueue/orchestrator/controller/speculate/speculate_test.go
#	modified:   submitqueue/orchestrator/controller/start/BUILD.bazel
#	modified:   submitqueue/orchestrator/controller/start/start_test.go
#	modified:   submitqueue/orchestrator/controller/validate/BUILD.bazel
#	modified:   submitqueue/orchestrator/controller/validate/validate.go
#	modified:   submitqueue/orchestrator/controller/validate/validate_test.go
#	modified:   submitqueue/orchestrator/pipeline.go
#	modified:   test/e2e/runway/BUILD.bazel
#	modified:   test/e2e/runway/harness_test.go
#	modified:   test/e2e/runway/suite_test.go
#	modified:   test/e2e/submitqueue/BUILD.bazel
#	modified:   test/e2e/submitqueue/git_suite_test.go
#	modified:   test/e2e/submitqueue/harness_test.go
#	modified:   test/e2e/submitqueue/suite_test.go
#	modified:   test/integration/extension/messagequeue/mysql/queue_test.go
#	modified:   test/integration/submitqueue/extension/storage/BUILD.bazel
#	modified:   test/integration/submitqueue/extension/storage/suite.go
#	modified:   test/integration/submitqueue/gateway/BUILD.bazel
#	modified:   test/integration/submitqueue/gateway/suite_test.go
#	modified:   tool/gitsandbox/BUILD.bazel
#	modified:   tool/gitsandbox/main.go
#	modified:   tool/gitsandbox/main_test.go
#	modified:   tool/linter/messageid/main_test.go
#	modified:   tool/proto/BUILD.bazel
#

@sbalabanov sbalabanov left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stopped reviewing here, sending back for a discussion on where the boundary between "land" and "merge" should be

option (uber.base.messagequeue.topic_keys) = "merge-signal";
message LandResult {
option (uber.base.messagequeue.topic_keys) = "land-conflict-check-signal";
option (uber.base.messagequeue.topic_keys) = "land-signal";

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these ones relate to the very merge though, should they remain the same?

string reason = 3;
// steps optionally reports per-step outcomes, in request order. A committing
// merge populates each step's outputs with the revisions it produced; a
// land populates each step's outputs with the revisions it produced; a

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ditto

// topic for a committing merge.
MergeRequest = protopb.MergeRequest
// MergeStep is one step of an ordered merge: a single set of change(s)
// LandRequest is the payload a client publishes to one of Runway's land

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Runway in fact should be "merge" ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants