diff --git a/cloud/shepherd/provider/equinix/provider.go b/cloud/shepherd/provider/equinix/provider.go
index f642eaf..1752349 100644
--- a/cloud/shepherd/provider/equinix/provider.go
+++ b/cloud/shepherd/provider/equinix/provider.go
@@ -292,7 +292,7 @@
 			return &k, nil
 		}
 	}
-	return nil, NoSuchKey
+	return nil, ErrNoSuchKey
 }
 
 // sshEquinixId looks up the Equinix key identified by providerConfig.KeyLabel,
@@ -344,7 +344,7 @@
 func (ep *equinixProvider) SSHEquinixEnsure(ctx context.Context) error {
 	k, err := ep.sshEquinix(ctx)
 	switch {
-	case errors.Is(err, NoSuchKey):
+	case errors.Is(err, ErrNoSuchKey):
 		if err := ep.sshEquinixUpload(ctx); err != nil {
 			return fmt.Errorf("while uploading key: %w", err)
 		}
diff --git a/cloud/shepherd/provider/equinix/provider_config.go b/cloud/shepherd/provider/equinix/provider_config.go
index be3bc27..b54488f 100644
--- a/cloud/shepherd/provider/equinix/provider_config.go
+++ b/cloud/shepherd/provider/equinix/provider_config.go
@@ -12,7 +12,7 @@
 )
 
 var (
-	NoSuchKey = errors.New("no such key")
+	ErrNoSuchKey = errors.New("no such key")
 )
 
 // providerConfig contains configuration options used by both the Initializer and
diff --git a/metropolis/cli/metroctl/cmd_certs.go b/metropolis/cli/metroctl/cmd_certs.go
index 075a0d0..d914c83 100644
--- a/metropolis/cli/metroctl/cmd_certs.go
+++ b/metropolis/cli/metroctl/cmd_certs.go
@@ -29,7 +29,7 @@
 	Example: "metroctl cert export",
 	Run: func(cmd *cobra.Command, args []string) {
 		ocert, opkey, err := core.GetOwnerCredentials(flags.configPath)
-		if errors.Is(err, core.NoCredentialsError) {
+		if errors.Is(err, core.ErrNoCredentials) {
 			log.Fatalf("You have to take ownership of the cluster first: %v", err)
 		}
 
diff --git a/metropolis/cli/metroctl/cmd_k8scredplugin.go b/metropolis/cli/metroctl/cmd_k8scredplugin.go
index adc3fe8..0d1f318 100644
--- a/metropolis/cli/metroctl/cmd_k8scredplugin.go
+++ b/metropolis/cli/metroctl/cmd_k8scredplugin.go
@@ -28,7 +28,7 @@
 
 func doK8sCredPlugin(cmd *cobra.Command, args []string) {
 	cert, key, err := core.GetOwnerCredentials(flags.configPath)
-	if errors.Is(err, core.NoCredentialsError) {
+	if errors.Is(err, core.ErrNoCredentials) {
 		log.Fatal("No credentials found on your machine")
 	}
 	if err != nil {
diff --git a/metropolis/cli/metroctl/cmd_takeownership.go b/metropolis/cli/metroctl/cmd_takeownership.go
index adad3cf..5161dc9 100644
--- a/metropolis/cli/metroctl/cmd_takeownership.go
+++ b/metropolis/cli/metroctl/cmd_takeownership.go
@@ -47,7 +47,7 @@
 	// Retrieve the cluster owner's private key, and use it to construct
 	// ephemeral credentials. Then, dial the cluster.
 	opk, err := core.GetOwnerKey(flags.configPath)
-	if errors.Is(err, core.NoCredentialsError) {
+	if errors.Is(err, core.ErrNoCredentials) {
 		log.Fatalf("Owner key does not exist. takeownership needs to be executed on the same system that has previously installed the cluster using metroctl install.")
 	}
 	if err != nil {
diff --git a/metropolis/cli/metroctl/core/ca_tofu.go b/metropolis/cli/metroctl/core/ca_tofu.go
index 9df9957..b578aa6 100644
--- a/metropolis/cli/metroctl/core/ca_tofu.go
+++ b/metropolis/cli/metroctl/core/ca_tofu.go
@@ -114,7 +114,7 @@
 	if err == nil {
 		return ca, nil
 	}
-	if !errors.Is(err, NoCACertificateError) {
+	if !errors.Is(err, ErrNoCACertificate) {
 		return nil, err
 	}
 
@@ -128,7 +128,7 @@
 	// against it, and don't ask the user.
 	var ocert *x509.Certificate
 	if err != nil {
-		if errors.Is(err, NoCredentialsError) {
+		if errors.Is(err, ErrNoCredentials) {
 			okey, err := GetOwnerKey(c.ConfigPath)
 			if err != nil {
 				return nil, err
diff --git a/metropolis/cli/metroctl/core/config.go b/metropolis/cli/metroctl/core/config.go
index f3ca8b3..d119883 100644
--- a/metropolis/cli/metroctl/core/config.go
+++ b/metropolis/cli/metroctl/core/config.go
@@ -35,11 +35,13 @@
 	CACertificateFileName = "ca.pem"
 )
 
-// NoCredentialsError indicates that the requested datum (eg. owner key or owner
-// certificate) is not present in the requested directory.
-var NoCredentialsError = errors.New("owner certificate or key does not exist")
+var (
+	// ErrNoCredentials indicates that the requested datum (eg. owner key or owner
+	// certificate) is not present in the requested directory.
+	ErrNoCredentials = errors.New("owner certificate or key does not exist")
 
-var NoCACertificateError = errors.New("no cluster CA certificate while secure connection was requested")
+	ErrNoCACertificate = errors.New("no cluster CA certificate while secure connection was requested")
+)
 
 // A PEM block type for a Metropolis initial owner private key
 const ownerKeyType = "METROPOLIS INITIAL OWNER PRIVATE KEY"
@@ -51,7 +53,7 @@
 	switch {
 	case err == nil:
 		return existing, nil
-	case errors.Is(err, NoCredentialsError):
+	case errors.Is(err, ErrNoCredentials):
 	default:
 		return nil, err
 	}
@@ -88,11 +90,11 @@
 
 // GetOwnerKey loads and returns a raw ED25519 private key from the saved owner
 // key in a given metroctl configuration directory path. If the owner key doesn't
-// exist, NoCredentialsError will be returned.
+// exist, ErrNoCredentials will be returned.
 func GetOwnerKey(path string) (ed25519.PrivateKey, error) {
 	ownerPrivateKeyPEM, err := os.ReadFile(filepath.Join(path, OwnerKeyFileName))
 	if os.IsNotExist(err) {
-		return nil, NoCredentialsError
+		return nil, ErrNoCredentials
 	} else if err != nil {
 		return nil, fmt.Errorf("failed to load owner private key: %w", err)
 	}
@@ -125,7 +127,7 @@
 // GetOwnerCredentials loads and returns a raw ED25519 private key alongside a
 // DER-encoded X509 certificate from the saved owner key and certificate in a
 // given metroctl configuration directory path. If either the key or certificate
-// doesn't exist, NoCredentialsError will be returned.
+// doesn't exist, ErrNoCredentials will be returned.
 func GetOwnerCredentials(path string) (cert *x509.Certificate, key ed25519.PrivateKey, err error) {
 	key, err = GetOwnerKey(path)
 	if err != nil {
@@ -134,7 +136,7 @@
 
 	ownerCertPEM, err := os.ReadFile(filepath.Join(path, OwnerCertificateFileName))
 	if os.IsNotExist(err) {
-		return nil, nil, NoCredentialsError
+		return nil, nil, ErrNoCredentials
 	} else if err != nil {
 		return nil, nil, fmt.Errorf("failed to load owner certificate: %w", err)
 	}
@@ -171,7 +173,7 @@
 func GetClusterCA(path string) (cert *x509.Certificate, err error) {
 	caCertPEM, err := os.ReadFile(filepath.Join(path, CACertificateFileName))
 	if os.IsNotExist(err) {
-		return nil, NoCACertificateError
+		return nil, ErrNoCACertificate
 	} else if err != nil {
 		return nil, fmt.Errorf("failed to load CA certificate: %w", err)
 	}
diff --git a/metropolis/cli/metroctl/rpc.go b/metropolis/cli/metroctl/rpc.go
index 06008e3..cab6d4f 100644
--- a/metropolis/cli/metroctl/rpc.go
+++ b/metropolis/cli/metroctl/rpc.go
@@ -18,7 +18,7 @@
 	// Collect credentials, validate command parameters, and try dialing the
 	// cluster.
 	ocert, opkey, err := core.GetOwnerCredentials(flags.configPath)
-	if errors.Is(err, core.NoCredentialsError) {
+	if errors.Is(err, core.ErrNoCredentials) {
 		log.Fatalf("You have to take ownership of the cluster first: %v", err)
 	}
 	if len(flags.clusterEndpoints) == 0 {
@@ -52,7 +52,7 @@
 	// Collect credentials, validate command parameters, and try dialing the
 	// cluster.
 	ocert, opkey, err := core.GetOwnerCredentials(flags.configPath)
-	if errors.Is(err, core.NoCredentialsError) {
+	if errors.Is(err, core.ErrNoCredentials) {
 		log.Fatalf("You have to take ownership of the cluster first: %v", err)
 	}
 	cc, err := core.DialNode(ctx, opkey, ocert, cacert, flags.proxyAddr, id, address)
diff --git a/metropolis/node/core/consensus/client/unimplemented.go b/metropolis/node/core/consensus/client/unimplemented.go
index 047e8ee..9b146eb 100644
--- a/metropolis/node/core/consensus/client/unimplemented.go
+++ b/metropolis/node/core/consensus/client/unimplemented.go
@@ -9,10 +9,10 @@
 )
 
 var (
-	// UnimplementedInNamespaced will be raised by panic() any time a method
+	// ErrUnimplementedInNamespaced will be raised by panic() any time a method
 	// from the Cluster, Auth and Maintenance APIs gets called on a
 	// clientv3.Client returned by ThinClient or Namespaced.ThinClient.
-	UnimplementedInNamespaced = errors.New("interface not implemented in Namespaced etcd client")
+	ErrUnimplementedInNamespaced = errors.New("interface not implemented in Namespaced etcd client")
 )
 
 // unimplementedCluster implements clientv3.Cluster, but panics on any call.
@@ -20,27 +20,27 @@
 }
 
 func (c *unimplementedCluster) MemberList(_ context.Context) (*clientv3.MemberListResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedCluster) MemberAdd(_ context.Context, _ []string) (*clientv3.MemberAddResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedCluster) MemberAddAsLearner(_ context.Context, _ []string) (*clientv3.MemberAddResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedCluster) MemberRemove(_ context.Context, _ uint64) (*clientv3.MemberRemoveResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedCluster) MemberUpdate(_ context.Context, _ uint64, _ []string) (*clientv3.MemberUpdateResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedCluster) MemberPromote(_ context.Context, _ uint64) (*clientv3.MemberPromoteResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 // unimplementedAuth implements clientv3.Auth but panics on any call.
@@ -48,75 +48,75 @@
 }
 
 func (c *unimplementedAuth) Authenticate(ctx context.Context, name string, password string) (*clientv3.AuthenticateResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) AuthEnable(ctx context.Context) (*clientv3.AuthEnableResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) AuthDisable(ctx context.Context) (*clientv3.AuthDisableResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) AuthStatus(ctx context.Context) (*clientv3.AuthStatusResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserAdd(ctx context.Context, name string, password string) (*clientv3.AuthUserAddResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserAddWithOptions(ctx context.Context, name string, password string, opt *clientv3.UserAddOptions) (*clientv3.AuthUserAddResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserDelete(ctx context.Context, name string) (*clientv3.AuthUserDeleteResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserChangePassword(ctx context.Context, name string, password string) (*clientv3.AuthUserChangePasswordResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserGrantRole(ctx context.Context, user string, role string) (*clientv3.AuthUserGrantRoleResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserGet(ctx context.Context, name string) (*clientv3.AuthUserGetResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserList(ctx context.Context) (*clientv3.AuthUserListResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) UserRevokeRole(ctx context.Context, name string, role string) (*clientv3.AuthUserRevokeRoleResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) RoleAdd(ctx context.Context, name string) (*clientv3.AuthRoleAddResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) RoleGrantPermission(ctx context.Context, name string, key, rangeEnd string, permType clientv3.PermissionType) (*clientv3.AuthRoleGrantPermissionResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) RoleGet(ctx context.Context, role string) (*clientv3.AuthRoleGetResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) RoleList(ctx context.Context) (*clientv3.AuthRoleListResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) RoleRevokePermission(ctx context.Context, role string, key, rangeEnd string) (*clientv3.AuthRoleRevokePermissionResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedAuth) RoleDelete(ctx context.Context, role string) (*clientv3.AuthRoleDeleteResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 // unimplementedMaintenance implements clientv3.Maintenance but panics on any call.
@@ -124,29 +124,29 @@
 }
 
 func (c *unimplementedMaintenance) AlarmList(ctx context.Context) (*clientv3.AlarmResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedMaintenance) AlarmDisarm(ctx context.Context, m *clientv3.AlarmMember) (*clientv3.AlarmResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedMaintenance) Defragment(ctx context.Context, endpoint string) (*clientv3.DefragmentResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedMaintenance) Status(ctx context.Context, endpoint string) (*clientv3.StatusResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedMaintenance) HashKV(ctx context.Context, endpoint string, rev int64) (*clientv3.HashKVResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedMaintenance) Snapshot(ctx context.Context) (io.ReadCloser, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
 
 func (c *unimplementedMaintenance) MoveLeader(ctx context.Context, transfereeID uint64) (*clientv3.MoveLeaderResponse, error) {
-	panic(UnimplementedInNamespaced)
+	panic(ErrUnimplementedInNamespaced)
 }
diff --git a/metropolis/node/core/curator/impl_leader.go b/metropolis/node/core/curator/impl_leader.go
index d7c6222..ad557fc 100644
--- a/metropolis/node/core/curator/impl_leader.go
+++ b/metropolis/node/core/curator/impl_leader.go
@@ -73,13 +73,13 @@
 }
 
 var (
-	// lostLeadership is returned by txnAsLeader if the transaction got canceled
+	// errLostLeadership is returned by txnAsLeader if the transaction got canceled
 	// because leadership was lost.
-	lostLeadership = errors.New("lost leadership")
+	errLostLeadership = errors.New("lost leadership")
 )
 
 // txnAsLeader performs an etcd transaction guarded by continued leadership.
-// lostLeadership will be returned as an error in case the leadership is lost.
+// errLostLeadership will be returned as an error in case the leadership is lost.
 func (l *leadership) txnAsLeader(ctx context.Context, ops ...clientv3.Op) (*clientv3.TxnResponse, error) {
 	var opsStr []string
 	for _, op := range ops {
@@ -118,7 +118,7 @@
 			}
 		}
 		rpc.Trace(ctx).Printf("txnAsLeader(...): rejected (lost leadership (key %s should've been at rev %d, is at rev %s)", l.lockKey, l.lockRev, lockRev)
-		return nil, lostLeadership
+		return nil, errLostLeadership
 	}
 	rpc.Trace(ctx).Printf("txnAsLeader(...): ok")
 	return resp, nil
@@ -128,7 +128,7 @@
 // directly exposed to RPC clients. If false is returned, the error was not
 // converted and is returned verbatim.
 func rpcError(err error) (error, bool) {
-	if errors.Is(err, lostLeadership) {
+	if errors.Is(err, errLostLeadership) {
 		return status.Error(codes.Unavailable, "lost leadership"), true
 	}
 	if errors.Is(err, context.DeadlineExceeded) {
diff --git a/metropolis/node/core/curator/impl_leader_cluster_networking.go b/metropolis/node/core/curator/impl_leader_cluster_networking.go
index 4bd729d..6bfe82d 100644
--- a/metropolis/node/core/curator/impl_leader_cluster_networking.go
+++ b/metropolis/node/core/curator/impl_leader_cluster_networking.go
@@ -33,7 +33,7 @@
 	defer w.Close()
 	for {
 		nodeKV, err := w.Get(ctx, event.BacklogOnly[*nodeAtID]())
-		if errors.Is(err, event.BacklogDone) {
+		if errors.Is(err, event.ErrBacklogDone) {
 			break
 		}
 		if err != nil {
diff --git a/metropolis/node/core/curator/impl_leader_curator.go b/metropolis/node/core/curator/impl_leader_curator.go
index d45fc79..9833410 100644
--- a/metropolis/node/core/curator/impl_leader_curator.go
+++ b/metropolis/node/core/curator/impl_leader_curator.go
@@ -109,7 +109,7 @@
 	nodes := make(map[string]*Node)
 	for {
 		nodeKV, err := w.Get(ctx, event.BacklogOnly[*nodeAtID]())
-		if errors.Is(err, event.BacklogDone) {
+		if errors.Is(err, event.ErrBacklogDone) {
 			break
 		}
 		if err != nil {
diff --git a/metropolis/node/core/network/dhcp4c/dhcpc.go b/metropolis/node/core/network/dhcp4c/dhcpc.go
index bfb2676..4aeeb3d 100644
--- a/metropolis/node/core/network/dhcp4c/dhcpc.go
+++ b/metropolis/node/core/network/dhcp4c/dhcpc.go
@@ -482,13 +482,13 @@
 		err = s.handleMessage(offer, sentTime)
 		if err == nil {
 			return nil
-		} else if !errors.Is(err, InvalidMsgErr) {
+		} else if !errors.Is(err, ErrInvalidMsg) {
 			return err
 		}
 	}
 }
 
-var InvalidMsgErr = errors.New("invalid message")
+var ErrInvalidMsg = errors.New("invalid message")
 
 func (c *Client) runState(ctx context.Context) error {
 	switch c.state {
@@ -516,7 +516,7 @@
 						return c.transitionToBound(offer, sentTime)
 					}
 				}
-				return InvalidMsgErr
+				return ErrInvalidMsg
 			},
 		})
 	case stateRequesting:
@@ -541,7 +541,7 @@
 					c.requestingToDiscovering()
 					return nil
 				}
-				return InvalidMsgErr
+				return ErrInvalidMsg
 			},
 			stateDeadlineExceeded: func() error {
 				c.requestingToDiscovering()
@@ -578,7 +578,7 @@
 				case dhcpv4.MessageTypeNak:
 					return c.leaseToDiscovering()
 				}
-				return InvalidMsgErr
+				return ErrInvalidMsg
 			},
 			stateDeadlineExceeded: func() error {
 				c.state = stateRebinding
@@ -609,7 +609,7 @@
 				case dhcpv4.MessageTypeNak:
 					return c.leaseToDiscovering()
 				}
-				return InvalidMsgErr
+				return ErrInvalidMsg
 			},
 			stateDeadlineExceeded: func() error {
 				return c.leaseToDiscovering()
diff --git a/metropolis/node/core/rpc/resolver/watcher.go b/metropolis/node/core/rpc/resolver/watcher.go
index d2715b6..c9fe47e 100644
--- a/metropolis/node/core/rpc/resolver/watcher.go
+++ b/metropolis/node/core/rpc/resolver/watcher.go
@@ -17,9 +17,9 @@
 }
 
 var (
-	// ResolverClosed will be returned by the resolver to gRPC machinery whenever a
+	// ErrResolverClosed will be returned by the resolver to gRPC machinery whenever a
 	// resolver cannot be used anymore because it was Closed.
-	ResolverClosed = errors.New("cluster resolver closed")
+	ErrResolverClosed = errors.New("cluster resolver closed")
 )
 
 // Build is called by gRPC on each Dial call. It spawns a new clientWatcher,
@@ -45,7 +45,7 @@
 
 	select {
 	case <-r.ctx.Done():
-		return nil, ResolverClosed
+		return nil, ErrResolverClosed
 	case r.reqC <- &request{
 		ds: &requestDialOptionsSet{
 			options: options,
@@ -61,7 +61,7 @@
 	}
 	select {
 	case <-r.ctx.Done():
-		return nil, ResolverClosed
+		return nil, ErrResolverClosed
 	case r.reqC <- req:
 	}
 	// This receive is uninterruptible by contract - as it's also uninterruptible on
@@ -94,7 +94,7 @@
 		if update == nil {
 			// A nil result means the channel is closed, which means this watcher has either
 			// closed or the resolver has been canceled. Abort loop.
-			w.clientConn.ReportError(ResolverClosed)
+			w.clientConn.ReportError(ErrResolverClosed)
 			break
 		}
 		w.clientConn.UpdateState(resolver.State{
diff --git a/metropolis/pkg/event/etcd/etcd.go b/metropolis/pkg/event/etcd/etcd.go
index 14dfd99..71e8056 100644
--- a/metropolis/pkg/event/etcd/etcd.go
+++ b/metropolis/pkg/event/etcd/etcd.go
@@ -402,7 +402,7 @@
 	}
 
 	if backlogOnly && len(w.backlogged) == 0 {
-		return empty, event.BacklogDone
+		return empty, event.ErrBacklogDone
 	}
 
 	// Update backlog from etcd if needed.
diff --git a/metropolis/pkg/event/etcd/etcd_test.go b/metropolis/pkg/event/etcd/etcd_test.go
index 45b5f98..f1eb5ed 100644
--- a/metropolis/pkg/event/etcd/etcd_test.go
+++ b/metropolis/pkg/event/etcd/etcd_test.go
@@ -776,15 +776,15 @@
 	// As expected, next call to Get with BacklogOnly fails - there truly is no new
 	// updates to emit.
 	_, err = watcher.Get(ctx, event.BacklogOnly[StringAt]())
-	if want, got := event.BacklogDone, err; !errors.Is(got, want) {
+	if want, got := event.ErrBacklogDone, err; !errors.Is(got, want) {
 		t.Fatalf("Second Get: wanted %v, got %v", want, got)
 	}
 
 	// Implementation detail: even though there is a new value ('second'),
-	// BacklogOnly will still return BacklogDone.
+	// BacklogOnly will still return ErrBacklogDone.
 	tc.put(t, k, "second")
 	_, err = watcher.Get(ctx, event.BacklogOnly[StringAt]())
-	if want, got := event.BacklogDone, err; !errors.Is(got, want) {
+	if want, got := event.ErrBacklogDone, err; !errors.Is(got, want) {
 		t.Fatalf("Third Get: wanted %v, got %v", want, got)
 	}
 
@@ -836,11 +836,11 @@
 	tc.put(t, ks+"a", "val-100")
 	tc.put(t, ks+"b", "val-101")
 
-	// Retrieve the rest of the backlog until BacklogDone is returned.
+	// Retrieve the rest of the backlog until ErrBacklogDone is returned.
 	nUpdates := 1
 	for {
 		g, err := w.Get(ctx, event.BacklogOnly[StringAt]())
-		if errors.Is(err, event.BacklogDone) {
+		if errors.Is(err, event.ErrBacklogDone) {
 			break
 		}
 		if err != nil {
diff --git a/metropolis/pkg/event/event.go b/metropolis/pkg/event/event.go
index e38c427..a8b3526 100644
--- a/metropolis/pkg/event/event.go
+++ b/metropolis/pkg/event/event.go
@@ -179,7 +179,7 @@
 }
 
 // BacklogOnly will prevent Get from blocking on waiting for more updates from
-// etcd, by instead returning BacklogDone whenever no more data is currently
+// etcd, by instead returning ErrBacklogDone whenever no more data is currently
 // locally available. This is different however, from establishing that there
 // are no more pending updates from the etcd cluster - the only way to ensure
 // the local client is up to date is by performing Get calls without this option
@@ -187,7 +187,7 @@
 //
 // This mode of retrieval should only be used for the retrieval of the existing
 // data in the etcd cluster on the initial creation of the Watcher (by
-// repeatedly calling Get until BacklogDone is returned), and shouldn't be set
+// repeatedly calling Get until ErrBacklogDone is returned), and shouldn't be set
 // for any subsequent call. Any use of this option after that initial fetch is
 // undefined behaviour that exposes the internals of the Get implementation, and
 // must not be relied on. However, in the future, this behaviour might be
@@ -203,10 +203,10 @@
 }
 
 var (
-	// BacklogDone is returned by Get when BacklogOnly is set and there is no more
+	// ErrBacklogDone is returned by Get when BacklogOnly is set and there is no more
 	// event data stored in the Watcher client, ie. when the initial cluster state
 	// of the requested key has been retrieved.
-	BacklogDone = errors.New("no more backlogged data")
+	ErrBacklogDone = errors.New("no more backlogged data")
 )
 
 // Pipe a Value's initial state and subsequent updates to an already existing
