services/device: factor out the exported error definitions into internal/errors

This is cleaning up dependencies in preparation of moving device/internal/impl
under device/deviced/internal. device/device will now only depend on errors, and
not impl.

While at it, update the import blocks to abide by the 'single imports block for
vanadium imports' policy discussed last week.

Change-Id: I3a03df581883eb72b2ad47c4178723ead2527e87
diff --git a/services/device/device/doc.go b/services/device/device/doc.go
index 5c11a9c..d25dc90 100644
--- a/services/device/device/doc.go
+++ b/services/device/device/doc.go
@@ -41,35 +41,16 @@
 
  -alsologtostderr=true
    log to standard error as well as files
- -chown=false
-   Change owner of files and directories given as command-line arguments to the
-   user specified by this flag
- -dryrun=false
-   Elides root-requiring systemcalls.
- -kill=false
-   Kill process ids given as command-line arguments.
  -log_backtrace_at=:0
    when logging hits line file:N, emit a stack trace
  -log_dir=
    if non-empty, write log files to this directory
- -logdir=
-   Path to the log directory.
  -logtostderr=false
    log to standard error instead of files
  -max_stack_buf_size=4292608
    max size in bytes of the buffer to use for logging stack traces
- -minuid=501
-   UIDs cannot be less than this number.
- -progname=unnamed_app
-   Visible name of the application, used in argv[0]
- -rm=false
-   Remove the file trees given as command-line arguments.
- -run=
-   Path to the application to exec.
  -stderrthreshold=2
    logs at or above this threshold go to stderr
- -username=
-   The UNIX user name used for the other functions of this tool.
  -v=0
    log level for V logs
  -v23.credentials=
@@ -100,8 +81,6 @@
    comma-separated list of pattern=N settings for filename-filtered logging
  -vpath=
    comma-separated list of pattern=N settings for file pathname-filtered logging
- -workspace=
-   Path to the application's workspace directory.
 
 Device install
 
diff --git a/services/device/device/glob.go b/services/device/device/glob.go
index c483aa2..f442072 100644
--- a/services/device/device/glob.go
+++ b/services/device/device/glob.go
@@ -16,16 +16,14 @@
 	"sync/atomic"
 	"time"
 
-	"v.io/x/lib/cmdline"
-	deviceimpl "v.io/x/ref/services/device/internal/impl"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 // GlobHandler is implemented by each command that wants to execute against name
@@ -247,7 +245,7 @@
 func getStatus(ctx *context.T, env *cmdline.Env, name string, resultsCh chan<- *GlobResult) {
 	status, err := device.DeviceClient(name).Status(ctx)
 	// Skip non-instances/installations.
-	if verror.ErrorID(err) == deviceimpl.ErrInvalidSuffix.ID {
+	if verror.ErrorID(err) == errors.ErrInvalidSuffix.ID {
 		return
 	}
 	if err != nil {
diff --git a/services/device/device/update.go b/services/device/device/update.go
index 6a4214e..5829d05 100644
--- a/services/device/device/update.go
+++ b/services/device/device/update.go
@@ -16,7 +16,7 @@
 	"v.io/v23/verror"
 
 	"v.io/x/lib/cmdline"
-	deviceimpl "v.io/x/ref/services/device/internal/impl"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 var cmdUpdate = &cmdline.Command{
@@ -102,7 +102,7 @@
 	case err == nil:
 		fmt.Fprintf(stdout, "Successful %s of version for instance \"%s\".\n", revertOrUpdate[revert], name)
 		return nil
-	case verror.ErrorID(err) == deviceimpl.ErrUpdateNoOp.ID:
+	case verror.ErrorID(err) == errors.ErrUpdateNoOp.ID:
 		// TODO(caprita): Ideally, we wouldn't even attempt a kill /
 		// restart if the update/revert is a no-op.
 		fmt.Fprintf(stdout, "Instance \"%s\": %s.\n", name, revertOrUpdateNoOp[revert])
@@ -123,7 +123,7 @@
 	case err == nil:
 		fmt.Fprintf(stdout, "Successful %s of version for %s \"%s\".\n", revertOrUpdate[revert], what, name)
 		return nil
-	case verror.ErrorID(err) == deviceimpl.ErrUpdateNoOp.ID:
+	case verror.ErrorID(err) == errors.ErrUpdateNoOp.ID:
 		fmt.Fprintf(stdout, "%s \"%s\": %s.\n", what, name, revertOrUpdateNoOp[revert])
 		return nil
 	default:
diff --git a/services/device/internal/errors/errors.go b/services/device/internal/errors/errors.go
new file mode 100644
index 0000000..f268f18
--- /dev/null
+++ b/services/device/internal/errors/errors.go
@@ -0,0 +1,31 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// TODO(caprita): Consider moving these to v23 if they're meant to be public
+// beyond the deviced and device tool implementations.
+
+// Package errors defines the error ids that are shared between server and
+// client-side.
+package errors
+
+import "v.io/v23/verror"
+
+// TODO(caprita): the value of pkgPath corresponds to the previous package where
+// the error ids were defined.  Updating error ids needs to be carefully
+// coordinated between clients and servers, so we should do it when we settle on
+// the final location for these error definitions.
+const pkgPath = "v.io/x/ref/services/device/internal/impl"
+
+var (
+	ErrInvalidSuffix        = verror.Register(pkgPath+".InvalidSuffix", verror.NoRetry, "{1:}{2:} invalid suffix{:_}")
+	ErrOperationFailed      = verror.Register(pkgPath+".OperationFailed", verror.NoRetry, "{1:}{2:} operation failed{:_}")
+	ErrOperationInProgress  = verror.Register(pkgPath+".OperationInProgress", verror.NoRetry, "{1:}{2:} operation in progress{:_}")
+	ErrAppTitleMismatch     = verror.Register(pkgPath+".AppTitleMismatch", verror.NoRetry, "{1:}{2:} app title mismatch{:_}")
+	ErrUpdateNoOp           = verror.Register(pkgPath+".UpdateNoOp", verror.NoRetry, "{1:}{2:} update is no op{:_}")
+	ErrInvalidOperation     = verror.Register(pkgPath+".InvalidOperation", verror.NoRetry, "{1:}{2:} invalid operation{:_}")
+	ErrInvalidBlessing      = verror.Register(pkgPath+".InvalidBlessing", verror.NoRetry, "{1:}{2:} invalid blessing{:_}")
+	ErrInvalidPairingToken  = verror.Register(pkgPath+".InvalidPairingToken", verror.NoRetry, "{1:}{2:} pairing token mismatch{:_}")
+	ErrUnclaimedDevice      = verror.Register(pkgPath+".UnclaimedDevice", verror.NoRetry, "{1:}{2:} device needs to be claimed first")
+	ErrDeviceAlreadyClaimed = verror.Register(pkgPath+".AlreadyClaimed", verror.NoRetry, "{1:}{2:} device has already been claimed")
+)
diff --git a/services/device/internal/impl/app_service.go b/services/device/internal/impl/app_service.go
index 4d935eb..e143a13 100644
--- a/services/device/internal/impl/app_service.go
+++ b/services/device/internal/impl/app_service.go
@@ -150,6 +150,7 @@
 	"v.io/x/ref/services/agent/agentlib"
 	"v.io/x/ref/services/agent/keymgr"
 	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/internal/packages"
 	"v.io/x/ref/services/internal/pathperms"
 )
@@ -167,11 +168,11 @@
 func saveInstanceInfo(ctx *context.T, dir string, info *instanceInfo) error {
 	jsonInfo, err := json.Marshal(info)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", info, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", info, err))
 	}
 	infoPath := filepath.Join(dir, "info")
 	if err := ioutil.WriteFile(infoPath, jsonInfo, 0600); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", infoPath, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", infoPath, err))
 	}
 	return nil
 }
@@ -180,9 +181,9 @@
 	infoPath := filepath.Join(dir, "info")
 	info := new(instanceInfo)
 	if infoBytes, err := ioutil.ReadFile(infoPath); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", infoPath, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", infoPath, err))
 	} else if err := json.Unmarshal(infoBytes, info); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", infoBytes, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", infoBytes, err))
 	}
 	return info, nil
 }
@@ -223,11 +224,11 @@
 func saveEnvelope(ctx *context.T, dir string, envelope *application.Envelope) error {
 	jsonEnvelope, err := json.Marshal(envelope)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", envelope, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", envelope, err))
 	}
 	path := filepath.Join(dir, "envelope")
 	if err := ioutil.WriteFile(path, jsonEnvelope, 0600); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
 	}
 	return nil
 }
@@ -236,9 +237,9 @@
 	path := filepath.Join(dir, "envelope")
 	envelope := new(application.Envelope)
 	if envelopeBytes, err := ioutil.ReadFile(path); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
 	} else if err := json.Unmarshal(envelopeBytes, envelope); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", envelopeBytes, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", envelopeBytes, err))
 	}
 	return envelope, nil
 }
@@ -247,7 +248,7 @@
 	versionLink := filepath.Join(instanceDir, "version")
 	versionDir, err := filepath.EvalSymlinks(versionLink)
 	if err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
 	}
 	return loadEnvelope(ctx, versionDir)
 }
@@ -255,11 +256,11 @@
 func saveConfig(ctx *context.T, dir string, config device.Config) error {
 	jsonConfig, err := json.Marshal(config)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", config, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", config, err))
 	}
 	path := filepath.Join(dir, "config")
 	if err := ioutil.WriteFile(path, jsonConfig, 0600); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
 	}
 	return nil
 }
@@ -268,9 +269,9 @@
 	path := filepath.Join(dir, "config")
 	var config device.Config
 	if configBytes, err := ioutil.ReadFile(path); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
 	} else if err := json.Unmarshal(configBytes, &config); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", configBytes, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", configBytes, err))
 	}
 	return config, nil
 }
@@ -278,11 +279,11 @@
 func savePackages(ctx *context.T, dir string, packages application.Packages) error {
 	jsonPackages, err := json.Marshal(packages)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", packages, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Marshal(%v) failed: %v", packages, err))
 	}
 	path := filepath.Join(dir, "packages")
 	if err := ioutil.WriteFile(path, jsonPackages, 0600); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
 	}
 	return nil
 }
@@ -291,9 +292,9 @@
 	path := filepath.Join(dir, "packages")
 	var packages application.Packages
 	if packagesBytes, err := ioutil.ReadFile(path); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
 	} else if err := json.Unmarshal(packagesBytes, &packages); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", packagesBytes, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Unmarshal(%v) failed: %v", packagesBytes, err))
 	}
 	return packages, nil
 }
@@ -301,7 +302,7 @@
 func saveOrigin(ctx *context.T, dir, originVON string) error {
 	path := filepath.Join(dir, "origin")
 	if err := ioutil.WriteFile(path, []byte(originVON), 0600); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
 	}
 	return nil
 }
@@ -309,7 +310,7 @@
 func loadOrigin(ctx *context.T, dir string) (string, error) {
 	path := filepath.Join(dir, "origin")
 	if originBytes, err := ioutil.ReadFile(path); err != nil {
-		return "", verror.New(ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
+		return "", verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("ReadFile(%v) failed: %v", path, err))
 	} else {
 		return string(originBytes), nil
 	}
@@ -375,7 +376,7 @@
 	if envelope.Title == application.DeviceManagerTitle {
 		// Disallow device manager apps from being installed like a
 		// regular app.
-		return nil, verror.New(ErrInvalidOperation, ctx, "DeviceManager apps cannot be installed")
+		return nil, verror.New(errors.ErrInvalidOperation, ctx, "DeviceManager apps cannot be installed")
 	}
 	return envelope, nil
 }
@@ -384,14 +385,14 @@
 func newVersion(ctx *context.T, installationDir string, envelope *application.Envelope, oldVersionDir string) (string, error) {
 	versionDir := filepath.Join(installationDir, generateVersionDirName())
 	if err := mkdirPerm(versionDir, 0711); err != nil {
-		return "", verror.New(ErrOperationFailed, ctx, err)
+		return "", verror.New(errors.ErrOperationFailed, ctx, err)
 	}
 	if err := saveEnvelope(ctx, versionDir, envelope); err != nil {
 		return versionDir, err
 	}
 	pkgDir := filepath.Join(versionDir, "pkg")
 	if err := mkdir(pkgDir); err != nil {
-		return "", verror.New(ErrOperationFailed, ctx, err)
+		return "", verror.New(errors.ErrOperationFailed, ctx, err)
 	}
 	publisher := envelope.Publisher
 	// TODO(caprita): Share binaries if already existing locally.
@@ -402,15 +403,15 @@
 		return versionDir, err
 	}
 	if err := installPackages(ctx, installationDir, versionDir); err != nil {
-		return versionDir, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("installPackages(%v, %v) failed: %v", installationDir, versionDir, err))
+		return versionDir, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("installPackages(%v, %v) failed: %v", installationDir, versionDir, err))
 	}
 	if err := os.RemoveAll(pkgDir); err != nil {
-		return versionDir, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("RemoveAll(%v) failed: %v", pkgDir, err))
+		return versionDir, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("RemoveAll(%v) failed: %v", pkgDir, err))
 	}
 	if oldVersionDir != "" {
 		previousLink := filepath.Join(versionDir, "previous")
 		if err := os.Symlink(oldVersionDir, previousLink); err != nil {
-			return versionDir, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", oldVersionDir, previousLink, err))
+			return versionDir, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", oldVersionDir, previousLink, err))
 		}
 	}
 	// updateLink should be the last thing we do, after we've ensured the
@@ -421,7 +422,7 @@
 
 func (i *appService) Install(ctx *context.T, call rpc.ServerCall, applicationVON string, config device.Config, packages application.Packages) (string, error) {
 	if len(i.suffix) > 0 {
-		return "", verror.New(ErrInvalidSuffix, ctx)
+		return "", verror.New(errors.ErrInvalidSuffix, ctx)
 	}
 	ctx, cancel := context.WithTimeout(ctx, rpcContextLongTimeout)
 	defer cancel()
@@ -435,7 +436,7 @@
 		CleanupDir(installationDir, "")
 	}
 	if err := mkdirPerm(installationDir, 0711); err != nil {
-		return "", verror.New(ErrOperationFailed, nil)
+		return "", verror.New(errors.ErrOperationFailed, nil)
 	}
 	defer func() {
 		if deferrer != nil {
@@ -457,7 +458,7 @@
 	}
 	pkgDir := filepath.Join(installationDir, "pkg")
 	if err := mkdir(pkgDir); err != nil {
-		return "", verror.New(ErrOperationFailed, ctx, err)
+		return "", verror.New(errors.ErrOperationFailed, ctx, err)
 	}
 	// We use a zero value publisher, meaning that any signatures present in the
 	// package files are not verified.
@@ -494,7 +495,7 @@
 // TODO(gauthamt): Make sure we pass the context to installationDirCore.
 func installationDirCore(components []string, root string) (string, error) {
 	if nComponents := len(components); nComponents != 2 {
-		return "", verror.New(ErrInvalidSuffix, nil)
+		return "", verror.New(errors.ErrInvalidSuffix, nil)
 	}
 	app, installation := components[0], components[1]
 	installationDir := filepath.Join(root, applicationDirName(app), installationDirName(installation))
@@ -502,7 +503,7 @@
 		if os.IsNotExist(err) {
 			return "", verror.New(verror.ErrNoExist, nil, naming.Join(components...))
 		}
-		return "", verror.New(ErrOperationFailed, nil, fmt.Sprintf("Stat(%v) failed: %v", installationDir, err))
+		return "", verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Stat(%v) failed: %v", installationDir, err))
 	}
 	return installationDir, nil
 }
@@ -544,11 +545,11 @@
 		// instance, we should tell the agent to drop the principal.
 		handle, conn, err := securityAgent.keyMgrAgent.NewPrincipal(ctx, false)
 		if err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("NewPrincipal() failed %v", err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("NewPrincipal() failed %v", err))
 		}
 		var cancel func()
 		if p, cancel, err = agentPrincipal(ctx, conn); err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("agentPrincipal failed: %v", err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("agentPrincipal failed: %v", err))
 		}
 		defer cancel()
 		info.SecurityAgentHandle = handle
@@ -561,40 +562,40 @@
 		// Use the suidhelper to chown it.
 		var err error
 		if p, err = vsecurity.CreatePersistentPrincipal(credentialsDir, nil); err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("CreatePersistentPrincipal(%v, nil) failed: %v", credentialsDir, err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("CreatePersistentPrincipal(%v, nil) failed: %v", credentialsDir, err))
 		}
 	}
 	mPubKey, err := p.PublicKey().MarshalBinary()
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("PublicKey().MarshalBinary() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("PublicKey().MarshalBinary() failed: %v", err))
 	}
 	if err := call.SendStream().Send(device.BlessServerMessageInstancePublicKey{Value: mPubKey}); err != nil {
 		return err
 	}
 	if !call.RecvStream().Advance() {
-		return verror.New(ErrInvalidBlessing, ctx, fmt.Sprintf("no blessings on stream: %v", call.RecvStream().Err()))
+		return verror.New(errors.ErrInvalidBlessing, ctx, fmt.Sprintf("no blessings on stream: %v", call.RecvStream().Err()))
 	}
 	msg := call.RecvStream().Value()
 	appBlessingsFromInstantiator, ok := msg.(device.BlessClientMessageAppBlessings)
 	if !ok {
-		return verror.New(ErrInvalidBlessing, ctx, fmt.Sprintf("wrong message type: %#v", msg))
+		return verror.New(errors.ErrInvalidBlessing, ctx, fmt.Sprintf("wrong message type: %#v", msg))
 	}
 	// Should we move this after the addition of publisher blessings, and thus allow
 	// apps to run with only publisher blessings?
 	if appBlessingsFromInstantiator.Value.IsZero() {
-		return verror.New(ErrInvalidBlessing, ctx)
+		return verror.New(errors.ErrInvalidBlessing, ctx)
 	}
 	if err := p.BlessingStore().SetDefault(appBlessingsFromInstantiator.Value); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.SetDefault() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.SetDefault() failed: %v", err))
 	}
 	// If there were any publisher blessings in the envelope, add those to the set of blessings
 	// sent to servers by default
 	appBlessings, err := addPublisherBlessings(ctx, instanceDir, p, appBlessingsFromInstantiator.Value)
 	if _, err := p.BlessingStore().Set(appBlessings, security.AllPrincipals); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
 	}
 	if err := p.AddToRoots(appBlessings); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("AddToRoots() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("AddToRoots() failed: %v", err))
 	}
 	// In addition, we give the app separate blessings for the purpose of
 	// communicating with the device manager.
@@ -612,7 +613,7 @@
 	// back to the device manager.
 	for n, _ := range dmPrincipal.BlessingsInfo(dmPrincipal.BlessingStore().Default()) {
 		if _, err := p.BlessingStore().Set(dmBlessings, security.BlessingPattern(n)); err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
 		}
 	}
 	// We also want to override the app cycle manager's server blessing in
@@ -621,14 +622,14 @@
 	// to extract the right blessing to use from its store for this purpose.
 	randomPattern, err := generateRandomString()
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("generateRandomString() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("generateRandomString() failed: %v", err))
 	}
 	if _, err := p.BlessingStore().Set(dmBlessings, security.BlessingPattern(randomPattern)); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
 	}
 	info.DeviceManagerPeerPattern = randomPattern
 	if err := p.AddToRoots(dmBlessings); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("AddToRoots() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("AddToRoots() failed: %v", err))
 	}
 	return nil
 }
@@ -648,7 +649,7 @@
 		vlog.VI(2).Infof("adding publisher blessing %v for app %v", s, envelope.Title)
 		tmpBlessing, err := dmPrincipal.Bless(p.PublicKey(), dmPrincipal.BlessingStore().Default(), "a/"+s, security.UnconstrainedUse())
 		if b, err = security.UnionOfBlessings(b, tmpBlessing); err != nil {
-			return b, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("UnionOfBlessings failed: %v %v", b, tmpBlessing))
+			return b, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("UnionOfBlessings failed: %v %v", b, tmpBlessing))
 		}
 	}
 
@@ -715,34 +716,34 @@
 		return "", "", err
 	}
 	if !installationStateIs(installationDir, device.InstallationStateActive) {
-		return "", "", verror.New(ErrInvalidOperation, ctx)
+		return "", "", verror.New(errors.ErrInvalidOperation, ctx)
 	}
 	instanceID := generateID()
 	instanceDir := filepath.Join(installationDir, "instances", instanceDirName(instanceID))
 	// Set permissions for app to have access.
 	if mkdirPerm(instanceDir, 0711) != nil {
-		return "", "", verror.New(ErrOperationFailed, ctx)
+		return "", "", verror.New(errors.ErrOperationFailed, ctx)
 	}
 	rootDir := filepath.Join(instanceDir, "root")
 	if err := mkdir(rootDir); err != nil {
-		return instanceDir, instanceID, verror.New(ErrOperationFailed, ctx, err)
+		return instanceDir, instanceID, verror.New(errors.ErrOperationFailed, ctx, err)
 	}
 	installationLink := filepath.Join(instanceDir, "installation")
 	if err := os.Symlink(installationDir, installationLink); err != nil {
-		return instanceDir, instanceID, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", installationDir, installationLink, err))
+		return instanceDir, instanceID, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", installationDir, installationLink, err))
 	}
 	currLink := filepath.Join(installationDir, "current")
 	versionDir, err := filepath.EvalSymlinks(currLink)
 	if err != nil {
-		return instanceDir, instanceID, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", currLink, err))
+		return instanceDir, instanceID, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", currLink, err))
 	}
 	versionLink := filepath.Join(instanceDir, "version")
 	if err := os.Symlink(versionDir, versionLink); err != nil {
-		return instanceDir, instanceID, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", versionDir, versionLink, err))
+		return instanceDir, instanceID, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", versionDir, versionLink, err))
 	}
 	packagesDir, packagesLink := filepath.Join(versionLink, "packages"), filepath.Join(rootDir, "packages")
 	if err := os.Symlink(packagesDir, packagesLink); err != nil {
-		return instanceDir, instanceID, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", packagesDir, packagesLink, err))
+		return instanceDir, instanceID, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Symlink(%v, %v) failed: %v", packagesDir, packagesLink, err))
 	}
 	instanceInfo := new(instanceInfo)
 	if err := setupPrincipal(ctx, instanceDir, call, i.runner.securityAgent, instanceInfo); err != nil {
@@ -777,7 +778,7 @@
 	versionLink := filepath.Join(instanceDir, "version")
 	versionDir, err := filepath.EvalSymlinks(versionLink)
 	if err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
 	}
 	envelope, err := loadEnvelope(ctx, versionDir)
 	if err != nil {
@@ -785,7 +786,7 @@
 	}
 	binPath := filepath.Join(versionDir, "bin")
 	if _, err := os.Stat(binPath); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Stat(%v) failed: %v", binPath, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Stat(%v) failed: %v", binPath, err))
 	}
 
 	saArgs := suidAppCmdArgs{targetUser: systemName, binpath: binPath}
@@ -821,11 +822,11 @@
 
 	stdoutLog := filepath.Join(logDir, fmt.Sprintf("STDOUT-%d", timestamp))
 	if saArgs.stdout, err = openWriteFile(stdoutLog); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("OpenFile(%v) failed: %v", stdoutLog, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("OpenFile(%v) failed: %v", stdoutLog, err))
 	}
 	stderrLog := filepath.Join(logDir, fmt.Sprintf("STDERR-%d", timestamp))
 	if saArgs.stderr, err = openWriteFile(stderrLog); err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("OpenFile(%v) failed: %v", stderrLog, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("OpenFile(%v) failed: %v", stderrLog, err))
 	}
 
 	// Args to be passed by helper to the app.
@@ -849,7 +850,7 @@
 	installationLink := filepath.Join(instanceDir, "installation")
 	installationDir, err := filepath.EvalSymlinks(installationLink)
 	if err != nil {
-		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", installationLink, err))
+		return 0, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", installationLink, err))
 	}
 	config, err := loadConfig(ctx, installationDir)
 	if err != nil {
@@ -915,13 +916,13 @@
 	}
 	// Now react to any error in handle.Start()
 	if startErr != nil {
-		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Start() failed: %v", err))
+		return 0, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Start() failed: %v", err))
 	}
 
 	// Wait for the suidhelper to exit. This is blocking as we assume the
 	// helper won't get stuck.
 	if err := handle.Wait(0); err != nil {
-		return 0, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Wait() on suidhelper failed: %v", err))
+		return 0, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Wait() on suidhelper failed: %v", err))
 	}
 
 	pid, childName, err := handshaker.doHandshake(handle, listener)
@@ -1031,7 +1032,7 @@
 // TODO(gauthamt): Make sure we pass the context to instanceDir.
 func instanceDir(root string, suffix []string) (string, error) {
 	if nComponents := len(suffix); nComponents != 3 {
-		return "", verror.New(ErrInvalidSuffix, nil)
+		return "", verror.New(errors.ErrInvalidSuffix, nil)
 	}
 	app, installation, instance := suffix[0], suffix[1], suffix[2]
 	instancesDir := filepath.Join(root, applicationDirName(app), installationDirName(installation), "instances")
@@ -1070,17 +1071,17 @@
 	defer cancel()
 	stream, err := appStub.Stop(ctx)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("%v.Stop() failed: %v", appVON, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("%v.Stop() failed: %v", appVON, err))
 	}
 	rstream := stream.RecvStream()
 	for rstream.Advance() {
 		vlog.VI(2).Infof("%v.Stop() task update: %v", appVON, rstream.Value())
 	}
 	if err := rstream.Err(); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Advance() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Advance() failed: %v", err))
 	}
 	if err := stream.Finish(); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Finish() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Finish() failed: %v", err))
 	}
 	return nil
 }
@@ -1144,15 +1145,15 @@
 	versionLink := filepath.Join(instanceDir, "version")
 	versionDir, err := filepath.EvalSymlinks(versionLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
 	}
 	latestVersionLink := filepath.Join(instanceDir, "installation", "current")
 	latestVersionDir, err := filepath.EvalSymlinks(latestVersionLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", latestVersionLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", latestVersionLink, err))
 	}
 	if versionDir == latestVersionDir {
-		return verror.New(ErrUpdateNoOp, ctx)
+		return verror.New(errors.ErrUpdateNoOp, ctx)
 	}
 	// Update to the newer version.  Note, this is the only mutation
 	// performed to the instance, and, since it's atomic, the state of the
@@ -1162,7 +1163,7 @@
 
 func updateInstallation(ctx *context.T, installationDir string) error {
 	if !installationStateIs(installationDir, device.InstallationStateActive) {
-		return verror.New(ErrInvalidOperation, ctx)
+		return verror.New(errors.ErrInvalidOperation, ctx)
 	}
 	originVON, err := loadOrigin(ctx, installationDir)
 	if err != nil {
@@ -1177,7 +1178,7 @@
 	currLink := filepath.Join(installationDir, "current")
 	oldVersionDir, err := filepath.EvalSymlinks(currLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", currLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", currLink, err))
 	}
 	// NOTE(caprita): A race can occur between two competing updates, where
 	// both use the old version as their baseline.  This can result in both
@@ -1192,10 +1193,10 @@
 		return err
 	}
 	if oldEnvelope.Title != newEnvelope.Title {
-		return verror.New(ErrAppTitleMismatch, ctx)
+		return verror.New(errors.ErrAppTitleMismatch, ctx)
 	}
 	if reflect.DeepEqual(oldEnvelope, newEnvelope) {
-		return verror.New(ErrUpdateNoOp, ctx)
+		return verror.New(errors.ErrUpdateNoOp, ctx)
 	}
 	versionDir, err := newVersion(ctx, installationDir, newEnvelope, oldVersionDir)
 	if err != nil {
@@ -1212,7 +1213,7 @@
 	if instanceDir, err := i.instanceDir(); err == nil {
 		return updateInstance(ctx, instanceDir)
 	}
-	return verror.New(ErrInvalidSuffix, nil)
+	return verror.New(errors.ErrInvalidSuffix, nil)
 }
 
 func (*appService) UpdateTo(_ *context.T, _ rpc.ServerCall, von string) error {
@@ -1234,26 +1235,26 @@
 	versionLink := filepath.Join(instanceDir, "version")
 	versionDir, err := filepath.EvalSymlinks(versionLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
 	}
 	previousLink := filepath.Join(versionDir, "previous")
 	if _, err := os.Lstat(previousLink); err != nil {
 		if os.IsNotExist(err) {
 			// No 'previous' link -- must be the first version.
-			return verror.New(ErrUpdateNoOp, ctx)
+			return verror.New(errors.ErrUpdateNoOp, ctx)
 		}
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Lstat(%v) failed: %v", previousLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Lstat(%v) failed: %v", previousLink, err))
 	}
 	prevVersionDir, err := filepath.EvalSymlinks(previousLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", previousLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", previousLink, err))
 	}
 	return updateLink(prevVersionDir, versionLink)
 }
 
 func revertInstallation(ctx *context.T, installationDir string) error {
 	if !installationStateIs(installationDir, device.InstallationStateActive) {
-		return verror.New(ErrInvalidOperation, ctx)
+		return verror.New(errors.ErrInvalidOperation, ctx)
 	}
 	// NOTE(caprita): A race can occur between an update and a revert, where
 	// both use the same current version as their starting point.  This will
@@ -1263,19 +1264,19 @@
 	currLink := filepath.Join(installationDir, "current")
 	currVersionDir, err := filepath.EvalSymlinks(currLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", currLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", currLink, err))
 	}
 	previousLink := filepath.Join(currVersionDir, "previous")
 	if _, err := os.Lstat(previousLink); err != nil {
 		if os.IsNotExist(err) {
 			// No 'previous' link -- must be the first version.
-			return verror.New(ErrUpdateNoOp, ctx)
+			return verror.New(errors.ErrUpdateNoOp, ctx)
 		}
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Lstat(%v) failed: %v", previousLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Lstat(%v) failed: %v", previousLink, err))
 	}
 	prevVersionDir, err := filepath.EvalSymlinks(previousLink)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", previousLink, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", previousLink, err))
 	}
 	return updateLink(prevVersionDir, currLink)
 }
@@ -1287,7 +1288,7 @@
 	if instanceDir, err := i.instanceDir(); err == nil {
 		return revertInstance(ctx, instanceDir)
 	}
-	return verror.New(ErrInvalidSuffix, nil)
+	return verror.New(errors.ErrInvalidSuffix, nil)
 }
 
 type treeNode struct {
@@ -1410,7 +1411,7 @@
 	}
 	n := tree.find(i.suffix, false)
 	if n == nil {
-		return nil, verror.New(ErrInvalidSuffix, nil)
+		return nil, verror.New(errors.ErrInvalidSuffix, nil)
 	}
 	ch := make(chan string)
 	go func() {
@@ -1439,7 +1440,7 @@
 		}
 		return p, true, nil
 	}
-	return "", false, verror.New(ErrInvalidSuffix, nil)
+	return "", false, verror.New(errors.ErrInvalidSuffix, nil)
 }
 
 // TODO(rjkroege): Consider maintaining an in-memory Permissions cache.
@@ -1472,7 +1473,7 @@
 	case 3:
 		return i.instanceDebug(ctx, call.Security())
 	default:
-		return "", verror.New(ErrInvalidSuffix, nil)
+		return "", verror.New(errors.ErrInvalidSuffix, nil)
 	}
 }
 
@@ -1614,7 +1615,7 @@
 		status, err := i.instanceStatus(ctx)
 		return device.StatusInstance{Value: status}, err
 	default:
-		return nil, verror.New(ErrInvalidSuffix, ctx)
+		return nil, verror.New(errors.ErrInvalidSuffix, ctx)
 	}
 }
 
@@ -1630,7 +1631,7 @@
 	versionLink := filepath.Join(installationDir, "current")
 	versionDir, err := filepath.EvalSymlinks(versionLink)
 	if err != nil {
-		return device.InstallationStatus{}, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
+		return device.InstallationStatus{}, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
 	}
 	return device.InstallationStatus{
 		State:   state,
@@ -1650,7 +1651,7 @@
 	versionLink := filepath.Join(instanceDir, "version")
 	versionDir, err := filepath.EvalSymlinks(versionLink)
 	if err != nil {
-		return device.InstanceStatus{}, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
+		return device.InstanceStatus{}, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("EvalSymlinks(%v) failed: %v", versionLink, err))
 	}
 	return device.InstanceStatus{
 		State:   state,
diff --git a/services/device/internal/impl/app_starting_util.go b/services/device/internal/impl/app_starting_util.go
index 1c47e15..21b6a3c 100644
--- a/services/device/internal/impl/app_starting_util.go
+++ b/services/device/internal/impl/app_starting_util.go
@@ -22,6 +22,7 @@
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
 	vexec "v.io/x/ref/lib/exec"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/device/internal/suid"
 )
 
@@ -93,7 +94,7 @@
 // the app is started so that the app will inherit the file descriptor
 func (a *appHandshaker) prepareToStart(ctx *context.T, cmd *exec.Cmd) error {
 	if suid.PipeToParentFD != (len(cmd.ExtraFiles) + vexec.FileOffset) {
-		return verror.New(ErrOperationFailed, ctx,
+		return verror.New(errors.ErrOperationFailed, ctx,
 			fmt.Sprintf("FD expected by helper (%v) was not available (%v) (%v)",
 				suid.PipeToParentFD, len(cmd.ExtraFiles), vexec.FileOffset))
 	}
@@ -124,7 +125,7 @@
 	var pid32 int32
 	if err := binary.Read(a.helperRead, binary.LittleEndian, &pid32); err != nil {
 		vlog.Errorf("Error reading app pid from child: %v", err)
-		return 0, "", verror.New(ErrOperationFailed, a.ctx, fmt.Sprintf("failed to read pid from helper: %v", err))
+		return 0, "", verror.New(errors.ErrOperationFailed, a.ctx, fmt.Sprintf("failed to read pid from helper: %v", err))
 	}
 	pidFromHelper := int(pid32)
 	vlog.VI(1).Infof("read app pid %v from child", pidFromHelper)
@@ -142,7 +143,7 @@
 	childReadyErrChan := make(chan error, 1)
 	go func() {
 		if err := handle.WaitForReady(childReadyTimeout); err != nil {
-			childReadyErrChan <- verror.New(ErrOperationFailed, a.ctx, fmt.Sprintf("WaitForReady(%v) failed: %v", childReadyTimeout, err))
+			childReadyErrChan <- verror.New(errors.ErrOperationFailed, a.ctx, fmt.Sprintf("WaitForReady(%v) failed: %v", childReadyTimeout, err))
 		}
 		childReadyErrChan <- nil
 	}()
@@ -153,7 +154,7 @@
 
 	select {
 	case <-pidExitedChan:
-		return 0, "", verror.New(ErrOperationFailed, a.ctx,
+		return 0, "", verror.New(errors.ErrOperationFailed, a.ctx,
 			fmt.Sprintf("App exited (pid %d)", pidFromHelper))
 
 	case err := <-childReadyErrChan:
@@ -169,7 +170,7 @@
 	if pidFromHelper != pidFromChild {
 		// Something nasty is going on (the child may be lying).
 		suidHelper.terminatePid(pidFromHelper, nil, nil)
-		return 0, "", verror.New(ErrOperationFailed, a.ctx,
+		return 0, "", verror.New(errors.ErrOperationFailed, a.ctx,
 			fmt.Sprintf("Child pids do not match! (%d != %d)", pidFromHelper, pidFromChild))
 	}
 
@@ -177,7 +178,7 @@
 	childName, err := listener.waitForValue(childReadyTimeout)
 	if err != nil {
 		suidHelper.terminatePid(pidFromHelper, nil, nil)
-		return 0, "", verror.New(ErrOperationFailed, a.ctx,
+		return 0, "", verror.New(errors.ErrOperationFailed, a.ctx,
 			fmt.Sprintf("Waiting for child name: %v", err))
 	}
 
diff --git a/services/device/internal/impl/app_state.go b/services/device/internal/impl/app_state.go
index ca50ab8..98936d2 100644
--- a/services/device/internal/impl/app_state.go
+++ b/services/device/internal/impl/app_state.go
@@ -12,6 +12,7 @@
 
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 func getInstallationState(installationDir string) (device.InstallationState, error) {
@@ -27,7 +28,7 @@
 			}
 		}
 	}
-	return device.InstallationStateActive, verror.New(ErrOperationFailed, nil, fmt.Sprintf("failed to determine state for installation in dir %v", installationDir))
+	return device.InstallationStateActive, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("failed to determine state for installation in dir %v", installationDir))
 }
 
 func installationStateIs(installationDir string, state device.InstallationState) bool {
@@ -51,7 +52,7 @@
 			return s, nil
 		}
 	}
-	return device.InstanceStateLaunching, verror.New(ErrOperationFailed, nil, fmt.Sprintf("failed to determine state for instance in dir %v", instanceDir))
+	return device.InstanceStateLaunching, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("failed to determine state for instance in dir %v", instanceDir))
 }
 
 func instanceStateIs(instanceDir string, state device.InstanceState) bool {
@@ -74,9 +75,9 @@
 	targetState := filepath.Join(dir, target.String())
 	if err := os.Rename(initialState, targetState); err != nil {
 		if os.IsNotExist(err) {
-			return verror.New(ErrInvalidOperation, nil, err)
+			return verror.New(errors.ErrInvalidOperation, nil, err)
 		}
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("Rename(%v, %v) failed: %v", initialState, targetState, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Rename(%v, %v) failed: %v", initialState, targetState, err))
 	}
 	return nil
 }
@@ -84,7 +85,7 @@
 func initializeState(dir string, initial fmt.Stringer) error {
 	initialStatus := filepath.Join(dir, initial.String())
 	if err := ioutil.WriteFile(initialStatus, []byte("status"), 0600); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v) failed: %v", initialStatus, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v) failed: %v", initialStatus, err))
 	}
 	return nil
 }
diff --git a/services/device/internal/impl/applife/app_life_test.go b/services/device/internal/impl/applife/app_life_test.go
index 13fc965..48643e3 100644
--- a/services/device/internal/impl/applife/app_life_test.go
+++ b/services/device/internal/impl/applife/app_life_test.go
@@ -26,6 +26,7 @@
 	"v.io/x/ref"
 	"v.io/x/ref/lib/mgmt"
 	vsecurity "v.io/x/ref/lib/security"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/device/internal/impl"
 	"v.io/x/ref/services/device/internal/impl/utiltest"
 	"v.io/x/ref/services/internal/servicetest"
@@ -205,12 +206,12 @@
 	}
 
 	// Updating the installation to itself is a no-op.
-	utiltest.UpdateAppExpectError(t, ctx, appID, impl.ErrUpdateNoOp.ID)
+	utiltest.UpdateAppExpectError(t, ctx, appID, errors.ErrUpdateNoOp.ID)
 
 	// Updating the installation should not work with a mismatched title.
 	*envelope = utiltest.EnvelopeFromShell(sh, nil, utiltest.App, "bogus", 0, 0)
 
-	utiltest.UpdateAppExpectError(t, ctx, appID, impl.ErrAppTitleMismatch.ID)
+	utiltest.UpdateAppExpectError(t, ctx, appID, errors.ErrAppTitleMismatch.ID)
 
 	// Create a second version of the app and update the app to it.
 	*envelope = utiltest.EnvelopeFromShell(sh, []string{utiltest.TestEnvVarName + "=env-val-envelope"}, utiltest.App, "google naps", 0, 0, "appV2")
@@ -249,7 +250,7 @@
 	}
 
 	// Trying to update first instance while it's running should fail.
-	utiltest.UpdateInstanceExpectError(t, ctx, appID, instance1ID, impl.ErrInvalidOperation.ID)
+	utiltest.UpdateInstanceExpectError(t, ctx, appID, instance1ID, errors.ErrInvalidOperation.ID)
 	// Stop first instance and try again.
 	utiltest.KillApp(t, ctx, appID, instance1ID)
 	// Only the second instance should still be running and mounted, don't retry.
@@ -268,7 +269,7 @@
 	utiltest.Resolve(t, ctx, "appV2", 1, false)
 
 	// Reverting first instance fails since it's still running.
-	utiltest.RevertAppExpectError(t, ctx, appID+"/"+instance1ID, impl.ErrInvalidOperation.ID)
+	utiltest.RevertAppExpectError(t, ctx, appID+"/"+instance1ID, errors.ErrInvalidOperation.ID)
 	// Stop first instance and try again.
 	utiltest.KillApp(t, ctx, appID, instance1ID)
 	verifyAppWorkspace(t, root, appID, instance1ID)
@@ -296,7 +297,7 @@
 	utiltest.ResolveExpectNotFound(t, ctx, "appV1", true)
 
 	// Reverting second instance is a no-op since it's already running v1.
-	utiltest.RevertAppExpectError(t, ctx, appID+"/"+instance2ID, impl.ErrUpdateNoOp.ID)
+	utiltest.RevertAppExpectError(t, ctx, appID+"/"+instance2ID, errors.ErrUpdateNoOp.ID)
 
 	// Stop third instance.
 	utiltest.TerminateApp(t, ctx, appID, instance3ID)
@@ -319,20 +320,20 @@
 	utiltest.ResolveExpectNotFound(t, ctx, "appV1", true)
 
 	// We are already on the first version, no further revert possible.
-	utiltest.RevertAppExpectError(t, ctx, appID, impl.ErrUpdateNoOp.ID)
+	utiltest.RevertAppExpectError(t, ctx, appID, errors.ErrUpdateNoOp.ID)
 
 	// Uninstall the app.
 	utiltest.UninstallApp(t, ctx, appID)
 	utiltest.VerifyState(t, ctx, device.InstallationStateUninstalled, appID)
 
 	// Updating the installation should no longer be allowed.
-	utiltest.UpdateAppExpectError(t, ctx, appID, impl.ErrInvalidOperation.ID)
+	utiltest.UpdateAppExpectError(t, ctx, appID, errors.ErrInvalidOperation.ID)
 
 	// Reverting the installation should no longer be allowed.
-	utiltest.RevertAppExpectError(t, ctx, appID, impl.ErrInvalidOperation.ID)
+	utiltest.RevertAppExpectError(t, ctx, appID, errors.ErrInvalidOperation.ID)
 
 	// Starting new instances should no longer be allowed.
-	utiltest.LaunchAppExpectError(t, ctx, appID, impl.ErrInvalidOperation.ID)
+	utiltest.LaunchAppExpectError(t, ctx, appID, errors.ErrInvalidOperation.ID)
 
 	// Make sure that Kill will actually kill an app that doesn't exit
 	// cleanly Do this by installing, instantiating, running, and killing
diff --git a/services/device/internal/impl/association_instance.go b/services/device/internal/impl/association_instance.go
index 498cf09..0f15505 100644
--- a/services/device/internal/impl/association_instance.go
+++ b/services/device/internal/impl/association_instance.go
@@ -13,12 +13,13 @@
 	"path/filepath"
 
 	"v.io/v23/verror"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 func saveSystemNameForInstance(dir, systemName string) error {
 	snp := filepath.Join(dir, "systemname")
 	if err := ioutil.WriteFile(snp, []byte(systemName), 0600); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v, %v) failed: %v", snp, systemName, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v, %v) failed: %v", snp, systemName, err))
 	}
 	return nil
 }
@@ -27,7 +28,7 @@
 	snp := filepath.Join(dir, "systemname")
 	name, err := ioutil.ReadFile(snp)
 	if err != nil {
-		return "", verror.New(ErrOperationFailed, nil, fmt.Sprintf("ReadFile(%v) failed: %v", snp, err))
+		return "", verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("ReadFile(%v) failed: %v", snp, err))
 	}
 	return string(name), nil
 }
diff --git a/services/device/internal/impl/claim.go b/services/device/internal/impl/claim.go
index 10133ea..1eb0a47 100644
--- a/services/device/internal/impl/claim.go
+++ b/services/device/internal/impl/claim.go
@@ -15,6 +15,7 @@
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/internal/pathperms"
 )
 
@@ -37,7 +38,7 @@
 func (c *claimable) Claim(ctx *context.T, call rpc.ServerCall, pairingToken string) error {
 	// Verify that the claimer pairing tokens match that of the device manager.
 	if subtle.ConstantTimeCompare([]byte(pairingToken), []byte(c.token)) != 1 {
-		return verror.New(ErrInvalidPairingToken, ctx)
+		return verror.New(errors.ErrInvalidPairingToken, ctx)
 	}
 	var (
 		granted   = call.GrantedBlessings() // blessings granted by the claimant
@@ -45,32 +46,32 @@
 		store     = principal.BlessingStore()
 	)
 	if granted.IsZero() {
-		return verror.New(ErrInvalidBlessing, ctx)
+		return verror.New(errors.ErrInvalidBlessing, ctx)
 	}
 	c.mu.Lock()
 	defer c.mu.Unlock()
 	if c.notify == nil {
 		// Device has already been claimed (by a concurrent
 		// RPC perhaps), it cannot be reclaimed
-		return verror.New(ErrDeviceAlreadyClaimed, ctx)
+		return verror.New(errors.ErrDeviceAlreadyClaimed, ctx)
 	}
 	// TODO(ashankar): If the claim fails, would make sense
 	// to remove from roots as well.
 	if err := principal.AddToRoots(granted); err != nil {
-		return verror.New(ErrInvalidBlessing, ctx)
+		return verror.New(errors.ErrInvalidBlessing, ctx)
 	}
 	if _, err := store.Set(granted, security.AllPrincipals); err != nil {
-		return verror.New(ErrInvalidBlessing, ctx, err)
+		return verror.New(errors.ErrInvalidBlessing, ctx, err)
 	}
 	if err := store.SetDefault(granted); err != nil {
-		return verror.New(ErrInvalidBlessing, ctx, err)
+		return verror.New(errors.ErrInvalidBlessing, ctx, err)
 	}
 
 	// Create Permissions with all the granted blessings (which are now the default blessings)
 	// (irrespective of caveats).
 	patterns := security.DefaultBlessingPatterns(principal)
 	if len(patterns) == 0 {
-		return verror.New(ErrInvalidBlessing, ctx)
+		return verror.New(errors.ErrInvalidBlessing, ctx)
 	}
 
 	// Create Permissions that allow principals with the caller's blessings to
@@ -87,7 +88,7 @@
 		}
 	}
 	if err := c.permsStore.Set(c.permsDir, perms, ""); err != nil {
-		return verror.New(ErrOperationFailed, ctx)
+		return verror.New(errors.ErrOperationFailed, ctx)
 	}
 	vlog.Infof("Device claimed and Permissions set to: %v", perms)
 	close(c.notify)
@@ -99,7 +100,7 @@
 // the Claiming service. Shouldn't need the "device" suffix.
 func (c *claimable) Lookup(suffix string) (interface{}, security.Authorizer, error) {
 	if suffix != "" && suffix != "device" {
-		return nil, nil, verror.New(ErrUnclaimedDevice, nil)
+		return nil, nil, verror.New(errors.ErrUnclaimedDevice, nil)
 	}
 	return c, c, nil
 }
diff --git a/services/device/internal/impl/config_service.go b/services/device/internal/impl/config_service.go
index 42e4986..f4b975f 100644
--- a/services/device/internal/impl/config_service.go
+++ b/services/device/internal/impl/config_service.go
@@ -19,6 +19,7 @@
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/verror"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 type callbackState struct {
@@ -72,9 +73,9 @@
 	case value := <-l.ch:
 		return value, nil
 	case <-time.After(timeout):
-		return "", verror.New(ErrOperationFailed, nil, fmt.Sprintf("Waiting for callback timed out after %v", timeout))
+		return "", verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Waiting for callback timed out after %v", timeout))
 	case <-l.stopper:
-		return "", verror.New(ErrOperationFailed, nil, fmt.Sprintf("Stopped while waiting for callack"))
+		return "", verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Stopped while waiting for callack"))
 	}
 }
 
@@ -143,7 +144,7 @@
 	i.callback.Lock()
 	if _, ok := i.callback.channels[id]; !ok {
 		i.callback.Unlock()
-		return verror.New(ErrInvalidSuffix, nil)
+		return verror.New(errors.ErrInvalidSuffix, nil)
 	}
 	channel, ok := i.callback.channels[id][key]
 	i.callback.Unlock()
diff --git a/services/device/internal/impl/device_service.go b/services/device/internal/impl/device_service.go
index 68a4d76..06b8e93 100644
--- a/services/device/internal/impl/device_service.go
+++ b/services/device/internal/impl/device_service.go
@@ -69,6 +69,7 @@
 	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/services/agent/agentlib"
 	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/profile"
 )
 
@@ -134,21 +135,21 @@
 	jsonInfo, err := json.Marshal(info)
 	if err != nil {
 		vlog.Errorf("Marshal(%v) failed: %v", info, err)
-		return verror.New(ErrOperationFailed, nil)
+		return verror.New(errors.ErrOperationFailed, nil)
 	}
 	if err := os.MkdirAll(dir, os.FileMode(0700)); err != nil {
 		vlog.Errorf("MkdirAll(%v) failed: %v", dir, err)
-		return verror.New(ErrOperationFailed, nil)
+		return verror.New(errors.ErrOperationFailed, nil)
 	}
 	infoPath := filepath.Join(dir, "creation_info")
 	if err := ioutil.WriteFile(infoPath, jsonInfo, 0600); err != nil {
 		vlog.Errorf("WriteFile(%v) failed: %v", infoPath, err)
-		return verror.New(ErrOperationFailed, nil)
+		return verror.New(errors.ErrOperationFailed, nil)
 	}
 	// Make the file read-only as we don't want anyone changing it
 	if err := os.Chmod(infoPath, 0400); err != nil {
 		vlog.Errorf("Chmod(0400, %v) failed: %v", infoPath, err)
-		return verror.New(ErrOperationFailed, nil)
+		return verror.New(errors.ErrOperationFailed, nil)
 	}
 	return nil
 }
@@ -158,10 +159,10 @@
 	info := new(CreatorInfo)
 	if infoBytes, err := ioutil.ReadFile(infoPath); err != nil {
 		vlog.Errorf("ReadFile(%v) failed: %v", infoPath, err)
-		return nil, verror.New(ErrOperationFailed, nil)
+		return nil, verror.New(errors.ErrOperationFailed, nil)
 	} else if err := json.Unmarshal(infoBytes, info); err != nil {
 		vlog.Errorf("Unmarshal(%v) failed: %v", infoBytes, err)
-		return nil, verror.New(ErrOperationFailed, nil)
+		return nil, verror.New(errors.ErrOperationFailed, nil)
 	}
 	return info, nil
 }
@@ -170,11 +171,11 @@
 func CheckCompatibility(dir string) error {
 	if infoOnDisk, err := loadCreatorInfo(dir); err != nil {
 		vlog.Errorf("Failed to load creator info from %s", dir)
-		return verror.New(ErrOperationFailed, nil)
+		return verror.New(errors.ErrOperationFailed, nil)
 	} else if CurrentVersion.Major != infoOnDisk.Version.Major {
 		vlog.Errorf("Device Manager binary vs disk major version mismatch (%+v vs %+v)",
 			CurrentVersion, infoOnDisk.Version)
-		return verror.New(ErrOperationFailed, nil)
+		return verror.New(errors.ErrOperationFailed, nil)
 	}
 	return nil
 }
@@ -187,14 +188,14 @@
 func SaveManagerInfo(dir string, info *ManagerInfo) error {
 	jsonInfo, err := json.Marshal(info)
 	if err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("Marshal(%v) failed: %v", info, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Marshal(%v) failed: %v", info, err))
 	}
 	if err := os.MkdirAll(dir, os.FileMode(0700)); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("MkdirAll(%v) failed: %v", dir, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("MkdirAll(%v) failed: %v", dir, err))
 	}
 	infoPath := filepath.Join(dir, "info")
 	if err := ioutil.WriteFile(infoPath, jsonInfo, 0600); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v) failed: %v", infoPath, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v) failed: %v", infoPath, err))
 	}
 	return nil
 }
@@ -203,9 +204,9 @@
 	infoPath := filepath.Join(dir, "info")
 	info := new(ManagerInfo)
 	if infoBytes, err := ioutil.ReadFile(infoPath); err != nil {
-		return nil, verror.New(ErrOperationFailed, nil, fmt.Sprintf("ReadFile(%v) failed: %v", infoPath, err))
+		return nil, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("ReadFile(%v) failed: %v", infoPath, err))
 	} else if err := json.Unmarshal(infoBytes, info); err != nil {
-		return nil, verror.New(ErrOperationFailed, nil, fmt.Sprintf("Unmarshal(%v) failed: %v", infoBytes, err))
+		return nil, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Unmarshal(%v) failed: %v", infoBytes, err))
 	}
 	return info, nil
 }
@@ -268,18 +269,18 @@
 	path := s.config.CurrentLink
 	link, err := os.Lstat(path)
 	if err != nil {
-		return nil, "", verror.New(ErrOperationFailed, nil, fmt.Sprintf("Lstat(%v) failed: %v", path, err))
+		return nil, "", verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Lstat(%v) failed: %v", path, err))
 	}
 	scriptPath, err := filepath.EvalSymlinks(path)
 	if err != nil {
-		return nil, "", verror.New(ErrOperationFailed, nil, fmt.Sprintf("EvalSymlinks(%v) failed: %v", path, err))
+		return nil, "", verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("EvalSymlinks(%v) failed: %v", path, err))
 	}
 	return link, scriptPath, nil
 }
 
 func (s *deviceService) revertDeviceManager(ctx *context.T) error {
 	if err := updateLink(s.config.Previous, s.config.CurrentLink); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("updateLink failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("updateLink failed: %v", err))
 	}
 	if s.restartHandler != nil {
 		s.restartHandler()
@@ -349,12 +350,12 @@
 		// TODO(rthellend): Cleanup principal
 		handle, conn, err := s.securityAgent.keyMgrAgent.NewPrincipal(ctx, false)
 		if err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("NewPrincipal() failed %v", err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("NewPrincipal() failed %v", err))
 		}
 		agentHandle = handle
 		var cancel func()
 		if p, cancel, err = agentPrincipal(ctx, conn); err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("agentPrincipal failed: %v", err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("agentPrincipal failed: %v", err))
 		}
 		defer cancel()
 
@@ -362,26 +363,26 @@
 		credentialsDir := filepath.Join(workspace, "credentials")
 		var err error
 		if p, err = vsecurity.CreatePersistentPrincipal(credentialsDir, nil); err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("CreatePersistentPrincipal(%v, nil) failed: %v", credentialsDir, err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("CreatePersistentPrincipal(%v, nil) failed: %v", credentialsDir, err))
 		}
 		cmd.Env = append(cmd.Env, ref.EnvCredentials+"="+credentialsDir)
 	}
 	dmPrincipal := v23.GetPrincipal(ctx)
 	dmBlessings, err := dmPrincipal.Bless(p.PublicKey(), dmPrincipal.BlessingStore().Default(), "testdm", security.UnconstrainedUse())
 	if err := p.BlessingStore().SetDefault(dmBlessings); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.SetDefault() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.SetDefault() failed: %v", err))
 	}
 	if _, err := p.BlessingStore().Set(dmBlessings, security.AllPrincipals); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("BlessingStore.Set() failed: %v", err))
 	}
 	if err := p.AddToRoots(dmBlessings); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("AddToRoots() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("AddToRoots() failed: %v", err))
 	}
 
 	if s.securityAgent != nil {
 		file, err := s.securityAgent.keyMgrAgent.NewConnection(agentHandle)
 		if err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("NewConnection(%v) failed: %v", agentHandle, err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("NewConnection(%v) failed: %v", agentHandle, err))
 		}
 		defer file.Close()
 
@@ -397,7 +398,7 @@
 	// Start the child process.
 	if err := handle.Start(); err != nil {
 		vlog.Errorf("Start() failed: %v", err)
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Start() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Start() failed: %v", err))
 	}
 	defer func() {
 		if err := handle.Clean(); err != nil {
@@ -407,7 +408,7 @@
 
 	// Wait for the child process to start.
 	if err := handle.WaitForReady(childReadyTimeout); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WaitForReady(%v) failed: %v", childReadyTimeout, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WaitForReady(%v) failed: %v", childReadyTimeout, err))
 	}
 
 	// Watch for the exit of the child. Failures could cause it to happen at any time
@@ -416,7 +417,7 @@
 		// Wait timeout needs to be long enough to give the rest of the operations time to run
 		err := handle.Wait(2*childReadyTimeout + childWaitTimeout)
 		if err != nil {
-			waitchan <- verror.New(ErrOperationFailed, ctx, fmt.Sprintf("new device manager failed to exit cleanly: %v", err))
+			waitchan <- verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("new device manager failed to exit cleanly: %v", err))
 		}
 		close(waitchan)
 		listener.stop()
@@ -424,13 +425,13 @@
 
 	childName, err := listener.waitForValue(childReadyTimeout)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("waitForValue(%v) failed: %v", childReadyTimeout, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("waitForValue(%v) failed: %v", childReadyTimeout, err))
 	}
 	// Check that invoking Delete() succeeds.
 	childName = naming.Join(childName, "device")
 	dmClient := device.DeviceClient(childName)
 	if err := dmClient.Delete(ctx); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Delete() failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Delete() failed: %v", err))
 	}
 	if err := <-waitchan; err != nil {
 		return err
@@ -445,11 +446,11 @@
 	// any purpose.
 	path, err := filepath.EvalSymlinks(os.Args[0])
 	if err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("EvalSymlinks(%v) failed: %v", os.Args[0], err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("EvalSymlinks(%v) failed: %v", os.Args[0], err))
 	}
 
 	if err := os.MkdirAll(logs, 0711); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("MkdirAll(%v) failed: %v", logs, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("MkdirAll(%v) failed: %v", logs, err))
 	}
 	stderrLog, stdoutLog := filepath.Join(logs, "STDERR"), filepath.Join(logs, "STDOUT")
 
@@ -474,34 +475,34 @@
 
 	path = filepath.Join(workspace, "deviced.sh")
 	if err := ioutil.WriteFile(path, []byte(output), 0700); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("WriteFile(%v) failed: %v", path, err))
 	}
 	return nil
 }
 
 func (s *deviceService) updateDeviceManager(ctx *context.T) error {
 	if len(s.config.Origin) == 0 {
-		return verror.New(ErrUpdateNoOp, ctx)
+		return verror.New(errors.ErrUpdateNoOp, ctx)
 	}
 	envelope, err := fetchEnvelope(ctx, s.config.Origin)
 	if err != nil {
 		return err
 	}
 	if envelope.Title != application.DeviceManagerTitle {
-		return verror.New(ErrAppTitleMismatch, ctx, fmt.Sprintf("app title mismatch. Got %q, expected %q.", envelope.Title, application.DeviceManagerTitle))
+		return verror.New(errors.ErrAppTitleMismatch, ctx, fmt.Sprintf("app title mismatch. Got %q, expected %q.", envelope.Title, application.DeviceManagerTitle))
 	}
 	// Read and merge persistent args, if present.
 	if args, err := loadPersistentArgs(s.config.Root); err == nil {
 		envelope.Args = append(envelope.Args, args...)
 	}
 	if s.config.Envelope != nil && reflect.DeepEqual(envelope, s.config.Envelope) {
-		return verror.New(ErrUpdateNoOp, ctx)
+		return verror.New(errors.ErrUpdateNoOp, ctx)
 	}
 	// Create new workspace.
 	workspace := filepath.Join(s.config.Root, "device-manager", generateVersionDirName())
 	perm := os.FileMode(0700)
 	if err := os.MkdirAll(workspace, perm); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("MkdirAll(%v, %v) failed: %v", workspace, perm, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("MkdirAll(%v, %v) failed: %v", workspace, perm, err))
 	}
 
 	deferrer := func() {
@@ -530,7 +531,7 @@
 	// Populate the new workspace with a device manager script.
 	configSettings, err := s.config.Save(envelope)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, err)
+		return verror.New(errors.ErrOperationFailed, ctx, err)
 	}
 
 	logs := filepath.Join(s.config.Root, "device-manager", "logs")
@@ -539,7 +540,7 @@
 	}
 
 	if err := s.testDeviceManager(ctx, workspace, envelope); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("testDeviceManager failed: %v", err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("testDeviceManager failed: %v", err))
 	}
 
 	if err := updateLink(filepath.Join(workspace, "deviced.sh"), s.config.CurrentLink); err != nil {
@@ -555,20 +556,20 @@
 }
 
 func (*deviceService) Install(ctx *context.T, _ rpc.ServerCall, _ string, _ device.Config, _ application.Packages) (string, error) {
-	return "", verror.New(ErrInvalidSuffix, ctx)
+	return "", verror.New(errors.ErrInvalidSuffix, ctx)
 }
 
 func (*deviceService) Run(ctx *context.T, _ rpc.ServerCall) error {
-	return verror.New(ErrInvalidSuffix, ctx)
+	return verror.New(errors.ErrInvalidSuffix, ctx)
 }
 
 func (s *deviceService) Revert(ctx *context.T, _ rpc.ServerCall) error {
 	if s.config.Previous == "" {
-		return verror.New(ErrUpdateNoOp, ctx, fmt.Sprintf("Revert failed: no previous version"))
+		return verror.New(errors.ErrUpdateNoOp, ctx, fmt.Sprintf("Revert failed: no previous version"))
 	}
 	updatingState := s.updating
 	if updatingState.testAndSetUpdating() {
-		return verror.New(ErrOperationInProgress, ctx, fmt.Sprintf("Revert failed: already in progress"))
+		return verror.New(errors.ErrOperationInProgress, ctx, fmt.Sprintf("Revert failed: already in progress"))
 	}
 	err := s.revertDeviceManager(ctx)
 	if err != nil {
@@ -578,7 +579,7 @@
 }
 
 func (*deviceService) Instantiate(ctx *context.T, _ device.ApplicationInstantiateServerCall) (string, error) {
-	return "", verror.New(ErrInvalidSuffix, ctx)
+	return "", verror.New(errors.ErrInvalidSuffix, ctx)
 }
 
 func (*deviceService) Delete(ctx *context.T, _ rpc.ServerCall) error {
@@ -595,7 +596,7 @@
 }
 
 func (*deviceService) Uninstall(ctx *context.T, _ rpc.ServerCall) error {
-	return verror.New(ErrInvalidSuffix, ctx)
+	return verror.New(errors.ErrInvalidSuffix, ctx)
 }
 
 func (s *deviceService) Update(ctx *context.T, _ rpc.ServerCall) error {
@@ -604,7 +605,7 @@
 
 	updatingState := s.updating
 	if updatingState.testAndSetUpdating() {
-		return verror.New(ErrOperationInProgress, ctx)
+		return verror.New(errors.ErrOperationInProgress, ctx)
 	}
 
 	err := s.updateDeviceManager(ctx)
diff --git a/services/device/internal/impl/dispatcher.go b/services/device/internal/impl/dispatcher.go
index d4621a8..21ebe01 100644
--- a/services/device/internal/impl/dispatcher.go
+++ b/services/device/internal/impl/dispatcher.go
@@ -28,6 +28,7 @@
 	"v.io/x/ref/services/agent/keymgr"
 	s_device "v.io/x/ref/services/device"
 	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/internal/logreaderlib"
 	"v.io/x/ref/services/internal/pathperms"
 )
@@ -73,17 +74,6 @@
 )
 
 var (
-	ErrInvalidSuffix        = verror.Register(pkgPath+".InvalidSuffix", verror.NoRetry, "{1:}{2:} invalid suffix{:_}")
-	ErrOperationFailed      = verror.Register(pkgPath+".OperationFailed", verror.NoRetry, "{1:}{2:} operation failed{:_}")
-	ErrOperationInProgress  = verror.Register(pkgPath+".OperationInProgress", verror.NoRetry, "{1:}{2:} operation in progress{:_}")
-	ErrAppTitleMismatch     = verror.Register(pkgPath+".AppTitleMismatch", verror.NoRetry, "{1:}{2:} app title mismatch{:_}")
-	ErrUpdateNoOp           = verror.Register(pkgPath+".UpdateNoOp", verror.NoRetry, "{1:}{2:} update is no op{:_}")
-	ErrInvalidOperation     = verror.Register(pkgPath+".InvalidOperation", verror.NoRetry, "{1:}{2:} invalid operation{:_}")
-	ErrInvalidBlessing      = verror.Register(pkgPath+".InvalidBlessing", verror.NoRetry, "{1:}{2:} invalid blessing{:_}")
-	ErrInvalidPairingToken  = verror.Register(pkgPath+".InvalidPairingToken", verror.NoRetry, "{1:}{2:} pairing token mismatch{:_}")
-	ErrUnclaimedDevice      = verror.Register(pkgPath+".UnclaimedDevice", verror.NoRetry, "{1:}{2:} device needs to be claimed first")
-	ErrDeviceAlreadyClaimed = verror.Register(pkgPath+".AlreadyClaimed", verror.NoRetry, "{1:}{2:} device has already been claimed")
-
 	errInvalidConfig          = verror.Register(pkgPath+".errInvalidConfig", verror.NoRetry, "{1:}{2:} invalid config {3}{:_}")
 	errCantCreateAccountStore = verror.Register(pkgPath+".errCantCreateAccountStore", verror.NoRetry, "{1:}{2:} cannot create persistent store for identity to system account associations{:_}")
 	errCantCreateAppWatcher   = verror.Register(pkgPath+".errCantCreateAppWatcher", verror.NoRetry, "{1:}{2:} cannot create app status watcher{:_}")
@@ -308,7 +298,7 @@
 					return nil, nil, err
 				}
 				if !instanceStateIs(appInstanceDir, device.InstanceStateRunning) {
-					return nil, nil, verror.New(ErrInvalidSuffix, nil)
+					return nil, nil, verror.New(errors.ErrInvalidSuffix, nil)
 				}
 				var desc []rpc.InterfaceDesc
 				switch kind {
@@ -347,7 +337,7 @@
 		return receiver, appSpecificAuthorizer, nil
 	case configSuffix:
 		if len(components) != 2 {
-			return nil, nil, verror.New(ErrInvalidSuffix, nil)
+			return nil, nil, verror.New(errors.ErrInvalidSuffix, nil)
 		}
 		receiver := s_device.ConfigServer(&configService{
 			callback: d.internal.callback,
@@ -362,7 +352,7 @@
 		// (and not other apps).
 		return receiver, nil, nil
 	default:
-		return nil, nil, verror.New(ErrInvalidSuffix, nil)
+		return nil, nil, verror.New(errors.ErrInvalidSuffix, nil)
 	}
 }
 
@@ -384,7 +374,7 @@
 		return nil
 	}
 	vlog.Infof("testModeDispatcher.Authorize: Reject %q.%s()", call.Suffix(), call.Method())
-	return verror.New(ErrInvalidSuffix, nil)
+	return verror.New(errors.ErrInvalidSuffix, nil)
 }
 
 func newAppSpecificAuthorizer(sec security.Authorizer, config *config.State, suffix []string, getter pathperms.PermsGetter) (security.Authorizer, error) {
@@ -400,7 +390,7 @@
 	if len(suffix) == 2 {
 		p, err := installationDirCore(suffix, config.Root)
 		if err != nil {
-			return nil, verror.New(ErrOperationFailed, nil, fmt.Sprintf("newAppSpecificAuthorizer failed: %v", err))
+			return nil, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("newAppSpecificAuthorizer failed: %v", err))
 		}
 		return pathperms.NewHierarchicalAuthorizer(PermsDir(config), path.Join(p, "acls"), getter)
 	}
@@ -408,14 +398,14 @@
 	if len(suffix) > 3 && (suffix[3] == "logs" || suffix[3] == "pprof" || suffix[3] == "stats") {
 		p, err := instanceDir(config.Root, suffix[0:3])
 		if err != nil {
-			return nil, verror.New(ErrOperationFailed, nil, fmt.Sprintf("newAppSpecificAuthorizer failed: %v", err))
+			return nil, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("newAppSpecificAuthorizer failed: %v", err))
 		}
 		return pathperms.NewHierarchicalAuthorizer(PermsDir(config), path.Join(p, "debugacls"), getter)
 	}
 
 	p, err := instanceDir(config.Root, suffix[0:3])
 	if err != nil {
-		return nil, verror.New(ErrOperationFailed, nil, fmt.Sprintf("newAppSpecificAuthorizer failed: %v", err))
+		return nil, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("newAppSpecificAuthorizer failed: %v", err))
 	}
 	return pathperms.NewHierarchicalAuthorizer(PermsDir(config), path.Join(p, "acls"), getter)
 }
diff --git a/services/device/internal/impl/globsuid/signature_match_test.go b/services/device/internal/impl/globsuid/signature_match_test.go
index 5aabcbc..02ace25 100644
--- a/services/device/internal/impl/globsuid/signature_match_test.go
+++ b/services/device/internal/impl/globsuid/signature_match_test.go
@@ -18,7 +18,7 @@
 	"v.io/v23/services/device"
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
-
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/device/internal/impl"
 	"v.io/x/ref/services/device/internal/impl/utiltest"
 	"v.io/x/ref/services/internal/binarylib"
@@ -101,7 +101,7 @@
 
 	// Using the publisher should fail, because blessing "publisher" is not covered by the
 	// trusted roots of the device manager's principal
-	if _, err := utiltest.AppStub().Install(ctx, utiltest.MockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != impl.ErrOperationFailed.ID {
+	if _, err := utiltest.AppStub().Install(ctx, utiltest.MockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != errors.ErrOperationFailed.ID {
 		t.Fatalf("Unexpected error installing app:%v (expected ErrOperationFailed)", err)
 	}
 
@@ -124,8 +124,8 @@
 	if _, err := binarylib.Upload(ctx, naming.Join(binaryVON, "testbinary"), up, mediaInfo); err != nil {
 		t.Fatalf("Upload(%v) failed:%v", binaryVON, err)
 	}
-	if _, err := utiltest.AppStub().Install(ctx, utiltest.MockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != impl.ErrOperationFailed.ID {
-		t.Fatalf("Failed to verify signature mismatch for binary:%v. Got errorid=%v[%v], want errorid=%v", binaryVON, verror.ErrorID(err), err, impl.ErrOperationFailed.ID)
+	if _, err := utiltest.AppStub().Install(ctx, utiltest.MockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != errors.ErrOperationFailed.ID {
+		t.Fatalf("Failed to verify signature mismatch for binary:%v. Got errorid=%v[%v], want errorid=%v", binaryVON, verror.ErrorID(err), err, errors.ErrOperationFailed.ID)
 	}
 
 	// Restore the binary and verify that installation succeeds.
@@ -154,7 +154,7 @@
 	if _, err = binarylib.UploadFromDir(ctx, pkgVON, tmpdir); err != nil {
 		t.Fatalf("binarylib.UploadFromDir failed: %v", err)
 	}
-	if _, err := utiltest.AppStub().Install(ctx, utiltest.MockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != impl.ErrOperationFailed.ID {
+	if _, err := utiltest.AppStub().Install(ctx, utiltest.MockApplicationRepoName, device.Config{}, nil); verror.ErrorID(err) != errors.ErrOperationFailed.ID {
 		t.Fatalf("Failed to verify signature mismatch for package:%v", pkgVON)
 	}
 }
diff --git a/services/device/internal/impl/helper_manager.go b/services/device/internal/impl/helper_manager.go
index a0528e0..3d24b16 100644
--- a/services/device/internal/impl/helper_manager.go
+++ b/services/device/internal/impl/helper_manager.go
@@ -16,6 +16,7 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 type suidHelperState struct {
@@ -150,7 +151,7 @@
 func (s suidHelperState) suidhelperEnabled(targetUser string) (bool, error) {
 	helperStat, err := os.Stat(s.helperPath)
 	if err != nil {
-		return false, verror.New(ErrOperationFailed, nil, fmt.Sprintf("Stat(%v) failed: %v. helper is required.", s.helperPath, err))
+		return false, verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Stat(%v) failed: %v. helper is required.", s.helperPath, err))
 	}
 	haveHelper := IsSetuid(helperStat)
 
diff --git a/services/device/internal/impl/impl_test.go b/services/device/internal/impl/impl_test.go
index a0cb125..c641600 100644
--- a/services/device/internal/impl/impl_test.go
+++ b/services/device/internal/impl/impl_test.go
@@ -15,15 +15,15 @@
 	"syscall"
 	"testing"
 
-	"v.io/x/lib/vlog"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/naming"
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
+	"v.io/x/lib/vlog"
 	"v.io/x/ref"
 	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/device/internal/impl"
 	"v.io/x/ref/services/device/internal/impl/utiltest"
 	"v.io/x/ref/services/internal/binarylib"
@@ -144,8 +144,8 @@
 	// Simulate an invalid envelope in the application repository.
 	*envelope = utiltest.EnvelopeFromShell(sh, dmPauseBeforeStopEnv, utiltest.DeviceManager, "bogus", 0, 0, dmArgs...)
 
-	utiltest.UpdateDeviceExpectError(t, ctx, "factoryDM", impl.ErrAppTitleMismatch.ID)
-	utiltest.RevertDeviceExpectError(t, ctx, "factoryDM", impl.ErrUpdateNoOp.ID)
+	utiltest.UpdateDeviceExpectError(t, ctx, "factoryDM", errors.ErrAppTitleMismatch.ID)
+	utiltest.RevertDeviceExpectError(t, ctx, "factoryDM", errors.ErrUpdateNoOp.ID)
 
 	// Set up a second version of the device manager. The information in the
 	// envelope will be used by the device manager to stage the next
@@ -167,7 +167,7 @@
 	}
 	v2 := utiltest.VerifyDeviceState(t, ctx, device.InstanceStateUpdating, "factoryDM")
 
-	utiltest.UpdateDeviceExpectError(t, ctx, "factoryDM", impl.ErrOperationInProgress.ID)
+	utiltest.UpdateDeviceExpectError(t, ctx, "factoryDM", errors.ErrOperationInProgress.ID)
 
 	dmh.CloseStdin()
 
@@ -187,7 +187,7 @@
 	// Try issuing an update without changing the envelope in the
 	// application repository: this should fail, and current link should be
 	// unchanged.
-	utiltest.UpdateDeviceExpectError(t, ctx, "v2DM", impl.ErrUpdateNoOp.ID)
+	utiltest.UpdateDeviceExpectError(t, ctx, "v2DM", errors.ErrUpdateNoOp.ID)
 	if evalLink() != scriptPathV2 {
 		t.Fatalf("script changed")
 	}
@@ -196,7 +196,7 @@
 	// number. It should fail.
 	utiltest.ResolveExpectNotFound(t, ctx, "v2.5DM", false) // Ensure a clean slate.
 	*envelope = utiltest.EnvelopeFromShell(sh, dmEnv, utiltest.DeviceManagerV10, application.DeviceManagerTitle, 0, 0, "v2.5DM")
-	utiltest.UpdateDeviceExpectError(t, ctx, "v2DM", impl.ErrOperationFailed.ID)
+	utiltest.UpdateDeviceExpectError(t, ctx, "v2DM", errors.ErrOperationFailed.ID)
 
 	if evalLink() != scriptPathV2 {
 		t.Fatalf("script changed")
@@ -232,7 +232,7 @@
 
 	// Revert the device manager to its previous version (v2).
 	utiltest.RevertDevice(t, ctx, "v3DM")
-	utiltest.RevertDeviceExpectError(t, ctx, "v3DM", impl.ErrOperationInProgress.ID) // Revert already in progress.
+	utiltest.RevertDeviceExpectError(t, ctx, "v3DM", errors.ErrOperationInProgress.ID) // Revert already in progress.
 	dmh.CloseStdin()
 	dmh.Expect("restart handler")
 	dmh.Expect("v3DM terminated")
@@ -329,7 +329,7 @@
 	dms := expect.NewSession(t, stdout, servicetest.ExpectTimeout)
 	servicetest.ReadPID(t, dms)
 	utiltest.ClaimDevice(t, ctx, "claimable", "dm", "mydevice", utiltest.NoPairingToken)
-	utiltest.RevertDeviceExpectError(t, ctx, "dm", impl.ErrUpdateNoOp.ID) // No previous version available.
+	utiltest.RevertDeviceExpectError(t, ctx, "dm", errors.ErrUpdateNoOp.ID) // No previous version available.
 
 	// Stop the device manager.
 	if err := impl.Stop(ctx, dmDir, os.Stderr, os.Stdout); err != nil {
diff --git a/services/device/internal/impl/perms/perms_test.go b/services/device/internal/impl/perms/perms_test.go
index 99b4e84..0756938 100644
--- a/services/device/internal/impl/perms/perms_test.go
+++ b/services/device/internal/impl/perms/perms_test.go
@@ -16,7 +16,7 @@
 	"v.io/v23/security/access"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-
+	"v.io/x/ref/services/device/internal/errors"
 	"v.io/x/ref/services/device/internal/impl"
 	"v.io/x/ref/services/device/internal/impl/utiltest"
 	"v.io/x/ref/services/internal/servicetest"
@@ -75,7 +75,7 @@
 	//installAppExpectError(t, octx, impl.ErrUnclaimedDevice.ID)
 
 	// Claim the device with an incorrect pairing token should fail.
-	utiltest.ClaimDeviceExpectError(t, claimantCtx, "claimable", "mydevice", "badtoken", impl.ErrInvalidPairingToken.ID)
+	utiltest.ClaimDeviceExpectError(t, claimantCtx, "claimable", "mydevice", "badtoken", errors.ErrInvalidPairingToken.ID)
 	// But succeed with a valid pairing token
 	utiltest.ClaimDevice(t, claimantCtx, "claimable", "dm", "mydevice", pairingToken)
 
diff --git a/services/device/internal/impl/tidyup.go b/services/device/internal/impl/tidyup.go
index 3b9c3ca..38aea0d 100644
--- a/services/device/internal/impl/tidyup.go
+++ b/services/device/internal/impl/tidyup.go
@@ -14,8 +14,8 @@
 	"v.io/v23/context"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/device/internal/errors"
 )
 
 // This file contains the various routines that the device manager uses
@@ -99,7 +99,7 @@
 		for _, ep := range allerrors {
 			errormessages = append(errormessages, fmt.Sprintf("path: %s failed: %v", ep.pth, ep.err))
 		}
-		return verror.New(ErrOperationFailed, ctx, "Some older instances could not be deleted: %s", strings.Join(errormessages, ", "))
+		return verror.New(errors.ErrOperationFailed, ctx, "Some older instances could not be deleted: %s", strings.Join(errormessages, ", "))
 	}
 	return nil
 }
diff --git a/services/device/internal/impl/util.go b/services/device/internal/impl/util.go
index 188605d..bc97de3 100644
--- a/services/device/internal/impl/util.go
+++ b/services/device/internal/impl/util.go
@@ -15,9 +15,6 @@
 	"strings"
 	"time"
 
-	"v.io/x/ref/services/device/internal/config"
-	"v.io/x/ref/services/internal/binarylib"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
@@ -25,6 +22,9 @@
 	"v.io/v23/services/repository"
 	"v.io/v23/verror"
 	"v.io/x/lib/vlog"
+	"v.io/x/ref/services/device/internal/config"
+	"v.io/x/ref/services/device/internal/errors"
+	"v.io/x/ref/services/internal/binarylib"
 )
 
 // TODO(caprita): Set these timeout in a more principled manner.
@@ -39,7 +39,7 @@
 	if !publisher.IsZero() {
 		h := sha256.Sum256(data)
 		if !sig.Verify(publisher.PublicKey(), h[:]) {
-			return verror.New(ErrOperationFailed, nil)
+			return verror.New(errors.ErrOperationFailed, nil)
 		}
 	}
 	return nil
@@ -50,14 +50,14 @@
 	// data to verify its checksum and signature.
 	data, _, err := binarylib.Download(ctx, bin.File)
 	if err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Download(%v) failed: %v", bin.File, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Download(%v) failed: %v", bin.File, err))
 	}
 	if err := verifySignature(data, publisher, bin.Signature); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Publisher binary(%v) signature verification failed", bin.File))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Publisher binary(%v) signature verification failed", bin.File))
 	}
 	path, perm := filepath.Join(workspace, fileName), os.FileMode(0755)
 	if err := ioutil.WriteFile(path, data, perm); err != nil {
-		return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v, %v) failed: %v", path, perm, err))
+		return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("WriteFile(%v, %v) failed: %v", path, perm, err))
 	}
 	return nil
 }
@@ -66,20 +66,20 @@
 func downloadPackages(ctx *context.T, publisher security.Blessings, packages application.Packages, pkgDir string) error {
 	for localPkg, pkgName := range packages {
 		if localPkg == "" || localPkg[0] == '.' || strings.Contains(localPkg, string(filepath.Separator)) {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("invalid local package name: %q", localPkg))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("invalid local package name: %q", localPkg))
 		}
 		path := filepath.Join(pkgDir, localPkg)
 		if err := binarylib.DownloadToFile(ctx, pkgName.File, path); err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("DownloadToFile(%q, %q) failed: %v", pkgName, path, err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("DownloadToFile(%q, %q) failed: %v", pkgName, path, err))
 		}
 		data, err := ioutil.ReadFile(path)
 		if err != nil {
-			return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("ReadPackage(%v) failed: %v", path, err))
+			return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("ReadPackage(%v) failed: %v", path, err))
 		}
 		// If a nonempty signature is present, verify it. (i.e., we accept unsigned packages.)
 		if !reflect.DeepEqual(pkgName.Signature, security.Signature{}) {
 			if err := verifySignature(data, publisher, pkgName.Signature); err != nil {
-				return verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Publisher package(%v:%v) signature verification failed", localPkg, pkgName))
+				return verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Publisher package(%v:%v) signature verification failed", localPkg, pkgName))
 			}
 		}
 	}
@@ -90,7 +90,7 @@
 	stub := repository.ApplicationClient(origin)
 	profilesSet, err := Describe()
 	if err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Failed to obtain profile labels: %v", err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Failed to obtain profile labels: %v", err))
 	}
 	var profiles []string
 	for label := range profilesSet.Profiles {
@@ -98,14 +98,14 @@
 	}
 	envelope, err := stub.Match(ctx, profiles)
 	if err != nil {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("Match(%v) failed: %v", profiles, err))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("Match(%v) failed: %v", profiles, err))
 	}
 	// If a publisher blessing is present, it must be from a publisher we recognize. If not,
 	// reject the envelope. Note that unsigned envelopes are accepted by this check.
 	// TODO: Implment a real ACL check based on publisher
 	names, rejected := publisherBlessingNames(ctx, envelope)
 	if len(names) == 0 && len(rejected) > 0 {
-		return nil, verror.New(ErrOperationFailed, ctx, fmt.Sprintf("publisher %v in envelope %v was not recognized", rejected, envelope.Title))
+		return nil, verror.New(errors.ErrOperationFailed, ctx, fmt.Sprintf("publisher %v in envelope %v was not recognized", rejected, envelope.Title))
 	}
 	return &envelope, nil
 }
@@ -130,7 +130,7 @@
 	path := filepath.Join(workspace, fileName)
 	self := os.Args[0]
 	if err := os.Link(self, path); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("Link(%v, %v) failed: %v", self, path, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Link(%v, %v) failed: %v", self, path, err))
 	}
 	return nil
 }
@@ -145,14 +145,14 @@
 	fi, err := os.Lstat(newLink)
 	if err == nil {
 		if err := os.Remove(fi.Name()); err != nil {
-			return verror.New(ErrOperationFailed, nil, fmt.Sprintf("Remove(%v) failed: %v", fi.Name(), err))
+			return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Remove(%v) failed: %v", fi.Name(), err))
 		}
 	}
 	if err := os.Symlink(target, newLink); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("Symlink(%v, %v) failed: %v", target, newLink, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Symlink(%v, %v) failed: %v", target, newLink, err))
 	}
 	if err := os.Rename(newLink, link); err != nil {
-		return verror.New(ErrOperationFailed, nil, fmt.Sprintf("Rename(%v, %v) failed: %v", newLink, link, err))
+		return verror.New(errors.ErrOperationFailed, nil, fmt.Sprintf("Rename(%v, %v) failed: %v", newLink, link, err))
 	}
 	return nil
 }