Skip to content

refactor(runway): collapse orchestrator into single-service domain#272

Draft
behinddwalls wants to merge 1 commit into
mainfrom
runway/single-service
Draft

refactor(runway): collapse orchestrator into single-service domain#272
behinddwalls wants to merge 1 commit into
mainfrom
runway/single-service

Conversation

@behinddwalls

@behinddwalls behinddwalls commented Jun 25, 2026

Copy link
Copy Markdown
Collaborator

Summary

Why?

Runway only ever had a single service, so the per-domain gateway/ + orchestrator/ split wrapped it in an empty service layer. Making the runway domain be the service removes that indirection and matches how runway actually works — a consumer-only landing service with no gateway.

What?

Collapses the orchestrator service segment out of the runway domain:

  • runway/orchestrator/controller/*runway/controller/*
  • api/runway/orchestrator/{proto,protopb}api/runway/{proto,protopb}
  • example/runway/orchestrator/{client,server}example/runway/{client,server}

The proto package becomes uber.runway (was uber.runway.orchestrator) and the RPC service RunwayOrchestrator becomes Runway. Server/client identifiers, metric scope, and the ServiceName ping field follow suit. Build tooling (tool/proto, Makefile targets, docker-compose.yml, Dockerfile) and docs (CLAUDE.md, runway/README.md, runway workflow RFC) are updated, documenting the single-service-domain pattern.

Test Plan

  • make build
  • make proto + make gazelle (idempotent)
  • ✅ runway tests: //runway/..., //api/runway/..., //example/runway/...

## Summary

### Why?

Runway only ever had a single service, so the per-domain `gateway/` + `orchestrator/` split wrapped it in an empty service layer. Making the runway domain *be* the service removes that indirection and matches how runway actually works — a consumer-only landing service with no gateway.

### What?

Collapses the `orchestrator` service segment out of the runway domain:

- `runway/orchestrator/controller/*` → `runway/controller/*`
- `api/runway/orchestrator/{proto,protopb}` → `api/runway/{proto,protopb}`
- `example/runway/orchestrator/{client,server}` → `example/runway/{client,server}`

The proto package becomes `uber.runway` (was `uber.runway.orchestrator`) and the RPC service `RunwayOrchestrator` becomes `Runway`. Server/client identifiers, metric scope, and the `ServiceName` ping field follow suit. Build tooling (`tool/proto`, `Makefile` targets, `docker-compose.yml`, `Dockerfile`) and docs (`CLAUDE.md`, `runway/README.md`, runway workflow RFC) are updated, documenting the single-service-domain pattern.

## Test Plan

- ✅ `make build`
- ✅ `make proto` + `make gazelle` (idempotent)
- ✅ runway tests: `//runway/...`, `//api/runway/...`, `//example/runway/...`

Co-authored-by: Cursor <cursoragent@cursor.com>
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.

1 participant