cue: move more labels and values to end of error message

Fixes #963

Change-Id: I3fc9fde1a3649f743d534cf7593c2cfcfd8ed3f7
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/9761
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Paul Jolly <paul@myitcv.org.uk>
diff --git a/cmd/cue/cmd/testdata/script/export_err.txt b/cmd/cue/cmd/testdata/script/export_err.txt
index ae52f07..93a5126 100644
--- a/cmd/cue/cmd/testdata/script/export_err.txt
+++ b/cmd/cue/cmd/testdata/script/export_err.txt
@@ -11,7 +11,7 @@
 cmp stderr expect-stderr
 -- expect-stderr --
 a.b.2.c: incomplete value int
-out: invalid interpolation: undefined field d:
+out: invalid interpolation: undefined field: d:
     ./exporterr/export_err.cue:7:6
     ./exporterr/export_err.cue:7:16
 -- expect-stdout --
diff --git a/cue/testdata/basicrewrite/012_selecting.txtar b/cue/testdata/basicrewrite/012_selecting.txtar
index dc81d1a..501f794 100644
--- a/cue/testdata/basicrewrite/012_selecting.txtar
+++ b/cue/testdata/basicrewrite/012_selecting.txtar
@@ -79,11 +79,11 @@
     //     ./in.cue:4:16
   }
   f: (_|_){
-    // [incomplete] f: undefined field b:
+    // [incomplete] f: undefined field: b:
     //     ./in.cue:5:16
   }
   g: (_|_){
-    // [incomplete] g: undefined field b:
+    // [incomplete] g: undefined field: b:
     //     ./in.cue:6:16
   }
   h: (_|_){
diff --git a/cue/testdata/builtins/all.txtar b/cue/testdata/builtins/all.txtar
index 4b9cb62..6a0f0b6 100644
--- a/cue/testdata/builtins/all.txtar
+++ b/cue/testdata/builtins/all.txtar
@@ -23,7 +23,7 @@
 fatalArg.x: invalid operands "eee" and 'eee' to '+' (type string and bytes):
     ./in.cue:3:12
     ./in.cue:3:20
-0.a: undefined field c:
+0.a: undefined field: c:
     ./in.cue:9:20
 
 Result:
@@ -42,7 +42,7 @@
     #b: (#struct){
     }
     x: (_|_){
-      // [eval] 0.a: undefined field c:
+      // [eval] 0.a: undefined field: c:
       //     ./in.cue:9:20
     }
   }
@@ -51,7 +51,7 @@
     }
     x: (struct){
       a: (_|_){
-        // [incomplete] okIncompleteChild.x.a: undefined field c:
+        // [incomplete] okIncompleteChild.x.a: undefined field: c:
         //     ./in.cue:17:19
       }
       b: (int){ 1 }
diff --git a/cue/testdata/builtins/incomplete.txtar b/cue/testdata/builtins/incomplete.txtar
index 85765b6..215f1a5 100644
--- a/cue/testdata/builtins/incomplete.txtar
+++ b/cue/testdata/builtins/incomplete.txtar
@@ -126,7 +126,7 @@
       }
     }
     _Sub: (_|_){
-      // [incomplete] list1._Sub: undefined field b:
+      // [incomplete] list1._Sub: undefined field: b:
       //     ./in.cue:19:13
     }
     a: (struct){
@@ -150,7 +150,7 @@
       //     ./in.cue:30:21
     }
     #Sub: (_|_){
-      // [incomplete] list2.#Sub: undefined field b:
+      // [incomplete] list2.#Sub: undefined field: b:
       //     ./in.cue:33:13
     }
     a: (struct){
diff --git a/cue/testdata/comprehensions/iferror.txtar b/cue/testdata/comprehensions/iferror.txtar
index ced1064..8052ec9 100644
--- a/cue/testdata/comprehensions/iferror.txtar
+++ b/cue/testdata/comprehensions/iferror.txtar
@@ -135,9 +135,9 @@
     //     ./in.cue:10:2
   }
   incomplete: (_|_){
-    // [incomplete] incomplete: undefined field d:
+    // [incomplete] incomplete: undefined field: d:
     //     ./in.cue:16:7
-    // incomplete: undefined field d:
+    // incomplete: undefined field: d:
     //     ./in.cue:23:21
     list: (#list){
       0: (int){ 1 }
diff --git a/cue/testdata/comprehensions/incomplete.txtar b/cue/testdata/comprehensions/incomplete.txtar
index 945954d..5cb9ee4 100644
--- a/cue/testdata/comprehensions/incomplete.txtar
+++ b/cue/testdata/comprehensions/incomplete.txtar
@@ -12,10 +12,10 @@
   }
   top: (_){ _ }
   a: (_|_){
-    // [incomplete] a: incomplete bool value 'bool'
+    // [incomplete] a: incomplete bool: bool
   }
   b: (_|_){
-    // [incomplete] b: undefined field foo:
+    // [incomplete] b: undefined field: foo:
     //     ./in.cue:5:19
   }
   c: (_|_){
diff --git a/cue/testdata/comprehensions/issue837.txtar b/cue/testdata/comprehensions/issue837.txtar
index e604306..9bb9289 100644
--- a/cue/testdata/comprehensions/issue837.txtar
+++ b/cue/testdata/comprehensions/issue837.txtar
@@ -74,11 +74,11 @@
     ./in.cue:35:13
     ./in.cue:54:12
     ./in.cue:55:15
-#DoDeploy._params.manifest.description.service.description: undefined field service:
+#DoDeploy._params.manifest.description.service.description: undefined field: service:
     ./in.cue:5:28
 _params.hsize.$_instances: 2 errors in empty disjunction::
     ./in.cue:33:20
-#RelabelService.out.labstr: undefined field label:
+#RelabelService.out.labstr: undefined field: label:
     ./in.cue:50:14
 
 Result:
@@ -94,7 +94,7 @@
           kind: (string){ "service" }
         }
         description: (_|_){
-          // [incomplete] #DeploymentManifest.description.service.description: undefined field service:
+          // [incomplete] #DeploymentManifest.description.service.description: undefined field: service:
           //     ./in.cue:5:28
         }
       }
@@ -122,7 +122,7 @@
           kind: (string){ "service" }
         }
         description: (_|_){
-          // [incomplete] #KumoriKinds.deployment.service.description: undefined field service:
+          // [incomplete] #KumoriKinds.deployment.service.description: undefined field: service:
           //     ./in.cue:5:28
         }
       }
@@ -143,7 +143,7 @@
               kind: (string){ "service" }
             }
             description: (_|_){
-              // [eval] #DoDeploy._params.manifest.description.service.description: undefined field service:
+              // [eval] #DoDeploy._params.manifest.description.service.description: undefined field: service:
               //     ./in.cue:5:28
             }
           }
@@ -157,7 +157,7 @@
       description: (_|_){
         // [eval]
         service: (_|_){
-          // [eval] #DoDeploy._params.manifest.description.service.description: undefined field service:
+          // [eval] #DoDeploy._params.manifest.description.service.description: undefined field: service:
           //     ./in.cue:5:28
         }
       }
@@ -200,7 +200,7 @@
     out: (_|_){
       // [eval]
       labstr: (_|_){
-        // [eval] #RelabelService.out.labstr: undefined field label:
+        // [eval] #RelabelService.out.labstr: undefined field: label:
         //     ./in.cue:50:14
       }
     }
@@ -214,7 +214,7 @@
         kind: (string){ "service" }
       }
       description: (_|_){
-        // [incomplete] #Deployment.service.description: undefined field service:
+        // [incomplete] #Deployment.service.description: undefined field: service:
         //     ./in.cue:5:28
       }
     }
@@ -226,7 +226,7 @@
       kind: (string){ "service" }
     }
     description: (_|_){
-      // [incomplete] #ServiceManifest.description: undefined field service:
+      // [incomplete] #ServiceManifest.description: undefined field: service:
       //     ./in.cue:5:28
     }
   }
diff --git a/cue/testdata/comprehensions/nested.txtar b/cue/testdata/comprehensions/nested.txtar
index 1d17742..9fa8386 100644
--- a/cue/testdata/comprehensions/nested.txtar
+++ b/cue/testdata/comprehensions/nested.txtar
@@ -71,7 +71,7 @@
           }
         }
         selector: (_|_){
-          // [incomplete] service."node-exporter".spec.selector: undefined field metadata:
+          // [incomplete] service."node-exporter".spec.selector: undefined field: metadata:
           //     ./in.cue:47:35
         }
       }
diff --git a/cue/testdata/cycle/compbottomnofinal.txtar b/cue/testdata/cycle/compbottomnofinal.txtar
index 7153f25..da66ae1 100644
--- a/cue/testdata/cycle/compbottomnofinal.txtar
+++ b/cue/testdata/cycle/compbottomnofinal.txtar
@@ -412,7 +412,7 @@
         port: (string){ "" }
       }
       #Y: (_|_){
-        // [incomplete] small.p2.#Y: undefined field port:
+        // [incomplete] small.p2.#Y: undefined field: port:
         //     ./in.cue:50:50
         port: (string){ "" }
       }
@@ -482,7 +482,7 @@
         port: (string){ "" }
       }
       #Y: (_|_){
-        // [incomplete] medium.p5.#Y: undefined field port:
+        // [incomplete] medium.p5.#Y: undefined field: port:
         //     ./in.cue:158:56
         port: (string){ "" }
       }
@@ -496,7 +496,7 @@
       Y: (struct){
       }
       #Y: (_|_){
-        // [incomplete] medium.p6.#Y: undefined field port:
+        // [incomplete] medium.p6.#Y: undefined field: port:
         //     ./in.cue:186:56
         port: (string){ "" }
       }
diff --git a/cue/testdata/definitions/comprehensions.txtar b/cue/testdata/definitions/comprehensions.txtar
index d7582f3..469e8b1 100644
--- a/cue/testdata/definitions/comprehensions.txtar
+++ b/cue/testdata/definitions/comprehensions.txtar
@@ -11,7 +11,7 @@
 }
 -- out/eval --
 Errors:
-issue595.files: undefined field nam:
+issue595.files: undefined field: nam:
     ./in.cue:8:20
 
 Result:
@@ -25,7 +25,7 @@
       }
     }
     files: (_|_){
-      // [eval] issue595.files: undefined field nam:
+      // [eval] issue595.files: undefined field: nam:
       //     ./in.cue:8:20
     }
   }
diff --git a/cue/testdata/disjunctions/incomplete.txtar b/cue/testdata/disjunctions/incomplete.txtar
index 8d7873a..9aa3bb5 100644
--- a/cue/testdata/disjunctions/incomplete.txtar
+++ b/cue/testdata/disjunctions/incomplete.txtar
@@ -64,7 +64,7 @@
       name: (string){ "Hello" }
     }
     y: (_|_){
-      // [incomplete] lookup.y: undefined field a:
+      // [incomplete] lookup.y: undefined field: a:
       //     ./in.cue:13:10
     }
     ok1: (struct){
@@ -84,12 +84,12 @@
     }
     allFail1: (_|_){
       // [incomplete] lookup.allFail1: 1 errors in empty disjunction:
-      // lookup.allFail1: undefined field a:
+      // lookup.allFail1: undefined field: a:
       //     ./in.cue:20:18
     }
     allFail2: (_|_){
       // [incomplete] lookup.allFail2: 1 errors in empty disjunction:
-      // lookup.allFail2: undefined field a:
+      // lookup.allFail2: undefined field: a:
       //     ./in.cue:21:18
     }
   }
diff --git a/cue/testdata/export/006.txtar b/cue/testdata/export/006.txtar
index 4fd285f..f10b382 100644
--- a/cue/testdata/export/006.txtar
+++ b/cue/testdata/export/006.txtar
@@ -33,15 +33,15 @@
   }
   b: (float){ 2.0 }
   c: (_|_){
-    // [incomplete] c: undefined field c:
+    // [incomplete] c: undefined field: c:
     //     ./in.cue:1:38
   }
   d: (_|_){
-    // [incomplete] d: undefined field d:
+    // [incomplete] d: undefined field: d:
     //     ./in.cue:1:46
   }
   e: (_|_){
-    // [incomplete] e: undefined field t:
+    // [incomplete] e: undefined field: t:
     //     ./in.cue:1:57
   }
 }
diff --git a/cue/testdata/export/007.txtar b/cue/testdata/export/007.txtar
index d1dd776..014871e 100644
--- a/cue/testdata/export/007.txtar
+++ b/cue/testdata/export/007.txtar
@@ -31,11 +31,11 @@
 }
 -- out/eval --
 Errors:
-c: undefined field c:
+c: undefined field: c:
     ./in.cue:4:9
-d: undefined field d:
+d: undefined field: d:
     ./in.cue:5:9
-e: undefined field t:
+e: undefined field: t:
     ./in.cue:6:9
 
 Result:
@@ -47,15 +47,15 @@
   }
   b: (float){ 2.0 }
   c: (_|_){
-    // [eval] c: undefined field c:
+    // [eval] c: undefined field: c:
     //     ./in.cue:4:9
   }
   d: (_|_){
-    // [eval] d: undefined field d:
+    // [eval] d: undefined field: d:
     //     ./in.cue:5:9
   }
   e: (_|_){
-    // [eval] e: undefined field t:
+    // [eval] e: undefined field: t:
     //     ./in.cue:6:9
   }
 }
diff --git a/cue/testdata/export/issue854.txtar b/cue/testdata/export/issue854.txtar
index 0d9db2e..c232795 100644
--- a/cue/testdata/export/issue854.txtar
+++ b/cue/testdata/export/issue854.txtar
@@ -26,7 +26,7 @@
 -- out/eval --
 (struct){
   theb: (_|_){
-    // [incomplete] b: undefined field c:
+    // [incomplete] b: undefined field: c:
     //     ./b/b.cue:5:6
   }
 }
diff --git "a/cue/testdata/fulleval/029_Issue_\04394.txtar" "b/cue/testdata/fulleval/029_Issue_\04394.txtar"
index ba23b79..a5ca94f 100644
--- "a/cue/testdata/fulleval/029_Issue_\04394.txtar"
+++ "b/cue/testdata/fulleval/029_Issue_\04394.txtar"
@@ -97,7 +97,7 @@
   }
   select: (struct){
     opt: (_|_){
-      // [incomplete] select.opt: cannot reference optional field opt:
+      // [incomplete] select.opt: cannot reference optional field: opt:
       //     ./in.cue:10:15
     }
     txt: (int){ 2 }
@@ -107,17 +107,17 @@
   }
   index: (struct){
     opt: (_|_){
-      // [incomplete] index.opt: cannot reference optional field opt:
+      // [incomplete] index.opt: cannot reference optional field: opt:
       //     ./in.cue:17:15
     }
     txt: (int){ 2 }
     #def: (_|_){
-      // [incomplete] index.#def: undefined field "#def":
+      // [incomplete] index.#def: undefined field: "#def":
       //     ./in.cue:19:15
     }
     regular: (int){ 4 }
     _hidden: (_|_){
-      // [incomplete] index._hidden: undefined field "_hidden":
+      // [incomplete] index._hidden: undefined field: "_hidden":
       //     ./in.cue:21:15
     }
   }
diff --git a/cue/testdata/fulleval/042_cross-dependent_comprehension.txtar b/cue/testdata/fulleval/042_cross-dependent_comprehension.txtar
index 48c666b..55be401 100644
--- a/cue/testdata/fulleval/042_cross-dependent_comprehension.txtar
+++ b/cue/testdata/fulleval/042_cross-dependent_comprehension.txtar
@@ -41,7 +41,7 @@
 -- out/eval --
 (struct){
   #a: (_|_){
-    // [incomplete] #a: incomplete bool value 'bool'
+    // [incomplete] #a: incomplete bool: bool
     b: (bool){ bool }
   }
   x: (#struct){
diff --git a/cue/testdata/fulleval/050_json_Marshaling_detects_incomplete.txtar b/cue/testdata/fulleval/050_json_Marshaling_detects_incomplete.txtar
index 1856363..f8a8193 100644
--- a/cue/testdata/fulleval/050_json_Marshaling_detects_incomplete.txtar
+++ b/cue/testdata/fulleval/050_json_Marshaling_detects_incomplete.txtar
@@ -30,12 +30,12 @@
   foo: (struct){
     a: (int){ 3 }
     b: (_|_){
-      // [incomplete] foo.b: undefined field c:
+      // [incomplete] foo.b: undefined field: c:
       //     ./in.cue:5:20
     }
   }
   b: (_|_){
-    // [incomplete] foo.b: undefined field c:
+    // [incomplete] foo.b: undefined field: c:
     //     ./in.cue:5:20
   }
 }
diff --git a/cue/testdata/fulleval/055_issue318.txtar b/cue/testdata/fulleval/055_issue318.txtar
index 7b13832..18e2609 100644
--- a/cue/testdata/fulleval/055_issue318.txtar
+++ b/cue/testdata/fulleval/055_issue318.txtar
@@ -43,13 +43,13 @@
 }
 -- out/eval --
 Errors:
-#T.out1: invalid interpolation: undefined field y:
+#T.out1: invalid interpolation: undefined field: y:
     ./in.cue:3:8
     ./in.cue:3:24
-#T.out2: invalid interpolation: undefined field y:
+#T.out2: invalid interpolation: undefined field: y:
     ./in.cue:4:8
     ./in.cue:4:15
-#T.vy: undefined field y:
+#T.vy: undefined field: y:
     ./in.cue:6:12
 
 Result:
@@ -61,18 +61,18 @@
       x: (string){ string }
     }
     out1: (_|_){
-      // [eval] #T.out1: invalid interpolation: undefined field y:
+      // [eval] #T.out1: invalid interpolation: undefined field: y:
       //     ./in.cue:3:8
       //     ./in.cue:3:24
     }
     out2: (_|_){
-      // [eval] #T.out2: invalid interpolation: undefined field y:
+      // [eval] #T.out2: invalid interpolation: undefined field: y:
       //     ./in.cue:4:8
       //     ./in.cue:4:15
     }
     vx: (string){ string }
     vy: (_|_){
-      // [eval] #T.vy: undefined field y:
+      // [eval] #T.vy: undefined field: y:
       //     ./in.cue:6:12
     }
   }
diff --git a/cue/testdata/interpolation/incomplete.txtar b/cue/testdata/interpolation/incomplete.txtar
index 8d52908..a9f6846 100644
--- a/cue/testdata/interpolation/incomplete.txtar
+++ b/cue/testdata/interpolation/incomplete.txtar
@@ -25,7 +25,7 @@
     }
   }
   out: (_|_){
-    // [incomplete] out: invalid interpolation: undefined field #d:
+    // [incomplete] out: invalid interpolation: undefined field: #d:
     //     ./in.cue:8:6
     //     ./in.cue:13:21
   }
diff --git a/cue/testdata/references/errors.txtar b/cue/testdata/references/errors.txtar
index 4e33acf..e7f185d 100644
--- a/cue/testdata/references/errors.txtar
+++ b/cue/testdata/references/errors.txtar
@@ -32,9 +32,9 @@
 }
 -- out/eval --
 Errors:
-missingFieldClosed.r: undefined field b:
+missingFieldClosed.r: undefined field: b:
     ./references.cue:9:11
-missingFieldNestedClosed.r: undefined field d:
+missingFieldNestedClosed.r: undefined field: d:
     ./references.cue:21:11
 
 Result:
@@ -44,7 +44,7 @@
     a: (struct){
     }
     r: (_|_){
-      // [incomplete] missingField.r: undefined field b:
+      // [incomplete] missingField.r: undefined field: b:
       //     ./references.cue:4:10
     }
   }
@@ -53,7 +53,7 @@
     #a: (#struct){
     }
     r: (_|_){
-      // [eval] missingFieldClosed.r: undefined field b:
+      // [eval] missingFieldClosed.r: undefined field: b:
       //     ./references.cue:9:11
     }
   }
@@ -61,7 +61,7 @@
     a: (struct){
     }
     r: (_|_){
-      // [incomplete] missingFieldNested.r: undefined field b:
+      // [incomplete] missingFieldNested.r: undefined field: b:
       //     ./references.cue:15:10
     }
   }
@@ -70,7 +70,7 @@
     #a: (#struct){
     }
     r: (_|_){
-      // [eval] missingFieldNestedClosed.r: undefined field d:
+      // [eval] missingFieldNestedClosed.r: undefined field: d:
       //     ./references.cue:21:11
     }
   }
@@ -78,12 +78,12 @@
     a: (struct){
     }
     r1: (_|_){
-      // [incomplete] missingFieldNestedInInterpolation.r1: invalid interpolation: undefined field b:
+      // [incomplete] missingFieldNestedInInterpolation.r1: invalid interpolation: undefined field: b:
       //     ./references.cue:27:9
       //     ./references.cue:27:14
     }
     r2: (_|_){
-      // [incomplete] missingFieldNestedInInterpolation.r2: invalid interpolation: undefined field d:
+      // [incomplete] missingFieldNestedInInterpolation.r2: invalid interpolation: undefined field: d:
       //     ./references.cue:30:9
       //     ./references.cue:30:14
     }
diff --git a/cue/testdata/references/incomplete.txtar b/cue/testdata/references/incomplete.txtar
index b316a99..8efe503 100644
--- a/cue/testdata/references/incomplete.txtar
+++ b/cue/testdata/references/incomplete.txtar
@@ -43,11 +43,11 @@
     a: (struct){
     }
     b: (_|_){
-      // [incomplete] comprehensions.b: undefined field b:
+      // [incomplete] comprehensions.b: undefined field: b:
       //     ./in.cue:4:14
     }
     c: (_|_){
-      // [incomplete] comprehensions.c: undefined field b:
+      // [incomplete] comprehensions.c: undefined field: b:
       //     ./in.cue:8:20
     }
   }
@@ -55,7 +55,7 @@
     a: (struct){
     }
     b: (_|_){
-      // [incomplete] openStruct.b: undefined field c:
+      // [incomplete] openStruct.b: undefined field: c:
       //     ./in.cue:14:10
     }
   }
diff --git a/cue/testdata/references/let.txtar b/cue/testdata/references/let.txtar
index c293cfa..dc4eaaa 100644
--- a/cue/testdata/references/let.txtar
+++ b/cue/testdata/references/let.txtar
@@ -273,12 +273,12 @@
     bar: (struct){
       min: (int){ 1 }
       max: (_|_){
-        // [incomplete] incompleteLet.bar.max: undefined field max:
+        // [incomplete] incompleteLet.bar.max: undefined field: max:
         //     ./in.cue:54:23
       }
     }
     x: (_|_){
-      // [incomplete] incompleteLet.x: undefined field max:
+      // [incomplete] incompleteLet.x: undefined field: max:
       //     ./in.cue:61:17
     }
   }
diff --git a/cue/testdata/references/optional.txtar b/cue/testdata/references/optional.txtar
index 804b07a..7297afb 100644
--- a/cue/testdata/references/optional.txtar
+++ b/cue/testdata/references/optional.txtar
@@ -16,7 +16,7 @@
 (struct){
   a: (struct){
     b: (_|_){
-      // [incomplete] a.b: cannot reference optional field foo:
+      // [incomplete] a.b: cannot reference optional field: foo:
       //     ./in.cue:4:8
     }
   }
diff --git a/cue/testdata/resolve/010_optional_field_resolves_to_incomplete.txtar b/cue/testdata/resolve/010_optional_field_resolves_to_incomplete.txtar
index d69371d..1d1d30e 100644
--- a/cue/testdata/resolve/010_optional_field_resolves_to_incomplete.txtar
+++ b/cue/testdata/resolve/010_optional_field_resolves_to_incomplete.txtar
@@ -29,11 +29,11 @@
 (struct){
   r: (struct){
     b: (_|_){
-      // [incomplete] r.b: cannot reference optional field a:
+      // [incomplete] r.b: cannot reference optional field: a:
       //     ./in.cue:3:6
     }
     c: (_|_){
-      // [incomplete] r.c: cannot reference optional field a:
+      // [incomplete] r.c: cannot reference optional field: a:
       //     ./in.cue:4:8
     }
   }
diff --git a/cue/types_test.go b/cue/types_test.go
index 7208647..c792e27 100644
--- a/cue/types_test.go
+++ b/cue/types_test.go
@@ -2667,7 +2667,7 @@
 	}, {
 		value: `(a.b)
 			a: {}`,
-		out: `_|_(undefined field b)`,
+		out: `_|_(undefined field: b)`,
 	}, {
 		value: `true`,
 		out:   `true`,
diff --git a/internal/core/adt/context.go b/internal/core/adt/context.go
index d5796f3..d738455 100644
--- a/internal/core/adt/context.go
+++ b/internal/core/adt/context.go
@@ -818,9 +818,9 @@
 		} else {
 			if code != 0 && x.IsOptional(l) {
 				c.addErrf(code, pos,
-					"cannot reference optional field %s", label)
+					"cannot reference optional field: %s", label)
 			} else {
-				c.addErrf(code, pos, "undefined field %s", label)
+				c.addErrf(code, pos, "undefined field: %s", label)
 			}
 		}
 	}
@@ -836,7 +836,7 @@
 		return
 	}
 	if !IsConcrete(v) && v.Kind()&k != 0 {
-		c.addErrf(IncompleteError, pos(v), "incomplete %s value '%s'", k, v)
+		c.addErrf(IncompleteError, pos(v), "incomplete %s: %s", k, v)
 	} else {
 		c.AddErrf("cannot use %s (type %s) as type %s", v, v.Kind(), k)
 	}
@@ -852,7 +852,7 @@
 	}
 	if !IsConcrete(v) && v.Kind()&k != 0 {
 		c.addErrf(IncompleteError, pos(v),
-			"incomplete %s value '%s' in as", k, v, as)
+			"incomplete %s in %v: %s", k, as, v)
 	} else {
 		c.AddErrf("cannot use %s (type %s) as type %s in %v", v, v.Kind(), k, as)
 	}
diff --git a/internal/core/export/export_test.go b/internal/core/export/export_test.go
index 3486ccf..0c4be35 100644
--- a/internal/core/export/export_test.go
+++ b/internal/core/export/export_test.go
@@ -136,7 +136,7 @@
 
 			return n, nil
 		},
-		out: `<[l2// x: undefined field #Terminal] _|_>`,
+		out: `<[l2// x: undefined field: #Terminal] _|_>`,
 		p:   export.Final,
 	}, {
 		in: func(r *adt.OpContext) (adt.Expr, error) {
diff --git a/internal/core/export/testdata/let.txtar b/internal/core/export/testdata/let.txtar
index 56658f6..65b1e39c 100644
--- a/internal/core/export/testdata/let.txtar
+++ b/internal/core/export/testdata/let.txtar
@@ -129,7 +129,7 @@
 			name: "two"
 		}
 	}]
-	files: _|_ // invalid interpolation: invalid interpolation: files: undefined field name (and 3 more errors)
+	files: _|_ // invalid interpolation: invalid interpolation: files: undefined field: name (and 3 more errors)
 	y:     "foo"
 }
 == All