diff --git a/cue/parser/interface.go b/cue/parser/interface.go
index 2fad239..8695a6c 100644
--- a/cue/parser/interface.go
+++ b/cue/parser/interface.go
@@ -94,14 +94,14 @@
 }
 
 func (e *DeprecationError) Error() string {
-	return "try running `cue fix` using CUE v0.2.2 on the file or module to upgrade"
+	return "try running `cue fix` (possibly with an earlier version, like v0.2.2) to upgrade"
 }
 
 // Latest specifies the latest version of the parser, effectively setting
 // the strictest implementation.
 const Latest = latest
 
-const latest = 1000
+const latest = -600
 
 // FileOffset specifies the File position info to use.
 func FileOffset(pos int) Option {
diff --git a/cue/parser/parser.go b/cue/parser/parser.go
index 6a852a2..6ba99cd 100644
--- a/cue/parser/parser.go
+++ b/cue/parser/parser.go
@@ -401,7 +401,7 @@
 	if p.version != 0 && p.version > v {
 		p.errors = errors.Append(p.errors,
 			errors.Wrapf(&DeprecationError{v}, pos,
-				"%s deprecated as of v0.%d.%d", name, minor, patch+1))
+				"use of deprecated %s (deprecated as of v0.%d.%d)", name, minor, patch+1))
 	}
 }
 
@@ -849,6 +849,7 @@
 			expr = p.parseRHS()
 		}
 		if a, ok := expr.(*ast.Alias); ok {
+			p.assertV0(a.Pos(), 1, 3, `old-style alias; use "let X = expr" instead`)
 			p.consumeDeclComma()
 			return a
 		}
@@ -876,8 +877,7 @@
 
 	case token.RBRACE, token.EOF:
 		if a, ok := expr.(*ast.Alias); ok {
-			p.assertV0(p.pos, 1, 3, `old-style alias; use "let X = expr"`)
-
+			p.assertV0(a.Pos(), 1, 3, `old-style alias; use "let X = expr" instead`)
 			return a
 		}
 		switch tok {
@@ -897,7 +897,7 @@
 	m.TokenPos = p.pos
 	m.Token = p.tok
 	if p.tok == token.ISA {
-		p.assertV0(p.pos, 2, 0, "use of '::'")
+		p.assertV0(p.pos, 2, 0, "'::'")
 	}
 	if p.tok != token.COLON && p.tok != token.ISA {
 		p.errorExpected(pos, "':' or '::'")
@@ -930,7 +930,7 @@
 		m.TokenPos = p.pos
 		m.Token = p.tok
 		if p.tok == token.ISA {
-			p.assertV0(p.pos, 2, 0, "use of '::'")
+			p.assertV0(p.pos, 2, 0, "'::'")
 		}
 		if p.tok != token.COLON && p.tok != token.ISA {
 			if p.tok.IsLiteral() {
diff --git a/cue/parser/parser_test.go b/cue/parser/parser_test.go
index d07d166..4f12c93 100644
--- a/cue/parser/parser_test.go
+++ b/cue/parser/parser_test.go
@@ -658,6 +658,12 @@
 			`a b c: 2`},
 		{"reserved identifiers",
 			`__foo: 3`},
+		{"old-style definition",
+			`foo :: 3`},
+		{"old-style alias 1",
+			`X=3`},
+		{"old-style alias 2",
+			`X={}`},
 	}
 	for _, tc := range testCases {
 		t.Run(tc.desc, func(t *testing.T) {
