diff --git a/mstate/relation.go b/mstate/relation.go
index <HASH>..<HASH> 100644
--- a/mstate/relation.go
+++ b/mstate/relation.go
@@ -117,7 +117,7 @@ func (r *Relation) Life() Life {
 // state. If the lifecycle transitioned concurrently so that the cache is
 // stale, the call is valid but will yield no effect in the database.
 func (r *Relation) SetLife(life Life) error {
-	if !r.doc.Life.isNextValid(life) {
+	if !transitions[r.doc.Life][life] {
 		panic(fmt.Errorf("illegal lifecycle state change from %q to %q", r.doc.Life, life))
 	}
 	sel := bson.D{
diff --git a/mstate/state.go b/mstate/state.go
index <HASH>..<HASH> 100644
--- a/mstate/state.go
+++ b/mstate/state.go
@@ -17,10 +17,10 @@ const (
 	Alive Life = iota
 	Dying
 	Dead
-	Nlife
+	nLife
 )
 
-var lifeStrings = [Nlife]string{
+var lifeStrings = [nLife]string{
 	Alive: "alive",
 	Dying: "dying",
 	Dead:  "dead",
@@ -30,7 +30,7 @@ func (l Life) String() string {
 	return lifeStrings[l]
 }
 
-var transitions = [Nlife][Nlife]bool{
+var transitions = [nLife][nLife]bool{
 	Alive: {Dying: true},
 	Dying: {Dying: true, Dead: true},
 	Dead:  {Dead: true},
mstate: rename Nlife to nLife