| Git Provider | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Verify webhook and compile pinned pipeline definition into immutable DAG. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents the external caller from also owning the contract and failure behavior of Webhook Ingest. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Malicious build escapes sandbox” to the external caller. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Git Provider boundary before extracting or scaling it. |
| Webhook Ingest | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Scheduler releases ready tasks under tenant quota/priority and leases ephemeral runners. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Git Provider from also owning the contract and failure behavior of Pipeline API. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Runner dies after artifact upload” to Git Provider. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Webhook Ingest boundary before extracting or scaling it. |
| Pipeline API | Owns authentication, validation, quotas, deadlines, and routing. In this design it participates in: Runner fetches source/cache, executes in sandbox, and streams bounded logs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Webhook Ingest from also owning the contract and failure behavior of Definition Store. | Put protocol, authentication, quotas, and business transitions in one process. Acceptable at low scale, but it couples external traffic risk to domain releases. Here that simpler choice would couple “Cache poisoning crosses repositories” to Webhook Ingest. | Costs another hop, policy distribution, and a high-blast-radius fleet. Introduce it when many clients or services need one protocol and protection boundary. Measure the latency, saturation, lag, or mismatch at the Pipeline API boundary before extracting or scaling it. |
| Definition Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Publish content-addressed artifacts plus provenance before marking task success. | Defines the source of truth and commit boundary. It prevents Pipeline API from also owning the contract and failure behavior of Workflow Compiler. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “Webhook replay duplicates pipeline” to Pipeline API. | Costs schema migration, replication, backup, and shard ownership. Split storage only when access patterns, retention, or compliance boundaries materially differ. Measure the latency, saturation, lag, or mismatch at the Definition Store boundary before extracting or scaling it. |
| Workflow Compiler | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Deployment controller promotes exact artifacts through approvals, canaries, and rollback. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Definition Store from also owning the contract and failure behavior of DAG Scheduler. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Deployment health gate reports late” to Definition Store. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Workflow Compiler boundary before extracting or scaling it. |
| DAG Scheduler | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Verify webhook and compile pinned pipeline definition into immutable DAG. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Workflow Compiler from also owning the contract and failure behavior of Quota / Priority. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Malicious build escapes sandbox” to Workflow Compiler. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the DAG Scheduler boundary before extracting or scaling it. |
| Quota / Priority | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Scheduler releases ready tasks under tenant quota/priority and leases ephemeral runners. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents DAG Scheduler from also owning the contract and failure behavior of Ephemeral Runner. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Runner dies after artifact upload” to DAG Scheduler. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Quota / Priority boundary before extracting or scaling it. |
| Ephemeral Runner | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Runner fetches source/cache, executes in sandbox, and streams bounded logs. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Quota / Priority from also owning the contract and failure behavior of Sandbox / Network Policy. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Cache poisoning crosses repositories” to Quota / Priority. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Ephemeral Runner boundary before extracting or scaling it. |
| Sandbox / Network Policy | Owns authoritative versioned state or immutable evidence. In this design it participates in: Publish content-addressed artifacts plus provenance before marking task success. | Defines the source of truth and commit boundary. It prevents Ephemeral Runner from also owning the contract and failure behavior of Source Cache. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “Webhook replay duplicates pipeline” to Ephemeral Runner. | Costs schema migration, replication, backup, and shard ownership. Split storage only when access patterns, retention, or compliance boundaries materially differ. Measure the latency, saturation, lag, or mismatch at the Sandbox / Network Policy boundary before extracting or scaling it. |
| Source Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Deployment controller promotes exact artifacts through approvals, canaries, and rollback. | Removes repeated work from the latency-critical path. It prevents Sandbox / Network Policy from also owning the contract and failure behavior of Build Cache. | Read authoritative storage for every request. Simpler initially, but latency and source-of-truth load scale together and a hot key becomes a database incident. Here that simpler choice would couple “Deployment health gate reports late” to Sandbox / Network Policy. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1M builds/day · untrusted code · petabytes of artifacts) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Source Cache boundary before extracting or scaling it. |
| Build Cache | Serves a low-latency, disposable projection with authoritative fallback. In this design it participates in: Verify webhook and compile pinned pipeline definition into immutable DAG. | Removes repeated work from the latency-critical path. It prevents Source Cache from also owning the contract and failure behavior of Artifact Store. | Read authoritative storage for every request. Simpler initially, but latency and source-of-truth load scale together and a hot key becomes a database incident. Here that simpler choice would couple “Malicious build escapes sandbox” to Source Cache. | Costs invalidation, staleness, stampede protection, and memory. Add or split it only after the workload (1M builds/day · untrusted code · petabytes of artifacts) proves repeated reads dominate. Measure the latency, saturation, lag, or mismatch at the Build Cache boundary before extracting or scaling it. |
| Artifact Store | Owns authoritative versioned state or immutable evidence. In this design it participates in: Scheduler releases ready tasks under tenant quota/priority and leases ephemeral runners. | Defines the source of truth and commit boundary. It prevents Build Cache from also owning the contract and failure behavior of Log Stream. | Let each service persist its own interpretation. That removes one clear commit boundary and makes retries, support, and reconciliation ambiguous. Here that simpler choice would couple “Runner dies after artifact upload” to Build Cache. | Costs schema migration, replication, backup, and shard ownership. Split storage only when access patterns, retention, or compliance boundaries materially differ. Measure the latency, saturation, lag, or mismatch at the Artifact Store boundary before extracting or scaling it. |
| Log Stream | Preserves durable ordering, replay, and consumer checkpoints. In this design it participates in: Runner fetches source/cache, executes in sandbox, and streams bounded logs. | Decouples bursts and failure from user acknowledgment. It prevents Artifact Store from also owning the contract and failure behavior of Deployment Controller. | Call every downstream consumer synchronously. That couples user latency and availability to analytics, notification, indexing, and audit dependencies. Here that simpler choice would couple “Cache poisoning crosses repositories” to Artifact Store. | Costs eventual consistency, schema evolution, replay tooling, idempotent consumers, and lag operations. Earn it when bursts or downstream failure must not block acknowledgment. Measure the latency, saturation, lag, or mismatch at the Log Stream boundary before extracting or scaling it. |
| Deployment Controller | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Publish content-addressed artifacts plus provenance before marking task success. | Separates a distinct scale, ownership, policy, or failure boundary. It prevents Log Stream from also owning the contract and failure behavior of Audit / Provenance. | Keep this behavior inside an adjacent service. Prefer that simpler option until independent scale, ownership, policy, or failure isolation is measurable. Here that simpler choice would couple “Webhook replay duplicates pipeline” to Log Stream. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Deployment Controller boundary before extracting or scaling it. |
| Audit / Provenance | Owns one bounded domain decision, transition, or operational capability. In this design it participates in: Deployment controller promotes exact artifacts through approvals, canaries, and rollback. | Proves correctness and supports controlled recovery. It prevents Deployment Controller from also owning the contract and failure behavior of operators and repair tooling. | Infer correctness from request logs. Logs do not prove durable business state, detect silent drift, or safely repair ambiguous outcomes. Here that simpler choice would couple “Deployment health gate reports late” to Deployment Controller. | Costs an interface, deployment, telemetry, ownership, and failure mode. Keep it in-process first; extract when independent scale or reliability pays for the boundary. Measure the latency, saturation, lag, or mismatch at the Audit / Provenance boundary before extracting or scaling it. |