cmd/cue/cmd: update "get go" to use new-style definitions

Also updates K8s tutorial (which uses Go) and basics
tutorial. This CL should give a good idea how new-style
definitions will look and feel.

For Go:
- An exported identifier 'X' is mapped to #X
- An unexported identifier 'x' is mapped to _#x.
- Derived non-Go values are mapped to #<lowercase>X

Change-Id: I0454ef9785adee78847987bbd027c299324951d6
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/5981
Reviewed-by: CUE cueckoo <cueckoo@gmail.com>
Reviewed-by: Marcel van Lohuizen <mpvl@google.com>
diff --git a/cmd/cue/cmd/get_go.go b/cmd/cue/cmd/get_go.go
index be8ea78..7891980 100644
--- a/cmd/cue/cmd/get_go.go
+++ b/cmd/cue/cmd/get_go.go
@@ -30,6 +30,7 @@
 	"sort"
 	"strconv"
 	"strings"
+	"unicode"
 
 	"github.com/spf13/cobra"
 	"golang.org/x/tools/go/packages"
@@ -90,7 +91,7 @@
 
 	  translates to the CUE struct
 
-		 MyStruct: Common & {
+		 #MyStruct: Common & {
 			 Field: string
 		 }
 
@@ -139,7 +140,7 @@
 	package foo
 
 	// IP4String defines a valid IP4 address.
-	IP4String: =~#"^\#(byte)\.\#(byte)\.\#(byte)\.\#(byte)$"#
+	#IP4String: =~#"^\#(byte)\.\#(byte)\.\#(byte)\.\#(byte)$"#
 
 	// byte defines string allowing integer values of 0-255.
 	byte = #"([01]?\d?\d|2[0-4]\d|25[0-5])"#
@@ -178,7 +179,7 @@
 
 	package foo
 
-	Switch: int // enumSwitch
+	#Switch: int // enumSwitch
 
 	enumSwitch: Off | On
 
@@ -195,7 +196,7 @@
 
 	// limit the valid values for Switch to those existing as constants with
 	// the same type.
-	Switch: enumSwitch
+	#Switch: enumSwitch
 
 This tells CUE that only the values enumerated by enumSwitch are valid
 values for Switch. Note that there are now two definitions of Switch.
@@ -446,7 +447,7 @@
 		}
 		sort.Strings(pkgs)
 
-		pkg := &cueast.Package{Name: e.ident(p.Name)}
+		pkg := &cueast.Package{Name: e.ident(p.Name, false)}
 		addDoc(f.Doc, pkg)
 
 		f := &cueast.File{Decls: []cueast.Decl{
@@ -464,7 +465,7 @@
 				info := e.pkgNames[s]
 				spec := cueast.NewImport(nil, info.id)
 				if p.Imports[s].Name != info.name {
-					spec.Name = e.ident(info.name)
+					spec.Name = e.ident(info.name, false)
 				}
 				imports.Specs = append(imports.Specs, spec)
 			}
@@ -562,14 +563,20 @@
 	return cueast.NewString(name)
 }
 
-func (e *extractor) ident(name string) *cueast.Ident {
+func (e *extractor) ident(name string, isDef bool) *cueast.Ident {
+	if isDef {
+		r := []rune(name)[0]
+		name = "#" + name
+		if !unicode.Is(unicode.Lu, r) {
+			name = "_" + name
+		}
+	}
 	return cueast.NewIdent(name)
 }
 
 func (e *extractor) def(doc *ast.CommentGroup, name string, value cueast.Expr, newline bool) *cueast.Field {
 	f := &cueast.Field{
-		Label: e.ident(name), // Go identifiers are always valid CUE identifiers.
-		Token: cuetoken.ISA,
+		Label: e.ident(name, true), // Go identifiers are always valid CUE identifiers.
 		Value: value,
 	}
 	addDoc(doc, f)
@@ -619,17 +626,24 @@
 			}
 
 			if len(enums) > 0 {
-				enumName := "enum" + name
-				a[len(a)-1].AddComment(internal.NewComment(false, enumName))
+				enumName := "#enum" + name
+				cueast.AddComment(a[len(a)-1], internal.NewComment(false, enumName))
 
-				var x cueast.Expr = e.ident(enums[0])
+				// Constants are mapped as definitions.
+				var x cueast.Expr = e.ident(enums[0], true)
 				cueast.SetRelPos(x, cuetoken.Newline)
 				for _, v := range enums[1:] {
-					y := e.ident(v)
+					y := e.ident(v, true)
 					cueast.SetRelPos(y, cuetoken.Newline)
 					x = cueast.NewBinExpr(cuetoken.OR, x, y)
 				}
-				a = append(a, e.def(nil, enumName, x, true))
+				// a = append(a, e.def(nil, enumName, x, true))
+				f := &cueast.Field{
+					Label: cueast.NewIdent(enumName),
+					Value: x,
+				}
+				a = append(a, f)
+				cueast.SetRelPos(f, cuetoken.NewSection)
 			}
 		}
 
@@ -703,7 +717,7 @@
 		if types.Implements(typ, i) || types.Implements(ptr, i) {
 			t := shortTypeName(typ)
 			e.logf("    %v implements %s; setting type to _", t, x)
-			return e.ident("_")
+			return e.ident("_", false)
 		}
 	}
 	for _, x := range toString {
@@ -711,7 +725,7 @@
 		if types.Implements(typ, i) || types.Implements(ptr, i) {
 			t := shortTypeName(typ)
 			e.logf("    %v implements %s; setting type to string", t, x)
-			return e.ident("string")
+			return e.ident("string", false)
 		}
 	}
 	return nil
@@ -862,11 +876,11 @@
 	typ := e.makeType(expr)
 	var label cueast.Label
 	if kind == cuetoken.ISA {
-		label = e.ident(name)
+		label = e.ident(name, true)
 	} else {
 		label = e.strLabel(name)
 	}
-	f = &cueast.Field{Label: label, Token: kind, Value: typ}
+	f = &cueast.Field{Label: label, Value: typ}
 	if doc := makeDoc(doc, newline); doc != nil {
 		f.AddComment(doc)
 		cueast.SetRelPos(doc, cuetoken.NewSection)
@@ -884,7 +898,7 @@
 	if x, ok := expr.(*types.Named); ok {
 		obj := x.Obj()
 		if obj.Pkg() == nil {
-			return e.ident("_")
+			return e.ident("_", false)
 		}
 		// Check for builtin packages.
 		// TODO: replace these literal types with a reference to the fixed
@@ -892,11 +906,12 @@
 		switch obj.Type().String() {
 		case "time.Time":
 			e.usedInFile["time"] = true
-			ref := e.ident(e.pkgNames[obj.Pkg().Path()].name)
+			ref := e.ident(e.pkgNames[obj.Pkg().Path()].name, false)
+			ref.Node = cueast.NewImport(nil, "time")
 			return cueast.NewSel(ref, obj.Name())
 
 		case "math/big.Int":
-			return e.ident("int")
+			return e.ident("int", false)
 
 		default:
 			if !strings.ContainsAny(obj.Pkg().Path(), ".") {
@@ -908,10 +923,16 @@
 				}
 			}
 		}
-		result = e.ident(obj.Name())
+
+		result = e.ident(obj.Name(), true)
 		if pkg := obj.Pkg(); pkg != nil {
 			if info := e.pkgNames[pkg.Path()]; info.name != "" {
-				result = cueast.NewSel(e.ident(info.name), obj.Name())
+				p := e.ident(info.name, false)
+				// TODO: set package name et. at.
+				p.Node = cueast.NewImport(nil, pkg.Path())
+				// makeType is always called to describe a type, so whatever
+				// this is referring to, it must be a definition.
+				result = cueast.NewSel(p, "#"+obj.Name())
 				e.usedPkg(pkg.Path())
 			}
 		}
@@ -921,7 +942,7 @@
 	switch x := expr.(type) {
 	case *types.Pointer:
 		return &cueast.BinaryExpr{
-			X:  e.ident("null"),
+			X:  e.ident("null", false),
 			Op: cuetoken.OR,
 			Y:  e.makeType(x.Elem()),
 		}
@@ -938,7 +959,7 @@
 		// TODO: should this be x.Elem().Underlying().String()? One could
 		// argue either way.
 		if x.Elem().String() == "byte" {
-			return e.ident("bytes")
+			return e.ident("bytes", false)
 		}
 		return cueast.NewList(&cueast.Ellipsis{Type: e.makeType(x.Elem())})
 
@@ -949,7 +970,7 @@
 			//     fmt.Fprint(e.w, fmt.Sprintf("=~ '^\C{%d}$'", x.Len())),
 			// but regexp does not support that.
 			// But translate to bytes, instead of [...byte] to be consistent.
-			return e.ident("bytes")
+			return e.ident("bytes", false)
 		} else {
 			return &cueast.BinaryExpr{
 				X: &cueast.BasicLit{
@@ -967,7 +988,7 @@
 		}
 
 		f := &cueast.Field{
-			Label: cueast.NewList(e.ident("string")),
+			Label: cueast.NewList(e.ident("string", false)),
 			Value: e.makeType(x.Elem()),
 		}
 		cueast.SetRelPos(f, cuetoken.Blank)
@@ -978,10 +999,10 @@
 		}
 
 	case *types.Basic:
-		return e.ident(x.String())
+		return e.ident(x.String(), false)
 
 	case *types.Interface:
-		return e.ident("_")
+		return e.ident("_", false)
 
 	default:
 		// record error
@@ -1062,13 +1083,17 @@
 		}
 		typeName = strings.Replace(typeName, e.pkg.Types.Path()+".", "", -1)
 
+		cueStr := strings.Replace(cueType, "_#", "", -1)
+		cueStr = strings.Replace(cueStr, "#", "", -1)
+
 		// TODO: remove fields in @go attr that are the same as printed?
-		if name != f.Name() || typeName != cueType {
+		if name != f.Name() || typeName != cueStr {
 			buf := &strings.Builder{}
 			if name != f.Name() {
 				buf.WriteString(f.Name())
 			}
-			if typeName != cueType {
+
+			if typeName != cueStr {
 				if strings.ContainsAny(typeName, `#"',()=`) {
 					typeName = strconv.Quote(typeName)
 				}
diff --git a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
index abf6b27..3e1cdd5 100644
--- a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
+++ b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg1/file1_go_gen.cue
@@ -11,69 +11,69 @@
 )
 
 // Foozer foozes a jaman.
-Foozer :: {
+#Foozer: {
 	Int:    int
 	String: string
 
-	Inline
-	"NoInline":    NoInline
-	"CustomJSON":  CustomJSON
-	"CustomYAML"?: null | CustomYAML @go(,*CustomYAML)
-	AnyJSON:       _                 @go(,json.Marshaler)
-	AnyText:       string            @go(,encoding.TextMarshaler)
-	bar?:          int               @go(Bar)
+	#Inline
+	NoInline:    #NoInline
+	CustomJSON:  #CustomJSON
+	CustomYAML?: null | #CustomYAML @go(,*CustomYAML)
+	AnyJSON:     _                  @go(,json.Marshaler)
+	AnyText:     string             @go(,encoding.TextMarshaler)
+	bar?:        int                @go(Bar)
 
 	// Time is mapped to CUE's internal type.
 	Time:   time.Time
-	Barzer: p2.Barzer
-	Map: {[string]: null | CustomJSON} @go(,map[string]*CustomJSON)
+	Barzer: p2.#Barzer
+	Map: {[string]: null | #CustomJSON} @go(,map[string]*CustomJSON)
 	Slice1: [...int] @go(,[]int)
 	Slice2: [...] @go(,[]interface{})
 	Slice3?: null | [...] @go(,*[]json.Unmarshaler)
 	Array1:  5 * [int]    @go(,[5]int)
 	Array2:  5 * [_]      @go(,[5]interface{})
 	Array3?: null | 5*[_] @go(,*[5]json.Marshaler)
-	Intf:    Interface    @protobuf(2,varint,name=intf)
+	Intf:    #Interface   @protobuf(2,varint,name=intf)
 	Intf2:   _            @go(,interface{})
 	Intf3: {
-		"Interface": Interface
+		Interface: #Interface
 	} @go(,struct{Interface})
 	Intf4: _ @go(,"interface{Foo()}")
 
 	// Even though this struct as a type implements MarshalJSON, it is known
 	// that it is really only implemented by the embedded field.
 	Embed: {
-		"CustomJSON": CustomJSON
+		CustomJSON: #CustomJSON
 	} @go(,struct{CustomJSON})
 }
 
 // Level gives an indication of the extent of stuff.
-Level :: int // enumLevel
+#Level: int // #enumLevel
 
-enumLevel ::
-	Unknown |
-	Low |
-	Medium |
-	High
+#enumLevel:
+	#Unknown |
+	#Low |
+	#Medium |
+	#High
 
 // Block comment.
 //  Indented.
 //
 // Empty line before.
-Unknown :: Level & 0
-Low ::     Level & 1
+#Unknown: #Level & 0
+#Low:     #Level & 1
 
 // Medium is neither High nor Low
-Medium :: Level & 2
-High ::   Level & 3
+#Medium: #Level & 2
+#High:   #Level & 3
 
-CustomJSON :: _
+#CustomJSON: _
 
-CustomYAML :: {
+#CustomYAML: {
 }
 
-Inline :: Kind: string
+#Inline: Kind: string
 
-NoInline :: Kind: string
+#NoInline: Kind: string
 
-Interface :: _
+#Interface: _
diff --git a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg2/pkg2_go_gen.cue b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg2/pkg2_go_gen.cue
index 79c99f6..bf05261 100644
--- a/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg2/pkg2_go_gen.cue
+++ b/cmd/cue/cmd/testdata/pkg/cuelang.org/go/cmd/cue/cmd/testdata/code/go/pkg2/pkg2_go_gen.cue
@@ -8,7 +8,7 @@
 import t "time"
 
 // A Barzer barzes.
-Barzer :: {
+#Barzer: {
 	a:     int @go(A) @protobuf(2,varint,)
 	T:     t.Time
 	B?:    null | int    @go(,*big.Int)
@@ -20,8 +20,8 @@
 	Err:   _    @go(,error)
 }
 
-Perm :: 0o755
+#Perm: 0o755
 
-Few :: 3
+#Few: 3
 
-Couple :: int & 2
+#Couple: int & 2
diff --git a/doc/tutorial/basics/0_intro/43_schema.txt b/doc/tutorial/basics/0_intro/43_schema.txt
index 0293122..1d3ac88 100644
--- a/doc/tutorial/basics/0_intro/43_schema.txt
+++ b/doc/tutorial/basics/0_intro/43_schema.txt
@@ -6,8 +6,9 @@
 description = ""
 
 -- text.md --
-In CUE, schema are typically written as Definitions,
-using a `::` instead of `:`.
+In CUE, schemas are typically written as Definitions.
+A definition is a field which identifier starts with
+a `#` or `_#`.
 This tells CUE that they are to be used for validation and should
 not be output as data; it is okay for them to remain unspecified.
 
@@ -16,14 +17,14 @@
 Including a `...` in struct keeps it open.
 
 -- schema.cue --
-Conn :: {
+#Conn: {
     address:  string
     port:     int
     protocol: string
     // ...    // uncomment this to allow any field
 }
 
-lossy: Conn & {
+lossy: #Conn & {
     address:  "1.2.3.4"
     port:     8888
     protocol: "udp"
diff --git a/doc/tutorial/basics/0_intro/47_validation.txt b/doc/tutorial/basics/0_intro/47_validation.txt
index f2a89a2..b7cbeb0 100644
--- a/doc/tutorial/basics/0_intro/47_validation.txt
+++ b/doc/tutorial/basics/0_intro/47_validation.txt
@@ -10,11 +10,11 @@
 They can be applied to CUE data, or directly to YAML or JSON.
 
 -- schema.cue --
-Language :: {
+#Language: {
 	tag:  string
 	name: =~"^\\p{Lu}" // Must start with an uppercase letter.
 }
-languages: [...Language]
+languages: [...#Language]
 
 -- data.yaml --
 languages:
diff --git a/doc/tutorial/basics/2_types/55_defs.txt b/doc/tutorial/basics/2_types/55_defs.txt
index 6817ba5..45ef02d 100644
--- a/doc/tutorial/basics/2_types/55_defs.txt
+++ b/doc/tutorial/basics/2_types/55_defs.txt
@@ -6,7 +6,8 @@
 description = ""
 
 -- text.md --
-A definition, denoted with `::` instead of `:`, defines values that
+A definition, indicated by an identifier starting with `#` or `_#`,
+defines values that
 are not output when converting a configuration to a concrete value.
 They are used to define schemata against which concrete values can
 be validated.
@@ -14,16 +15,16 @@
 Structs defined by definitions are implicitly closed.
 
 -- defs.cue --
-msg: "Hello \(Name)!"
+msg: "Hello \(#Name)!"
 
-Name :: "world"
+#Name: "world"
 
-A :: {
+#A: {
     field: int
 }
 
-a:   A & { field: 3 }
-err: A & { feild: 3 }
+a:   #A & { field: 3 }
+err: #A & { feild: 3 }
 
 -- expect-stdout-cue --
 msg: "Hello world!"
diff --git a/doc/tutorial/basics/2_types/56_optional.txt b/doc/tutorial/basics/2_types/56_optional.txt
index bc5f342..78c4448 100644
--- a/doc/tutorial/basics/2_types/56_optional.txt
+++ b/doc/tutorial/basics/2_types/56_optional.txt
@@ -19,12 +19,12 @@
 This just means that field may not be specified.
 
 -- structs.cue --
-a :: {
+#a: {
     foo?: int
     bar?: string
     baz?: string
 }
-b: a & {
+b: #a & {
     foo:  3
     baz?: 2  // baz?: _|_
 }
diff --git a/doc/tutorial/basics/2_types/60_disjunctions.txt b/doc/tutorial/basics/2_types/60_disjunctions.txt
index 2c1b1f9..47a861c 100644
--- a/doc/tutorial/basics/2_types/60_disjunctions.txt
+++ b/doc/tutorial/basics/2_types/60_disjunctions.txt
@@ -14,20 +14,20 @@
 to define anything else than these two values.
 
 -- disjunctions.cue --
-Conn :: {
+#Conn: {
     address:  string
     port:     int
     protocol: "tcp" | "udp"
 }
 
-lossy: Conn & {
+lossy: #Conn & {
     address:  "1.2.3.4"
     port:     8888
     protocol: "udp"
 }
 
 -- expect-stdout-cue --
-Conn :: {
+#Conn: {
     address:  string
     port:     int
     protocol: "tcp" | "udp"
diff --git a/doc/tutorial/basics/2_types/70_bounds.txt b/doc/tutorial/basics/2_types/70_bounds.txt
index e179026..b3db502 100644
--- a/doc/tutorial/basics/2_types/70_bounds.txt
+++ b/doc/tutorial/basics/2_types/70_bounds.txt
@@ -15,22 +15,22 @@
 whereas `<0` allows all negative numbers (int or float).
 
 -- bounds.cue --
-rn :: >=3 & <8        // type int | float
-ri :: >=3 & <8 & int  // type int
-rf :: >=3 & <=8.0     // type float
-rs :: >="a" & <"mo"
+#rn: >=3 & <8        // type int | float
+#ri: >=3 & <8 & int  // type int
+#rf: >=3 & <=8.0     // type float
+#rs: >="a" & <"mo"
 
-a: rn & 3.5
-b: ri & 3.5
-c: rf & 3
-d: rs & "ma"
-e: rs & "mu"
+a: #rn & 3.5
+b: #ri & 3.5
+c: #rf & 3
+d: #rs & "ma"
+e: #rs & "mu"
 
-r1: rn & >=5 & <10
+r1: #rn & >=5 & <10
 
 -- expect-stdout-cue --
 a:  3.5
-b:  _|_ // conflicting values ri and 3.5 (mismatched types int and float)
+b:  _|_ // conflicting values #ri and 3.5 (mismatched types int and float)
 c:  3
 d:  "ma"
 e:  _|_ // invalid value "mu" (out of bound <"mo")
diff --git a/doc/tutorial/basics/2_types/75_bounddef.txt b/doc/tutorial/basics/2_types/75_bounddef.txt
index 9869fea..a08d228 100644
--- a/doc/tutorial/basics/2_types/75_bounddef.txt
+++ b/doc/tutorial/basics/2_types/75_bounddef.txt
@@ -29,13 +29,13 @@
 ```
 
 -- bound.cue --
-positive :: uint
-byte ::     uint8
-word ::     int32
+#positive: uint
+#byte:     uint8
+#word:     int32
 
-a: positive & -1
-b: byte & 128
-c: word & 2_000_000_000
+a: #positive & -1
+b: #byte & 128
+c: #word & 2_000_000_000
 
 -- expect-stdout-cue --
 a: _|_ // invalid value -1 (out of bound int & >=0)
diff --git a/doc/tutorial/basics/4_references/50_emit.txt b/doc/tutorial/basics/4_references/50_emit.txt
index c64887b..4c26a61 100644
--- a/doc/tutorial/basics/4_references/50_emit.txt
+++ b/doc/tutorial/basics/4_references/50_emit.txt
@@ -14,9 +14,9 @@
 of defining structs light.
 
 -- emit.cue --
-"Hello \(who)!"
+"Hello \(#who)!"
 
-who :: "world"
+#who: "world"
 
 -- expect-stdout-cue --
 "Hello world!"
diff --git a/doc/tutorial/basics/4_references/99_hidden.txt b/doc/tutorial/basics/4_references/99_hidden.txt
index aabdc29..f9c3d01 100644
--- a/doc/tutorial/basics/4_references/99_hidden.txt
+++ b/doc/tutorial/basics/4_references/99_hidden.txt
@@ -4,7 +4,6 @@
 -- frontmatter.toml --
 title = "Hidden Fields"
 description = ""
-draft = true
 
 -- text.md --
 A non-quoted field name that starts with an underscore (`_`) is not
@@ -19,6 +18,7 @@
 "_foo": 2
 _foo:   3
 foo:    4
+_#foo:  5
 
 -- expect-stdout-cue --
 {
diff --git a/doc/tutorial/basics/6_expressions/20_interpolation.txt b/doc/tutorial/basics/6_expressions/20_interpolation.txt
index 8c13cce..d0758d3 100644
--- a/doc/tutorial/basics/6_expressions/20_interpolation.txt
+++ b/doc/tutorial/basics/6_expressions/20_interpolation.txt
@@ -12,10 +12,10 @@
 Interpolation may also be used in multiline string and byte literals.
 
 -- interpolation.cue --
-"You are \( cost - budget ) dollars over budget!"
+"You are \( #cost - #budget ) dollars over budget!"
 
-cost ::   102
-budget :: 88
+#cost:   102
+#budget: 88
 
 -- expect-stdout-cue --
 "You are 14 dollars over budget!"
diff --git a/doc/tutorial/basics/6_expressions/40_listcomp.txt b/doc/tutorial/basics/6_expressions/40_listcomp.txt
index dbc5132..526a29a 100644
--- a/doc/tutorial/basics/6_expressions/40_listcomp.txt
+++ b/doc/tutorial/basics/6_expressions/40_listcomp.txt
@@ -11,9 +11,9 @@
 The example shows the use of `for` loops and `if` guards.
 
 -- listcomp.cue --
-[ for x in items if x rem 2 == 0 { x*x } ]
+[ for x in #items if x rem 2 == 0 { x*x } ]
 
-items :: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
+#items: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
 
 -- expect-stdout-cue --
 [4, 16, 36, 64]
diff --git a/doc/tutorial/basics/6_expressions/50_fieldcomp.txt b/doc/tutorial/basics/6_expressions/50_fieldcomp.txt
index 6470cb9..5599ec8 100644
--- a/doc/tutorial/basics/6_expressions/50_fieldcomp.txt
+++ b/doc/tutorial/basics/6_expressions/50_fieldcomp.txt
@@ -14,9 +14,9 @@
 -- fieldcomp.cue --
 import "strings"
 
-a:: [ "Barcelona", "Shanghai", "Munich" ]
+#a: [ "Barcelona", "Shanghai", "Munich" ]
 
-for k, v in a {
+for k, v in #a {
     "\( strings.ToLower(v) )": {
         pos:     k + 1
         name:    v
diff --git a/doc/tutorial/kubernetes/README.md b/doc/tutorial/kubernetes/README.md
index 28178fa..660e95f 100644
--- a/doc/tutorial/kubernetes/README.md
+++ b/doc/tutorial/kubernetes/README.md
@@ -356,25 +356,25 @@
 <!--
 ```
 $ cue add */kube.cue -p kube --list <<EOF
-Component :: "{{.DisplayPath}}"
+#Component: "{{.DisplayPath}}"
 EOF
 ```
 -->
 
 ```
 # set the component label to our new top-level field
-$ sed -i.bak 's/component:.*string/component: Component/' kube.cue && rm kube.cue.bak
+$ sed -i.bak 's/component:.*string/component: #Component/' kube.cue && rm kube.cue.bak
 
 # add the new top-level field to our previous template definitions
 $ cat <<EOF >> kube.cue
 
-Component :: string
+#Component: string
 EOF
 
 # add a file with the component label to each directory
 $ ls -d */ | sed 's/.$//' | xargs -I DIR sh -c 'cd DIR; echo "package kube
 
-Component :: \"DIR\"
+#Component: \"DIR\"
 " > kube.cue; cd ..'
 
 # format the files
@@ -429,40 +429,40 @@
 daemonSet: [ID=_]: _spec & {
     apiVersion: "apps/v1"
     kind:       "DaemonSet"
-    Name ::     ID
+    _name:      ID
 }
 
 statefulSet: [ID=_]: _spec & {
     apiVersion: "apps/v1"
     kind:       "StatefulSet"
-    Name ::     ID
+    _name:      ID
 }
 
 deployment: [ID=_]: _spec & {
     apiVersion: "apps/v1"
     kind:       "Deployment"
-    Name ::     ID
+    _name:      ID
     spec: replicas: *1 | int
 }
 
 configMap: [ID=_]: {
     metadata: name: ID
-    metadata: labels: component: Component
+    metadata: labels: component: #Component
 }
 
 _spec: {
-    Name :: string
+    _name: string
 
-    metadata: name: Name
-    metadata: labels: component: Component
+    metadata: name: _name
+    metadata: labels: component: #Component
     spec: selector: {}
     spec: template: {
         metadata: labels: {
-            app:       Name
-            component: Component
+            app:       _name
+            component: #Component
             domain:    "prod"
         }
-        spec: containers: [{name: Name}]
+        spec: containers: [{name: _name}]
     }
 }
 EOF
@@ -470,7 +470,7 @@
 ```
 
 The common configuration has been factored out into `_spec`.
-We introduced `Name` to aid both specifying and referring
+We introduced `_name` to aid both specifying and referring
 to the name of an object.
 For completeness, we added `configMap` as a top-level entry.
 
@@ -710,10 +710,10 @@
 $ cat <<EOF >> kitchen/kube.cue
 
 deployment: [ID=_]: spec: template: spec: {
-    hasDisks :: *true | bool
+    _hasDisks: *true | bool
 
     // field comprehension using just "if"
-    if hasDisks {
+    if _hasDisks {
         volumes: [{
             name: *"\(ID)-disk" | string
             gcePersistentDisk: pdName: *"\(ID)-disk" | string
@@ -740,7 +740,7 @@
 $ cat <<EOF >> kitchen/souschef/kube.cue
 
 deployment: souschef: spec: template: spec: {
-    hasDisks :: false
+    _hasDisks: false
 }
 
 EOF
@@ -933,7 +933,7 @@
 different subdirectories may have different specializations.
 A merge pre-expands templates of each instance and then merges their root
 values.
-The result may contain conflicts, such as our top-level `Component` field,
+The result may contain conflicts, such as our top-level `#Component` field,
 but our per-type maps of Kubernetes objects should be free of conflict
 (if there is, we have a problem with Kubernetes down the line).
 A merge thus gives us a unified view of all objects.
@@ -1079,10 +1079,10 @@
   apps_v1 "k8s.io/api/apps/v1"
 )
 
-service: [string]:     v1.Service
-deployment: [string]:  apps_v1.Deployment
-daemonSet: [string]:   apps_v1.DaemonSet
-statefulSet: [string]: apps_v1.StatefulSet
+service: [string]:     v1.#Service
+deployment: [string]:  apps_v1.#Deployment
+daemonSet: [string]:   apps_v1.#DaemonSet
+statefulSet: [string]: apps_v1.#StatefulSet
 EOF
 ```
 
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/register_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/register_go_gen.cue
index 3239f51..c2497a5 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/register_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/register_go_gen.cue
@@ -4,4 +4,4 @@
 
 package v1
 
-GroupName :: "apps"
+#GroupName: "apps"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/types_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/types_go_gen.cue
index 6fcaa84..1ff8b0d 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/types_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/apps/v1/types_go_gen.cue
@@ -11,11 +11,11 @@
 	"k8s.io/apimachinery/pkg/util/intstr"
 )
 
-ControllerRevisionHashLabelKey :: "controller-revision-hash"
-StatefulSetRevisionLabel ::       "controller-revision-hash"
-DeprecatedRollbackTo ::           "deprecated.deployment.rollback.to"
-DeprecatedTemplateGeneration ::   "deprecated.daemonset.template.generation"
-StatefulSetPodNameLabel ::        "statefulset.kubernetes.io/pod-name"
+#ControllerRevisionHashLabelKey: "controller-revision-hash"
+#StatefulSetRevisionLabel:       "controller-revision-hash"
+#DeprecatedRollbackTo:           "deprecated.deployment.rollback.to"
+#DeprecatedTemplateGeneration:   "deprecated.daemonset.template.generation"
+#StatefulSetPodNameLabel:        "statefulset.kubernetes.io/pod-name"
 
 // StatefulSet represents a set of pods with consistent identities.
 // Identities are defined as:
@@ -23,78 +23,78 @@
 //  - Storage: As many VolumeClaims as requested.
 // The StatefulSet guarantees that a given network identity will always
 // map to the same storage identity.
-StatefulSet :: {
-	metav1.TypeMeta
+#StatefulSet: {
+	metav1.#TypeMeta
 
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the desired identities of pods in this set.
 	// +optional
-	spec?: StatefulSetSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #StatefulSetSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status is the current status of Pods in this StatefulSet. This data
 	// may be out of date by some window of time.
 	// +optional
-	status?: StatefulSetStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #StatefulSetStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // PodManagementPolicyType defines the policy for creating pods under a stateful set.
-PodManagementPolicyType :: string // enumPodManagementPolicyType
+#PodManagementPolicyType: string // #enumPodManagementPolicyType
 
-enumPodManagementPolicyType ::
-	OrderedReadyPodManagement |
-	ParallelPodManagement
+#enumPodManagementPolicyType:
+	#OrderedReadyPodManagement |
+	#ParallelPodManagement
 
 // OrderedReadyPodManagement will create pods in strictly increasing order on
 // scale up and strictly decreasing order on scale down, progressing only when
 // the previous pod is ready or terminated. At most one pod will be changed
 // at any time.
-OrderedReadyPodManagement :: PodManagementPolicyType & "OrderedReady"
+#OrderedReadyPodManagement: #PodManagementPolicyType & "OrderedReady"
 
 // ParallelPodManagement will create and delete pods as soon as the stateful set
 // replica count is changed, and will not wait for pods to be ready or complete
 // termination.
-ParallelPodManagement :: PodManagementPolicyType & "Parallel"
+#ParallelPodManagement: #PodManagementPolicyType & "Parallel"
 
 // StatefulSetUpdateStrategy indicates the strategy that the StatefulSet
 // controller will use to perform updates. It includes any additional parameters
 // necessary to perform the update for the indicated strategy.
-StatefulSetUpdateStrategy :: {
+#StatefulSetUpdateStrategy: {
 	// Type indicates the type of the StatefulSetUpdateStrategy.
 	// Default is RollingUpdate.
 	// +optional
-	type?: StatefulSetUpdateStrategyType @go(Type) @protobuf(1,bytes,opt,casttype=StatefulSetStrategyType)
+	type?: #StatefulSetUpdateStrategyType @go(Type) @protobuf(1,bytes,opt,casttype=StatefulSetStrategyType)
 
 	// RollingUpdate is used to communicate parameters when Type is RollingUpdateStatefulSetStrategyType.
 	// +optional
-	rollingUpdate?: null | RollingUpdateStatefulSetStrategy @go(RollingUpdate,*RollingUpdateStatefulSetStrategy) @protobuf(2,bytes,opt)
+	rollingUpdate?: null | #RollingUpdateStatefulSetStrategy @go(RollingUpdate,*RollingUpdateStatefulSetStrategy) @protobuf(2,bytes,opt)
 }
 
 // StatefulSetUpdateStrategyType is a string enumeration type that enumerates
 // all possible update strategies for the StatefulSet controller.
-StatefulSetUpdateStrategyType :: string // enumStatefulSetUpdateStrategyType
+#StatefulSetUpdateStrategyType: string // #enumStatefulSetUpdateStrategyType
 
-enumStatefulSetUpdateStrategyType ::
-	RollingUpdateStatefulSetStrategyType |
-	OnDeleteStatefulSetStrategyType
+#enumStatefulSetUpdateStrategyType:
+	#RollingUpdateStatefulSetStrategyType |
+	#OnDeleteStatefulSetStrategyType
 
 // RollingUpdateStatefulSetStrategyType indicates that update will be
 // applied to all Pods in the StatefulSet with respect to the StatefulSet
 // ordering constraints. When a scale operation is performed with this
 // strategy, new Pods will be created from the specification version indicated
 // by the StatefulSet's updateRevision.
-RollingUpdateStatefulSetStrategyType :: StatefulSetUpdateStrategyType & "RollingUpdate"
+#RollingUpdateStatefulSetStrategyType: #StatefulSetUpdateStrategyType & "RollingUpdate"
 
 // OnDeleteStatefulSetStrategyType triggers the legacy behavior. Version
 // tracking and ordered rolling restarts are disabled. Pods are recreated
 // from the StatefulSetSpec when they are manually deleted. When a scale
 // operation is performed with this strategy,specification version indicated
 // by the StatefulSet's currentRevision.
-OnDeleteStatefulSetStrategyType :: StatefulSetUpdateStrategyType & "OnDelete"
+#OnDeleteStatefulSetStrategyType: #StatefulSetUpdateStrategyType & "OnDelete"
 
 // RollingUpdateStatefulSetStrategy is used to communicate parameter for RollingUpdateStatefulSetStrategyType.
-RollingUpdateStatefulSetStrategy :: {
+#RollingUpdateStatefulSetStrategy: {
 	// Partition indicates the ordinal at which the StatefulSet should be
 	// partitioned.
 	// Default value is 0.
@@ -103,7 +103,7 @@
 }
 
 // A StatefulSetSpec is the specification of a StatefulSet.
-StatefulSetSpec :: {
+#StatefulSetSpec: {
 	// replicas is the desired number of replicas of the given Template.
 	// These are replicas in the sense that they are instantiations of the
 	// same Template, but individual replicas also have a consistent identity.
@@ -115,13 +115,13 @@
 	// selector is a label query over pods that should match the replica count.
 	// It must match the pod template's labels.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
-	selector?: null | metav1.LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(2,bytes,opt)
+	selector?: null | metav1.#LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(2,bytes,opt)
 
 	// template is the object that describes the pod that will be created if
 	// insufficient replicas are detected. Each pod stamped out by the StatefulSet
 	// will fulfill this Template, but have a unique identity from the rest
 	// of the StatefulSet.
-	template: v1.PodTemplateSpec @go(Template) @protobuf(3,bytes,opt)
+	template: v1.#PodTemplateSpec @go(Template) @protobuf(3,bytes,opt)
 
 	// volumeClaimTemplates is a list of claims that pods are allowed to reference.
 	// The StatefulSet controller is responsible for mapping network identities to
@@ -131,7 +131,7 @@
 	// any volumes in the template, with the same name.
 	// TODO: Define the behavior if a claim already exists with the same name.
 	// +optional
-	volumeClaimTemplates?: [...v1.PersistentVolumeClaim] @go(VolumeClaimTemplates,[]v1.PersistentVolumeClaim) @protobuf(4,bytes,rep)
+	volumeClaimTemplates?: [...v1.#PersistentVolumeClaim] @go(VolumeClaimTemplates,[]v1.PersistentVolumeClaim) @protobuf(4,bytes,rep)
 
 	// serviceName is the name of the service that governs this StatefulSet.
 	// This service must exist before the StatefulSet, and is responsible for
@@ -149,12 +149,12 @@
 	// to match the desired scale without waiting, and on scale down will delete
 	// all pods at once.
 	// +optional
-	podManagementPolicy?: PodManagementPolicyType @go(PodManagementPolicy) @protobuf(6,bytes,opt,casttype=PodManagementPolicyType)
+	podManagementPolicy?: #PodManagementPolicyType @go(PodManagementPolicy) @protobuf(6,bytes,opt,casttype=PodManagementPolicyType)
 
 	// updateStrategy indicates the StatefulSetUpdateStrategy that will be
 	// employed to update Pods in the StatefulSet when a revision is made to
 	// Template.
-	updateStrategy?: StatefulSetUpdateStrategy @go(UpdateStrategy) @protobuf(7,bytes,opt)
+	updateStrategy?: #StatefulSetUpdateStrategy @go(UpdateStrategy) @protobuf(7,bytes,opt)
 
 	// revisionHistoryLimit is the maximum number of revisions that will
 	// be maintained in the StatefulSet's revision history. The revision history
@@ -164,7 +164,7 @@
 }
 
 // StatefulSetStatus represents the current state of a StatefulSet.
-StatefulSetStatus :: {
+#StatefulSetStatus: {
 	// observedGeneration is the most recent generation observed for this StatefulSet. It corresponds to the
 	// StatefulSet's generation, which is updated on mutation by the API Server.
 	// +optional
@@ -202,22 +202,22 @@
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...StatefulSetCondition] @go(Conditions,[]StatefulSetCondition) @protobuf(10,bytes,rep)
+	conditions?: [...#StatefulSetCondition] @go(Conditions,[]StatefulSetCondition) @protobuf(10,bytes,rep)
 }
 
-StatefulSetConditionType :: string
+#StatefulSetConditionType: string
 
 // StatefulSetCondition describes the state of a statefulset at a certain point.
-StatefulSetCondition :: {
+#StatefulSetCondition: {
 	// Type of statefulset condition.
-	type: StatefulSetConditionType @go(Type) @protobuf(1,bytes,opt,casttype=StatefulSetConditionType)
+	type: #StatefulSetConditionType @go(Type) @protobuf(1,bytes,opt,casttype=StatefulSetConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: v1.ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
+	status: v1.#ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
 
 	// Last time the condition transitioned from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
 
 	// The reason for the condition's last transition.
 	// +optional
@@ -229,33 +229,33 @@
 }
 
 // StatefulSetList is a collection of StatefulSets.
-StatefulSetList :: {
-	metav1.TypeMeta
+#StatefulSetList: {
+	metav1.#TypeMeta
 
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
-	items: [...StatefulSet] @go(Items,[]StatefulSet) @protobuf(2,bytes,rep)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	items: [...#StatefulSet] @go(Items,[]StatefulSet) @protobuf(2,bytes,rep)
 }
 
 // Deployment enables declarative updates for Pods and ReplicaSets.
-Deployment :: {
-	metav1.TypeMeta
+#Deployment: {
+	metav1.#TypeMeta
 
 	// Standard object metadata.
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Specification of the desired behavior of the Deployment.
 	// +optional
-	spec?: DeploymentSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #DeploymentSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Most recently observed status of the Deployment.
 	// +optional
-	status?: DeploymentStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #DeploymentStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // DeploymentSpec is the specification of the desired behavior of the Deployment.
-DeploymentSpec :: {
+#DeploymentSpec: {
 	// Number of desired pods. This is a pointer to distinguish between explicit
 	// zero and not specified. Defaults to 1.
 	// +optional
@@ -264,15 +264,15 @@
 	// Label selector for pods. Existing ReplicaSets whose pods are
 	// selected by this will be the ones affected by this deployment.
 	// It must match the pod template's labels.
-	selector?: null | metav1.LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(2,bytes,opt)
+	selector?: null | metav1.#LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(2,bytes,opt)
 
 	// Template describes the pods that will be created.
-	template: v1.PodTemplateSpec @go(Template) @protobuf(3,bytes,opt)
+	template: v1.#PodTemplateSpec @go(Template) @protobuf(3,bytes,opt)
 
 	// The deployment strategy to use to replace existing pods with new ones.
 	// +optional
 	// +patchStrategy=retainKeys
-	strategy?: DeploymentStrategy @go(Strategy) @protobuf(4,bytes,opt)
+	strategy?: #DeploymentStrategy @go(Strategy) @protobuf(4,bytes,opt)
 
 	// Minimum number of seconds for which a newly created pod should be ready
 	// without any of its container crashing, for it to be considered available.
@@ -301,13 +301,13 @@
 // DefaultDeploymentUniqueLabelKey is the default key of the selector that is added
 // to existing ReplicaSets (and label key that is added to its pods) to prevent the existing ReplicaSets
 // to select new pods (and old pods being select by new ReplicaSet).
-DefaultDeploymentUniqueLabelKey :: "pod-template-hash"
+#DefaultDeploymentUniqueLabelKey: "pod-template-hash"
 
 // DeploymentStrategy describes how to replace existing pods with new ones.
-DeploymentStrategy :: {
+#DeploymentStrategy: {
 	// Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate.
 	// +optional
-	type?: DeploymentStrategyType @go(Type) @protobuf(1,bytes,opt,casttype=DeploymentStrategyType)
+	type?: #DeploymentStrategyType @go(Type) @protobuf(1,bytes,opt,casttype=DeploymentStrategyType)
 
 	// Rolling update config params. Present only if DeploymentStrategyType =
 	// RollingUpdate.
@@ -315,23 +315,23 @@
 	// TODO: Update this to follow our convention for oneOf, whatever we decide it
 	// to be.
 	// +optional
-	rollingUpdate?: null | RollingUpdateDeployment @go(RollingUpdate,*RollingUpdateDeployment) @protobuf(2,bytes,opt)
+	rollingUpdate?: null | #RollingUpdateDeployment @go(RollingUpdate,*RollingUpdateDeployment) @protobuf(2,bytes,opt)
 }
 
-DeploymentStrategyType :: string // enumDeploymentStrategyType
+#DeploymentStrategyType: string // #enumDeploymentStrategyType
 
-enumDeploymentStrategyType ::
-	RecreateDeploymentStrategyType |
-	RollingUpdateDeploymentStrategyType
+#enumDeploymentStrategyType:
+	#RecreateDeploymentStrategyType |
+	#RollingUpdateDeploymentStrategyType
 
 // Kill all existing pods before creating new ones.
-RecreateDeploymentStrategyType :: DeploymentStrategyType & "Recreate"
+#RecreateDeploymentStrategyType: #DeploymentStrategyType & "Recreate"
 
 // Replace the old ReplicaSets by new one using rolling update i.e gradually scale down the old ReplicaSets and scale up the new one.
-RollingUpdateDeploymentStrategyType :: DeploymentStrategyType & "RollingUpdate"
+#RollingUpdateDeploymentStrategyType: #DeploymentStrategyType & "RollingUpdate"
 
 // Spec to control the desired behavior of rolling update.
-RollingUpdateDeployment :: {
+#RollingUpdateDeployment: {
 	// The maximum number of pods that can be unavailable during the update.
 	// Value can be an absolute number (ex: 5) or a percentage of desired pods (ex: 10%).
 	// Absolute number is calculated from percentage by rounding down.
@@ -343,7 +343,7 @@
 	// that the total number of pods available at all times during the update is at
 	// least 70% of desired pods.
 	// +optional
-	maxUnavailable?: null | intstr.IntOrString @go(MaxUnavailable,*intstr.IntOrString) @protobuf(1,bytes,opt)
+	maxUnavailable?: null | intstr.#IntOrString @go(MaxUnavailable,*intstr.IntOrString) @protobuf(1,bytes,opt)
 
 	// The maximum number of pods that can be scheduled above the desired number of
 	// pods.
@@ -357,11 +357,11 @@
 	// new ReplicaSet can be scaled up further, ensuring that total number of pods running
 	// at any time during the update is at most 130% of desired pods.
 	// +optional
-	maxSurge?: null | intstr.IntOrString @go(MaxSurge,*intstr.IntOrString) @protobuf(2,bytes,opt)
+	maxSurge?: null | intstr.#IntOrString @go(MaxSurge,*intstr.IntOrString) @protobuf(2,bytes,opt)
 }
 
 // DeploymentStatus is the most recently observed status of the Deployment.
-DeploymentStatus :: {
+#DeploymentStatus: {
 	// The generation observed by the deployment controller.
 	// +optional
 	observedGeneration?: int64 @go(ObservedGeneration) @protobuf(1,varint,opt)
@@ -391,7 +391,7 @@
 	// Represents the latest available observations of a deployment's current state.
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...DeploymentCondition] @go(Conditions,[]DeploymentCondition) @protobuf(6,bytes,rep)
+	conditions?: [...#DeploymentCondition] @go(Conditions,[]DeploymentCondition) @protobuf(6,bytes,rep)
 
 	// Count of hash collisions for the Deployment. The Deployment controller uses this
 	// field as a collision avoidance mechanism when it needs to create the name for the
@@ -400,40 +400,40 @@
 	collisionCount?: null | int32 @go(CollisionCount,*int32) @protobuf(8,varint,opt)
 }
 
-DeploymentConditionType :: string // enumDeploymentConditionType
+#DeploymentConditionType: string // #enumDeploymentConditionType
 
-enumDeploymentConditionType ::
-	DeploymentAvailable |
-	DeploymentProgressing |
-	DeploymentReplicaFailure
+#enumDeploymentConditionType:
+	#DeploymentAvailable |
+	#DeploymentProgressing |
+	#DeploymentReplicaFailure
 
 // Available means the deployment is available, ie. at least the minimum available
 // replicas required are up and running for at least minReadySeconds.
-DeploymentAvailable :: DeploymentConditionType & "Available"
+#DeploymentAvailable: #DeploymentConditionType & "Available"
 
 // Progressing means the deployment is progressing. Progress for a deployment is
 // considered when a new replica set is created or adopted, and when new pods scale
 // up or old pods scale down. Progress is not estimated for paused deployments or
 // when progressDeadlineSeconds is not specified.
-DeploymentProgressing :: DeploymentConditionType & "Progressing"
+#DeploymentProgressing: #DeploymentConditionType & "Progressing"
 
 // ReplicaFailure is added in a deployment when one of its pods fails to be created
 // or deleted.
-DeploymentReplicaFailure :: DeploymentConditionType & "ReplicaFailure"
+#DeploymentReplicaFailure: #DeploymentConditionType & "ReplicaFailure"
 
 // DeploymentCondition describes the state of a deployment at a certain point.
-DeploymentCondition :: {
+#DeploymentCondition: {
 	// Type of deployment condition.
-	type: DeploymentConditionType @go(Type) @protobuf(1,bytes,opt,casttype=DeploymentConditionType)
+	type: #DeploymentConditionType @go(Type) @protobuf(1,bytes,opt,casttype=DeploymentConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: v1.ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
+	status: v1.#ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
 
 	// The last time this condition was updated.
-	lastUpdateTime?: metav1.Time @go(LastUpdateTime) @protobuf(6,bytes,opt)
+	lastUpdateTime?: metav1.#Time @go(LastUpdateTime) @protobuf(6,bytes,opt)
 
 	// Last time the condition transitioned from one status to another.
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(7,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(7,bytes,opt)
 
 	// The reason for the condition's last transition.
 	reason?: string @go(Reason) @protobuf(4,bytes,opt)
@@ -443,22 +443,22 @@
 }
 
 // DeploymentList is a list of Deployments.
-DeploymentList :: {
-	metav1.TypeMeta
+#DeploymentList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is the list of Deployments.
-	items: [...Deployment] @go(Items,[]Deployment) @protobuf(2,bytes,rep)
+	items: [...#Deployment] @go(Items,[]Deployment) @protobuf(2,bytes,rep)
 }
 
 // DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.
-DaemonSetUpdateStrategy :: {
+#DaemonSetUpdateStrategy: {
 	// Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate.
 	// +optional
-	type?: DaemonSetUpdateStrategyType @go(Type) @protobuf(1,bytes,opt)
+	type?: #DaemonSetUpdateStrategyType @go(Type) @protobuf(1,bytes,opt)
 
 	// Rolling update config params. Present only if type = "RollingUpdate".
 	//---
@@ -466,23 +466,23 @@
 	// to be. Same as Deployment `strategy.rollingUpdate`.
 	// See https://github.com/kubernetes/kubernetes/issues/35345
 	// +optional
-	rollingUpdate?: null | RollingUpdateDaemonSet @go(RollingUpdate,*RollingUpdateDaemonSet) @protobuf(2,bytes,opt)
+	rollingUpdate?: null | #RollingUpdateDaemonSet @go(RollingUpdate,*RollingUpdateDaemonSet) @protobuf(2,bytes,opt)
 }
 
-DaemonSetUpdateStrategyType :: string // enumDaemonSetUpdateStrategyType
+#DaemonSetUpdateStrategyType: string // #enumDaemonSetUpdateStrategyType
 
-enumDaemonSetUpdateStrategyType ::
-	RollingUpdateDaemonSetStrategyType |
-	OnDeleteDaemonSetStrategyType
+#enumDaemonSetUpdateStrategyType:
+	#RollingUpdateDaemonSetStrategyType |
+	#OnDeleteDaemonSetStrategyType
 
 // Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other.
-RollingUpdateDaemonSetStrategyType :: DaemonSetUpdateStrategyType & "RollingUpdate"
+#RollingUpdateDaemonSetStrategyType: #DaemonSetUpdateStrategyType & "RollingUpdate"
 
 // Replace the old daemons only when it's killed
-OnDeleteDaemonSetStrategyType :: DaemonSetUpdateStrategyType & "OnDelete"
+#OnDeleteDaemonSetStrategyType: #DaemonSetUpdateStrategyType & "OnDelete"
 
 // Spec to control the desired behavior of daemon set rolling update.
-RollingUpdateDaemonSet :: {
+#RollingUpdateDaemonSet: {
 	// The maximum number of DaemonSet pods that can be unavailable during the
 	// update. Value can be an absolute number (ex: 5) or a percentage of total
 	// number of DaemonSet pods at the start of the update (ex: 10%). Absolute
@@ -498,27 +498,27 @@
 	// that at least 70% of original number of DaemonSet pods are available at
 	// all times during the update.
 	// +optional
-	maxUnavailable?: null | intstr.IntOrString @go(MaxUnavailable,*intstr.IntOrString) @protobuf(1,bytes,opt)
+	maxUnavailable?: null | intstr.#IntOrString @go(MaxUnavailable,*intstr.IntOrString) @protobuf(1,bytes,opt)
 }
 
 // DaemonSetSpec is the specification of a daemon set.
-DaemonSetSpec :: {
+#DaemonSetSpec: {
 	// A label query over pods that are managed by the daemon set.
 	// Must match in order to be controlled.
 	// It must match the pod template's labels.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
-	selector?: null | metav1.LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(1,bytes,opt)
+	selector?: null | metav1.#LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(1,bytes,opt)
 
 	// An object that describes the pod that will be created.
 	// The DaemonSet will create exactly one copy of this pod on every node
 	// that matches the template's node selector (or on every node if no node
 	// selector is specified).
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
-	template: v1.PodTemplateSpec @go(Template) @protobuf(2,bytes,opt)
+	template: v1.#PodTemplateSpec @go(Template) @protobuf(2,bytes,opt)
 
 	// An update strategy to replace existing DaemonSet pods with new pods.
 	// +optional
-	updateStrategy?: DaemonSetUpdateStrategy @go(UpdateStrategy) @protobuf(3,bytes,opt)
+	updateStrategy?: #DaemonSetUpdateStrategy @go(UpdateStrategy) @protobuf(3,bytes,opt)
 
 	// The minimum number of seconds for which a newly created DaemonSet pod should
 	// be ready without any of its container crashing, for it to be considered
@@ -535,7 +535,7 @@
 }
 
 // DaemonSetStatus represents the current status of a daemon set.
-DaemonSetStatus :: {
+#DaemonSetStatus: {
 	// The number of nodes that are running at least 1
 	// daemon pod and are supposed to run the daemon pod.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
@@ -585,22 +585,22 @@
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...DaemonSetCondition] @go(Conditions,[]DaemonSetCondition) @protobuf(10,bytes,rep)
+	conditions?: [...#DaemonSetCondition] @go(Conditions,[]DaemonSetCondition) @protobuf(10,bytes,rep)
 }
 
-DaemonSetConditionType :: string
+#DaemonSetConditionType: string
 
 // DaemonSetCondition describes the state of a DaemonSet at a certain point.
-DaemonSetCondition :: {
+#DaemonSetCondition: {
 	// Type of DaemonSet condition.
-	type: DaemonSetConditionType @go(Type) @protobuf(1,bytes,opt,casttype=DaemonSetConditionType)
+	type: #DaemonSetConditionType @go(Type) @protobuf(1,bytes,opt,casttype=DaemonSetConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: v1.ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
+	status: v1.#ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
 
 	// Last time the condition transitioned from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
 
 	// The reason for the condition's last transition.
 	// +optional
@@ -612,18 +612,18 @@
 }
 
 // DaemonSet represents the configuration of a daemon set.
-DaemonSet :: {
-	metav1.TypeMeta
+#DaemonSet: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// The desired behavior of this daemon set.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: DaemonSetSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #DaemonSetSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// The current status of this daemon set. This data may be
 	// out of date by some window of time.
@@ -631,41 +631,41 @@
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: DaemonSetStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #DaemonSetStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // DefaultDaemonSetUniqueLabelKey is the default label key that is added
 // to existing DaemonSet pods to distinguish between old and new
 // DaemonSet pods during DaemonSet template updates.
-DefaultDaemonSetUniqueLabelKey :: "controller-revision-hash"
+#DefaultDaemonSetUniqueLabelKey: "controller-revision-hash"
 
 // DaemonSetList is a collection of daemon sets.
-DaemonSetList :: {
-	metav1.TypeMeta
+#DaemonSetList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// A list of daemon sets.
-	items: [...DaemonSet] @go(Items,[]DaemonSet) @protobuf(2,bytes,rep)
+	items: [...#DaemonSet] @go(Items,[]DaemonSet) @protobuf(2,bytes,rep)
 }
 
 // ReplicaSet ensures that a specified number of pod replicas are running at any given time.
-ReplicaSet :: {
-	metav1.TypeMeta
+#ReplicaSet: {
+	metav1.#TypeMeta
 
 	// If the Labels of a ReplicaSet are empty, they are defaulted to
 	// be the same as the Pod(s) that the ReplicaSet manages.
 	// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the specification of the desired behavior of the ReplicaSet.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: ReplicaSetSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #ReplicaSetSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status is the most recently observed status of the ReplicaSet.
 	// This data may be out of date by some window of time.
@@ -673,25 +673,25 @@
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: ReplicaSetStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #ReplicaSetStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // ReplicaSetList is a collection of ReplicaSets.
-ReplicaSetList :: {
-	metav1.TypeMeta
+#ReplicaSetList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of ReplicaSets.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
-	items: [...ReplicaSet] @go(Items,[]ReplicaSet) @protobuf(2,bytes,rep)
+	items: [...#ReplicaSet] @go(Items,[]ReplicaSet) @protobuf(2,bytes,rep)
 }
 
 // ReplicaSetSpec is the specification of a ReplicaSet.
-ReplicaSetSpec :: {
+#ReplicaSetSpec: {
 	// Replicas is the number of desired replicas.
 	// This is a pointer to distinguish between explicit zero and unspecified.
 	// Defaults to 1.
@@ -709,17 +709,17 @@
 	// Label keys and values that must match in order to be controlled by this replica set.
 	// It must match the pod template's labels.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
-	selector?: null | metav1.LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(2,bytes,opt)
+	selector?: null | metav1.#LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(2,bytes,opt)
 
 	// Template is the object that describes the pod that will be created if
 	// insufficient replicas are detected.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
 	// +optional
-	template?: v1.PodTemplateSpec @go(Template) @protobuf(3,bytes,opt)
+	template?: v1.#PodTemplateSpec @go(Template) @protobuf(3,bytes,opt)
 }
 
 // ReplicaSetStatus represents the current status of a ReplicaSet.
-ReplicaSetStatus :: {
+#ReplicaSetStatus: {
 	// Replicas is the most recently oberved number of replicas.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/#what-is-a-replicationcontroller
 	replicas: int32 @go(Replicas) @protobuf(1,varint,opt)
@@ -744,30 +744,30 @@
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...ReplicaSetCondition] @go(Conditions,[]ReplicaSetCondition) @protobuf(6,bytes,rep)
+	conditions?: [...#ReplicaSetCondition] @go(Conditions,[]ReplicaSetCondition) @protobuf(6,bytes,rep)
 }
 
-ReplicaSetConditionType :: string // enumReplicaSetConditionType
+#ReplicaSetConditionType: string // #enumReplicaSetConditionType
 
-enumReplicaSetConditionType ::
-	ReplicaSetReplicaFailure
+#enumReplicaSetConditionType:
+	#ReplicaSetReplicaFailure
 
 // ReplicaSetReplicaFailure is added in a replica set when one of its pods fails to be created
 // due to insufficient quota, limit ranges, pod security policy, node selectors, etc. or deleted
 // due to kubelet being down or finalizers are failing.
-ReplicaSetReplicaFailure :: ReplicaSetConditionType & "ReplicaFailure"
+#ReplicaSetReplicaFailure: #ReplicaSetConditionType & "ReplicaFailure"
 
 // ReplicaSetCondition describes the state of a replica set at a certain point.
-ReplicaSetCondition :: {
+#ReplicaSetCondition: {
 	// Type of replica set condition.
-	type: ReplicaSetConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ReplicaSetConditionType)
+	type: #ReplicaSetConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ReplicaSetConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: v1.ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
+	status: v1.#ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=k8s.io/api/core/v1.ConditionStatus)
 
 	// The last time the condition transitioned from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
 
 	// The reason for the condition's last transition.
 	// +optional
@@ -787,29 +787,29 @@
 // the DaemonSet and StatefulSet controllers for update and rollback, this object is beta. However,
 // it may be subject to name and representation changes in future releases, and clients should not
 // depend on its stability. It is primarily for internal use by controllers.
-ControllerRevision :: {
-	metav1.TypeMeta
+#ControllerRevision: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Data is the serialized representation of the state.
-	data?: runtime.RawExtension @go(Data) @protobuf(2,bytes,opt)
+	data?: runtime.#RawExtension @go(Data) @protobuf(2,bytes,opt)
 
 	// Revision indicates the revision of the state represented by Data.
 	revision: int64 @go(Revision) @protobuf(3,varint,opt)
 }
 
 // ControllerRevisionList is a resource containing a list of ControllerRevision objects.
-ControllerRevisionList :: {
-	metav1.TypeMeta
+#ControllerRevisionList: {
+	metav1.#TypeMeta
 
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is the list of ControllerRevisions
-	items: [...ControllerRevision] @go(Items,[]ControllerRevision) @protobuf(2,bytes,rep)
+	items: [...#ControllerRevision] @go(Items,[]ControllerRevision) @protobuf(2,bytes,rep)
 }
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/annotation_key_constants_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/annotation_key_constants_go_gen.cue
index 892ae89..83bf898 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/annotation_key_constants_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/annotation_key_constants_go_gen.cue
@@ -6,52 +6,52 @@
 
 // ImagePolicyFailedOpenKey is added to pods created by failing open when the image policy
 // webhook backend fails.
-ImagePolicyFailedOpenKey :: "alpha.image-policy.k8s.io/failed-open"
+#ImagePolicyFailedOpenKey: "alpha.image-policy.k8s.io/failed-open"
 
 // PodPresetOptOutAnnotationKey represents the annotation key for a pod to exempt itself from pod preset manipulation
-PodPresetOptOutAnnotationKey :: "podpreset.admission.kubernetes.io/exclude"
+#PodPresetOptOutAnnotationKey: "podpreset.admission.kubernetes.io/exclude"
 
 // MirrorAnnotationKey represents the annotation key set by kubelets when creating mirror pods
-MirrorPodAnnotationKey :: "kubernetes.io/config.mirror"
+#MirrorPodAnnotationKey: "kubernetes.io/config.mirror"
 
 // TolerationsAnnotationKey represents the key of tolerations data (json serialized)
 // in the Annotations of a Pod.
-TolerationsAnnotationKey :: "scheduler.alpha.kubernetes.io/tolerations"
+#TolerationsAnnotationKey: "scheduler.alpha.kubernetes.io/tolerations"
 
 // TaintsAnnotationKey represents the key of taints data (json serialized)
 // in the Annotations of a Node.
-TaintsAnnotationKey :: "scheduler.alpha.kubernetes.io/taints"
+#TaintsAnnotationKey: "scheduler.alpha.kubernetes.io/taints"
 
 // SeccompPodAnnotationKey represents the key of a seccomp profile applied
 // to all containers of a pod.
-SeccompPodAnnotationKey :: "seccomp.security.alpha.kubernetes.io/pod"
+#SeccompPodAnnotationKey: "seccomp.security.alpha.kubernetes.io/pod"
 
 // SeccompContainerAnnotationKeyPrefix represents the key of a seccomp profile applied
 // to one container of a pod.
-SeccompContainerAnnotationKeyPrefix :: "container.seccomp.security.alpha.kubernetes.io/"
+#SeccompContainerAnnotationKeyPrefix: "container.seccomp.security.alpha.kubernetes.io/"
 
 // SeccompProfileRuntimeDefault represents the default seccomp profile used by container runtime.
-SeccompProfileRuntimeDefault :: "runtime/default"
+#SeccompProfileRuntimeDefault: "runtime/default"
 
 // DeprecatedSeccompProfileDockerDefault represents the default seccomp profile used by docker.
 // This is now deprecated and should be replaced by SeccompProfileRuntimeDefault.
-DeprecatedSeccompProfileDockerDefault :: "docker/default"
+#DeprecatedSeccompProfileDockerDefault: "docker/default"
 
 // PreferAvoidPodsAnnotationKey represents the key of preferAvoidPods data (json serialized)
 // in the Annotations of a Node.
-PreferAvoidPodsAnnotationKey :: "scheduler.alpha.kubernetes.io/preferAvoidPods"
+#PreferAvoidPodsAnnotationKey: "scheduler.alpha.kubernetes.io/preferAvoidPods"
 
 // ObjectTTLAnnotations represents a suggestion for kubelet for how long it can cache
 // an object (e.g. secret, config map) before fetching it again from apiserver.
 // This annotation can be attached to node.
-ObjectTTLAnnotationKey :: "node.alpha.kubernetes.io/ttl"
+#ObjectTTLAnnotationKey: "node.alpha.kubernetes.io/ttl"
 
 // annotation key prefix used to identify non-convertible json paths.
-NonConvertibleAnnotationPrefix :: "non-convertible.kubernetes.io"
+#NonConvertibleAnnotationPrefix: "non-convertible.kubernetes.io"
 
 // LastAppliedConfigAnnotation is the annotation used to store the previous
 // configuration of a resource for use in a three way diff by UpdateApplyAnnotation.
-LastAppliedConfigAnnotation :: "kubectl.kubernetes.io/last-applied-configuration"
+#LastAppliedConfigAnnotation: "kubectl.kubernetes.io/last-applied-configuration"
 
 // AnnotationLoadBalancerSourceRangesKey is the key of the annotation on a service to set allowed ingress ranges on their LoadBalancers
 //
@@ -60,7 +60,7 @@
 // access only from the CIDRs currently allocated to MIT & the USPS.
 //
 // Not all cloud providers support this annotation, though AWS & GCE do.
-AnnotationLoadBalancerSourceRangesKey :: "service.beta.kubernetes.io/load-balancer-source-ranges"
+#AnnotationLoadBalancerSourceRangesKey: "service.beta.kubernetes.io/load-balancer-source-ranges"
 
 // EndpointsLastChangeTriggerTime is the annotation key, set for endpoints objects, that
 // represents the timestamp (stored as RFC 3339 date-time string, e.g. '2018-10-22T19:32:52.1Z')
@@ -79,10 +79,10 @@
 //
 // This annotation will be used to compute the in-cluster network programming latency SLI, see
 // https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md
-EndpointsLastChangeTriggerTime :: "endpoints.kubernetes.io/last-change-trigger-time"
+#EndpointsLastChangeTriggerTime: "endpoints.kubernetes.io/last-change-trigger-time"
 
 // MigratedPluginsAnnotationKey is the annotation key, set for CSINode objects, that is a comma-separated
 // list of in-tree plugins that will be serviced by the CSI backend on the Node represented by CSINode.
 // This annotation is used by the Attach Detach Controller to determine whether to use the in-tree or
 // CSI Backend for a volume plugin on a specific node.
-MigratedPluginsAnnotationKey :: "storage.alpha.kubernetes.io/migrated-plugins"
+#MigratedPluginsAnnotationKey: "storage.alpha.kubernetes.io/migrated-plugins"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/register_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/register_go_gen.cue
index 907efa1..29c24ab 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/register_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/register_go_gen.cue
@@ -4,4 +4,4 @@
 
 package v1
 
-GroupName :: ""
+#GroupName: ""
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/types_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/types_go_gen.cue
index 2e9aa65..c0e52f9 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/types_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/types_go_gen.cue
@@ -12,30 +12,30 @@
 )
 
 // NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
-NamespaceDefault :: "default"
+#NamespaceDefault: "default"
 
 // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
-NamespaceAll :: ""
+#NamespaceAll: ""
 
 // NamespaceNodeLease is the namespace where we place node lease objects (used for node heartbeats)
-NamespaceNodeLease :: "kube-node-lease"
+#NamespaceNodeLease: "kube-node-lease"
 
 // TopologyKeyAny is the service topology key that matches any node
-TopologyKeyAny :: "*"
+#TopologyKeyAny: "*"
 
 // Volume represents a named volume in a pod that may be accessed by any container in the pod.
-Volume :: {
+#Volume: {
 	// Volume's name.
 	// Must be a DNS_LABEL and unique within the pod.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
-	VolumeSource
+	#VolumeSource
 }
 
 // Represents the source of a volume to mount.
 // Only one of its members may be specified.
-VolumeSource :: {
+#VolumeSource: {
 	// HostPath represents a pre-existing file or directory on the host
 	// machine that is directly exposed to the container. This is generally
 	// used for system agents or other privileged things that are allowed
@@ -45,138 +45,138 @@
 	// TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not
 	// mount host directories as read/write.
 	// +optional
-	hostPath?: null | HostPathVolumeSource @go(HostPath,*HostPathVolumeSource) @protobuf(1,bytes,opt)
+	hostPath?: null | #HostPathVolumeSource @go(HostPath,*HostPathVolumeSource) @protobuf(1,bytes,opt)
 
 	// EmptyDir represents a temporary directory that shares a pod's lifetime.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
 	// +optional
-	emptyDir?: null | EmptyDirVolumeSource @go(EmptyDir,*EmptyDirVolumeSource) @protobuf(2,bytes,opt)
+	emptyDir?: null | #EmptyDirVolumeSource @go(EmptyDir,*EmptyDirVolumeSource) @protobuf(2,bytes,opt)
 
 	// GCEPersistentDisk represents a GCE Disk resource that is attached to a
 	// kubelet's host machine and then exposed to the pod.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
 	// +optional
-	gcePersistentDisk?: null | GCEPersistentDiskVolumeSource @go(GCEPersistentDisk,*GCEPersistentDiskVolumeSource) @protobuf(3,bytes,opt)
+	gcePersistentDisk?: null | #GCEPersistentDiskVolumeSource @go(GCEPersistentDisk,*GCEPersistentDiskVolumeSource) @protobuf(3,bytes,opt)
 
 	// AWSElasticBlockStore represents an AWS Disk resource that is attached to a
 	// kubelet's host machine and then exposed to the pod.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
 	// +optional
-	awsElasticBlockStore?: null | AWSElasticBlockStoreVolumeSource @go(AWSElasticBlockStore,*AWSElasticBlockStoreVolumeSource) @protobuf(4,bytes,opt)
+	awsElasticBlockStore?: null | #AWSElasticBlockStoreVolumeSource @go(AWSElasticBlockStore,*AWSElasticBlockStoreVolumeSource) @protobuf(4,bytes,opt)
 
 	// GitRepo represents a git repository at a particular revision.
 	// DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
 	// EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
 	// into the Pod's container.
 	// +optional
-	gitRepo?: null | GitRepoVolumeSource @go(GitRepo,*GitRepoVolumeSource) @protobuf(5,bytes,opt)
+	gitRepo?: null | #GitRepoVolumeSource @go(GitRepo,*GitRepoVolumeSource) @protobuf(5,bytes,opt)
 
 	// Secret represents a secret that should populate this volume.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
 	// +optional
-	secret?: null | SecretVolumeSource @go(Secret,*SecretVolumeSource) @protobuf(6,bytes,opt)
+	secret?: null | #SecretVolumeSource @go(Secret,*SecretVolumeSource) @protobuf(6,bytes,opt)
 
 	// NFS represents an NFS mount on the host that shares a pod's lifetime
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
 	// +optional
-	nfs?: null | NFSVolumeSource @go(NFS,*NFSVolumeSource) @protobuf(7,bytes,opt)
+	nfs?: null | #NFSVolumeSource @go(NFS,*NFSVolumeSource) @protobuf(7,bytes,opt)
 
 	// ISCSI represents an ISCSI Disk resource that is attached to a
 	// kubelet's host machine and then exposed to the pod.
 	// More info: https://examples.k8s.io/volumes/iscsi/README.md
 	// +optional
-	iscsi?: null | ISCSIVolumeSource @go(ISCSI,*ISCSIVolumeSource) @protobuf(8,bytes,opt)
+	iscsi?: null | #ISCSIVolumeSource @go(ISCSI,*ISCSIVolumeSource) @protobuf(8,bytes,opt)
 
 	// Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime.
 	// More info: https://examples.k8s.io/volumes/glusterfs/README.md
 	// +optional
-	glusterfs?: null | GlusterfsVolumeSource @go(Glusterfs,*GlusterfsVolumeSource) @protobuf(9,bytes,opt)
+	glusterfs?: null | #GlusterfsVolumeSource @go(Glusterfs,*GlusterfsVolumeSource) @protobuf(9,bytes,opt)
 
 	// PersistentVolumeClaimVolumeSource represents a reference to a
 	// PersistentVolumeClaim in the same namespace.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
 	// +optional
-	persistentVolumeClaim?: null | PersistentVolumeClaimVolumeSource @go(PersistentVolumeClaim,*PersistentVolumeClaimVolumeSource) @protobuf(10,bytes,opt)
+	persistentVolumeClaim?: null | #PersistentVolumeClaimVolumeSource @go(PersistentVolumeClaim,*PersistentVolumeClaimVolumeSource) @protobuf(10,bytes,opt)
 
 	// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
 	// More info: https://examples.k8s.io/volumes/rbd/README.md
 	// +optional
-	rbd?: null | RBDVolumeSource @go(RBD,*RBDVolumeSource) @protobuf(11,bytes,opt)
+	rbd?: null | #RBDVolumeSource @go(RBD,*RBDVolumeSource) @protobuf(11,bytes,opt)
 
 	// FlexVolume represents a generic volume resource that is
 	// provisioned/attached using an exec based plugin.
 	// +optional
-	flexVolume?: null | FlexVolumeSource @go(FlexVolume,*FlexVolumeSource) @protobuf(12,bytes,opt)
+	flexVolume?: null | #FlexVolumeSource @go(FlexVolume,*FlexVolumeSource) @protobuf(12,bytes,opt)
 
 	// Cinder represents a cinder volume attached and mounted on kubelets host machine.
 	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
 	// +optional
-	cinder?: null | CinderVolumeSource @go(Cinder,*CinderVolumeSource) @protobuf(13,bytes,opt)
+	cinder?: null | #CinderVolumeSource @go(Cinder,*CinderVolumeSource) @protobuf(13,bytes,opt)
 
 	// CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
 	// +optional
-	cephfs?: null | CephFSVolumeSource @go(CephFS,*CephFSVolumeSource) @protobuf(14,bytes,opt)
+	cephfs?: null | #CephFSVolumeSource @go(CephFS,*CephFSVolumeSource) @protobuf(14,bytes,opt)
 
 	// Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running
 	// +optional
-	flocker?: null | FlockerVolumeSource @go(Flocker,*FlockerVolumeSource) @protobuf(15,bytes,opt)
+	flocker?: null | #FlockerVolumeSource @go(Flocker,*FlockerVolumeSource) @protobuf(15,bytes,opt)
 
 	// DownwardAPI represents downward API about the pod that should populate this volume
 	// +optional
-	downwardAPI?: null | DownwardAPIVolumeSource @go(DownwardAPI,*DownwardAPIVolumeSource) @protobuf(16,bytes,opt)
+	downwardAPI?: null | #DownwardAPIVolumeSource @go(DownwardAPI,*DownwardAPIVolumeSource) @protobuf(16,bytes,opt)
 
 	// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
 	// +optional
-	fc?: null | FCVolumeSource @go(FC,*FCVolumeSource) @protobuf(17,bytes,opt)
+	fc?: null | #FCVolumeSource @go(FC,*FCVolumeSource) @protobuf(17,bytes,opt)
 
 	// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
 	// +optional
-	azureFile?: null | AzureFileVolumeSource @go(AzureFile,*AzureFileVolumeSource) @protobuf(18,bytes,opt)
+	azureFile?: null | #AzureFileVolumeSource @go(AzureFile,*AzureFileVolumeSource) @protobuf(18,bytes,opt)
 
 	// ConfigMap represents a configMap that should populate this volume
 	// +optional
-	configMap?: null | ConfigMapVolumeSource @go(ConfigMap,*ConfigMapVolumeSource) @protobuf(19,bytes,opt)
+	configMap?: null | #ConfigMapVolumeSource @go(ConfigMap,*ConfigMapVolumeSource) @protobuf(19,bytes,opt)
 
 	// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
 	// +optional
-	vsphereVolume?: null | VsphereVirtualDiskVolumeSource @go(VsphereVolume,*VsphereVirtualDiskVolumeSource) @protobuf(20,bytes,opt)
+	vsphereVolume?: null | #VsphereVirtualDiskVolumeSource @go(VsphereVolume,*VsphereVirtualDiskVolumeSource) @protobuf(20,bytes,opt)
 
 	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
 	// +optional
-	quobyte?: null | QuobyteVolumeSource @go(Quobyte,*QuobyteVolumeSource) @protobuf(21,bytes,opt)
+	quobyte?: null | #QuobyteVolumeSource @go(Quobyte,*QuobyteVolumeSource) @protobuf(21,bytes,opt)
 
 	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
 	// +optional
-	azureDisk?: null | AzureDiskVolumeSource @go(AzureDisk,*AzureDiskVolumeSource) @protobuf(22,bytes,opt)
+	azureDisk?: null | #AzureDiskVolumeSource @go(AzureDisk,*AzureDiskVolumeSource) @protobuf(22,bytes,opt)
 
 	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
-	photonPersistentDisk?: null | PhotonPersistentDiskVolumeSource @go(PhotonPersistentDisk,*PhotonPersistentDiskVolumeSource) @protobuf(23,bytes,opt)
+	photonPersistentDisk?: null | #PhotonPersistentDiskVolumeSource @go(PhotonPersistentDisk,*PhotonPersistentDiskVolumeSource) @protobuf(23,bytes,opt)
 
 	// Items for all in one resources secrets, configmaps, and downward API
-	projected?: null | ProjectedVolumeSource @go(Projected,*ProjectedVolumeSource) @protobuf(26,bytes,opt)
+	projected?: null | #ProjectedVolumeSource @go(Projected,*ProjectedVolumeSource) @protobuf(26,bytes,opt)
 
 	// PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
 	// +optional
-	portworxVolume?: null | PortworxVolumeSource @go(PortworxVolume,*PortworxVolumeSource) @protobuf(24,bytes,opt)
+	portworxVolume?: null | #PortworxVolumeSource @go(PortworxVolume,*PortworxVolumeSource) @protobuf(24,bytes,opt)
 
 	// ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
 	// +optional
-	scaleIO?: null | ScaleIOVolumeSource @go(ScaleIO,*ScaleIOVolumeSource) @protobuf(25,bytes,opt)
+	scaleIO?: null | #ScaleIOVolumeSource @go(ScaleIO,*ScaleIOVolumeSource) @protobuf(25,bytes,opt)
 
 	// StorageOS represents a StorageOS volume attached and mounted on Kubernetes nodes.
 	// +optional
-	storageos?: null | StorageOSVolumeSource @go(StorageOS,*StorageOSVolumeSource) @protobuf(27,bytes,opt)
+	storageos?: null | #StorageOSVolumeSource @go(StorageOS,*StorageOSVolumeSource) @protobuf(27,bytes,opt)
 
 	// CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature).
 	// +optional
-	csi?: null | CSIVolumeSource @go(CSI,*CSIVolumeSource) @protobuf(28,bytes,opt)
+	csi?: null | #CSIVolumeSource @go(CSI,*CSIVolumeSource) @protobuf(28,bytes,opt)
 }
 
 // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace.
 // This volume finds the bound PV and mounts that volume for the pod. A
 // PersistentVolumeClaimVolumeSource is, essentially, a wrapper around another
 // type of volume that is owned by someone else (the system).
-PersistentVolumeClaimVolumeSource :: {
+#PersistentVolumeClaimVolumeSource: {
 	// ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
 	claimName: string @go(ClaimName) @protobuf(1,bytes,opt)
@@ -189,18 +189,18 @@
 
 // PersistentVolumeSource is similar to VolumeSource but meant for the
 // administrator who creates PVs. Exactly one of its members must be set.
-PersistentVolumeSource :: {
+#PersistentVolumeSource: {
 	// GCEPersistentDisk represents a GCE Disk resource that is attached to a
 	// kubelet's host machine and then exposed to the pod. Provisioned by an admin.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
 	// +optional
-	gcePersistentDisk?: null | GCEPersistentDiskVolumeSource @go(GCEPersistentDisk,*GCEPersistentDiskVolumeSource) @protobuf(1,bytes,opt)
+	gcePersistentDisk?: null | #GCEPersistentDiskVolumeSource @go(GCEPersistentDisk,*GCEPersistentDiskVolumeSource) @protobuf(1,bytes,opt)
 
 	// AWSElasticBlockStore represents an AWS Disk resource that is attached to a
 	// kubelet's host machine and then exposed to the pod.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
 	// +optional
-	awsElasticBlockStore?: null | AWSElasticBlockStoreVolumeSource @go(AWSElasticBlockStore,*AWSElasticBlockStoreVolumeSource) @protobuf(2,bytes,opt)
+	awsElasticBlockStore?: null | #AWSElasticBlockStoreVolumeSource @go(AWSElasticBlockStore,*AWSElasticBlockStoreVolumeSource) @protobuf(2,bytes,opt)
 
 	// HostPath represents a directory on the host.
 	// Provisioned by a developer or tester.
@@ -208,144 +208,144 @@
 	// On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
 	// +optional
-	hostPath?: null | HostPathVolumeSource @go(HostPath,*HostPathVolumeSource) @protobuf(3,bytes,opt)
+	hostPath?: null | #HostPathVolumeSource @go(HostPath,*HostPathVolumeSource) @protobuf(3,bytes,opt)
 
 	// Glusterfs represents a Glusterfs volume that is attached to a host and
 	// exposed to the pod. Provisioned by an admin.
 	// More info: https://examples.k8s.io/volumes/glusterfs/README.md
 	// +optional
-	glusterfs?: null | GlusterfsPersistentVolumeSource @go(Glusterfs,*GlusterfsPersistentVolumeSource) @protobuf(4,bytes,opt)
+	glusterfs?: null | #GlusterfsPersistentVolumeSource @go(Glusterfs,*GlusterfsPersistentVolumeSource) @protobuf(4,bytes,opt)
 
 	// NFS represents an NFS mount on the host. Provisioned by an admin.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
 	// +optional
-	nfs?: null | NFSVolumeSource @go(NFS,*NFSVolumeSource) @protobuf(5,bytes,opt)
+	nfs?: null | #NFSVolumeSource @go(NFS,*NFSVolumeSource) @protobuf(5,bytes,opt)
 
 	// RBD represents a Rados Block Device mount on the host that shares a pod's lifetime.
 	// More info: https://examples.k8s.io/volumes/rbd/README.md
 	// +optional
-	rbd?: null | RBDPersistentVolumeSource @go(RBD,*RBDPersistentVolumeSource) @protobuf(6,bytes,opt)
+	rbd?: null | #RBDPersistentVolumeSource @go(RBD,*RBDPersistentVolumeSource) @protobuf(6,bytes,opt)
 
 	// ISCSI represents an ISCSI Disk resource that is attached to a
 	// kubelet's host machine and then exposed to the pod. Provisioned by an admin.
 	// +optional
-	iscsi?: null | ISCSIPersistentVolumeSource @go(ISCSI,*ISCSIPersistentVolumeSource) @protobuf(7,bytes,opt)
+	iscsi?: null | #ISCSIPersistentVolumeSource @go(ISCSI,*ISCSIPersistentVolumeSource) @protobuf(7,bytes,opt)
 
 	// Cinder represents a cinder volume attached and mounted on kubelets host machine.
 	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
 	// +optional
-	cinder?: null | CinderPersistentVolumeSource @go(Cinder,*CinderPersistentVolumeSource) @protobuf(8,bytes,opt)
+	cinder?: null | #CinderPersistentVolumeSource @go(Cinder,*CinderPersistentVolumeSource) @protobuf(8,bytes,opt)
 
 	// CephFS represents a Ceph FS mount on the host that shares a pod's lifetime
 	// +optional
-	cephfs?: null | CephFSPersistentVolumeSource @go(CephFS,*CephFSPersistentVolumeSource) @protobuf(9,bytes,opt)
+	cephfs?: null | #CephFSPersistentVolumeSource @go(CephFS,*CephFSPersistentVolumeSource) @protobuf(9,bytes,opt)
 
 	// FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.
 	// +optional
-	fc?: null | FCVolumeSource @go(FC,*FCVolumeSource) @protobuf(10,bytes,opt)
+	fc?: null | #FCVolumeSource @go(FC,*FCVolumeSource) @protobuf(10,bytes,opt)
 
 	// Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running
 	// +optional
-	flocker?: null | FlockerVolumeSource @go(Flocker,*FlockerVolumeSource) @protobuf(11,bytes,opt)
+	flocker?: null | #FlockerVolumeSource @go(Flocker,*FlockerVolumeSource) @protobuf(11,bytes,opt)
 
 	// FlexVolume represents a generic volume resource that is
 	// provisioned/attached using an exec based plugin.
 	// +optional
-	flexVolume?: null | FlexPersistentVolumeSource @go(FlexVolume,*FlexPersistentVolumeSource) @protobuf(12,bytes,opt)
+	flexVolume?: null | #FlexPersistentVolumeSource @go(FlexVolume,*FlexPersistentVolumeSource) @protobuf(12,bytes,opt)
 
 	// AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
 	// +optional
-	azureFile?: null | AzureFilePersistentVolumeSource @go(AzureFile,*AzureFilePersistentVolumeSource) @protobuf(13,bytes,opt)
+	azureFile?: null | #AzureFilePersistentVolumeSource @go(AzureFile,*AzureFilePersistentVolumeSource) @protobuf(13,bytes,opt)
 
 	// VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine
 	// +optional
-	vsphereVolume?: null | VsphereVirtualDiskVolumeSource @go(VsphereVolume,*VsphereVirtualDiskVolumeSource) @protobuf(14,bytes,opt)
+	vsphereVolume?: null | #VsphereVirtualDiskVolumeSource @go(VsphereVolume,*VsphereVirtualDiskVolumeSource) @protobuf(14,bytes,opt)
 
 	// Quobyte represents a Quobyte mount on the host that shares a pod's lifetime
 	// +optional
-	quobyte?: null | QuobyteVolumeSource @go(Quobyte,*QuobyteVolumeSource) @protobuf(15,bytes,opt)
+	quobyte?: null | #QuobyteVolumeSource @go(Quobyte,*QuobyteVolumeSource) @protobuf(15,bytes,opt)
 
 	// AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
 	// +optional
-	azureDisk?: null | AzureDiskVolumeSource @go(AzureDisk,*AzureDiskVolumeSource) @protobuf(16,bytes,opt)
+	azureDisk?: null | #AzureDiskVolumeSource @go(AzureDisk,*AzureDiskVolumeSource) @protobuf(16,bytes,opt)
 
 	// PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine
-	photonPersistentDisk?: null | PhotonPersistentDiskVolumeSource @go(PhotonPersistentDisk,*PhotonPersistentDiskVolumeSource) @protobuf(17,bytes,opt)
+	photonPersistentDisk?: null | #PhotonPersistentDiskVolumeSource @go(PhotonPersistentDisk,*PhotonPersistentDiskVolumeSource) @protobuf(17,bytes,opt)
 
 	// PortworxVolume represents a portworx volume attached and mounted on kubelets host machine
 	// +optional
-	portworxVolume?: null | PortworxVolumeSource @go(PortworxVolume,*PortworxVolumeSource) @protobuf(18,bytes,opt)
+	portworxVolume?: null | #PortworxVolumeSource @go(PortworxVolume,*PortworxVolumeSource) @protobuf(18,bytes,opt)
 
 	// ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.
 	// +optional
-	scaleIO?: null | ScaleIOPersistentVolumeSource @go(ScaleIO,*ScaleIOPersistentVolumeSource) @protobuf(19,bytes,opt)
+	scaleIO?: null | #ScaleIOPersistentVolumeSource @go(ScaleIO,*ScaleIOPersistentVolumeSource) @protobuf(19,bytes,opt)
 
 	// Local represents directly-attached storage with node affinity
 	// +optional
-	local?: null | LocalVolumeSource @go(Local,*LocalVolumeSource) @protobuf(20,bytes,opt)
+	local?: null | #LocalVolumeSource @go(Local,*LocalVolumeSource) @protobuf(20,bytes,opt)
 
 	// StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod
 	// More info: https://examples.k8s.io/volumes/storageos/README.md
 	// +optional
-	storageos?: null | StorageOSPersistentVolumeSource @go(StorageOS,*StorageOSPersistentVolumeSource) @protobuf(21,bytes,opt)
+	storageos?: null | #StorageOSPersistentVolumeSource @go(StorageOS,*StorageOSPersistentVolumeSource) @protobuf(21,bytes,opt)
 
 	// CSI represents storage that is handled by an external CSI driver (Beta feature).
 	// +optional
-	csi?: null | CSIPersistentVolumeSource @go(CSI,*CSIPersistentVolumeSource) @protobuf(22,bytes,opt)
+	csi?: null | #CSIPersistentVolumeSource @go(CSI,*CSIPersistentVolumeSource) @protobuf(22,bytes,opt)
 }
 
 // BetaStorageClassAnnotation represents the beta/previous StorageClass annotation.
 // It's currently still used and will be held for backwards compatibility
-BetaStorageClassAnnotation :: "volume.beta.kubernetes.io/storage-class"
+#BetaStorageClassAnnotation: "volume.beta.kubernetes.io/storage-class"
 
 // MountOptionAnnotation defines mount option annotation used in PVs
-MountOptionAnnotation :: "volume.beta.kubernetes.io/mount-options"
+#MountOptionAnnotation: "volume.beta.kubernetes.io/mount-options"
 
 // PersistentVolume (PV) is a storage resource provisioned by an administrator.
 // It is analogous to a node.
 // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
-PersistentVolume :: {
-	metav1.TypeMeta
+#PersistentVolume: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines a specification of a persistent volume owned by the cluster.
 	// Provisioned by an administrator.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
 	// +optional
-	spec?: PersistentVolumeSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #PersistentVolumeSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status represents the current information/status for the persistent volume.
 	// Populated by the system.
 	// Read-only.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistent-volumes
 	// +optional
-	status?: PersistentVolumeStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #PersistentVolumeStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // PersistentVolumeSpec is the specification of a persistent volume.
-PersistentVolumeSpec :: {
+#PersistentVolumeSpec: {
 	// A description of the persistent volume's resources and capacity.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
 	// +optional
-	capacity?: ResourceList @go(Capacity) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	capacity?: #ResourceList @go(Capacity) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
-	PersistentVolumeSource
+	#PersistentVolumeSource
 
 	// AccessModes contains all ways the volume can be mounted.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes
 	// +optional
-	accessModes?: [...PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(3,bytes,rep,casttype=PersistentVolumeAccessMode)
+	accessModes?: [...#PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(3,bytes,rep,casttype=PersistentVolumeAccessMode)
 
 	// ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim.
 	// Expected to be non-nil when bound.
 	// claim.VolumeName is the authoritative bind between PV and PVC.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding
 	// +optional
-	claimRef?: null | ObjectReference @go(ClaimRef,*ObjectReference) @protobuf(4,bytes,opt)
+	claimRef?: null | #ObjectReference @go(ClaimRef,*ObjectReference) @protobuf(4,bytes,opt)
 
 	// What happens to a persistent volume when released from its claim.
 	// Valid options are Retain (default for manually created PersistentVolumes), Delete (default
@@ -353,7 +353,7 @@
 	// Recycle must be supported by the volume plugin underlying this PersistentVolume.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming
 	// +optional
-	persistentVolumeReclaimPolicy?: PersistentVolumeReclaimPolicy @go(PersistentVolumeReclaimPolicy) @protobuf(5,bytes,opt,casttype=PersistentVolumeReclaimPolicy)
+	persistentVolumeReclaimPolicy?: #PersistentVolumeReclaimPolicy @go(PersistentVolumeReclaimPolicy) @protobuf(5,bytes,opt,casttype=PersistentVolumeReclaimPolicy)
 
 	// Name of StorageClass to which this persistent volume belongs. Empty value
 	// means that this volume does not belong to any StorageClass.
@@ -369,59 +369,59 @@
 	// volumeMode defines if a volume is intended to be used with a formatted filesystem
 	// or to remain in raw block state. Value of Filesystem is implied when not included in spec.
 	// +optional
-	volumeMode?: null | PersistentVolumeMode @go(VolumeMode,*PersistentVolumeMode) @protobuf(8,bytes,opt,casttype=PersistentVolumeMode)
+	volumeMode?: null | #PersistentVolumeMode @go(VolumeMode,*PersistentVolumeMode) @protobuf(8,bytes,opt,casttype=PersistentVolumeMode)
 
 	// NodeAffinity defines constraints that limit what nodes this volume can be accessed from.
 	// This field influences the scheduling of pods that use this volume.
 	// +optional
-	nodeAffinity?: null | VolumeNodeAffinity @go(NodeAffinity,*VolumeNodeAffinity) @protobuf(9,bytes,opt)
+	nodeAffinity?: null | #VolumeNodeAffinity @go(NodeAffinity,*VolumeNodeAffinity) @protobuf(9,bytes,opt)
 }
 
 // VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from.
-VolumeNodeAffinity :: {
+#VolumeNodeAffinity: {
 	// Required specifies hard node constraints that must be met.
-	required?: null | NodeSelector @go(Required,*NodeSelector) @protobuf(1,bytes,opt)
+	required?: null | #NodeSelector @go(Required,*NodeSelector) @protobuf(1,bytes,opt)
 }
 
 // PersistentVolumeReclaimPolicy describes a policy for end-of-life maintenance of persistent volumes.
-PersistentVolumeReclaimPolicy :: string // enumPersistentVolumeReclaimPolicy
+#PersistentVolumeReclaimPolicy: string // #enumPersistentVolumeReclaimPolicy
 
-enumPersistentVolumeReclaimPolicy ::
-	PersistentVolumeReclaimRecycle |
-	PersistentVolumeReclaimDelete |
-	PersistentVolumeReclaimRetain
+#enumPersistentVolumeReclaimPolicy:
+	#PersistentVolumeReclaimRecycle |
+	#PersistentVolumeReclaimDelete |
+	#PersistentVolumeReclaimRetain
 
 // PersistentVolumeReclaimRecycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim.
 // The volume plugin must support Recycling.
-PersistentVolumeReclaimRecycle :: PersistentVolumeReclaimPolicy & "Recycle"
+#PersistentVolumeReclaimRecycle: #PersistentVolumeReclaimPolicy & "Recycle"
 
 // PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim.
 // The volume plugin must support Deletion.
-PersistentVolumeReclaimDelete :: PersistentVolumeReclaimPolicy & "Delete"
+#PersistentVolumeReclaimDelete: #PersistentVolumeReclaimPolicy & "Delete"
 
 // PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator.
 // The default policy is Retain.
-PersistentVolumeReclaimRetain :: PersistentVolumeReclaimPolicy & "Retain"
+#PersistentVolumeReclaimRetain: #PersistentVolumeReclaimPolicy & "Retain"
 
 // PersistentVolumeMode describes how a volume is intended to be consumed, either Block or Filesystem.
-PersistentVolumeMode :: string // enumPersistentVolumeMode
+#PersistentVolumeMode: string // #enumPersistentVolumeMode
 
-enumPersistentVolumeMode ::
-	PersistentVolumeBlock |
-	PersistentVolumeFilesystem
+#enumPersistentVolumeMode:
+	#PersistentVolumeBlock |
+	#PersistentVolumeFilesystem
 
 // PersistentVolumeBlock means the volume will not be formatted with a filesystem and will remain a raw block device.
-PersistentVolumeBlock :: PersistentVolumeMode & "Block"
+#PersistentVolumeBlock: #PersistentVolumeMode & "Block"
 
 // PersistentVolumeFilesystem means the volume will be or is formatted with a filesystem.
-PersistentVolumeFilesystem :: PersistentVolumeMode & "Filesystem"
+#PersistentVolumeFilesystem: #PersistentVolumeMode & "Filesystem"
 
 // PersistentVolumeStatus is the current status of a persistent volume.
-PersistentVolumeStatus :: {
+#PersistentVolumeStatus: {
 	// Phase indicates if a volume is available, bound to a claim, or released by a claim.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#phase
 	// +optional
-	phase?: PersistentVolumePhase @go(Phase) @protobuf(1,bytes,opt,casttype=PersistentVolumePhase)
+	phase?: #PersistentVolumePhase @go(Phase) @protobuf(1,bytes,opt,casttype=PersistentVolumePhase)
 
 	// A human-readable message indicating details about why the volume is in this state.
 	// +optional
@@ -434,70 +434,70 @@
 }
 
 // PersistentVolumeList is a list of PersistentVolume items.
-PersistentVolumeList :: {
-	metav1.TypeMeta
+#PersistentVolumeList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of persistent volumes.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes
-	items: [...PersistentVolume] @go(Items,[]PersistentVolume) @protobuf(2,bytes,rep)
+	items: [...#PersistentVolume] @go(Items,[]PersistentVolume) @protobuf(2,bytes,rep)
 }
 
 // PersistentVolumeClaim is a user's request for and claim to a persistent volume
-PersistentVolumeClaim :: {
-	metav1.TypeMeta
+#PersistentVolumeClaim: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the desired characteristics of a volume requested by a pod author.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
 	// +optional
-	spec?: PersistentVolumeClaimSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #PersistentVolumeClaimSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status represents the current information/status of a persistent volume claim.
 	// Read-only.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
 	// +optional
-	status?: PersistentVolumeClaimStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #PersistentVolumeClaimStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // PersistentVolumeClaimList is a list of PersistentVolumeClaim items.
-PersistentVolumeClaimList :: {
-	metav1.TypeMeta
+#PersistentVolumeClaimList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// A list of persistent volume claims.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#persistentvolumeclaims
-	items: [...PersistentVolumeClaim] @go(Items,[]PersistentVolumeClaim) @protobuf(2,bytes,rep)
+	items: [...#PersistentVolumeClaim] @go(Items,[]PersistentVolumeClaim) @protobuf(2,bytes,rep)
 }
 
 // PersistentVolumeClaimSpec describes the common attributes of storage devices
 // and allows a Source for provider-specific attributes
-PersistentVolumeClaimSpec :: {
+#PersistentVolumeClaimSpec: {
 	// AccessModes contains the desired access modes the volume should have.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
 	// +optional
-	accessModes?: [...PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(1,bytes,rep,casttype=PersistentVolumeAccessMode)
+	accessModes?: [...#PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(1,bytes,rep,casttype=PersistentVolumeAccessMode)
 
 	// A label query over volumes to consider for binding.
 	// +optional
-	selector?: null | metav1.LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(4,bytes,opt)
+	selector?: null | metav1.#LabelSelector @go(Selector,*metav1.LabelSelector) @protobuf(4,bytes,opt)
 
 	// Resources represents the minimum resources the volume should have.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources
 	// +optional
-	resources?: ResourceRequirements @go(Resources) @protobuf(2,bytes,opt)
+	resources?: #ResourceRequirements @go(Resources) @protobuf(2,bytes,opt)
 
 	// VolumeName is the binding reference to the PersistentVolume backing this claim.
 	// +optional
@@ -511,7 +511,7 @@
 	// volumeMode defines what type of volume is required by the claim.
 	// Value of Filesystem is implied when not included in claim spec.
 	// +optional
-	volumeMode?: null | PersistentVolumeMode @go(VolumeMode,*PersistentVolumeMode) @protobuf(6,bytes,opt,casttype=PersistentVolumeMode)
+	volumeMode?: null | #PersistentVolumeMode @go(VolumeMode,*PersistentVolumeMode) @protobuf(6,bytes,opt,casttype=PersistentVolumeMode)
 
 	// This field can be used to specify either:
 	// * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta)
@@ -526,34 +526,34 @@
 	// In the future, we plan to support more data source types and the behavior
 	// of the provisioner may change.
 	// +optional
-	dataSource?: null | TypedLocalObjectReference @go(DataSource,*TypedLocalObjectReference) @protobuf(7,bytes,opt)
+	dataSource?: null | #TypedLocalObjectReference @go(DataSource,*TypedLocalObjectReference) @protobuf(7,bytes,opt)
 }
 
 // PersistentVolumeClaimConditionType is a valid value of PersistentVolumeClaimCondition.Type
-PersistentVolumeClaimConditionType :: string // enumPersistentVolumeClaimConditionType
+#PersistentVolumeClaimConditionType: string // #enumPersistentVolumeClaimConditionType
 
-enumPersistentVolumeClaimConditionType ::
-	PersistentVolumeClaimResizing |
-	PersistentVolumeClaimFileSystemResizePending
+#enumPersistentVolumeClaimConditionType:
+	#PersistentVolumeClaimResizing |
+	#PersistentVolumeClaimFileSystemResizePending
 
 // PersistentVolumeClaimResizing - a user trigger resize of pvc has been started
-PersistentVolumeClaimResizing :: PersistentVolumeClaimConditionType & "Resizing"
+#PersistentVolumeClaimResizing: #PersistentVolumeClaimConditionType & "Resizing"
 
 // PersistentVolumeClaimFileSystemResizePending - controller resize is finished and a file system resize is pending on node
-PersistentVolumeClaimFileSystemResizePending :: PersistentVolumeClaimConditionType & "FileSystemResizePending"
+#PersistentVolumeClaimFileSystemResizePending: #PersistentVolumeClaimConditionType & "FileSystemResizePending"
 
 // PersistentVolumeClaimCondition contails details about state of pvc
-PersistentVolumeClaimCondition :: {
-	type:   PersistentVolumeClaimConditionType @go(Type) @protobuf(1,bytes,opt,casttype=PersistentVolumeClaimConditionType)
-	status: ConditionStatus                    @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
+#PersistentVolumeClaimCondition: {
+	type:   #PersistentVolumeClaimConditionType @go(Type) @protobuf(1,bytes,opt,casttype=PersistentVolumeClaimConditionType)
+	status: #ConditionStatus                    @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
 
 	// Last time we probed the condition.
 	// +optional
-	lastProbeTime?: metav1.Time @go(LastProbeTime) @protobuf(3,bytes,opt)
+	lastProbeTime?: metav1.#Time @go(LastProbeTime) @protobuf(3,bytes,opt)
 
 	// Last time the condition transitioned from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
 
 	// Unique, this should be a short, machine understandable string that gives the reason
 	// for condition's last transition. If it reports "ResizeStarted" that means the underlying
@@ -567,130 +567,130 @@
 }
 
 // PersistentVolumeClaimStatus is the current status of a persistent volume claim.
-PersistentVolumeClaimStatus :: {
+#PersistentVolumeClaimStatus: {
 	// Phase represents the current phase of PersistentVolumeClaim.
 	// +optional
-	phase?: PersistentVolumeClaimPhase @go(Phase) @protobuf(1,bytes,opt,casttype=PersistentVolumeClaimPhase)
+	phase?: #PersistentVolumeClaimPhase @go(Phase) @protobuf(1,bytes,opt,casttype=PersistentVolumeClaimPhase)
 
 	// AccessModes contains the actual access modes the volume backing the PVC has.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes-1
 	// +optional
-	accessModes?: [...PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(2,bytes,rep,casttype=PersistentVolumeAccessMode)
+	accessModes?: [...#PersistentVolumeAccessMode] @go(AccessModes,[]PersistentVolumeAccessMode) @protobuf(2,bytes,rep,casttype=PersistentVolumeAccessMode)
 
 	// Represents the actual resources of the underlying volume.
 	// +optional
-	capacity?: ResourceList @go(Capacity) @protobuf(3,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	capacity?: #ResourceList @go(Capacity) @protobuf(3,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// Current Condition of persistent volume claim. If underlying persistent volume is being
 	// resized then the Condition will be set to 'ResizeStarted'.
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...PersistentVolumeClaimCondition] @go(Conditions,[]PersistentVolumeClaimCondition) @protobuf(4,bytes,rep)
+	conditions?: [...#PersistentVolumeClaimCondition] @go(Conditions,[]PersistentVolumeClaimCondition) @protobuf(4,bytes,rep)
 }
 
-PersistentVolumeAccessMode :: string // enumPersistentVolumeAccessMode
+#PersistentVolumeAccessMode: string // #enumPersistentVolumeAccessMode
 
-enumPersistentVolumeAccessMode ::
-	ReadWriteOnce |
-	ReadOnlyMany |
-	ReadWriteMany
+#enumPersistentVolumeAccessMode:
+	#ReadWriteOnce |
+	#ReadOnlyMany |
+	#ReadWriteMany
 
 // can be mounted in read/write mode to exactly 1 host
-ReadWriteOnce :: PersistentVolumeAccessMode & "ReadWriteOnce"
+#ReadWriteOnce: #PersistentVolumeAccessMode & "ReadWriteOnce"
 
 // can be mounted in read-only mode to many hosts
-ReadOnlyMany :: PersistentVolumeAccessMode & "ReadOnlyMany"
+#ReadOnlyMany: #PersistentVolumeAccessMode & "ReadOnlyMany"
 
 // can be mounted in read/write mode to many hosts
-ReadWriteMany :: PersistentVolumeAccessMode & "ReadWriteMany"
+#ReadWriteMany: #PersistentVolumeAccessMode & "ReadWriteMany"
 
-PersistentVolumePhase :: string // enumPersistentVolumePhase
+#PersistentVolumePhase: string // #enumPersistentVolumePhase
 
-enumPersistentVolumePhase ::
-	VolumePending |
-	VolumeAvailable |
-	VolumeBound |
-	VolumeReleased |
-	VolumeFailed
+#enumPersistentVolumePhase:
+	#VolumePending |
+	#VolumeAvailable |
+	#VolumeBound |
+	#VolumeReleased |
+	#VolumeFailed
 
 // used for PersistentVolumes that are not available
-VolumePending :: PersistentVolumePhase & "Pending"
+#VolumePending: #PersistentVolumePhase & "Pending"
 
 // used for PersistentVolumes that are not yet bound
 // Available volumes are held by the binder and matched to PersistentVolumeClaims
-VolumeAvailable :: PersistentVolumePhase & "Available"
+#VolumeAvailable: #PersistentVolumePhase & "Available"
 
 // used for PersistentVolumes that are bound
-VolumeBound :: PersistentVolumePhase & "Bound"
+#VolumeBound: #PersistentVolumePhase & "Bound"
 
 // used for PersistentVolumes where the bound PersistentVolumeClaim was deleted
 // released volumes must be recycled before becoming available again
 // this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource
-VolumeReleased :: PersistentVolumePhase & "Released"
+#VolumeReleased: #PersistentVolumePhase & "Released"
 
 // used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim
-VolumeFailed :: PersistentVolumePhase & "Failed"
+#VolumeFailed: #PersistentVolumePhase & "Failed"
 
-PersistentVolumeClaimPhase :: string // enumPersistentVolumeClaimPhase
+#PersistentVolumeClaimPhase: string // #enumPersistentVolumeClaimPhase
 
-enumPersistentVolumeClaimPhase ::
-	ClaimPending |
-	ClaimBound |
-	ClaimLost
+#enumPersistentVolumeClaimPhase:
+	#ClaimPending |
+	#ClaimBound |
+	#ClaimLost
 
 // used for PersistentVolumeClaims that are not yet bound
-ClaimPending :: PersistentVolumeClaimPhase & "Pending"
+#ClaimPending: #PersistentVolumeClaimPhase & "Pending"
 
 // used for PersistentVolumeClaims that are bound
-ClaimBound :: PersistentVolumeClaimPhase & "Bound"
+#ClaimBound: #PersistentVolumeClaimPhase & "Bound"
 
 // used for PersistentVolumeClaims that lost their underlying
 // PersistentVolume. The claim was bound to a PersistentVolume and this
 // volume does not exist any longer and all data on it was lost.
-ClaimLost :: PersistentVolumeClaimPhase & "Lost"
+#ClaimLost: #PersistentVolumeClaimPhase & "Lost"
 
-HostPathType :: string // enumHostPathType
+#HostPathType: string // #enumHostPathType
 
-enumHostPathType ::
-	HostPathUnset |
-	HostPathDirectoryOrCreate |
-	HostPathDirectory |
-	HostPathFileOrCreate |
-	HostPathFile |
-	HostPathSocket |
-	HostPathCharDev |
-	HostPathBlockDev
+#enumHostPathType:
+	#HostPathUnset |
+	#HostPathDirectoryOrCreate |
+	#HostPathDirectory |
+	#HostPathFileOrCreate |
+	#HostPathFile |
+	#HostPathSocket |
+	#HostPathCharDev |
+	#HostPathBlockDev
 
 // For backwards compatible, leave it empty if unset
-HostPathUnset :: HostPathType & ""
+#HostPathUnset: #HostPathType & ""
 
 // If nothing exists at the given path, an empty directory will be created there
 // as needed with file mode 0755, having the same group and ownership with Kubelet.
-HostPathDirectoryOrCreate :: HostPathType & "DirectoryOrCreate"
+#HostPathDirectoryOrCreate: #HostPathType & "DirectoryOrCreate"
 
 // A directory must exist at the given path
-HostPathDirectory :: HostPathType & "Directory"
+#HostPathDirectory: #HostPathType & "Directory"
 
 // If nothing exists at the given path, an empty file will be created there
 // as needed with file mode 0644, having the same group and ownership with Kubelet.
-HostPathFileOrCreate :: HostPathType & "FileOrCreate"
+#HostPathFileOrCreate: #HostPathType & "FileOrCreate"
 
 // A file must exist at the given path
-HostPathFile :: HostPathType & "File"
+#HostPathFile: #HostPathType & "File"
 
 // A UNIX socket must exist at the given path
-HostPathSocket :: HostPathType & "Socket"
+#HostPathSocket: #HostPathType & "Socket"
 
 // A character device must exist at the given path
-HostPathCharDev :: HostPathType & "CharDevice"
+#HostPathCharDev: #HostPathType & "CharDevice"
 
 // A block device must exist at the given path
-HostPathBlockDev :: HostPathType & "BlockDevice"
+#HostPathBlockDev: #HostPathType & "BlockDevice"
 
 // Represents a host path mapped into a pod.
 // Host path volumes do not support ownership management or SELinux relabeling.
-HostPathVolumeSource :: {
+#HostPathVolumeSource: {
 	// Path of the directory on the host.
 	// If the path is a symlink, it will follow the link to the real path.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
@@ -700,18 +700,18 @@
 	// Defaults to ""
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath
 	// +optional
-	type?: null | HostPathType @go(Type,*HostPathType) @protobuf(2,bytes,opt)
+	type?: null | #HostPathType @go(Type,*HostPathType) @protobuf(2,bytes,opt)
 }
 
 // Represents an empty directory for a pod.
 // Empty directory volumes support ownership management and SELinux relabeling.
-EmptyDirVolumeSource :: {
+#EmptyDirVolumeSource: {
 	// What type of storage medium should back this directory.
 	// The default is "" which means to use the node's default medium.
 	// Must be an empty string (default) or Memory.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#emptydir
 	// +optional
-	medium?: StorageMedium @go(Medium) @protobuf(1,bytes,opt,casttype=StorageMedium)
+	medium?: #StorageMedium @go(Medium) @protobuf(1,bytes,opt,casttype=StorageMedium)
 
 	// Total amount of local storage required for this EmptyDir volume.
 	// The size limit is also applicable for memory medium.
@@ -720,12 +720,12 @@
 	// The default is nil which means that the limit is undefined.
 	// More info: http://kubernetes.io/docs/user-guide/volumes#emptydir
 	// +optional
-	sizeLimit?: null | resource.Quantity @go(SizeLimit,*resource.Quantity) @protobuf(2,bytes,opt)
+	sizeLimit?: null | resource.#Quantity @go(SizeLimit,*resource.Quantity) @protobuf(2,bytes,opt)
 }
 
 // Represents a Glusterfs mount that lasts the lifetime of a pod.
 // Glusterfs volumes do not support ownership management or SELinux relabeling.
-GlusterfsVolumeSource :: {
+#GlusterfsVolumeSource: {
 	// EndpointsName is the endpoint name that details Glusterfs topology.
 	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
 	endpoints: string @go(EndpointsName) @protobuf(1,bytes,opt)
@@ -743,7 +743,7 @@
 
 // Represents a Glusterfs mount that lasts the lifetime of a pod.
 // Glusterfs volumes do not support ownership management or SELinux relabeling.
-GlusterfsPersistentVolumeSource :: {
+#GlusterfsPersistentVolumeSource: {
 	// EndpointsName is the endpoint name that details Glusterfs topology.
 	// More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod
 	endpoints: string @go(EndpointsName) @protobuf(1,bytes,opt)
@@ -767,7 +767,7 @@
 
 // Represents a Rados Block Device mount that lasts the lifetime of a pod.
 // RBD volumes support ownership management and SELinux relabeling.
-RBDVolumeSource :: {
+#RBDVolumeSource: {
 	// A collection of Ceph monitors.
 	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
 	monitors: [...string] @go(CephMonitors,[]string) @protobuf(1,bytes,rep)
@@ -807,7 +807,7 @@
 	// Default is nil.
 	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
 	// +optional
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(7,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(7,bytes,opt)
 
 	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
 	// Defaults to false.
@@ -818,7 +818,7 @@
 
 // Represents a Rados Block Device mount that lasts the lifetime of a pod.
 // RBD volumes support ownership management and SELinux relabeling.
-RBDPersistentVolumeSource :: {
+#RBDPersistentVolumeSource: {
 	// A collection of Ceph monitors.
 	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
 	monitors: [...string] @go(CephMonitors,[]string) @protobuf(1,bytes,rep)
@@ -858,7 +858,7 @@
 	// Default is nil.
 	// More info: https://examples.k8s.io/volumes/rbd/README.md#how-to-use-it
 	// +optional
-	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(7,bytes,opt)
+	secretRef?: null | #SecretReference @go(SecretRef,*SecretReference) @protobuf(7,bytes,opt)
 
 	// ReadOnly here will force the ReadOnly setting in VolumeMounts.
 	// Defaults to false.
@@ -871,7 +871,7 @@
 // A Cinder volume must exist before mounting to a container.
 // The volume must also be in the same region as the kubelet.
 // Cinder volumes support ownership management and SELinux relabeling.
-CinderVolumeSource :: {
+#CinderVolumeSource: {
 	// volume id used to identify the volume in cinder.
 	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
 	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)
@@ -892,14 +892,14 @@
 	// Optional: points to a secret object containing parameters used to connect
 	// to OpenStack.
 	// +optional
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(4,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(4,bytes,opt)
 }
 
 // Represents a cinder volume resource in Openstack.
 // A Cinder volume must exist before mounting to a container.
 // The volume must also be in the same region as the kubelet.
 // Cinder volumes support ownership management and SELinux relabeling.
-CinderPersistentVolumeSource :: {
+#CinderPersistentVolumeSource: {
 	// volume id used to identify the volume in cinder.
 	// More info: https://examples.k8s.io/mysql-cinder-pd/README.md
 	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)
@@ -920,12 +920,12 @@
 	// Optional: points to a secret object containing parameters used to connect
 	// to OpenStack.
 	// +optional
-	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(4,bytes,opt)
+	secretRef?: null | #SecretReference @go(SecretRef,*SecretReference) @protobuf(4,bytes,opt)
 }
 
 // Represents a Ceph Filesystem mount that lasts the lifetime of a pod
 // Cephfs volumes do not support ownership management or SELinux relabeling.
-CephFSVolumeSource :: {
+#CephFSVolumeSource: {
 	// Required: Monitors is a collection of Ceph monitors
 	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
 	monitors: [...string] @go(Monitors,[]string) @protobuf(1,bytes,rep)
@@ -947,7 +947,7 @@
 	// Optional: SecretRef is reference to the authentication secret for User, default is empty.
 	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
 	// +optional
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
 
 	// Optional: Defaults to false (read/write). ReadOnly here will force
 	// the ReadOnly setting in VolumeMounts.
@@ -958,7 +958,7 @@
 
 // SecretReference represents a Secret Reference. It has enough information to retrieve secret
 // in any namespace
-SecretReference :: {
+#SecretReference: {
 	// Name is unique within a namespace to reference a secret resource.
 	// +optional
 	name?: string @go(Name) @protobuf(1,bytes,opt)
@@ -970,7 +970,7 @@
 
 // Represents a Ceph Filesystem mount that lasts the lifetime of a pod
 // Cephfs volumes do not support ownership management or SELinux relabeling.
-CephFSPersistentVolumeSource :: {
+#CephFSPersistentVolumeSource: {
 	// Required: Monitors is a collection of Ceph monitors
 	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
 	monitors: [...string] @go(Monitors,[]string) @protobuf(1,bytes,rep)
@@ -992,7 +992,7 @@
 	// Optional: SecretRef is reference to the authentication secret for User, default is empty.
 	// More info: https://examples.k8s.io/volumes/cephfs/README.md#how-to-use-it
 	// +optional
-	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(5,bytes,opt)
+	secretRef?: null | #SecretReference @go(SecretRef,*SecretReference) @protobuf(5,bytes,opt)
 
 	// Optional: Defaults to false (read/write). ReadOnly here will force
 	// the ReadOnly setting in VolumeMounts.
@@ -1004,7 +1004,7 @@
 // Represents a Flocker volume mounted by the Flocker agent.
 // One and only one of datasetName and datasetUUID should be set.
 // Flocker volumes do not support ownership management or SELinux relabeling.
-FlockerVolumeSource :: {
+#FlockerVolumeSource: {
 	// Name of the dataset stored as metadata -> name on the dataset for Flocker
 	// should be considered as deprecated
 	// +optional
@@ -1016,35 +1016,35 @@
 }
 
 // StorageMedium defines ways that storage can be allocated to a volume.
-StorageMedium :: string // enumStorageMedium
+#StorageMedium: string // #enumStorageMedium
 
-enumStorageMedium ::
-	StorageMediumDefault |
-	StorageMediumMemory |
-	StorageMediumHugePages |
-	StorageMediumHugePagesPrefix
+#enumStorageMedium:
+	#StorageMediumDefault |
+	#StorageMediumMemory |
+	#StorageMediumHugePages |
+	#StorageMediumHugePagesPrefix
 
-StorageMediumDefault ::         StorageMedium & ""
-StorageMediumMemory ::          StorageMedium & "Memory"
-StorageMediumHugePages ::       StorageMedium & "HugePages"
-StorageMediumHugePagesPrefix :: StorageMedium & "HugePages-"
+#StorageMediumDefault:         #StorageMedium & ""
+#StorageMediumMemory:          #StorageMedium & "Memory"
+#StorageMediumHugePages:       #StorageMedium & "HugePages"
+#StorageMediumHugePagesPrefix: #StorageMedium & "HugePages-"
 
 // Protocol defines network protocols supported for things like container ports.
-Protocol :: string // enumProtocol
+#Protocol: string // #enumProtocol
 
-enumProtocol ::
-	ProtocolTCP |
-	ProtocolUDP |
-	ProtocolSCTP
+#enumProtocol:
+	#ProtocolTCP |
+	#ProtocolUDP |
+	#ProtocolSCTP
 
 // ProtocolTCP is the TCP protocol.
-ProtocolTCP :: Protocol & "TCP"
+#ProtocolTCP: #Protocol & "TCP"
 
 // ProtocolUDP is the UDP protocol.
-ProtocolUDP :: Protocol & "UDP"
+#ProtocolUDP: #Protocol & "UDP"
 
 // ProtocolSCTP is the SCTP protocol.
-ProtocolSCTP :: Protocol & "SCTP"
+#ProtocolSCTP: #Protocol & "SCTP"
 
 // Represents a Persistent Disk resource in Google Compute Engine.
 //
@@ -1052,7 +1052,7 @@
 // also be in the same GCE project and zone as the kubelet. A GCE PD
 // can only be mounted as read/write once or read-only many times. GCE
 // PDs support ownership management and SELinux relabeling.
-GCEPersistentDiskVolumeSource :: {
+#GCEPersistentDiskVolumeSource: {
 	// Unique name of the PD resource in GCE. Used to identify the disk in GCE.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk
 	pdName: string @go(PDName) @protobuf(1,bytes,opt)
@@ -1082,7 +1082,7 @@
 
 // Represents a Quobyte mount that lasts the lifetime of a pod.
 // Quobyte volumes do not support ownership management or SELinux relabeling.
-QuobyteVolumeSource :: {
+#QuobyteVolumeSource: {
 	// Registry represents a single or multiple Quobyte Registry services
 	// specified as a string as host:port pair (multiple entries are separated with commas)
 	// which acts as the central registry for volumes
@@ -1114,7 +1114,7 @@
 
 // FlexPersistentVolumeSource represents a generic persistent volume resource that is
 // provisioned/attached using an exec based plugin.
-FlexPersistentVolumeSource :: {
+#FlexPersistentVolumeSource: {
 	// Driver is the name of the driver to use for this volume.
 	driver: string @go(Driver) @protobuf(1,bytes,opt)
 
@@ -1130,7 +1130,7 @@
 	// contains more than one secret, all secrets are passed to the plugin
 	// scripts.
 	// +optional
-	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(3,bytes,opt)
+	secretRef?: null | #SecretReference @go(SecretRef,*SecretReference) @protobuf(3,bytes,opt)
 
 	// Optional: Defaults to false (read/write). ReadOnly here will force
 	// the ReadOnly setting in VolumeMounts.
@@ -1144,7 +1144,7 @@
 
 // FlexVolume represents a generic volume resource that is
 // provisioned/attached using an exec based plugin.
-FlexVolumeSource :: {
+#FlexVolumeSource: {
 	// Driver is the name of the driver to use for this volume.
 	driver: string @go(Driver) @protobuf(1,bytes,opt)
 
@@ -1160,7 +1160,7 @@
 	// contains more than one secret, all secrets are passed to the plugin
 	// scripts.
 	// +optional
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(3,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(3,bytes,opt)
 
 	// Optional: Defaults to false (read/write). ReadOnly here will force
 	// the ReadOnly setting in VolumeMounts.
@@ -1178,7 +1178,7 @@
 // must also be in the same AWS zone as the kubelet. An AWS EBS disk
 // can only be mounted as read/write once. AWS EBS volumes support
 // ownership management and SELinux relabeling.
-AWSElasticBlockStoreVolumeSource :: {
+#AWSElasticBlockStoreVolumeSource: {
 	// Unique ID of the persistent disk resource in AWS (Amazon EBS volume).
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore
 	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)
@@ -1212,7 +1212,7 @@
 // DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an
 // EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir
 // into the Pod's container.
-GitRepoVolumeSource :: {
+#GitRepoVolumeSource: {
 	// Repository URL
 	repository: string @go(Repository) @protobuf(1,bytes,opt)
 
@@ -1233,7 +1233,7 @@
 // The contents of the target Secret's Data field will be presented in a volume
 // as files using the keys in the Data field as the file names.
 // Secret volumes support ownership management and SELinux relabeling.
-SecretVolumeSource :: {
+#SecretVolumeSource: {
 	// Name of the secret in the pod's namespace to use.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#secret
 	// +optional
@@ -1247,7 +1247,7 @@
 	// the volume setup will error unless it is marked optional. Paths must be
 	// relative and may not contain the '..' path or start with '..'.
 	// +optional
-	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
+	items?: [...#KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
 
 	// Optional: mode bits to use on created files by default. Must be a
 	// value between 0 and 0777. Defaults to 0644.
@@ -1262,7 +1262,7 @@
 	optional?: null | bool @go(Optional,*bool) @protobuf(4,varint,opt)
 }
 
-SecretVolumeSourceDefaultMode :: int32 & 0o644
+#SecretVolumeSourceDefaultMode: int32 & 0o644
 
 // Adapts a secret into a projected volume.
 //
@@ -1270,8 +1270,8 @@
 // projected volume as files using the keys in the Data field as the file names.
 // Note that this is identical to a secret volume source without the default
 // mode.
-SecretProjection :: {
-	LocalObjectReference
+#SecretProjection: {
+	#LocalObjectReference
 
 	// If unspecified, each key-value pair in the Data field of the referenced
 	// Secret will be projected into the volume as a file whose name is the
@@ -1281,7 +1281,7 @@
 	// the volume setup will error unless it is marked optional. Paths must be
 	// relative and may not contain the '..' path or start with '..'.
 	// +optional
-	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
+	items?: [...#KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
 
 	// Specify whether the Secret or its key must be defined
 	// +optional
@@ -1290,7 +1290,7 @@
 
 // Represents an NFS mount that lasts the lifetime of a pod.
 // NFS volumes do not support ownership management or SELinux relabeling.
-NFSVolumeSource :: {
+#NFSVolumeSource: {
 	// Server is the hostname or IP address of the NFS server.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs
 	server: string @go(Server) @protobuf(1,bytes,opt)
@@ -1310,7 +1310,7 @@
 // Represents an ISCSI disk.
 // ISCSI volumes can only be mounted as read/write once.
 // ISCSI volumes support ownership management and SELinux relabeling.
-ISCSIVolumeSource :: {
+#ISCSIVolumeSource: {
 	// iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
 	// is other than default (typically TCP ports 860 and 3260).
 	targetPortal: string @go(TargetPortal) @protobuf(1,bytes,opt)
@@ -1354,7 +1354,7 @@
 
 	// CHAP Secret for iSCSI target and initiator authentication
 	// +optional
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(10,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(10,bytes,opt)
 
 	// Custom iSCSI Initiator Name.
 	// If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
@@ -1366,7 +1366,7 @@
 // ISCSIPersistentVolumeSource represents an ISCSI disk.
 // ISCSI volumes can only be mounted as read/write once.
 // ISCSI volumes support ownership management and SELinux relabeling.
-ISCSIPersistentVolumeSource :: {
+#ISCSIPersistentVolumeSource: {
 	// iSCSI Target Portal. The Portal is either an IP or ip_addr:port if the port
 	// is other than default (typically TCP ports 860 and 3260).
 	targetPortal: string @go(TargetPortal) @protobuf(1,bytes,opt)
@@ -1410,7 +1410,7 @@
 
 	// CHAP Secret for iSCSI target and initiator authentication
 	// +optional
-	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(10,bytes,opt)
+	secretRef?: null | #SecretReference @go(SecretRef,*SecretReference) @protobuf(10,bytes,opt)
 
 	// Custom iSCSI Initiator Name.
 	// If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface
@@ -1422,7 +1422,7 @@
 // Represents a Fibre Channel volume.
 // Fibre Channel volumes can only be mounted as read/write once.
 // Fibre Channel volumes support ownership management and SELinux relabeling.
-FCVolumeSource :: {
+#FCVolumeSource: {
 	// Optional: FC target worldwide names (WWNs)
 	// +optional
 	targetWWNs?: [...string] @go(TargetWWNs,[]string) @protobuf(1,bytes,rep)
@@ -1450,7 +1450,7 @@
 }
 
 // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
-AzureFileVolumeSource :: {
+#AzureFileVolumeSource: {
 	// the name of secret that contains Azure Storage Account Name and Key
 	secretName: string @go(SecretName) @protobuf(1,bytes,opt)
 
@@ -1464,7 +1464,7 @@
 }
 
 // AzureFile represents an Azure File Service mount on the host and bind mount to the pod.
-AzureFilePersistentVolumeSource :: {
+#AzureFilePersistentVolumeSource: {
 	// the name of secret that contains Azure Storage Account Name and Key
 	secretName: string @go(SecretName) @protobuf(1,bytes,opt)
 
@@ -1483,7 +1483,7 @@
 }
 
 // Represents a vSphere volume resource.
-VsphereVirtualDiskVolumeSource :: {
+#VsphereVirtualDiskVolumeSource: {
 	// Path that identifies vSphere volume vmdk
 	volumePath: string @go(VolumePath) @protobuf(1,bytes,opt)
 
@@ -1503,7 +1503,7 @@
 }
 
 // Represents a Photon Controller persistent disk resource.
-PhotonPersistentDiskVolumeSource :: {
+#PhotonPersistentDiskVolumeSource: {
 	// ID that identifies Photon Controller persistent disk
 	pdID: string @go(PdID) @protobuf(1,bytes,opt)
 
@@ -1513,29 +1513,29 @@
 	fsType?: string @go(FSType) @protobuf(2,bytes,opt)
 }
 
-AzureDataDiskCachingMode :: string // enumAzureDataDiskCachingMode
+#AzureDataDiskCachingMode: string // #enumAzureDataDiskCachingMode
 
-enumAzureDataDiskCachingMode ::
-	AzureDataDiskCachingNone |
-	AzureDataDiskCachingReadOnly |
-	AzureDataDiskCachingReadWrite
+#enumAzureDataDiskCachingMode:
+	#AzureDataDiskCachingNone |
+	#AzureDataDiskCachingReadOnly |
+	#AzureDataDiskCachingReadWrite
 
-AzureDataDiskKind :: string // enumAzureDataDiskKind
+#AzureDataDiskKind: string // #enumAzureDataDiskKind
 
-enumAzureDataDiskKind ::
-	AzureSharedBlobDisk |
-	AzureDedicatedBlobDisk |
-	AzureManagedDisk
+#enumAzureDataDiskKind:
+	#AzureSharedBlobDisk |
+	#AzureDedicatedBlobDisk |
+	#AzureManagedDisk
 
-AzureDataDiskCachingNone ::      AzureDataDiskCachingMode & "None"
-AzureDataDiskCachingReadOnly ::  AzureDataDiskCachingMode & "ReadOnly"
-AzureDataDiskCachingReadWrite :: AzureDataDiskCachingMode & "ReadWrite"
-AzureSharedBlobDisk ::           AzureDataDiskKind & "Shared"
-AzureDedicatedBlobDisk ::        AzureDataDiskKind & "Dedicated"
-AzureManagedDisk ::              AzureDataDiskKind & "Managed"
+#AzureDataDiskCachingNone:      #AzureDataDiskCachingMode & "None"
+#AzureDataDiskCachingReadOnly:  #AzureDataDiskCachingMode & "ReadOnly"
+#AzureDataDiskCachingReadWrite: #AzureDataDiskCachingMode & "ReadWrite"
+#AzureSharedBlobDisk:           #AzureDataDiskKind & "Shared"
+#AzureDedicatedBlobDisk:        #AzureDataDiskKind & "Dedicated"
+#AzureManagedDisk:              #AzureDataDiskKind & "Managed"
 
 // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.
-AzureDiskVolumeSource :: {
+#AzureDiskVolumeSource: {
 	// The Name of the data disk in the blob storage
 	diskName: string @go(DiskName) @protobuf(1,bytes,opt)
 
@@ -1544,7 +1544,7 @@
 
 	// Host Caching mode: None, Read Only, Read Write.
 	// +optional
-	cachingMode?: null | AzureDataDiskCachingMode @go(CachingMode,*AzureDataDiskCachingMode) @protobuf(3,bytes,opt,casttype=AzureDataDiskCachingMode)
+	cachingMode?: null | #AzureDataDiskCachingMode @go(CachingMode,*AzureDataDiskCachingMode) @protobuf(3,bytes,opt,casttype=AzureDataDiskCachingMode)
 
 	// Filesystem type to mount.
 	// Must be a filesystem type supported by the host operating system.
@@ -1558,11 +1558,11 @@
 	readOnly?: null | bool @go(ReadOnly,*bool) @protobuf(5,varint,opt)
 
 	// Expected values Shared: multiple blob disks per storage account  Dedicated: single blob disk per storage account  Managed: azure managed data disk (only in managed availability set). defaults to shared
-	kind?: null | AzureDataDiskKind @go(Kind,*AzureDataDiskKind) @protobuf(6,bytes,opt,casttype=AzureDataDiskKind)
+	kind?: null | #AzureDataDiskKind @go(Kind,*AzureDataDiskKind) @protobuf(6,bytes,opt,casttype=AzureDataDiskKind)
 }
 
 // PortworxVolumeSource represents a Portworx volume resource.
-PortworxVolumeSource :: {
+#PortworxVolumeSource: {
 	// VolumeID uniquely identifies a Portworx volume
 	volumeID: string @go(VolumeID) @protobuf(1,bytes,opt)
 
@@ -1578,7 +1578,7 @@
 }
 
 // ScaleIOVolumeSource represents a persistent ScaleIO volume
-ScaleIOVolumeSource :: {
+#ScaleIOVolumeSource: {
 	// The host address of the ScaleIO API Gateway.
 	gateway: string @go(Gateway) @protobuf(1,bytes,opt)
 
@@ -1587,7 +1587,7 @@
 
 	// SecretRef references to the secret for ScaleIO user and other
 	// sensitive information. If this is not provided, Login operation will fail.
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(3,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(3,bytes,opt)
 
 	// Flag to enable/disable SSL communication with Gateway, default false
 	// +optional
@@ -1624,7 +1624,7 @@
 }
 
 // ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume
-ScaleIOPersistentVolumeSource :: {
+#ScaleIOPersistentVolumeSource: {
 	// The host address of the ScaleIO API Gateway.
 	gateway: string @go(Gateway) @protobuf(1,bytes,opt)
 
@@ -1633,7 +1633,7 @@
 
 	// SecretRef references to the secret for ScaleIO user and other
 	// sensitive information. If this is not provided, Login operation will fail.
-	secretRef?: null | SecretReference @go(SecretRef,*SecretReference) @protobuf(3,bytes,opt)
+	secretRef?: null | #SecretReference @go(SecretRef,*SecretReference) @protobuf(3,bytes,opt)
 
 	// Flag to enable/disable SSL communication with Gateway, default false
 	// +optional
@@ -1670,7 +1670,7 @@
 }
 
 // Represents a StorageOS persistent volume resource.
-StorageOSVolumeSource :: {
+#StorageOSVolumeSource: {
 	// VolumeName is the human-readable name of the StorageOS volume.  Volume
 	// names are only unique within a namespace.
 	volumeName?: string @go(VolumeName) @protobuf(1,bytes,opt)
@@ -1698,11 +1698,11 @@
 	// SecretRef specifies the secret to use for obtaining the StorageOS API
 	// credentials.  If not specified, default values will be attempted.
 	// +optional
-	secretRef?: null | LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
+	secretRef?: null | #LocalObjectReference @go(SecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
 }
 
 // Represents a StorageOS persistent volume resource.
-StorageOSPersistentVolumeSource :: {
+#StorageOSPersistentVolumeSource: {
 	// VolumeName is the human-readable name of the StorageOS volume.  Volume
 	// names are only unique within a namespace.
 	volumeName?: string @go(VolumeName) @protobuf(1,bytes,opt)
@@ -1730,7 +1730,7 @@
 	// SecretRef specifies the secret to use for obtaining the StorageOS API
 	// credentials.  If not specified, default values will be attempted.
 	// +optional
-	secretRef?: null | ObjectReference @go(SecretRef,*ObjectReference) @protobuf(5,bytes,opt)
+	secretRef?: null | #ObjectReference @go(SecretRef,*ObjectReference) @protobuf(5,bytes,opt)
 }
 
 // Adapts a ConfigMap into a volume.
@@ -1739,8 +1739,8 @@
 // volume as files using the keys in the Data field as the file names, unless
 // the items element is populated with specific mappings of keys to paths.
 // ConfigMap volumes support ownership management and SELinux relabeling.
-ConfigMapVolumeSource :: {
-	LocalObjectReference
+#ConfigMapVolumeSource: {
+	#LocalObjectReference
 
 	// If unspecified, each key-value pair in the Data field of the referenced
 	// ConfigMap will be projected into the volume as a file whose name is the
@@ -1750,7 +1750,7 @@
 	// the volume setup will error unless it is marked optional. Paths must be
 	// relative and may not contain the '..' path or start with '..'.
 	// +optional
-	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
+	items?: [...#KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
 
 	// Optional: mode bits to use on created files by default. Must be a
 	// value between 0 and 0777. Defaults to 0644.
@@ -1765,7 +1765,7 @@
 	optional?: null | bool @go(Optional,*bool) @protobuf(4,varint,opt)
 }
 
-ConfigMapVolumeSourceDefaultMode :: int32 & 0o644
+#ConfigMapVolumeSourceDefaultMode: int32 & 0o644
 
 // Adapts a ConfigMap into a projected volume.
 //
@@ -1774,8 +1774,8 @@
 // unless the items element is populated with specific mappings of keys to paths.
 // Note that this is identical to a configmap volume source without the default
 // mode.
-ConfigMapProjection :: {
-	LocalObjectReference
+#ConfigMapProjection: {
+	#LocalObjectReference
 
 	// If unspecified, each key-value pair in the Data field of the referenced
 	// ConfigMap will be projected into the volume as a file whose name is the
@@ -1785,7 +1785,7 @@
 	// the volume setup will error unless it is marked optional. Paths must be
 	// relative and may not contain the '..' path or start with '..'.
 	// +optional
-	items?: [...KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
+	items?: [...#KeyToPath] @go(Items,[]KeyToPath) @protobuf(2,bytes,rep)
 
 	// Specify whether the ConfigMap or its keys must be defined
 	// +optional
@@ -1796,7 +1796,7 @@
 // volume. This projection can be used to insert a service account token into
 // the pods runtime filesystem for use against APIs (Kubernetes API Server or
 // otherwise).
-ServiceAccountTokenProjection :: {
+#ServiceAccountTokenProjection: {
 	// Audience is the intended audience of the token. A recipient of a token
 	// must identify itself with an identifier specified in the audience of the
 	// token, and otherwise should reject the token. The audience defaults to the
@@ -1819,9 +1819,9 @@
 }
 
 // Represents a projected volume source
-ProjectedVolumeSource :: {
+#ProjectedVolumeSource: {
 	// list of volume projections
-	sources: [...VolumeProjection] @go(Sources,[]VolumeProjection) @protobuf(1,bytes,rep)
+	sources: [...#VolumeProjection] @go(Sources,[]VolumeProjection) @protobuf(1,bytes,rep)
 
 	// Mode bits to use on created files by default. Must be a value between
 	// 0 and 0777.
@@ -1833,28 +1833,28 @@
 }
 
 // Projection that may be projected along with other supported volume types
-VolumeProjection :: {
+#VolumeProjection: {
 	// information about the secret data to project
 	// +optional
-	secret?: null | SecretProjection @go(Secret,*SecretProjection) @protobuf(1,bytes,opt)
+	secret?: null | #SecretProjection @go(Secret,*SecretProjection) @protobuf(1,bytes,opt)
 
 	// information about the downwardAPI data to project
 	// +optional
-	downwardAPI?: null | DownwardAPIProjection @go(DownwardAPI,*DownwardAPIProjection) @protobuf(2,bytes,opt)
+	downwardAPI?: null | #DownwardAPIProjection @go(DownwardAPI,*DownwardAPIProjection) @protobuf(2,bytes,opt)
 
 	// information about the configMap data to project
 	// +optional
-	configMap?: null | ConfigMapProjection @go(ConfigMap,*ConfigMapProjection) @protobuf(3,bytes,opt)
+	configMap?: null | #ConfigMapProjection @go(ConfigMap,*ConfigMapProjection) @protobuf(3,bytes,opt)
 
 	// information about the serviceAccountToken data to project
 	// +optional
-	serviceAccountToken?: null | ServiceAccountTokenProjection @go(ServiceAccountToken,*ServiceAccountTokenProjection) @protobuf(4,bytes,opt)
+	serviceAccountToken?: null | #ServiceAccountTokenProjection @go(ServiceAccountToken,*ServiceAccountTokenProjection) @protobuf(4,bytes,opt)
 }
 
-ProjectedVolumeSourceDefaultMode :: int32 & 0o644
+#ProjectedVolumeSourceDefaultMode: int32 & 0o644
 
 // Maps a string key to a path within a volume.
-KeyToPath :: {
+#KeyToPath: {
 	// The key to project.
 	key: string @go(Key) @protobuf(1,bytes,opt)
 
@@ -1873,7 +1873,7 @@
 }
 
 // Local represents directly-attached storage with node affinity (Beta feature)
-LocalVolumeSource :: {
+#LocalVolumeSource: {
 	// The full path to the volume on the node.
 	// It can be either a directory or block device (disk, partition, ...).
 	path: string @go(Path) @protobuf(1,bytes,opt)
@@ -1887,7 +1887,7 @@
 }
 
 // Represents storage that is managed by an external CSI volume driver (Beta feature)
-CSIPersistentVolumeSource :: {
+#CSIPersistentVolumeSource: {
 	// Driver is the name of the driver to use for this volume.
 	// Required.
 	driver: string @go(Driver) @protobuf(1,bytes,opt)
@@ -1918,7 +1918,7 @@
 	// This field is optional, and may be empty if no secret is required. If the
 	// secret object contains more than one secret, all secrets are passed.
 	// +optional
-	controllerPublishSecretRef?: null | SecretReference @go(ControllerPublishSecretRef,*SecretReference) @protobuf(6,bytes,opt)
+	controllerPublishSecretRef?: null | #SecretReference @go(ControllerPublishSecretRef,*SecretReference) @protobuf(6,bytes,opt)
 
 	// NodeStageSecretRef is a reference to the secret object containing sensitive
 	// information to pass to the CSI driver to complete the CSI NodeStageVolume
@@ -1926,7 +1926,7 @@
 	// This field is optional, and may be empty if no secret is required. If the
 	// secret object contains more than one secret, all secrets are passed.
 	// +optional
-	nodeStageSecretRef?: null | SecretReference @go(NodeStageSecretRef,*SecretReference) @protobuf(7,bytes,opt)
+	nodeStageSecretRef?: null | #SecretReference @go(NodeStageSecretRef,*SecretReference) @protobuf(7,bytes,opt)
 
 	// NodePublishSecretRef is a reference to the secret object containing
 	// sensitive information to pass to the CSI driver to complete the CSI
@@ -1934,7 +1934,7 @@
 	// This field is optional, and may be empty if no secret is required. If the
 	// secret object contains more than one secret, all secrets are passed.
 	// +optional
-	nodePublishSecretRef?: null | SecretReference @go(NodePublishSecretRef,*SecretReference) @protobuf(8,bytes,opt)
+	nodePublishSecretRef?: null | #SecretReference @go(NodePublishSecretRef,*SecretReference) @protobuf(8,bytes,opt)
 
 	// ControllerExpandSecretRef is a reference to the secret object containing
 	// sensitive information to pass to the CSI driver to complete the CSI
@@ -1943,11 +1943,11 @@
 	// This field is optional, and may be empty if no secret is required. If the
 	// secret object contains more than one secret, all secrets are passed.
 	// +optional
-	controllerExpandSecretRef?: null | SecretReference @go(ControllerExpandSecretRef,*SecretReference) @protobuf(9,bytes,opt)
+	controllerExpandSecretRef?: null | #SecretReference @go(ControllerExpandSecretRef,*SecretReference) @protobuf(9,bytes,opt)
 }
 
 // Represents a source location of a volume to mount, managed by an external CSI driver
-CSIVolumeSource :: {
+#CSIVolumeSource: {
 	// Driver is the name of the CSI driver that handles this volume.
 	// Consult with your admin for the correct name as registered in the cluster.
 	driver: string @go(Driver) @protobuf(1,bytes,opt)
@@ -1974,11 +1974,11 @@
 	// This field is optional, and  may be empty if no secret is required. If the
 	// secret object contains more than one secret, all secret references are passed.
 	// +optional
-	nodePublishSecretRef?: null | LocalObjectReference @go(NodePublishSecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
+	nodePublishSecretRef?: null | #LocalObjectReference @go(NodePublishSecretRef,*LocalObjectReference) @protobuf(5,bytes,opt)
 }
 
 // ContainerPort represents a network port in a single container.
-ContainerPort :: {
+#ContainerPort: {
 	// If specified, this must be an IANA_SVC_NAME and unique within the pod. Each
 	// named port in a pod must have a unique name. Name for the port that can be
 	// referred to by services.
@@ -1999,7 +1999,7 @@
 	// Protocol for port. Must be UDP, TCP, or SCTP.
 	// Defaults to "TCP".
 	// +optional
-	protocol?: Protocol @go(Protocol) @protobuf(4,bytes,opt,casttype=Protocol)
+	protocol?: #Protocol @go(Protocol) @protobuf(4,bytes,opt,casttype=Protocol)
 
 	// What host IP to bind the external port to.
 	// +optional
@@ -2007,7 +2007,7 @@
 }
 
 // VolumeMount describes a mounting of a Volume within a container.
-VolumeMount :: {
+#VolumeMount: {
 	// This must match the Name of a Volume.
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -2030,7 +2030,7 @@
 	// When not set, MountPropagationNone is used.
 	// This field is beta in 1.10.
 	// +optional
-	mountPropagation?: null | MountPropagationMode @go(MountPropagation,*MountPropagationMode) @protobuf(5,bytes,opt,casttype=MountPropagationMode)
+	mountPropagation?: null | #MountPropagationMode @go(MountPropagation,*MountPropagationMode) @protobuf(5,bytes,opt,casttype=MountPropagationMode)
 
 	// Expanded path within the volume from which the container's volume should be mounted.
 	// Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment.
@@ -2041,19 +2041,19 @@
 }
 
 // MountPropagationMode describes mount propagation.
-MountPropagationMode :: string // enumMountPropagationMode
+#MountPropagationMode: string // #enumMountPropagationMode
 
-enumMountPropagationMode ::
-	MountPropagationNone |
-	MountPropagationHostToContainer |
-	MountPropagationBidirectional
+#enumMountPropagationMode:
+	#MountPropagationNone |
+	#MountPropagationHostToContainer |
+	#MountPropagationBidirectional
 
 // MountPropagationNone means that the volume in a container will
 // not receive new mounts from the host or other containers, and filesystems
 // mounted inside the container won't be propagated to the host or other
 // containers.
 // Note that this mode corresponds to "private" in Linux terminology.
-MountPropagationNone :: MountPropagationMode & "None"
+#MountPropagationNone: #MountPropagationMode & "None"
 
 // MountPropagationHostToContainer means that the volume in a container will
 // receive new mounts from the host or other containers, but filesystems
@@ -2061,17 +2061,17 @@
 // containers.
 // Note that this mode is recursively applied to all mounts in the volume
 // ("rslave" in Linux terminology).
-MountPropagationHostToContainer :: MountPropagationMode & "HostToContainer"
+#MountPropagationHostToContainer: #MountPropagationMode & "HostToContainer"
 
 // MountPropagationBidirectional means that the volume in a container will
 // receive new mounts from the host or other containers, and its own mounts
 // will be propagated from the container to the host or other containers.
 // Note that this mode is recursively applied to all mounts in the volume
 // ("rshared" in Linux terminology).
-MountPropagationBidirectional :: MountPropagationMode & "Bidirectional"
+#MountPropagationBidirectional: #MountPropagationMode & "Bidirectional"
 
 // volumeDevice describes a mapping of a raw block device within a container.
-VolumeDevice :: {
+#VolumeDevice: {
 	// name must match the name of a persistentVolumeClaim in the pod
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -2080,7 +2080,7 @@
 }
 
 // EnvVar represents an environment variable present in a Container.
-EnvVar :: {
+#EnvVar: {
 	// Name of the environment variable. Must be a C_IDENTIFIER.
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -2097,32 +2097,32 @@
 
 	// Source for the environment variable's value. Cannot be used if value is not empty.
 	// +optional
-	valueFrom?: null | EnvVarSource @go(ValueFrom,*EnvVarSource) @protobuf(3,bytes,opt)
+	valueFrom?: null | #EnvVarSource @go(ValueFrom,*EnvVarSource) @protobuf(3,bytes,opt)
 }
 
 // EnvVarSource represents a source for the value of an EnvVar.
-EnvVarSource :: {
+#EnvVarSource: {
 	// Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations,
 	// spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.
 	// +optional
-	fieldRef?: null | ObjectFieldSelector @go(FieldRef,*ObjectFieldSelector) @protobuf(1,bytes,opt)
+	fieldRef?: null | #ObjectFieldSelector @go(FieldRef,*ObjectFieldSelector) @protobuf(1,bytes,opt)
 
 	// Selects a resource of the container: only resources limits and requests
 	// (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.
 	// +optional
-	resourceFieldRef?: null | ResourceFieldSelector @go(ResourceFieldRef,*ResourceFieldSelector) @protobuf(2,bytes,opt)
+	resourceFieldRef?: null | #ResourceFieldSelector @go(ResourceFieldRef,*ResourceFieldSelector) @protobuf(2,bytes,opt)
 
 	// Selects a key of a ConfigMap.
 	// +optional
-	configMapKeyRef?: null | ConfigMapKeySelector @go(ConfigMapKeyRef,*ConfigMapKeySelector) @protobuf(3,bytes,opt)
+	configMapKeyRef?: null | #ConfigMapKeySelector @go(ConfigMapKeyRef,*ConfigMapKeySelector) @protobuf(3,bytes,opt)
 
 	// Selects a key of a secret in the pod's namespace
 	// +optional
-	secretKeyRef?: null | SecretKeySelector @go(SecretKeyRef,*SecretKeySelector) @protobuf(4,bytes,opt)
+	secretKeyRef?: null | #SecretKeySelector @go(SecretKeyRef,*SecretKeySelector) @protobuf(4,bytes,opt)
 }
 
 // ObjectFieldSelector selects an APIVersioned field of an object.
-ObjectFieldSelector :: {
+#ObjectFieldSelector: {
 	// Version of the schema the FieldPath is written in terms of, defaults to "v1".
 	// +optional
 	apiVersion?: string @go(APIVersion) @protobuf(1,bytes,opt)
@@ -2132,7 +2132,7 @@
 }
 
 // ResourceFieldSelector represents container resources (cpu, memory) and their output format
-ResourceFieldSelector :: {
+#ResourceFieldSelector: {
 	// Container name: required for volumes, optional for env vars
 	// +optional
 	containerName?: string @go(ContainerName) @protobuf(1,bytes,opt)
@@ -2142,12 +2142,12 @@
 
 	// Specifies the output format of the exposed resources, defaults to "1"
 	// +optional
-	divisor?: resource.Quantity @go(Divisor) @protobuf(3,bytes,opt)
+	divisor?: resource.#Quantity @go(Divisor) @protobuf(3,bytes,opt)
 }
 
 // Selects a key from a ConfigMap.
-ConfigMapKeySelector :: {
-	LocalObjectReference
+#ConfigMapKeySelector: {
+	#LocalObjectReference
 
 	// The key to select.
 	key: string @go(Key) @protobuf(2,bytes,opt)
@@ -2158,8 +2158,8 @@
 }
 
 // SecretKeySelector selects a key of a Secret.
-SecretKeySelector :: {
-	LocalObjectReference
+#SecretKeySelector: {
+	#LocalObjectReference
 
 	// The key of the secret to select from.  Must be a valid secret key.
 	key: string @go(Key) @protobuf(2,bytes,opt)
@@ -2170,18 +2170,18 @@
 }
 
 // EnvFromSource represents the source of a set of ConfigMaps
-EnvFromSource :: {
+#EnvFromSource: {
 	// An optional identifier to prepend to each key in the ConfigMap. Must be a C_IDENTIFIER.
 	// +optional
 	prefix?: string @go(Prefix) @protobuf(1,bytes,opt)
 
 	// The ConfigMap to select from
 	// +optional
-	configMapRef?: null | ConfigMapEnvSource @go(ConfigMapRef,*ConfigMapEnvSource) @protobuf(2,bytes,opt)
+	configMapRef?: null | #ConfigMapEnvSource @go(ConfigMapRef,*ConfigMapEnvSource) @protobuf(2,bytes,opt)
 
 	// The Secret to select from
 	// +optional
-	secretRef?: null | SecretEnvSource @go(SecretRef,*SecretEnvSource) @protobuf(3,bytes,opt)
+	secretRef?: null | #SecretEnvSource @go(SecretRef,*SecretEnvSource) @protobuf(3,bytes,opt)
 }
 
 // ConfigMapEnvSource selects a ConfigMap to populate the environment
@@ -2189,8 +2189,8 @@
 //
 // The contents of the target ConfigMap's Data field will represent the
 // key-value pairs as environment variables.
-ConfigMapEnvSource :: {
-	LocalObjectReference
+#ConfigMapEnvSource: {
+	#LocalObjectReference
 
 	// Specify whether the ConfigMap must be defined
 	// +optional
@@ -2202,8 +2202,8 @@
 //
 // The contents of the target Secret's Data field will represent the
 // key-value pairs as environment variables.
-SecretEnvSource :: {
-	LocalObjectReference
+#SecretEnvSource: {
+	#LocalObjectReference
 
 	// Specify whether the Secret must be defined
 	// +optional
@@ -2211,7 +2211,7 @@
 }
 
 // HTTPHeader describes a custom header to be used in HTTP probes
-HTTPHeader :: {
+#HTTPHeader: {
 	// The header field name
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -2220,7 +2220,7 @@
 }
 
 // HTTPGetAction describes an action based on HTTP Get requests.
-HTTPGetAction :: {
+#HTTPGetAction: {
 	// Path to access on the HTTP server.
 	// +optional
 	path?: string @go(Path) @protobuf(1,bytes,opt)
@@ -2228,7 +2228,7 @@
 	// Name or number of the port to access on the container.
 	// Number must be in the range 1 to 65535.
 	// Name must be an IANA_SVC_NAME.
-	port: intstr.IntOrString @go(Port) @protobuf(2,bytes,opt)
+	port: intstr.#IntOrString @go(Port) @protobuf(2,bytes,opt)
 
 	// Host name to connect to, defaults to the pod IP. You probably want to set
 	// "Host" in httpHeaders instead.
@@ -2238,32 +2238,32 @@
 	// Scheme to use for connecting to the host.
 	// Defaults to HTTP.
 	// +optional
-	scheme?: URIScheme @go(Scheme) @protobuf(4,bytes,opt,casttype=URIScheme)
+	scheme?: #URIScheme @go(Scheme) @protobuf(4,bytes,opt,casttype=URIScheme)
 
 	// Custom headers to set in the request. HTTP allows repeated headers.
 	// +optional
-	httpHeaders?: [...HTTPHeader] @go(HTTPHeaders,[]HTTPHeader) @protobuf(5,bytes,rep)
+	httpHeaders?: [...#HTTPHeader] @go(HTTPHeaders,[]HTTPHeader) @protobuf(5,bytes,rep)
 }
 
 // URIScheme identifies the scheme used for connection to a host for Get actions
-URIScheme :: string // enumURIScheme
+#URIScheme: string // #enumURIScheme
 
-enumURIScheme ::
-	URISchemeHTTP |
-	URISchemeHTTPS
+#enumURIScheme:
+	#URISchemeHTTP |
+	#URISchemeHTTPS
 
 // URISchemeHTTP means that the scheme used will be http://
-URISchemeHTTP :: URIScheme & "HTTP"
+#URISchemeHTTP: #URIScheme & "HTTP"
 
 // URISchemeHTTPS means that the scheme used will be https://
-URISchemeHTTPS :: URIScheme & "HTTPS"
+#URISchemeHTTPS: #URIScheme & "HTTPS"
 
 // TCPSocketAction describes an action based on opening a socket
-TCPSocketAction :: {
+#TCPSocketAction: {
 	// Number or name of the port to access on the container.
 	// Number must be in the range 1 to 65535.
 	// Name must be an IANA_SVC_NAME.
-	port: intstr.IntOrString @go(Port) @protobuf(1,bytes,opt)
+	port: intstr.#IntOrString @go(Port) @protobuf(1,bytes,opt)
 
 	// Optional: Host name to connect to, defaults to the pod IP.
 	// +optional
@@ -2271,7 +2271,7 @@
 }
 
 // ExecAction describes a "run in container" action.
-ExecAction :: {
+#ExecAction: {
 	// Command is the command line to execute inside the container, the working directory for the
 	// command  is root ('/') in the container's filesystem. The command is simply exec'd, it is
 	// not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use
@@ -2283,8 +2283,8 @@
 
 // Probe describes a health check to be performed against a container to determine whether it is
 // alive or ready to receive traffic.
-Probe :: {
-	Handler
+#Probe: {
+	#Handler
 
 	// Number of seconds after the container has started before liveness probes are initiated.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
@@ -2314,85 +2314,85 @@
 }
 
 // PullPolicy describes a policy for if/when to pull a container image
-PullPolicy :: string // enumPullPolicy
+#PullPolicy: string // #enumPullPolicy
 
-enumPullPolicy ::
-	PullAlways |
-	PullNever |
-	PullIfNotPresent
+#enumPullPolicy:
+	#PullAlways |
+	#PullNever |
+	#PullIfNotPresent
 
 // PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails.
-PullAlways :: PullPolicy & "Always"
+#PullAlways: #PullPolicy & "Always"
 
 // PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present
-PullNever :: PullPolicy & "Never"
+#PullNever: #PullPolicy & "Never"
 
 // PullIfNotPresent means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails.
-PullIfNotPresent :: PullPolicy & "IfNotPresent"
+#PullIfNotPresent: #PullPolicy & "IfNotPresent"
 
 // PreemptionPolicy describes a policy for if/when to preempt a pod.
-PreemptionPolicy :: string // enumPreemptionPolicy
+#PreemptionPolicy: string // #enumPreemptionPolicy
 
-enumPreemptionPolicy ::
-	PreemptLowerPriority |
-	PreemptNever
+#enumPreemptionPolicy:
+	#PreemptLowerPriority |
+	#PreemptNever
 
 // PreemptLowerPriority means that pod can preempt other pods with lower priority.
-PreemptLowerPriority :: PreemptionPolicy & "PreemptLowerPriority"
+#PreemptLowerPriority: #PreemptionPolicy & "PreemptLowerPriority"
 
 // PreemptNever means that pod never preempts other pods with lower priority.
-PreemptNever :: PreemptionPolicy & "Never"
+#PreemptNever: #PreemptionPolicy & "Never"
 
 // TerminationMessagePolicy describes how termination messages are retrieved from a container.
-TerminationMessagePolicy :: string // enumTerminationMessagePolicy
+#TerminationMessagePolicy: string // #enumTerminationMessagePolicy
 
-enumTerminationMessagePolicy ::
-	TerminationMessageReadFile |
-	TerminationMessageFallbackToLogsOnError
+#enumTerminationMessagePolicy:
+	#TerminationMessageReadFile |
+	#TerminationMessageFallbackToLogsOnError
 
 // TerminationMessageReadFile is the default behavior and will set the container status message to
 // the contents of the container's terminationMessagePath when the container exits.
-TerminationMessageReadFile :: TerminationMessagePolicy & "File"
+#TerminationMessageReadFile: #TerminationMessagePolicy & "File"
 
 // TerminationMessageFallbackToLogsOnError will read the most recent contents of the container logs
 // for the container status message when the container exits with an error and the
 // terminationMessagePath has no contents.
-TerminationMessageFallbackToLogsOnError :: TerminationMessagePolicy & "FallbackToLogsOnError"
+#TerminationMessageFallbackToLogsOnError: #TerminationMessagePolicy & "FallbackToLogsOnError"
 
 // Capability represent POSIX capabilities type
-Capability :: string
+#Capability: string
 
 // Adds and removes POSIX capabilities from running containers.
-Capabilities :: {
+#Capabilities: {
 	// Added capabilities
 	// +optional
-	add?: [...Capability] @go(Add,[]Capability) @protobuf(1,bytes,rep,casttype=Capability)
+	add?: [...#Capability] @go(Add,[]Capability) @protobuf(1,bytes,rep,casttype=Capability)
 
 	// Removed capabilities
 	// +optional
-	drop?: [...Capability] @go(Drop,[]Capability) @protobuf(2,bytes,rep,casttype=Capability)
+	drop?: [...#Capability] @go(Drop,[]Capability) @protobuf(2,bytes,rep,casttype=Capability)
 }
 
 // ResourceRequirements describes the compute resource requirements.
-ResourceRequirements :: {
+#ResourceRequirements: {
 	// Limits describes the maximum amount of compute resources allowed.
 	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
 	// +optional
-	limits?: ResourceList @go(Limits) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	limits?: #ResourceList @go(Limits) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// Requests describes the minimum amount of compute resources required.
 	// If Requests is omitted for a container, it defaults to Limits if that is explicitly specified,
 	// otherwise to an implementation-defined value.
 	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
 	// +optional
-	requests?: ResourceList @go(Requests) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	requests?: #ResourceList @go(Requests) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 }
 
 // TerminationMessagePathDefault means the default path to capture the application termination message running in a container
-TerminationMessagePathDefault :: "/dev/termination-log"
+#TerminationMessagePathDefault: "/dev/termination-log"
 
 // A single application container that you want to run within a pod.
-Container :: {
+#Container: {
 	// Name of the container specified as a DNS_LABEL.
 	// Each container in a pod must have a unique name (DNS_LABEL).
 	// Cannot be updated.
@@ -2447,7 +2447,7 @@
 	// +listType=map
 	// +listMapKey=containerPort
 	// +listMapKey=protocol
-	ports?: [...ContainerPort] @go(Ports,[]ContainerPort) @protobuf(6,bytes,rep)
+	ports?: [...#ContainerPort] @go(Ports,[]ContainerPort) @protobuf(6,bytes,rep)
 
 	// List of sources to populate environment variables in the container.
 	// The keys defined within a source must be a C_IDENTIFIER. All invalid keys
@@ -2456,47 +2456,47 @@
 	// Values defined by an Env with a duplicate key will take precedence.
 	// Cannot be updated.
 	// +optional
-	envFrom?: [...EnvFromSource] @go(EnvFrom,[]EnvFromSource) @protobuf(19,bytes,rep)
+	envFrom?: [...#EnvFromSource] @go(EnvFrom,[]EnvFromSource) @protobuf(19,bytes,rep)
 
 	// List of environment variables to set in the container.
 	// Cannot be updated.
 	// +optional
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	env?: [...EnvVar] @go(Env,[]EnvVar) @protobuf(7,bytes,rep)
+	env?: [...#EnvVar] @go(Env,[]EnvVar) @protobuf(7,bytes,rep)
 
 	// Compute Resources required by this container.
 	// Cannot be updated.
 	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
 	// +optional
-	resources?: ResourceRequirements @go(Resources) @protobuf(8,bytes,opt)
+	resources?: #ResourceRequirements @go(Resources) @protobuf(8,bytes,opt)
 
 	// Pod volumes to mount into the container's filesystem.
 	// Cannot be updated.
 	// +optional
 	// +patchMergeKey=mountPath
 	// +patchStrategy=merge
-	volumeMounts?: [...VolumeMount] @go(VolumeMounts,[]VolumeMount) @protobuf(9,bytes,rep)
+	volumeMounts?: [...#VolumeMount] @go(VolumeMounts,[]VolumeMount) @protobuf(9,bytes,rep)
 
 	// volumeDevices is the list of block devices to be used by the container.
 	// +patchMergeKey=devicePath
 	// +patchStrategy=merge
 	// +optional
-	volumeDevices?: [...VolumeDevice] @go(VolumeDevices,[]VolumeDevice) @protobuf(21,bytes,rep)
+	volumeDevices?: [...#VolumeDevice] @go(VolumeDevices,[]VolumeDevice) @protobuf(21,bytes,rep)
 
 	// Periodic probe of container liveness.
 	// Container will be restarted if the probe fails.
 	// Cannot be updated.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
 	// +optional
-	livenessProbe?: null | Probe @go(LivenessProbe,*Probe) @protobuf(10,bytes,opt)
+	livenessProbe?: null | #Probe @go(LivenessProbe,*Probe) @protobuf(10,bytes,opt)
 
 	// Periodic probe of container service readiness.
 	// Container will be removed from service endpoints if the probe fails.
 	// Cannot be updated.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
 	// +optional
-	readinessProbe?: null | Probe @go(ReadinessProbe,*Probe) @protobuf(11,bytes,opt)
+	readinessProbe?: null | #Probe @go(ReadinessProbe,*Probe) @protobuf(11,bytes,opt)
 
 	// StartupProbe indicates that the Pod has successfully initialized.
 	// If specified, no other probes are executed until this completes successfully.
@@ -2507,12 +2507,12 @@
 	// This is a beta feature enabled by the StartupProbe feature flag.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes
 	// +optional
-	startupProbe?: null | Probe @go(StartupProbe,*Probe) @protobuf(22,bytes,opt)
+	startupProbe?: null | #Probe @go(StartupProbe,*Probe) @protobuf(22,bytes,opt)
 
 	// Actions that the management system should take in response to container lifecycle events.
 	// Cannot be updated.
 	// +optional
-	lifecycle?: null | Lifecycle @go(Lifecycle,*Lifecycle) @protobuf(12,bytes,opt)
+	lifecycle?: null | #Lifecycle @go(Lifecycle,*Lifecycle) @protobuf(12,bytes,opt)
 
 	// Optional: Path at which the file to which the container's termination message
 	// will be written is mounted into the container's filesystem.
@@ -2532,7 +2532,7 @@
 	// Defaults to File.
 	// Cannot be updated.
 	// +optional
-	terminationMessagePolicy?: TerminationMessagePolicy @go(TerminationMessagePolicy) @protobuf(20,bytes,opt,casttype=TerminationMessagePolicy)
+	terminationMessagePolicy?: #TerminationMessagePolicy @go(TerminationMessagePolicy) @protobuf(20,bytes,opt,casttype=TerminationMessagePolicy)
 
 	// Image pull policy.
 	// One of Always, Never, IfNotPresent.
@@ -2540,13 +2540,13 @@
 	// Cannot be updated.
 	// More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
 	// +optional
-	imagePullPolicy?: PullPolicy @go(ImagePullPolicy) @protobuf(14,bytes,opt,casttype=PullPolicy)
+	imagePullPolicy?: #PullPolicy @go(ImagePullPolicy) @protobuf(14,bytes,opt,casttype=PullPolicy)
 
 	// Security options the pod should run with.
 	// More info: https://kubernetes.io/docs/concepts/policy/security-context/
 	// More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/
 	// +optional
-	securityContext?: null | SecurityContext @go(SecurityContext,*SecurityContext) @protobuf(15,bytes,opt)
+	securityContext?: null | #SecurityContext @go(SecurityContext,*SecurityContext) @protobuf(15,bytes,opt)
 
 	// Whether this container should allocate a buffer for stdin in the container runtime. If this
 	// is not set, reads from stdin in the container will always result in EOF.
@@ -2572,33 +2572,33 @@
 
 // Handler defines a specific action that should be taken
 // TODO: pass structured data to these actions, and document that data here.
-Handler :: {
+#Handler: {
 	// One and only one of the following should be specified.
 	// Exec specifies the action to take.
 	// +optional
-	exec?: null | ExecAction @go(Exec,*ExecAction) @protobuf(1,bytes,opt)
+	exec?: null | #ExecAction @go(Exec,*ExecAction) @protobuf(1,bytes,opt)
 
 	// HTTPGet specifies the http request to perform.
 	// +optional
-	httpGet?: null | HTTPGetAction @go(HTTPGet,*HTTPGetAction) @protobuf(2,bytes,opt)
+	httpGet?: null | #HTTPGetAction @go(HTTPGet,*HTTPGetAction) @protobuf(2,bytes,opt)
 
 	// TCPSocket specifies an action involving a TCP port.
 	// TCP hooks not yet supported
 	// TODO: implement a realistic TCP lifecycle hook
 	// +optional
-	tcpSocket?: null | TCPSocketAction @go(TCPSocket,*TCPSocketAction) @protobuf(3,bytes,opt)
+	tcpSocket?: null | #TCPSocketAction @go(TCPSocket,*TCPSocketAction) @protobuf(3,bytes,opt)
 }
 
 // Lifecycle describes actions that the management system should take in response to container lifecycle
 // events. For the PostStart and PreStop lifecycle handlers, management of the container blocks
 // until the action is complete, unless the container process fails, in which case the handler is aborted.
-Lifecycle :: {
+#Lifecycle: {
 	// PostStart is called immediately after a container is created. If the handler fails,
 	// the container is terminated and restarted according to its restart policy.
 	// Other management of the container blocks until the hook completes.
 	// More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
 	// +optional
-	postStart?: null | Handler @go(PostStart,*Handler) @protobuf(1,bytes,opt)
+	postStart?: null | #Handler @go(PostStart,*Handler) @protobuf(1,bytes,opt)
 
 	// PreStop is called immediately before a container is terminated due to an
 	// API request or management event such as liveness/startup probe failure,
@@ -2611,22 +2611,22 @@
 	// or until the termination grace period is reached.
 	// More info: https://kubernetes.io/docs/concepts/containers/container-lifecycle-hooks/#container-hooks
 	// +optional
-	preStop?: null | Handler @go(PreStop,*Handler) @protobuf(2,bytes,opt)
+	preStop?: null | #Handler @go(PreStop,*Handler) @protobuf(2,bytes,opt)
 }
 
-ConditionStatus :: string // enumConditionStatus
+#ConditionStatus: string // #enumConditionStatus
 
-enumConditionStatus ::
-	ConditionTrue |
-	ConditionFalse |
-	ConditionUnknown
+#enumConditionStatus:
+	#ConditionTrue |
+	#ConditionFalse |
+	#ConditionUnknown
 
-ConditionTrue ::    ConditionStatus & "True"
-ConditionFalse ::   ConditionStatus & "False"
-ConditionUnknown :: ConditionStatus & "Unknown"
+#ConditionTrue:    #ConditionStatus & "True"
+#ConditionFalse:   #ConditionStatus & "False"
+#ConditionUnknown: #ConditionStatus & "Unknown"
 
 // ContainerStateWaiting is a waiting state of a container.
-ContainerStateWaiting :: {
+#ContainerStateWaiting: {
 	// (brief) reason the container is not yet running.
 	// +optional
 	reason?: string @go(Reason) @protobuf(1,bytes,opt)
@@ -2637,14 +2637,14 @@
 }
 
 // ContainerStateRunning is a running state of a container.
-ContainerStateRunning :: {
+#ContainerStateRunning: {
 	// Time at which the container was last (re-)started
 	// +optional
-	startedAt?: metav1.Time @go(StartedAt) @protobuf(1,bytes,opt)
+	startedAt?: metav1.#Time @go(StartedAt) @protobuf(1,bytes,opt)
 }
 
 // ContainerStateTerminated is a terminated state of a container.
-ContainerStateTerminated :: {
+#ContainerStateTerminated: {
 	// Exit status from the last termination of the container
 	exitCode: int32 @go(ExitCode) @protobuf(1,varint,opt)
 
@@ -2662,11 +2662,11 @@
 
 	// Time at which previous execution of the container started
 	// +optional
-	startedAt?: metav1.Time @go(StartedAt) @protobuf(5,bytes,opt)
+	startedAt?: metav1.#Time @go(StartedAt) @protobuf(5,bytes,opt)
 
 	// Time at which the container last terminated
 	// +optional
-	finishedAt?: metav1.Time @go(FinishedAt) @protobuf(6,bytes,opt)
+	finishedAt?: metav1.#Time @go(FinishedAt) @protobuf(6,bytes,opt)
 
 	// Container's ID in the format 'docker://<container_id>'
 	// +optional
@@ -2676,33 +2676,33 @@
 // ContainerState holds a possible state of container.
 // Only one of its members may be specified.
 // If none of them is specified, the default one is ContainerStateWaiting.
-ContainerState :: {
+#ContainerState: {
 	// Details about a waiting container
 	// +optional
-	waiting?: null | ContainerStateWaiting @go(Waiting,*ContainerStateWaiting) @protobuf(1,bytes,opt)
+	waiting?: null | #ContainerStateWaiting @go(Waiting,*ContainerStateWaiting) @protobuf(1,bytes,opt)
 
 	// Details about a running container
 	// +optional
-	running?: null | ContainerStateRunning @go(Running,*ContainerStateRunning) @protobuf(2,bytes,opt)
+	running?: null | #ContainerStateRunning @go(Running,*ContainerStateRunning) @protobuf(2,bytes,opt)
 
 	// Details about a terminated container
 	// +optional
-	terminated?: null | ContainerStateTerminated @go(Terminated,*ContainerStateTerminated) @protobuf(3,bytes,opt)
+	terminated?: null | #ContainerStateTerminated @go(Terminated,*ContainerStateTerminated) @protobuf(3,bytes,opt)
 }
 
 // ContainerStatus contains details for the current status of this container.
-ContainerStatus :: {
+#ContainerStatus: {
 	// This must be a DNS_LABEL. Each container in a pod must have a unique name.
 	// Cannot be updated.
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
 	// Details about the container's current condition.
 	// +optional
-	state?: ContainerState @go(State) @protobuf(2,bytes,opt)
+	state?: #ContainerState @go(State) @protobuf(2,bytes,opt)
 
 	// Details about the container's last termination condition.
 	// +optional
-	lastState?: ContainerState @go(LastTerminationState) @protobuf(3,bytes,opt)
+	lastState?: #ContainerState @go(LastTerminationState) @protobuf(3,bytes,opt)
 
 	// Specifies whether the container has passed its readiness probe.
 	ready: bool @go(Ready) @protobuf(4,varint,opt)
@@ -2734,80 +2734,80 @@
 }
 
 // PodPhase is a label for the condition of a pod at the current time.
-PodPhase :: string // enumPodPhase
+#PodPhase: string // #enumPodPhase
 
-enumPodPhase ::
-	PodPending |
-	PodRunning |
-	PodSucceeded |
-	PodFailed |
-	PodUnknown
+#enumPodPhase:
+	#PodPending |
+	#PodRunning |
+	#PodSucceeded |
+	#PodFailed |
+	#PodUnknown
 
 // PodPending means the pod has been accepted by the system, but one or more of the containers
 // has not been started. This includes time before being bound to a node, as well as time spent
 // pulling images onto the host.
-PodPending :: PodPhase & "Pending"
+#PodPending: #PodPhase & "Pending"
 
 // PodRunning means the pod has been bound to a node and all of the containers have been started.
 // At least one container is still running or is in the process of being restarted.
-PodRunning :: PodPhase & "Running"
+#PodRunning: #PodPhase & "Running"
 
 // PodSucceeded means that all containers in the pod have voluntarily terminated
 // with a container exit code of 0, and the system is not going to restart any of these containers.
-PodSucceeded :: PodPhase & "Succeeded"
+#PodSucceeded: #PodPhase & "Succeeded"
 
 // PodFailed means that all containers in the pod have terminated, and at least one container has
 // terminated in a failure (exited with a non-zero exit code or was stopped by the system).
-PodFailed :: PodPhase & "Failed"
+#PodFailed: #PodPhase & "Failed"
 
 // PodUnknown means that for some reason the state of the pod could not be obtained, typically due
 // to an error in communicating with the host of the pod.
-PodUnknown :: PodPhase & "Unknown"
+#PodUnknown: #PodPhase & "Unknown"
 
 // PodConditionType is a valid value for PodCondition.Type
-PodConditionType :: string // enumPodConditionType
+#PodConditionType: string // #enumPodConditionType
 
-enumPodConditionType ::
-	ContainersReady |
-	PodInitialized |
-	PodReady |
-	PodScheduled
+#enumPodConditionType:
+	#ContainersReady |
+	#PodInitialized |
+	#PodReady |
+	#PodScheduled
 
 // ContainersReady indicates whether all containers in the pod are ready.
-ContainersReady :: PodConditionType & "ContainersReady"
+#ContainersReady: #PodConditionType & "ContainersReady"
 
 // PodInitialized means that all init containers in the pod have started successfully.
-PodInitialized :: PodConditionType & "Initialized"
+#PodInitialized: #PodConditionType & "Initialized"
 
 // PodReady means the pod is able to service requests and should be added to the
 // load balancing pools of all matching services.
-PodReady :: PodConditionType & "Ready"
+#PodReady: #PodConditionType & "Ready"
 
 // PodScheduled represents status of the scheduling process for this pod.
-PodScheduled :: PodConditionType & "PodScheduled"
+#PodScheduled: #PodConditionType & "PodScheduled"
 
 // PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler
 // can't schedule the pod right now, for example due to insufficient resources in the cluster.
-PodReasonUnschedulable :: "Unschedulable"
+#PodReasonUnschedulable: "Unschedulable"
 
 // PodCondition contains details for the current condition of this pod.
-PodCondition :: {
+#PodCondition: {
 	// Type is the type of the condition.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
-	type: PodConditionType @go(Type) @protobuf(1,bytes,opt,casttype=PodConditionType)
+	type: #PodConditionType @go(Type) @protobuf(1,bytes,opt,casttype=PodConditionType)
 
 	// Status is the status of the condition.
 	// Can be True, False, Unknown.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
-	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
+	status: #ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
 
 	// Last time we probed the condition.
 	// +optional
-	lastProbeTime?: metav1.Time @go(LastProbeTime) @protobuf(3,bytes,opt)
+	lastProbeTime?: metav1.#Time @go(LastProbeTime) @protobuf(3,bytes,opt)
 
 	// Last time the condition transitioned from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
 
 	// Unique, one-word, CamelCase reason for the condition's last transition.
 	// +optional
@@ -2822,79 +2822,79 @@
 // Only one of the following restart policies may be specified.
 // If none of the following policies is specified, the default one
 // is RestartPolicyAlways.
-RestartPolicy :: string // enumRestartPolicy
+#RestartPolicy: string // #enumRestartPolicy
 
-enumRestartPolicy ::
-	RestartPolicyAlways |
-	RestartPolicyOnFailure |
-	RestartPolicyNever
+#enumRestartPolicy:
+	#RestartPolicyAlways |
+	#RestartPolicyOnFailure |
+	#RestartPolicyNever
 
-RestartPolicyAlways ::    RestartPolicy & "Always"
-RestartPolicyOnFailure :: RestartPolicy & "OnFailure"
-RestartPolicyNever ::     RestartPolicy & "Never"
+#RestartPolicyAlways:    #RestartPolicy & "Always"
+#RestartPolicyOnFailure: #RestartPolicy & "OnFailure"
+#RestartPolicyNever:     #RestartPolicy & "Never"
 
 // DNSPolicy defines how a pod's DNS will be configured.
-DNSPolicy :: string // enumDNSPolicy
+#DNSPolicy: string // #enumDNSPolicy
 
-enumDNSPolicy ::
-	DNSClusterFirstWithHostNet |
-	DNSClusterFirst |
-	DNSDefault |
-	DNSNone
+#enumDNSPolicy:
+	#DNSClusterFirstWithHostNet |
+	#DNSClusterFirst |
+	#DNSDefault |
+	#DNSNone
 
 // DNSClusterFirstWithHostNet indicates that the pod should use cluster DNS
 // first, if it is available, then fall back on the default
 // (as determined by kubelet) DNS settings.
-DNSClusterFirstWithHostNet :: DNSPolicy & "ClusterFirstWithHostNet"
+#DNSClusterFirstWithHostNet: #DNSPolicy & "ClusterFirstWithHostNet"
 
 // DNSClusterFirst indicates that the pod should use cluster DNS
 // first unless hostNetwork is true, if it is available, then
 // fall back on the default (as determined by kubelet) DNS settings.
-DNSClusterFirst :: DNSPolicy & "ClusterFirst"
+#DNSClusterFirst: #DNSPolicy & "ClusterFirst"
 
 // DNSDefault indicates that the pod should use the default (as
 // determined by kubelet) DNS settings.
-DNSDefault :: DNSPolicy & "Default"
+#DNSDefault: #DNSPolicy & "Default"
 
 // DNSNone indicates that the pod should use empty DNS settings. DNS
 // parameters such as nameservers and search paths should be defined via
 // DNSConfig.
-DNSNone :: DNSPolicy & "None"
+#DNSNone: #DNSPolicy & "None"
 
 // DefaultTerminationGracePeriodSeconds indicates the default duration in
 // seconds a pod needs to terminate gracefully.
-DefaultTerminationGracePeriodSeconds :: 30
+#DefaultTerminationGracePeriodSeconds: 30
 
 // A node selector represents the union of the results of one or more label queries
 // over a set of nodes; that is, it represents the OR of the selectors represented
 // by the node selector terms.
-NodeSelector :: {
+#NodeSelector: {
 	//Required. A list of node selector terms. The terms are ORed.
-	nodeSelectorTerms: [...NodeSelectorTerm] @go(NodeSelectorTerms,[]NodeSelectorTerm) @protobuf(1,bytes,rep)
+	nodeSelectorTerms: [...#NodeSelectorTerm] @go(NodeSelectorTerms,[]NodeSelectorTerm) @protobuf(1,bytes,rep)
 }
 
 // A null or empty node selector term matches no objects. The requirements of
 // them are ANDed.
 // The TopologySelectorTerm type implements a subset of the NodeSelectorTerm.
-NodeSelectorTerm :: {
+#NodeSelectorTerm: {
 	// A list of node selector requirements by node's labels.
 	// +optional
-	matchExpressions?: [...NodeSelectorRequirement] @go(MatchExpressions,[]NodeSelectorRequirement) @protobuf(1,bytes,rep)
+	matchExpressions?: [...#NodeSelectorRequirement] @go(MatchExpressions,[]NodeSelectorRequirement) @protobuf(1,bytes,rep)
 
 	// A list of node selector requirements by node's fields.
 	// +optional
-	matchFields?: [...NodeSelectorRequirement] @go(MatchFields,[]NodeSelectorRequirement) @protobuf(2,bytes,rep)
+	matchFields?: [...#NodeSelectorRequirement] @go(MatchFields,[]NodeSelectorRequirement) @protobuf(2,bytes,rep)
 }
 
 // A node selector requirement is a selector that contains values, a key, and an operator
 // that relates the key and values.
-NodeSelectorRequirement :: {
+#NodeSelectorRequirement: {
 	// The label key that the selector applies to.
 	key: string @go(Key) @protobuf(1,bytes,opt)
 
 	// Represents a key's relationship to a set of values.
 	// Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.
-	operator: NodeSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=NodeSelectorOperator)
+	operator: #NodeSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=NodeSelectorOperator)
 
 	// An array of string values. If the operator is In or NotIn,
 	// the values array must be non-empty. If the operator is Exists or DoesNotExist,
@@ -2907,37 +2907,37 @@
 
 // A node selector operator is the set of operators that can be used in
 // a node selector requirement.
-NodeSelectorOperator :: string // enumNodeSelectorOperator
+#NodeSelectorOperator: string // #enumNodeSelectorOperator
 
-enumNodeSelectorOperator ::
-	NodeSelectorOpIn |
-	NodeSelectorOpNotIn |
-	NodeSelectorOpExists |
-	NodeSelectorOpDoesNotExist |
-	NodeSelectorOpGt |
-	NodeSelectorOpLt
+#enumNodeSelectorOperator:
+	#NodeSelectorOpIn |
+	#NodeSelectorOpNotIn |
+	#NodeSelectorOpExists |
+	#NodeSelectorOpDoesNotExist |
+	#NodeSelectorOpGt |
+	#NodeSelectorOpLt
 
-NodeSelectorOpIn ::           NodeSelectorOperator & "In"
-NodeSelectorOpNotIn ::        NodeSelectorOperator & "NotIn"
-NodeSelectorOpExists ::       NodeSelectorOperator & "Exists"
-NodeSelectorOpDoesNotExist :: NodeSelectorOperator & "DoesNotExist"
-NodeSelectorOpGt ::           NodeSelectorOperator & "Gt"
-NodeSelectorOpLt ::           NodeSelectorOperator & "Lt"
+#NodeSelectorOpIn:           #NodeSelectorOperator & "In"
+#NodeSelectorOpNotIn:        #NodeSelectorOperator & "NotIn"
+#NodeSelectorOpExists:       #NodeSelectorOperator & "Exists"
+#NodeSelectorOpDoesNotExist: #NodeSelectorOperator & "DoesNotExist"
+#NodeSelectorOpGt:           #NodeSelectorOperator & "Gt"
+#NodeSelectorOpLt:           #NodeSelectorOperator & "Lt"
 
 // A topology selector term represents the result of label queries.
 // A null or empty topology selector term matches no objects.
 // The requirements of them are ANDed.
 // It provides a subset of functionality as NodeSelectorTerm.
 // This is an alpha feature and may change in the future.
-TopologySelectorTerm :: {
+#TopologySelectorTerm: {
 	// A list of topology selector requirements by labels.
 	// +optional
-	matchLabelExpressions?: [...TopologySelectorLabelRequirement] @go(MatchLabelExpressions,[]TopologySelectorLabelRequirement) @protobuf(1,bytes,rep)
+	matchLabelExpressions?: [...#TopologySelectorLabelRequirement] @go(MatchLabelExpressions,[]TopologySelectorLabelRequirement) @protobuf(1,bytes,rep)
 }
 
 // A topology selector requirement is a selector that matches given label.
 // This is an alpha feature and may change in the future.
-TopologySelectorLabelRequirement :: {
+#TopologySelectorLabelRequirement: {
 	// The label key that the selector applies to.
 	key: string @go(Key) @protobuf(1,bytes,opt)
 
@@ -2947,22 +2947,22 @@
 }
 
 // Affinity is a group of affinity scheduling rules.
-Affinity :: {
+#Affinity: {
 	// Describes node affinity scheduling rules for the pod.
 	// +optional
-	nodeAffinity?: null | NodeAffinity @go(NodeAffinity,*NodeAffinity) @protobuf(1,bytes,opt)
+	nodeAffinity?: null | #NodeAffinity @go(NodeAffinity,*NodeAffinity) @protobuf(1,bytes,opt)
 
 	// Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)).
 	// +optional
-	podAffinity?: null | PodAffinity @go(PodAffinity,*PodAffinity) @protobuf(2,bytes,opt)
+	podAffinity?: null | #PodAffinity @go(PodAffinity,*PodAffinity) @protobuf(2,bytes,opt)
 
 	// Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)).
 	// +optional
-	podAntiAffinity?: null | PodAntiAffinity @go(PodAntiAffinity,*PodAntiAffinity) @protobuf(3,bytes,opt)
+	podAntiAffinity?: null | #PodAntiAffinity @go(PodAntiAffinity,*PodAntiAffinity) @protobuf(3,bytes,opt)
 }
 
 // Pod affinity is a group of inter pod affinity scheduling rules.
-PodAffinity :: {
+#PodAffinity: {
 	// If the affinity requirements specified by this field are not met at
 	// scheduling time, the pod will not be scheduled onto the node.
 	// If the affinity requirements specified by this field cease to be met
@@ -2971,7 +2971,7 @@
 	// When there are multiple elements, the lists of nodes corresponding to each
 	// podAffinityTerm are intersected, i.e. all terms must be satisfied.
 	// +optional
-	requiredDuringSchedulingIgnoredDuringExecution?: [...PodAffinityTerm] @go(RequiredDuringSchedulingIgnoredDuringExecution,[]PodAffinityTerm) @protobuf(1,bytes,rep)
+	requiredDuringSchedulingIgnoredDuringExecution?: [...#PodAffinityTerm] @go(RequiredDuringSchedulingIgnoredDuringExecution,[]PodAffinityTerm) @protobuf(1,bytes,rep)
 
 	// The scheduler will prefer to schedule pods to nodes that satisfy
 	// the affinity expressions specified by this field, but it may choose
@@ -2983,11 +2983,11 @@
 	// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
 	// node(s) with the highest sum are the most preferred.
 	// +optional
-	preferredDuringSchedulingIgnoredDuringExecution?: [...WeightedPodAffinityTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]WeightedPodAffinityTerm) @protobuf(2,bytes,rep)
+	preferredDuringSchedulingIgnoredDuringExecution?: [...#WeightedPodAffinityTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]WeightedPodAffinityTerm) @protobuf(2,bytes,rep)
 }
 
 // Pod anti affinity is a group of inter pod anti affinity scheduling rules.
-PodAntiAffinity :: {
+#PodAntiAffinity: {
 	// If the anti-affinity requirements specified by this field are not met at
 	// scheduling time, the pod will not be scheduled onto the node.
 	// If the anti-affinity requirements specified by this field cease to be met
@@ -2996,7 +2996,7 @@
 	// When there are multiple elements, the lists of nodes corresponding to each
 	// podAffinityTerm are intersected, i.e. all terms must be satisfied.
 	// +optional
-	requiredDuringSchedulingIgnoredDuringExecution?: [...PodAffinityTerm] @go(RequiredDuringSchedulingIgnoredDuringExecution,[]PodAffinityTerm) @protobuf(1,bytes,rep)
+	requiredDuringSchedulingIgnoredDuringExecution?: [...#PodAffinityTerm] @go(RequiredDuringSchedulingIgnoredDuringExecution,[]PodAffinityTerm) @protobuf(1,bytes,rep)
 
 	// The scheduler will prefer to schedule pods to nodes that satisfy
 	// the anti-affinity expressions specified by this field, but it may choose
@@ -3008,17 +3008,17 @@
 	// "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the
 	// node(s) with the highest sum are the most preferred.
 	// +optional
-	preferredDuringSchedulingIgnoredDuringExecution?: [...WeightedPodAffinityTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]WeightedPodAffinityTerm) @protobuf(2,bytes,rep)
+	preferredDuringSchedulingIgnoredDuringExecution?: [...#WeightedPodAffinityTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]WeightedPodAffinityTerm) @protobuf(2,bytes,rep)
 }
 
 // The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)
-WeightedPodAffinityTerm :: {
+#WeightedPodAffinityTerm: {
 	// weight associated with matching the corresponding podAffinityTerm,
 	// in the range 1-100.
 	weight: int32 @go(Weight) @protobuf(1,varint,opt)
 
 	// Required. A pod affinity term, associated with the corresponding weight.
-	podAffinityTerm: PodAffinityTerm @go(PodAffinityTerm) @protobuf(2,bytes,opt)
+	podAffinityTerm: #PodAffinityTerm @go(PodAffinityTerm) @protobuf(2,bytes,opt)
 }
 
 // Defines a set of pods (namely those matching the labelSelector
@@ -3027,10 +3027,10 @@
 // where co-located is defined as running on a node whose value of
 // the label with key <topologyKey> matches that of any node on which
 // a pod of the set of pods is running
-PodAffinityTerm :: {
+#PodAffinityTerm: {
 	// A label query over a set of resources, in this case pods.
 	// +optional
-	labelSelector?: null | metav1.LabelSelector @go(LabelSelector,*metav1.LabelSelector) @protobuf(1,bytes,opt)
+	labelSelector?: null | metav1.#LabelSelector @go(LabelSelector,*metav1.LabelSelector) @protobuf(1,bytes,opt)
 
 	// namespaces specifies which namespaces the labelSelector applies to (matches against);
 	// null or empty list means "this pod's namespace"
@@ -3046,14 +3046,14 @@
 }
 
 // Node affinity is a group of node affinity scheduling rules.
-NodeAffinity :: {
+#NodeAffinity: {
 	// If the affinity requirements specified by this field are not met at
 	// scheduling time, the pod will not be scheduled onto the node.
 	// If the affinity requirements specified by this field cease to be met
 	// at some point during pod execution (e.g. due to an update), the system
 	// may or may not try to eventually evict the pod from its node.
 	// +optional
-	requiredDuringSchedulingIgnoredDuringExecution?: null | NodeSelector @go(RequiredDuringSchedulingIgnoredDuringExecution,*NodeSelector) @protobuf(1,bytes,opt)
+	requiredDuringSchedulingIgnoredDuringExecution?: null | #NodeSelector @go(RequiredDuringSchedulingIgnoredDuringExecution,*NodeSelector) @protobuf(1,bytes,opt)
 
 	// The scheduler will prefer to schedule pods to nodes that satisfy
 	// the affinity expressions specified by this field, but it may choose
@@ -3065,22 +3065,22 @@
 	// "weight" to the sum if the node matches the corresponding matchExpressions; the
 	// node(s) with the highest sum are the most preferred.
 	// +optional
-	preferredDuringSchedulingIgnoredDuringExecution?: [...PreferredSchedulingTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]PreferredSchedulingTerm) @protobuf(2,bytes,rep)
+	preferredDuringSchedulingIgnoredDuringExecution?: [...#PreferredSchedulingTerm] @go(PreferredDuringSchedulingIgnoredDuringExecution,[]PreferredSchedulingTerm) @protobuf(2,bytes,rep)
 }
 
 // An empty preferred scheduling term matches all objects with implicit weight 0
 // (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).
-PreferredSchedulingTerm :: {
+#PreferredSchedulingTerm: {
 	// Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.
 	weight: int32 @go(Weight) @protobuf(1,varint,opt)
 
 	// A node selector term, associated with the corresponding weight.
-	preference: NodeSelectorTerm @go(Preference) @protobuf(2,bytes,opt)
+	preference: #NodeSelectorTerm @go(Preference) @protobuf(2,bytes,opt)
 }
 
 // The node this Taint is attached to has the "effect" on
 // any pod that does not tolerate the Taint.
-Taint :: {
+#Taint: {
 	// Required. The taint key to be applied to a node.
 	key: string @go(Key) @protobuf(1,bytes,opt)
 
@@ -3091,39 +3091,39 @@
 	// Required. The effect of the taint on pods
 	// that do not tolerate the taint.
 	// Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
-	effect: TaintEffect @go(Effect) @protobuf(3,bytes,opt,casttype=TaintEffect)
+	effect: #TaintEffect @go(Effect) @protobuf(3,bytes,opt,casttype=TaintEffect)
 
 	// TimeAdded represents the time at which the taint was added.
 	// It is only written for NoExecute taints.
 	// +optional
-	timeAdded?: null | metav1.Time @go(TimeAdded,*metav1.Time) @protobuf(4,bytes,opt)
+	timeAdded?: null | metav1.#Time @go(TimeAdded,*metav1.Time) @protobuf(4,bytes,opt)
 }
 
-TaintEffect :: string // enumTaintEffect
+#TaintEffect: string // #enumTaintEffect
 
-enumTaintEffect ::
-	TaintEffectNoSchedule |
-	TaintEffectPreferNoSchedule |
-	TaintEffectNoExecute
+#enumTaintEffect:
+	#TaintEffectNoSchedule |
+	#TaintEffectPreferNoSchedule |
+	#TaintEffectNoExecute
 
 // Do not allow new pods to schedule onto the node unless they tolerate the taint,
 // but allow all pods submitted to Kubelet without going through the scheduler
 // to start, and allow all already-running pods to continue running.
 // Enforced by the scheduler.
-TaintEffectNoSchedule :: TaintEffect & "NoSchedule"
+#TaintEffectNoSchedule: #TaintEffect & "NoSchedule"
 
 // Like TaintEffectNoSchedule, but the scheduler tries not to schedule
 // new pods onto the node, rather than prohibiting new pods from scheduling
 // onto the node entirely. Enforced by the scheduler.
-TaintEffectPreferNoSchedule :: TaintEffect & "PreferNoSchedule"
+#TaintEffectPreferNoSchedule: #TaintEffect & "PreferNoSchedule"
 
 // Evict any already-running pods that do not tolerate the taint.
 // Currently enforced by NodeController.
-TaintEffectNoExecute :: TaintEffect & "NoExecute"
+#TaintEffectNoExecute: #TaintEffect & "NoExecute"
 
 // The pod this Toleration is attached to tolerates any taint that matches
 // the triple <key,value,effect> using the matching operator <operator>.
-Toleration :: {
+#Toleration: {
 	// Key is the taint key that the toleration applies to. Empty means match all taint keys.
 	// If the key is empty, operator must be Exists; this combination means to match all values and all keys.
 	// +optional
@@ -3134,7 +3134,7 @@
 	// Exists is equivalent to wildcard for value, so that a pod can
 	// tolerate all taints of a particular category.
 	// +optional
-	operator?: TolerationOperator @go(Operator) @protobuf(2,bytes,opt,casttype=TolerationOperator)
+	operator?: #TolerationOperator @go(Operator) @protobuf(2,bytes,opt,casttype=TolerationOperator)
 
 	// Value is the taint value the toleration matches to.
 	// If the operator is Exists, the value should be empty, otherwise just a regular string.
@@ -3144,7 +3144,7 @@
 	// Effect indicates the taint effect to match. Empty means match all taint effects.
 	// When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute.
 	// +optional
-	effect?: TaintEffect @go(Effect) @protobuf(4,bytes,opt,casttype=TaintEffect)
+	effect?: #TaintEffect @go(Effect) @protobuf(4,bytes,opt,casttype=TaintEffect)
 
 	// TolerationSeconds represents the period of time the toleration (which must be
 	// of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default,
@@ -3155,29 +3155,29 @@
 }
 
 // A toleration operator is the set of operators that can be used in a toleration.
-TolerationOperator :: string // enumTolerationOperator
+#TolerationOperator: string // #enumTolerationOperator
 
-enumTolerationOperator ::
-	TolerationOpExists |
-	TolerationOpEqual
+#enumTolerationOperator:
+	#TolerationOpExists |
+	#TolerationOpEqual
 
-TolerationOpExists :: TolerationOperator & "Exists"
-TolerationOpEqual ::  TolerationOperator & "Equal"
+#TolerationOpExists: #TolerationOperator & "Exists"
+#TolerationOpEqual:  #TolerationOperator & "Equal"
 
 // PodReadinessGate contains the reference to a pod condition
-PodReadinessGate :: {
+#PodReadinessGate: {
 	// ConditionType refers to a condition in the pod's condition list with matching type.
-	conditionType: PodConditionType @go(ConditionType) @protobuf(1,bytes,opt,casttype=PodConditionType)
+	conditionType: #PodConditionType @go(ConditionType) @protobuf(1,bytes,opt,casttype=PodConditionType)
 }
 
 // PodSpec is a description of a pod.
-PodSpec :: {
+#PodSpec: {
 	// List of volumes that can be mounted by containers belonging to the pod.
 	// More info: https://kubernetes.io/docs/concepts/storage/volumes
 	// +optional
 	// +patchMergeKey=name
 	// +patchStrategy=merge,retainKeys
-	volumes?: [...Volume] @go(Volumes,[]Volume) @protobuf(1,bytes,rep)
+	volumes?: [...#Volume] @go(Volumes,[]Volume) @protobuf(1,bytes,rep)
 
 	// List of initialization containers belonging to the pod.
 	// Init containers are executed in order prior to containers being started. If any
@@ -3194,7 +3194,7 @@
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	initContainers?: [...Container] @go(InitContainers,[]Container) @protobuf(20,bytes,rep)
+	initContainers?: [...#Container] @go(InitContainers,[]Container) @protobuf(20,bytes,rep)
 
 	// List of containers belonging to the pod.
 	// Containers cannot currently be added or removed.
@@ -3202,7 +3202,7 @@
 	// Cannot be updated.
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	containers: [...Container] @go(Containers,[]Container) @protobuf(2,bytes,rep)
+	containers: [...#Container] @go(Containers,[]Container) @protobuf(2,bytes,rep)
 
 	// List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing
 	// pod to perform user-initiated actions such as debugging. This list cannot be specified when
@@ -3212,14 +3212,14 @@
 	// +optional
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	ephemeralContainers?: [...EphemeralContainer] @go(EphemeralContainers,[]EphemeralContainer) @protobuf(34,bytes,rep)
+	ephemeralContainers?: [...#EphemeralContainer] @go(EphemeralContainers,[]EphemeralContainer) @protobuf(34,bytes,rep)
 
 	// Restart policy for all containers within the pod.
 	// One of Always, OnFailure, Never.
 	// Default to Always.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy
 	// +optional
-	restartPolicy?: RestartPolicy @go(RestartPolicy) @protobuf(3,bytes,opt,casttype=RestartPolicy)
+	restartPolicy?: #RestartPolicy @go(RestartPolicy) @protobuf(3,bytes,opt,casttype=RestartPolicy)
 
 	// Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request.
 	// Value must be non-negative integer. The value zero indicates delete immediately.
@@ -3244,7 +3244,7 @@
 	// To have DNS options set along with hostNetwork, you have to specify DNS policy
 	// explicitly to 'ClusterFirstWithHostNet'.
 	// +optional
-	dnsPolicy?: DNSPolicy @go(DNSPolicy) @protobuf(6,bytes,opt,casttype=DNSPolicy)
+	dnsPolicy?: #DNSPolicy @go(DNSPolicy) @protobuf(6,bytes,opt,casttype=DNSPolicy)
 
 	// NodeSelector is a selector which must be true for the pod to fit on a node.
 	// Selector which must match a node's labels for the pod to be scheduled on that node.
@@ -3304,7 +3304,7 @@
 	// SecurityContext holds pod-level security attributes and common container settings.
 	// Optional: Defaults to empty.  See type description for default values of each field.
 	// +optional
-	securityContext?: null | PodSecurityContext @go(SecurityContext,*PodSecurityContext) @protobuf(14,bytes,opt)
+	securityContext?: null | #PodSecurityContext @go(SecurityContext,*PodSecurityContext) @protobuf(14,bytes,opt)
 
 	// ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec.
 	// If specified, these secrets will be passed to individual puller implementations for them to use. For example,
@@ -3313,7 +3313,7 @@
 	// +optional
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	imagePullSecrets?: [...LocalObjectReference] @go(ImagePullSecrets,[]LocalObjectReference) @protobuf(15,bytes,rep)
+	imagePullSecrets?: [...#LocalObjectReference] @go(ImagePullSecrets,[]LocalObjectReference) @protobuf(15,bytes,rep)
 
 	// Specifies the hostname of the Pod
 	// If not specified, the pod's hostname will be set to a system-defined value.
@@ -3327,7 +3327,7 @@
 
 	// If specified, the pod's scheduling constraints
 	// +optional
-	affinity?: null | Affinity @go(Affinity,*Affinity) @protobuf(18,bytes,opt)
+	affinity?: null | #Affinity @go(Affinity,*Affinity) @protobuf(18,bytes,opt)
 
 	// If specified, the pod will be dispatched by specified scheduler.
 	// If not specified, the pod will be dispatched by default scheduler.
@@ -3336,14 +3336,14 @@
 
 	// If specified, the pod's tolerations.
 	// +optional
-	tolerations?: [...Toleration] @go(Tolerations,[]Toleration) @protobuf(22,bytes,opt)
+	tolerations?: [...#Toleration] @go(Tolerations,[]Toleration) @protobuf(22,bytes,opt)
 
 	// HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts
 	// file if specified. This is only valid for non-hostNetwork pods.
 	// +optional
 	// +patchMergeKey=ip
 	// +patchStrategy=merge
-	hostAliases?: [...HostAlias] @go(HostAliases,[]HostAlias) @protobuf(23,bytes,rep)
+	hostAliases?: [...#HostAlias] @go(HostAliases,[]HostAlias) @protobuf(23,bytes,rep)
 
 	// If specified, indicates the pod's priority. "system-node-critical" and
 	// "system-cluster-critical" are two special keywords which indicate the
@@ -3366,14 +3366,14 @@
 	// Parameters specified here will be merged to the generated DNS
 	// configuration based on DNSPolicy.
 	// +optional
-	dnsConfig?: null | PodDNSConfig @go(DNSConfig,*PodDNSConfig) @protobuf(26,bytes,opt)
+	dnsConfig?: null | #PodDNSConfig @go(DNSConfig,*PodDNSConfig) @protobuf(26,bytes,opt)
 
 	// If specified, all readiness gates will be evaluated for pod readiness.
 	// A pod is ready when all its containers are ready AND
 	// all conditions specified in the readiness gates have status equal to "True"
 	// More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md
 	// +optional
-	readinessGates?: [...PodReadinessGate] @go(ReadinessGates,[]PodReadinessGate) @protobuf(28,bytes,opt)
+	readinessGates?: [...#PodReadinessGate] @go(ReadinessGates,[]PodReadinessGate) @protobuf(28,bytes,opt)
 
 	// RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used
 	// to run this pod.  If no RuntimeClass resource matches the named class, the pod will not be run.
@@ -3395,7 +3395,7 @@
 	// Defaults to PreemptLowerPriority if unset.
 	// This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.
 	// +optional
-	preemptionPolicy?: null | PreemptionPolicy @go(PreemptionPolicy,*PreemptionPolicy) @protobuf(31,bytes,opt)
+	preemptionPolicy?: null | #PreemptionPolicy @go(PreemptionPolicy,*PreemptionPolicy) @protobuf(31,bytes,opt)
 
 	// Overhead represents the resource overhead associated with running a pod for a given RuntimeClass.
 	// This field will be autopopulated at admission time by the RuntimeClass admission controller. If
@@ -3406,7 +3406,7 @@
 	// More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md
 	// This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.
 	// +optional
-	overhead?: ResourceList @go(Overhead) @protobuf(32,bytes,opt)
+	overhead?: #ResourceList @go(Overhead) @protobuf(32,bytes,opt)
 
 	// TopologySpreadConstraints describes how a group of pods ought to spread across topology
 	// domains. Scheduler will schedule pods in a way which abides by the constraints.
@@ -3418,25 +3418,25 @@
 	// +listType=map
 	// +listMapKey=topologyKey
 	// +listMapKey=whenUnsatisfiable
-	topologySpreadConstraints?: [...TopologySpreadConstraint] @go(TopologySpreadConstraints,[]TopologySpreadConstraint) @protobuf(33,bytes,opt)
+	topologySpreadConstraints?: [...#TopologySpreadConstraint] @go(TopologySpreadConstraints,[]TopologySpreadConstraint) @protobuf(33,bytes,opt)
 }
 
-UnsatisfiableConstraintAction :: string // enumUnsatisfiableConstraintAction
+#UnsatisfiableConstraintAction: string // #enumUnsatisfiableConstraintAction
 
-enumUnsatisfiableConstraintAction ::
-	DoNotSchedule |
-	ScheduleAnyway
+#enumUnsatisfiableConstraintAction:
+	#DoNotSchedule |
+	#ScheduleAnyway
 
 // DoNotSchedule instructs the scheduler not to schedule the pod
 // when constraints are not satisfied.
-DoNotSchedule :: UnsatisfiableConstraintAction & "DoNotSchedule"
+#DoNotSchedule: #UnsatisfiableConstraintAction & "DoNotSchedule"
 
 // ScheduleAnyway instructs the scheduler to schedule the pod
 // even if constraints are not satisfied.
-ScheduleAnyway :: UnsatisfiableConstraintAction & "ScheduleAnyway"
+#ScheduleAnyway: #UnsatisfiableConstraintAction & "ScheduleAnyway"
 
 // TopologySpreadConstraint specifies how to spread matching pods among the given topology.
-TopologySpreadConstraint :: {
+#TopologySpreadConstraint: {
 	// MaxSkew describes the degree to which pods may be unevenly distributed.
 	// It's the maximum permitted difference between the number of matching pods in
 	// any two topology domains of a given topology type.
@@ -3479,21 +3479,21 @@
 	// MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler
 	// won't make it *more* imbalanced.
 	// It's a required field.
-	whenUnsatisfiable: UnsatisfiableConstraintAction @go(WhenUnsatisfiable) @protobuf(3,bytes,opt,casttype=UnsatisfiableConstraintAction)
+	whenUnsatisfiable: #UnsatisfiableConstraintAction @go(WhenUnsatisfiable) @protobuf(3,bytes,opt,casttype=UnsatisfiableConstraintAction)
 
 	// LabelSelector is used to find matching pods.
 	// Pods that match this label selector are counted to determine the number of pods
 	// in their corresponding topology domain.
 	// +optional
-	labelSelector?: null | metav1.LabelSelector @go(LabelSelector,*metav1.LabelSelector) @protobuf(4,bytes,opt)
+	labelSelector?: null | metav1.#LabelSelector @go(LabelSelector,*metav1.LabelSelector) @protobuf(4,bytes,opt)
 }
 
 // The default value for enableServiceLinks attribute.
-DefaultEnableServiceLinks :: true
+#DefaultEnableServiceLinks: true
 
 // HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the
 // pod's hosts file.
-HostAlias :: {
+#HostAlias: {
 	// IP address of the host file entry.
 	ip?: string @go(IP) @protobuf(1,bytes,opt)
 
@@ -3503,40 +3503,40 @@
 
 // PodFSGroupChangePolicy holds policies that will be used for applying fsGroup to a volume
 // when volume is mounted.
-PodFSGroupChangePolicy :: string // enumPodFSGroupChangePolicy
+#PodFSGroupChangePolicy: string // #enumPodFSGroupChangePolicy
 
-enumPodFSGroupChangePolicy ::
-	FSGroupChangeOnRootMismatch |
-	FSGroupChangeAlways
+#enumPodFSGroupChangePolicy:
+	#FSGroupChangeOnRootMismatch |
+	#FSGroupChangeAlways
 
 // FSGroupChangeOnRootMismatch indicates that volume's ownership and permissions will be changed
 // only when permission and ownership of root directory does not match with expected
 // permissions on the volume. This can help shorten the time it takes to change
 // ownership and permissions of a volume.
-FSGroupChangeOnRootMismatch :: PodFSGroupChangePolicy & "OnRootMismatch"
+#FSGroupChangeOnRootMismatch: #PodFSGroupChangePolicy & "OnRootMismatch"
 
 // FSGroupChangeAlways indicates that volume's ownership and permissions
 // should always be changed whenever volume is mounted inside a Pod. This the default
 // behavior.
-FSGroupChangeAlways :: PodFSGroupChangePolicy & "Always"
+#FSGroupChangeAlways: #PodFSGroupChangePolicy & "Always"
 
 // PodSecurityContext holds pod-level security attributes and common container settings.
 // Some fields are also present in container.securityContext.  Field values of
 // container.securityContext take precedence over field values of PodSecurityContext.
-PodSecurityContext :: {
+#PodSecurityContext: {
 	// The SELinux context to be applied to all containers.
 	// If unspecified, the container runtime will allocate a random SELinux context for each
 	// container.  May also be set in SecurityContext.  If set in
 	// both SecurityContext and PodSecurityContext, the value specified in SecurityContext
 	// takes precedence for that container.
 	// +optional
-	seLinuxOptions?: null | SELinuxOptions @go(SELinuxOptions,*SELinuxOptions) @protobuf(1,bytes,opt)
+	seLinuxOptions?: null | #SELinuxOptions @go(SELinuxOptions,*SELinuxOptions) @protobuf(1,bytes,opt)
 
 	// The Windows specific settings applied to all containers.
 	// If unspecified, the options within a container's SecurityContext will be used.
 	// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
 	// +optional
-	windowsOptions?: null | WindowsSecurityContextOptions @go(WindowsOptions,*WindowsSecurityContextOptions) @protobuf(8,bytes,opt)
+	windowsOptions?: null | #WindowsSecurityContextOptions @go(WindowsOptions,*WindowsSecurityContextOptions) @protobuf(8,bytes,opt)
 
 	// The UID to run the entrypoint of the container process.
 	// Defaults to user specified in image metadata if unspecified.
@@ -3584,7 +3584,7 @@
 	// Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported
 	// sysctls (by the container runtime) might fail to launch.
 	// +optional
-	sysctls?: [...Sysctl] @go(Sysctls,[]Sysctl) @protobuf(7,bytes,rep)
+	sysctls?: [...#Sysctl] @go(Sysctls,[]Sysctl) @protobuf(7,bytes,rep)
 
 	// fsGroupChangePolicy defines behavior of changing ownership and permission of the volume
 	// before being exposed inside Pod. This field will only apply to
@@ -3593,29 +3593,29 @@
 	// and emptydir.
 	// Valid values are "OnRootMismatch" and "Always". If not specified defaults to "Always".
 	// +optional
-	fsGroupChangePolicy?: null | PodFSGroupChangePolicy @go(FSGroupChangePolicy,*PodFSGroupChangePolicy) @protobuf(9,bytes,opt)
+	fsGroupChangePolicy?: null | #PodFSGroupChangePolicy @go(FSGroupChangePolicy,*PodFSGroupChangePolicy) @protobuf(9,bytes,opt)
 }
 
 // PodQOSClass defines the supported qos classes of Pods.
-PodQOSClass :: string // enumPodQOSClass
+#PodQOSClass: string // #enumPodQOSClass
 
-enumPodQOSClass ::
-	PodQOSGuaranteed |
-	PodQOSBurstable |
-	PodQOSBestEffort
+#enumPodQOSClass:
+	#PodQOSGuaranteed |
+	#PodQOSBurstable |
+	#PodQOSBestEffort
 
 // PodQOSGuaranteed is the Guaranteed qos class.
-PodQOSGuaranteed :: PodQOSClass & "Guaranteed"
+#PodQOSGuaranteed: #PodQOSClass & "Guaranteed"
 
 // PodQOSBurstable is the Burstable qos class.
-PodQOSBurstable :: PodQOSClass & "Burstable"
+#PodQOSBurstable: #PodQOSClass & "Burstable"
 
 // PodQOSBestEffort is the BestEffort qos class.
-PodQOSBestEffort :: PodQOSClass & "BestEffort"
+#PodQOSBestEffort: #PodQOSClass & "BestEffort"
 
 // PodDNSConfig defines the DNS parameters of a pod in addition to
 // those generated from DNSPolicy.
-PodDNSConfig :: {
+#PodDNSConfig: {
 	// A list of DNS name server IP addresses.
 	// This will be appended to the base nameservers generated from DNSPolicy.
 	// Duplicated nameservers will be removed.
@@ -3633,11 +3633,11 @@
 	// Duplicated entries will be removed. Resolution options given in Options
 	// will override those that appear in the base DNSPolicy.
 	// +optional
-	options?: [...PodDNSConfigOption] @go(Options,[]PodDNSConfigOption) @protobuf(3,bytes,rep)
+	options?: [...#PodDNSConfigOption] @go(Options,[]PodDNSConfigOption) @protobuf(3,bytes,rep)
 }
 
 // PodDNSConfigOption defines DNS resolver options of a pod.
-PodDNSConfigOption :: {
+#PodDNSConfigOption: {
 	// Required.
 	name?: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -3648,7 +3648,7 @@
 // IP address information for entries in the (plural) PodIPs field.
 // Each entry includes:
 //    IP: An IP address allocated to the pod. Routable at least within the cluster.
-PodIP :: {
+#PodIP: {
 	// ip is an IP address (IPv4 or IPv6) assigned to the pod
 	ip?: string @go(IP) @protobuf(1,bytes,opt)
 }
@@ -3657,7 +3657,7 @@
 // EphemeralContainer. This separate type allows easy conversion from EphemeralContainer
 // to Container and allows separate documentation for the fields of EphemeralContainer.
 // When a new field is added to Container it must be added here as well.
-EphemeralContainerCommon :: {
+#EphemeralContainerCommon: {
 	// Name of the ephemeral container specified as a DNS_LABEL.
 	// This name must be unique among all containers, init containers and ephemeral containers.
 	name: string @go(Name) @protobuf(1,bytes,opt)
@@ -3696,7 +3696,7 @@
 	workingDir?: string @go(WorkingDir) @protobuf(5,bytes,opt)
 
 	// Ports are not allowed for ephemeral containers.
-	ports?: [...ContainerPort] @go(Ports,[]ContainerPort) @protobuf(6,bytes,rep)
+	ports?: [...#ContainerPort] @go(Ports,[]ContainerPort) @protobuf(6,bytes,rep)
 
 	// List of sources to populate environment variables in the container.
 	// The keys defined within a source must be a C_IDENTIFIER. All invalid keys
@@ -3705,48 +3705,48 @@
 	// Values defined by an Env with a duplicate key will take precedence.
 	// Cannot be updated.
 	// +optional
-	envFrom?: [...EnvFromSource] @go(EnvFrom,[]EnvFromSource) @protobuf(19,bytes,rep)
+	envFrom?: [...#EnvFromSource] @go(EnvFrom,[]EnvFromSource) @protobuf(19,bytes,rep)
 
 	// List of environment variables to set in the container.
 	// Cannot be updated.
 	// +optional
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	env?: [...EnvVar] @go(Env,[]EnvVar) @protobuf(7,bytes,rep)
+	env?: [...#EnvVar] @go(Env,[]EnvVar) @protobuf(7,bytes,rep)
 
 	// Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources
 	// already allocated to the pod.
 	// +optional
-	resources?: ResourceRequirements @go(Resources) @protobuf(8,bytes,opt)
+	resources?: #ResourceRequirements @go(Resources) @protobuf(8,bytes,opt)
 
 	// Pod volumes to mount into the container's filesystem.
 	// Cannot be updated.
 	// +optional
 	// +patchMergeKey=mountPath
 	// +patchStrategy=merge
-	volumeMounts?: [...VolumeMount] @go(VolumeMounts,[]VolumeMount) @protobuf(9,bytes,rep)
+	volumeMounts?: [...#VolumeMount] @go(VolumeMounts,[]VolumeMount) @protobuf(9,bytes,rep)
 
 	// volumeDevices is the list of block devices to be used by the container.
 	// +patchMergeKey=devicePath
 	// +patchStrategy=merge
 	// +optional
-	volumeDevices?: [...VolumeDevice] @go(VolumeDevices,[]VolumeDevice) @protobuf(21,bytes,rep)
+	volumeDevices?: [...#VolumeDevice] @go(VolumeDevices,[]VolumeDevice) @protobuf(21,bytes,rep)
 
 	// Probes are not allowed for ephemeral containers.
 	// +optional
-	livenessProbe?: null | Probe @go(LivenessProbe,*Probe) @protobuf(10,bytes,opt)
+	livenessProbe?: null | #Probe @go(LivenessProbe,*Probe) @protobuf(10,bytes,opt)
 
 	// Probes are not allowed for ephemeral containers.
 	// +optional
-	readinessProbe?: null | Probe @go(ReadinessProbe,*Probe) @protobuf(11,bytes,opt)
+	readinessProbe?: null | #Probe @go(ReadinessProbe,*Probe) @protobuf(11,bytes,opt)
 
 	// Probes are not allowed for ephemeral containers.
 	// +optional
-	startupProbe?: null | Probe @go(StartupProbe,*Probe) @protobuf(22,bytes,opt)
+	startupProbe?: null | #Probe @go(StartupProbe,*Probe) @protobuf(22,bytes,opt)
 
 	// Lifecycle is not allowed for ephemeral containers.
 	// +optional
-	lifecycle?: null | Lifecycle @go(Lifecycle,*Lifecycle) @protobuf(12,bytes,opt)
+	lifecycle?: null | #Lifecycle @go(Lifecycle,*Lifecycle) @protobuf(12,bytes,opt)
 
 	// Optional: Path at which the file to which the container's termination message
 	// will be written is mounted into the container's filesystem.
@@ -3766,7 +3766,7 @@
 	// Defaults to File.
 	// Cannot be updated.
 	// +optional
-	terminationMessagePolicy?: TerminationMessagePolicy @go(TerminationMessagePolicy) @protobuf(20,bytes,opt,casttype=TerminationMessagePolicy)
+	terminationMessagePolicy?: #TerminationMessagePolicy @go(TerminationMessagePolicy) @protobuf(20,bytes,opt,casttype=TerminationMessagePolicy)
 
 	// Image pull policy.
 	// One of Always, Never, IfNotPresent.
@@ -3774,11 +3774,11 @@
 	// Cannot be updated.
 	// More info: https://kubernetes.io/docs/concepts/containers/images#updating-images
 	// +optional
-	imagePullPolicy?: PullPolicy @go(ImagePullPolicy) @protobuf(14,bytes,opt,casttype=PullPolicy)
+	imagePullPolicy?: #PullPolicy @go(ImagePullPolicy) @protobuf(14,bytes,opt,casttype=PullPolicy)
 
 	// SecurityContext is not allowed for ephemeral containers.
 	// +optional
-	securityContext?: null | SecurityContext @go(SecurityContext,*SecurityContext) @protobuf(15,bytes,opt)
+	securityContext?: null | #SecurityContext @go(SecurityContext,*SecurityContext) @protobuf(15,bytes,opt)
 
 	// Whether this container should allocate a buffer for stdin in the container runtime. If this
 	// is not set, reads from stdin in the container will always result in EOF.
@@ -3811,8 +3811,8 @@
 // via the pod's ephemeralcontainers subresource, and they will appear in the pod spec
 // once added.
 // This is an alpha feature enabled by the EphemeralContainers feature flag.
-EphemeralContainer :: {
-	EphemeralContainerCommon
+#EphemeralContainer: {
+	#EphemeralContainerCommon
 
 	// If set, the name of the container from PodSpec that this ephemeral container targets.
 	// The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container.
@@ -3825,7 +3825,7 @@
 // PodStatus represents information about the status of a pod. Status may trail the actual
 // state of a system, especially if the node that hosts the pod cannot contact the control
 // plane.
-PodStatus :: {
+#PodStatus: {
 	// The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.
 	// The conditions array, the reason and message fields, and the individual container status
 	// arrays contain more detail about the pod's status.
@@ -3845,14 +3845,14 @@
 	//
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-phase
 	// +optional
-	phase?: PodPhase @go(Phase) @protobuf(1,bytes,opt,casttype=PodPhase)
+	phase?: #PodPhase @go(Phase) @protobuf(1,bytes,opt,casttype=PodPhase)
 
 	// Current service state of pod.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-conditions
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...PodCondition] @go(Conditions,[]PodCondition) @protobuf(2,bytes,rep)
+	conditions?: [...#PodCondition] @go(Conditions,[]PodCondition) @protobuf(2,bytes,rep)
 
 	// A human readable message indicating details about why the pod is in this condition.
 	// +optional
@@ -3888,45 +3888,45 @@
 	// +optional
 	// +patchStrategy=merge
 	// +patchMergeKey=ip
-	podIPs?: [...PodIP] @go(PodIPs,[]PodIP) @protobuf(12,bytes,rep)
+	podIPs?: [...#PodIP] @go(PodIPs,[]PodIP) @protobuf(12,bytes,rep)
 
 	// RFC 3339 date and time at which the object was acknowledged by the Kubelet.
 	// This is before the Kubelet pulled the container image(s) for the pod.
 	// +optional
-	startTime?: null | metav1.Time @go(StartTime,*metav1.Time) @protobuf(7,bytes,opt)
+	startTime?: null | metav1.#Time @go(StartTime,*metav1.Time) @protobuf(7,bytes,opt)
 
 	// The list has one entry per init container in the manifest. The most recent successful
 	// init container will have ready = true, the most recently started container will have
 	// startTime set.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
-	initContainerStatuses?: [...ContainerStatus] @go(InitContainerStatuses,[]ContainerStatus) @protobuf(10,bytes,rep)
+	initContainerStatuses?: [...#ContainerStatus] @go(InitContainerStatuses,[]ContainerStatus) @protobuf(10,bytes,rep)
 
 	// The list has one entry per container in the manifest. Each entry is currently the output
 	// of `docker inspect`.
 	// More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status
 	// +optional
-	containerStatuses?: [...ContainerStatus] @go(ContainerStatuses,[]ContainerStatus) @protobuf(8,bytes,rep)
+	containerStatuses?: [...#ContainerStatus] @go(ContainerStatuses,[]ContainerStatus) @protobuf(8,bytes,rep)
 
 	// The Quality of Service (QOS) classification assigned to the pod based on resource requirements
 	// See PodQOSClass type for available QOS classes
 	// More info: https://git.k8s.io/community/contributors/design-proposals/node/resource-qos.md
 	// +optional
-	qosClass?: PodQOSClass @go(QOSClass) @protobuf(9,bytes,rep)
+	qosClass?: #PodQOSClass @go(QOSClass) @protobuf(9,bytes,rep)
 
 	// Status for any ephemeral containers that have run in this pod.
 	// This field is alpha-level and is only populated by servers that enable the EphemeralContainers feature.
 	// +optional
-	ephemeralContainerStatuses?: [...ContainerStatus] @go(EphemeralContainerStatuses,[]ContainerStatus) @protobuf(13,bytes,rep)
+	ephemeralContainerStatuses?: [...#ContainerStatus] @go(EphemeralContainerStatuses,[]ContainerStatus) @protobuf(13,bytes,rep)
 }
 
 // PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded
-PodStatusResult :: {
-	metav1.TypeMeta
+#PodStatusResult: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Most recently observed status of the pod.
 	// This data may not be up to date.
@@ -3934,23 +3934,23 @@
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: PodStatus @go(Status) @protobuf(2,bytes,opt)
+	status?: #PodStatus @go(Status) @protobuf(2,bytes,opt)
 }
 
 // Pod is a collection of containers that can run on a host. This resource is created
 // by clients and scheduled onto hosts.
-Pod :: {
-	metav1.TypeMeta
+#Pod: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Specification of the desired behavior of the pod.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: PodSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #PodSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Most recently observed status of the pod.
 	// This data may not be up to date.
@@ -3958,66 +3958,66 @@
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: PodStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #PodStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // PodList is a list of Pods.
-PodList :: {
-	metav1.TypeMeta
+#PodList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of pods.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md
-	items: [...Pod] @go(Items,[]Pod) @protobuf(2,bytes,rep)
+	items: [...#Pod] @go(Items,[]Pod) @protobuf(2,bytes,rep)
 }
 
 // PodTemplateSpec describes the data a pod should have when created from a template
-PodTemplateSpec :: {
+#PodTemplateSpec: {
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Specification of the desired behavior of the pod.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: PodSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #PodSpec @go(Spec) @protobuf(2,bytes,opt)
 }
 
 // PodTemplate describes a template for creating copies of a predefined pod.
-PodTemplate :: {
-	metav1.TypeMeta
+#PodTemplate: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Template defines the pods that will be created from this pod template.
 	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	template?: PodTemplateSpec @go(Template) @protobuf(2,bytes,opt)
+	template?: #PodTemplateSpec @go(Template) @protobuf(2,bytes,opt)
 }
 
 // PodTemplateList is a list of PodTemplates.
-PodTemplateList :: {
-	metav1.TypeMeta
+#PodTemplateList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of pod templates
-	items: [...PodTemplate] @go(Items,[]PodTemplate) @protobuf(2,bytes,rep)
+	items: [...#PodTemplate] @go(Items,[]PodTemplate) @protobuf(2,bytes,rep)
 }
 
 // ReplicationControllerSpec is the specification of a replication controller.
-ReplicationControllerSpec :: {
+#ReplicationControllerSpec: {
 	// Replicas is the number of desired replicas.
 	// This is a pointer to distinguish between explicit zero and unspecified.
 	// Defaults to 1.
@@ -4043,12 +4043,12 @@
 	// insufficient replicas are detected. This takes precedence over a TemplateRef.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template
 	// +optional
-	template?: null | PodTemplateSpec @go(Template,*PodTemplateSpec) @protobuf(3,bytes,opt)
+	template?: null | #PodTemplateSpec @go(Template,*PodTemplateSpec) @protobuf(3,bytes,opt)
 }
 
 // ReplicationControllerStatus represents the current status of a replication
 // controller.
-ReplicationControllerStatus :: {
+#ReplicationControllerStatus: {
 	// Replicas is the most recently oberved number of replicas.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#what-is-a-replicationcontroller
 	replicas: int32 @go(Replicas) @protobuf(1,varint,opt)
@@ -4073,30 +4073,30 @@
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...ReplicationControllerCondition] @go(Conditions,[]ReplicationControllerCondition) @protobuf(6,bytes,rep)
+	conditions?: [...#ReplicationControllerCondition] @go(Conditions,[]ReplicationControllerCondition) @protobuf(6,bytes,rep)
 }
 
-ReplicationControllerConditionType :: string // enumReplicationControllerConditionType
+#ReplicationControllerConditionType: string // #enumReplicationControllerConditionType
 
-enumReplicationControllerConditionType ::
-	ReplicationControllerReplicaFailure
+#enumReplicationControllerConditionType:
+	#ReplicationControllerReplicaFailure
 
 // ReplicationControllerReplicaFailure is added in a replication controller when one of its pods
 // fails to be created due to insufficient quota, limit ranges, pod security policy, node selectors,
 // etc. or deleted due to kubelet being down or finalizers are failing.
-ReplicationControllerReplicaFailure :: ReplicationControllerConditionType & "ReplicaFailure"
+#ReplicationControllerReplicaFailure: #ReplicationControllerConditionType & "ReplicaFailure"
 
 // ReplicationControllerCondition describes the state of a replication controller at a certain point.
-ReplicationControllerCondition :: {
+#ReplicationControllerCondition: {
 	// Type of replication controller condition.
-	type: ReplicationControllerConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ReplicationControllerConditionType)
+	type: #ReplicationControllerConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ReplicationControllerConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
+	status: #ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
 
 	// The last time the condition transitioned from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(3,bytes,opt)
 
 	// The reason for the condition's last transition.
 	// +optional
@@ -4108,19 +4108,19 @@
 }
 
 // ReplicationController represents the configuration of a replication controller.
-ReplicationController :: {
-	metav1.TypeMeta
+#ReplicationController: {
+	metav1.#TypeMeta
 
 	// If the Labels of a ReplicationController are empty, they are defaulted to
 	// be the same as the Pod(s) that the replication controller manages.
 	// Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the specification of the desired behavior of the replication controller.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: ReplicationControllerSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #ReplicationControllerSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status is the most recently observed status of the replication controller.
 	// This data may be out of date by some window of time.
@@ -4128,47 +4128,47 @@
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: ReplicationControllerStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #ReplicationControllerStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // ReplicationControllerList is a collection of replication controllers.
-ReplicationControllerList :: {
-	metav1.TypeMeta
+#ReplicationControllerList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of replication controllers.
 	// More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller
-	items: [...ReplicationController] @go(Items,[]ReplicationController) @protobuf(2,bytes,rep)
+	items: [...#ReplicationController] @go(Items,[]ReplicationController) @protobuf(2,bytes,rep)
 }
 
 // Session Affinity Type string
-ServiceAffinity :: string // enumServiceAffinity
+#ServiceAffinity: string // #enumServiceAffinity
 
-enumServiceAffinity ::
-	ServiceAffinityClientIP |
-	ServiceAffinityNone
+#enumServiceAffinity:
+	#ServiceAffinityClientIP |
+	#ServiceAffinityNone
 
 // ServiceAffinityClientIP is the Client IP based.
-ServiceAffinityClientIP :: ServiceAffinity & "ClientIP"
+#ServiceAffinityClientIP: #ServiceAffinity & "ClientIP"
 
 // ServiceAffinityNone - no session affinity.
-ServiceAffinityNone :: ServiceAffinity & "None"
+#ServiceAffinityNone: #ServiceAffinity & "None"
 
-DefaultClientIPServiceAffinitySeconds :: int32 & 10800
+#DefaultClientIPServiceAffinitySeconds: int32 & 10800
 
 // SessionAffinityConfig represents the configurations of session affinity.
-SessionAffinityConfig :: {
+#SessionAffinityConfig: {
 	// clientIP contains the configurations of Client IP based session affinity.
 	// +optional
-	clientIP?: null | ClientIPConfig @go(ClientIP,*ClientIPConfig) @protobuf(1,bytes,opt)
+	clientIP?: null | #ClientIPConfig @go(ClientIP,*ClientIPConfig) @protobuf(1,bytes,opt)
 }
 
 // ClientIPConfig represents the configurations of Client IP based session affinity.
-ClientIPConfig :: {
+#ClientIPConfig: {
 	// timeoutSeconds specifies the seconds of ClientIP type session sticky time.
 	// The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP".
 	// Default value is 10800(for 3 hours).
@@ -4177,64 +4177,64 @@
 }
 
 // Service Type string describes ingress methods for a service
-ServiceType :: string // enumServiceType
+#ServiceType: string // #enumServiceType
 
-enumServiceType ::
-	ServiceTypeClusterIP |
-	ServiceTypeNodePort |
-	ServiceTypeLoadBalancer |
-	ServiceTypeExternalName
+#enumServiceType:
+	#ServiceTypeClusterIP |
+	#ServiceTypeNodePort |
+	#ServiceTypeLoadBalancer |
+	#ServiceTypeExternalName
 
 // ServiceTypeClusterIP means a service will only be accessible inside the
 // cluster, via the cluster IP.
-ServiceTypeClusterIP :: ServiceType & "ClusterIP"
+#ServiceTypeClusterIP: #ServiceType & "ClusterIP"
 
 // ServiceTypeNodePort means a service will be exposed on one port of
 // every node, in addition to 'ClusterIP' type.
-ServiceTypeNodePort :: ServiceType & "NodePort"
+#ServiceTypeNodePort: #ServiceType & "NodePort"
 
 // ServiceTypeLoadBalancer means a service will be exposed via an
 // external load balancer (if the cloud provider supports it), in addition
 // to 'NodePort' type.
-ServiceTypeLoadBalancer :: ServiceType & "LoadBalancer"
+#ServiceTypeLoadBalancer: #ServiceType & "LoadBalancer"
 
 // ServiceTypeExternalName means a service consists of only a reference to
 // an external name that kubedns or equivalent will return as a CNAME
 // record, with no exposing or proxying of any pods involved.
-ServiceTypeExternalName :: ServiceType & "ExternalName"
+#ServiceTypeExternalName: #ServiceType & "ExternalName"
 
 // Service External Traffic Policy Type string
-ServiceExternalTrafficPolicyType :: string // enumServiceExternalTrafficPolicyType
+#ServiceExternalTrafficPolicyType: string // #enumServiceExternalTrafficPolicyType
 
-enumServiceExternalTrafficPolicyType ::
-	ServiceExternalTrafficPolicyTypeLocal |
-	ServiceExternalTrafficPolicyTypeCluster
+#enumServiceExternalTrafficPolicyType:
+	#ServiceExternalTrafficPolicyTypeLocal |
+	#ServiceExternalTrafficPolicyTypeCluster
 
 // ServiceExternalTrafficPolicyTypeLocal specifies node-local endpoints behavior.
-ServiceExternalTrafficPolicyTypeLocal :: ServiceExternalTrafficPolicyType & "Local"
+#ServiceExternalTrafficPolicyTypeLocal: #ServiceExternalTrafficPolicyType & "Local"
 
 // ServiceExternalTrafficPolicyTypeCluster specifies node-global (legacy) behavior.
-ServiceExternalTrafficPolicyTypeCluster :: ServiceExternalTrafficPolicyType & "Cluster"
+#ServiceExternalTrafficPolicyTypeCluster: #ServiceExternalTrafficPolicyType & "Cluster"
 
 // ServiceStatus represents the current status of a service.
-ServiceStatus :: {
+#ServiceStatus: {
 	// LoadBalancer contains the current status of the load-balancer,
 	// if one is present.
 	// +optional
-	loadBalancer?: LoadBalancerStatus @go(LoadBalancer) @protobuf(1,bytes,opt)
+	loadBalancer?: #LoadBalancerStatus @go(LoadBalancer) @protobuf(1,bytes,opt)
 }
 
 // LoadBalancerStatus represents the status of a load-balancer.
-LoadBalancerStatus :: {
+#LoadBalancerStatus: {
 	// Ingress is a list containing ingress points for the load-balancer.
 	// Traffic intended for the service should be sent to these ingress points.
 	// +optional
-	ingress?: [...LoadBalancerIngress] @go(Ingress,[]LoadBalancerIngress) @protobuf(1,bytes,rep)
+	ingress?: [...#LoadBalancerIngress] @go(Ingress,[]LoadBalancerIngress) @protobuf(1,bytes,rep)
 }
 
 // LoadBalancerIngress represents the status of a load-balancer ingress point:
 // traffic intended for the service should be sent to an ingress point.
-LoadBalancerIngress :: {
+#LoadBalancerIngress: {
 	// IP is set for load-balancer ingress points that are IP based
 	// (typically GCE or OpenStack load-balancers)
 	// +optional
@@ -4248,23 +4248,23 @@
 
 // IPFamily represents the IP Family (IPv4 or IPv6). This type is used
 // to express the family of an IP expressed by a type (i.e. service.Spec.IPFamily)
-IPFamily :: string // enumIPFamily
+#IPFamily: string // #enumIPFamily
 
-enumIPFamily ::
-	IPv4Protocol |
-	IPv6Protocol
+#enumIPFamily:
+	#IPv4Protocol |
+	#IPv6Protocol
 
 // IPv4Protocol indicates that this IP is IPv4 protocol
-IPv4Protocol :: IPFamily & "IPv4"
+#IPv4Protocol: #IPFamily & "IPv4"
 
 // IPv6Protocol indicates that this IP is IPv6 protocol
-IPv6Protocol :: IPFamily & "IPv6"
+#IPv6Protocol: #IPFamily & "IPv6"
 
 // MaxServiceTopologyKeys is the largest number of topology keys allowed on a service
-MaxServiceTopologyKeys :: 16
+#MaxServiceTopologyKeys: 16
 
 // ServiceSpec describes the attributes that a user creates on a service.
-ServiceSpec :: {
+#ServiceSpec: {
 	// The list of ports that are exposed by this service.
 	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
 	// +patchMergeKey=port
@@ -4272,7 +4272,7 @@
 	// +listType=map
 	// +listMapKey=port
 	// +listMapKey=protocol
-	ports?: [...ServicePort] @go(Ports,[]ServicePort) @protobuf(1,bytes,rep)
+	ports?: [...#ServicePort] @go(Ports,[]ServicePort) @protobuf(1,bytes,rep)
 
 	// Route service traffic to pods with label keys and values matching this
 	// selector. If empty or not present, the service is assumed to have an
@@ -4310,7 +4310,7 @@
 	// to the clusterIP.
 	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
 	// +optional
-	type?: ServiceType @go(Type) @protobuf(4,bytes,opt,casttype=ServiceType)
+	type?: #ServiceType @go(Type) @protobuf(4,bytes,opt,casttype=ServiceType)
 
 	// externalIPs is a list of IP addresses for which nodes in the cluster
 	// will also accept traffic for this service.  These IPs are not managed by
@@ -4326,7 +4326,7 @@
 	// Defaults to None.
 	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies
 	// +optional
-	sessionAffinity?: ServiceAffinity @go(SessionAffinity) @protobuf(7,bytes,opt,casttype=ServiceAffinity)
+	sessionAffinity?: #ServiceAffinity @go(SessionAffinity) @protobuf(7,bytes,opt,casttype=ServiceAffinity)
 
 	// Only applies to Service Type: LoadBalancer
 	// LoadBalancer will get created with the IP specified in this field.
@@ -4357,7 +4357,7 @@
 	// "Cluster" obscures the client source IP and may cause a second hop to
 	// another node, but should have good overall load-spreading.
 	// +optional
-	externalTrafficPolicy?: ServiceExternalTrafficPolicyType @go(ExternalTrafficPolicy) @protobuf(11,bytes,opt)
+	externalTrafficPolicy?: #ServiceExternalTrafficPolicyType @go(ExternalTrafficPolicy) @protobuf(11,bytes,opt)
 
 	// healthCheckNodePort specifies the healthcheck nodePort for the service.
 	// If not specified, HealthCheckNodePort is created by the service api
@@ -4378,7 +4378,7 @@
 
 	// sessionAffinityConfig contains the configurations of session affinity.
 	// +optional
-	sessionAffinityConfig?: null | SessionAffinityConfig @go(SessionAffinityConfig,*SessionAffinityConfig) @protobuf(14,bytes,opt)
+	sessionAffinityConfig?: null | #SessionAffinityConfig @go(SessionAffinityConfig,*SessionAffinityConfig) @protobuf(14,bytes,opt)
 
 	// ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs.
 	// IPv6).  If a specific IP family is requested, the clusterIP field will be allocated from that family, if it is
@@ -4388,7 +4388,7 @@
 	// this family.  This field is immutable after creation. Assigning a ServiceIPFamily not available in the
 	// cluster (e.g. IPv6 in IPv4 only cluster) is an error condition and will fail during clusterIP assignment.
 	// +optional
-	ipFamily?: null | IPFamily @go(IPFamily,*IPFamily) @protobuf(15,bytes,opt,Configcasttype=IPFamily)
+	ipFamily?: null | #IPFamily @go(IPFamily,*IPFamily) @protobuf(15,bytes,opt,Configcasttype=IPFamily)
 
 	// topologyKeys is a preference-order list of topology keys which
 	// implementations of services should use to preferentially sort endpoints
@@ -4407,7 +4407,7 @@
 }
 
 // ServicePort contains information on service's port.
-ServicePort :: {
+#ServicePort: {
 	// The name of this port within the service. This must be a DNS_LABEL.
 	// All ports within a ServiceSpec must have unique names. When considering
 	// the endpoints for a Service, this must match the 'name' field in the
@@ -4419,7 +4419,7 @@
 	// The IP protocol for this port. Supports "TCP", "UDP", and "SCTP".
 	// Default is TCP.
 	// +optional
-	protocol?: Protocol @go(Protocol) @protobuf(2,bytes,opt,casttype=Protocol)
+	protocol?: #Protocol @go(Protocol) @protobuf(2,bytes,opt,casttype=Protocol)
 
 	// The application protocol for this port.
 	// This field follows standard Kubernetes label syntax.
@@ -4443,7 +4443,7 @@
 	// omitted or set equal to the 'port' field.
 	// More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service
 	// +optional
-	targetPort?: intstr.IntOrString @go(TargetPort) @protobuf(4,bytes,opt)
+	targetPort?: intstr.#IntOrString @go(TargetPort) @protobuf(4,bytes,opt)
 
 	// The port on each node on which this service is exposed when type=NodePort or LoadBalancer.
 	// Usually assigned by the system. If specified, it will be allocated to the service
@@ -4457,69 +4457,69 @@
 // Service is a named abstraction of software service (for example, mysql) consisting of local port
 // (for example 3306) that the proxy listens on, and the selector that determines which pods
 // will answer requests sent through the proxy.
-Service :: {
-	metav1.TypeMeta
+#Service: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the behavior of a service.
 	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: ServiceSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #ServiceSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Most recently observed status of the service.
 	// Populated by the system.
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: ServiceStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #ServiceStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // ClusterIPNone - do not assign a cluster IP
 // no proxying required and no environment variables should be created for pods
-ClusterIPNone :: "None"
+#ClusterIPNone: "None"
 
 // ServiceList holds a list of services.
-ServiceList :: {
-	metav1.TypeMeta
+#ServiceList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of services
-	items: [...Service] @go(Items,[]Service) @protobuf(2,bytes,rep)
+	items: [...#Service] @go(Items,[]Service) @protobuf(2,bytes,rep)
 }
 
 // ServiceAccount binds together:
 // * a name, understood by users, and perhaps by peripheral systems, for an identity
 // * a principal that can be authenticated and authorized
 // * a set of secrets
-ServiceAccount :: {
-	metav1.TypeMeta
+#ServiceAccount: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount.
 	// More info: https://kubernetes.io/docs/concepts/configuration/secret
 	// +optional
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	secrets?: [...ObjectReference] @go(Secrets,[]ObjectReference) @protobuf(2,bytes,rep)
+	secrets?: [...#ObjectReference] @go(Secrets,[]ObjectReference) @protobuf(2,bytes,rep)
 
 	// ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images
 	// in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets
 	// can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet.
 	// More info: https://kubernetes.io/docs/concepts/containers/images/#specifying-imagepullsecrets-on-a-pod
 	// +optional
-	imagePullSecrets?: [...LocalObjectReference] @go(ImagePullSecrets,[]LocalObjectReference) @protobuf(3,bytes,rep)
+	imagePullSecrets?: [...#LocalObjectReference] @go(ImagePullSecrets,[]LocalObjectReference) @protobuf(3,bytes,rep)
 
 	// AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted.
 	// Can be overridden at the pod level.
@@ -4528,17 +4528,17 @@
 }
 
 // ServiceAccountList is a list of ServiceAccount objects
-ServiceAccountList :: {
-	metav1.TypeMeta
+#ServiceAccountList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of ServiceAccounts.
 	// More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
-	items: [...ServiceAccount] @go(Items,[]ServiceAccount) @protobuf(2,bytes,rep)
+	items: [...#ServiceAccount] @go(Items,[]ServiceAccount) @protobuf(2,bytes,rep)
 }
 
 // Endpoints is a collection of endpoints that implement the actual service. Example:
@@ -4553,13 +4553,13 @@
 //       Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}]
 //     },
 //  ]
-Endpoints :: {
-	metav1.TypeMeta
+#Endpoints: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// The set of all endpoints is the union of all subsets. Addresses are placed into
 	// subsets according to the IPs they share. A single address with multiple ports,
@@ -4569,7 +4569,7 @@
 	// NotReadyAddresses in the same subset.
 	// Sets of addresses and ports that comprise a service.
 	// +optional
-	subsets?: [...EndpointSubset] @go(Subsets,[]EndpointSubset) @protobuf(2,bytes,rep)
+	subsets?: [...#EndpointSubset] @go(Subsets,[]EndpointSubset) @protobuf(2,bytes,rep)
 }
 
 // EndpointSubset is a group of addresses with a common set of ports. The
@@ -4582,25 +4582,25 @@
 // The resulting set of endpoints can be viewed as:
 //     a: [ 10.10.1.1:8675, 10.10.2.2:8675 ],
 //     b: [ 10.10.1.1:309, 10.10.2.2:309 ]
-EndpointSubset :: {
+#EndpointSubset: {
 	// IP addresses which offer the related ports that are marked as ready. These endpoints
 	// should be considered safe for load balancers and clients to utilize.
 	// +optional
-	addresses?: [...EndpointAddress] @go(Addresses,[]EndpointAddress) @protobuf(1,bytes,rep)
+	addresses?: [...#EndpointAddress] @go(Addresses,[]EndpointAddress) @protobuf(1,bytes,rep)
 
 	// IP addresses which offer the related ports but are not currently marked as ready
 	// because they have not yet finished starting, have recently failed a readiness check,
 	// or have recently failed a liveness check.
 	// +optional
-	notReadyAddresses?: [...EndpointAddress] @go(NotReadyAddresses,[]EndpointAddress) @protobuf(2,bytes,rep)
+	notReadyAddresses?: [...#EndpointAddress] @go(NotReadyAddresses,[]EndpointAddress) @protobuf(2,bytes,rep)
 
 	// Port numbers available on the related IP addresses.
 	// +optional
-	ports?: [...EndpointPort] @go(Ports,[]EndpointPort) @protobuf(3,bytes,rep)
+	ports?: [...#EndpointPort] @go(Ports,[]EndpointPort) @protobuf(3,bytes,rep)
 }
 
 // EndpointAddress is a tuple that describes single IP address.
-EndpointAddress :: {
+#EndpointAddress: {
 	// The IP of this endpoint.
 	// May not be loopback (127.0.0.0/8), link-local (169.254.0.0/16),
 	// or link-local multicast ((224.0.0.0/24).
@@ -4619,11 +4619,11 @@
 
 	// Reference to object providing the endpoint.
 	// +optional
-	targetRef?: null | ObjectReference @go(TargetRef,*ObjectReference) @protobuf(2,bytes,opt)
+	targetRef?: null | #ObjectReference @go(TargetRef,*ObjectReference) @protobuf(2,bytes,opt)
 }
 
 // EndpointPort is a tuple that describes a single port.
-EndpointPort :: {
+#EndpointPort: {
 	// The name of this port.  This must match the 'name' field in the
 	// corresponding ServicePort.
 	// Must be a DNS_LABEL.
@@ -4638,7 +4638,7 @@
 	// Must be UDP, TCP, or SCTP.
 	// Default is TCP.
 	// +optional
-	protocol?: Protocol @go(Protocol) @protobuf(3,bytes,opt,casttype=Protocol)
+	protocol?: #Protocol @go(Protocol) @protobuf(3,bytes,opt,casttype=Protocol)
 
 	// The application protocol for this port.
 	// This field follows standard Kubernetes label syntax.
@@ -4652,20 +4652,20 @@
 }
 
 // EndpointsList is a list of endpoints.
-EndpointsList :: {
-	metav1.TypeMeta
+#EndpointsList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of endpoints.
-	items: [...Endpoints] @go(Items,[]Endpoints) @protobuf(2,bytes,rep)
+	items: [...#Endpoints] @go(Items,[]Endpoints) @protobuf(2,bytes,rep)
 }
 
 // NodeSpec describes the attributes that a node is created with.
-NodeSpec :: {
+#NodeSpec: {
 	// PodCIDR represents the pod IP range assigned to the node.
 	// +optional
 	podCIDR?: string @go(PodCIDR) @protobuf(1,bytes,opt)
@@ -4688,12 +4688,12 @@
 
 	// If specified, the node's taints.
 	// +optional
-	taints?: [...Taint] @go(Taints,[]Taint) @protobuf(5,bytes,opt)
+	taints?: [...#Taint] @go(Taints,[]Taint) @protobuf(5,bytes,opt)
 
 	// If specified, the source to get node configuration from
 	// The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field
 	// +optional
-	configSource?: null | NodeConfigSource @go(ConfigSource,*NodeConfigSource) @protobuf(6,bytes,opt)
+	configSource?: null | #NodeConfigSource @go(ConfigSource,*NodeConfigSource) @protobuf(6,bytes,opt)
 
 	// Deprecated. Not all kubelets will set this field. Remove field after 1.13.
 	// see: https://issues.k8s.io/61966
@@ -4702,13 +4702,13 @@
 }
 
 // NodeConfigSource specifies a source of node configuration. Exactly one subfield (excluding metadata) must be non-nil.
-NodeConfigSource :: {
+#NodeConfigSource: {
 	// ConfigMap is a reference to a Node's ConfigMap
-	configMap?: null | ConfigMapNodeConfigSource @go(ConfigMap,*ConfigMapNodeConfigSource) @protobuf(2,bytes,opt)
+	configMap?: null | #ConfigMapNodeConfigSource @go(ConfigMap,*ConfigMapNodeConfigSource) @protobuf(2,bytes,opt)
 }
 
 // ConfigMapNodeConfigSource contains the information to reference a ConfigMap as a config source for the Node.
-ConfigMapNodeConfigSource :: {
+#ConfigMapNodeConfigSource: {
 	// Namespace is the metadata.namespace of the referenced ConfigMap.
 	// This field is required in all cases.
 	namespace: string @go(Namespace) @protobuf(1,bytes,opt)
@@ -4720,7 +4720,7 @@
 	// UID is the metadata.UID of the referenced ConfigMap.
 	// This field is forbidden in Node.Spec, and required in Node.Status.
 	// +optional
-	uid?: types.UID @go(UID) @protobuf(3,bytes,opt)
+	uid?: types.#UID @go(UID) @protobuf(3,bytes,opt)
 
 	// ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap.
 	// This field is forbidden in Node.Spec, and required in Node.Status.
@@ -4733,20 +4733,20 @@
 }
 
 // DaemonEndpoint contains information about a single Daemon endpoint.
-DaemonEndpoint :: {
+#DaemonEndpoint: {
 	// Port number of the given endpoint.
 	Port: int32 @protobuf(1,varint,opt)
 }
 
 // NodeDaemonEndpoints lists ports opened by daemons running on the Node.
-NodeDaemonEndpoints :: {
+#NodeDaemonEndpoints: {
 	// Endpoint on which Kubelet is listening.
 	// +optional
-	kubeletEndpoint?: DaemonEndpoint @go(KubeletEndpoint) @protobuf(1,bytes,opt)
+	kubeletEndpoint?: #DaemonEndpoint @go(KubeletEndpoint) @protobuf(1,bytes,opt)
 }
 
 // NodeSystemInfo is a set of ids/uuids to uniquely identify the node.
-NodeSystemInfo :: {
+#NodeSystemInfo: {
 	// MachineID reported by the node. For unique machine identification
 	// in the cluster this field is preferred. Learn more from man(5)
 	// machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html
@@ -4783,7 +4783,7 @@
 }
 
 // NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource.
-NodeConfigStatus :: {
+#NodeConfigStatus: {
 	// Assigned reports the checkpointed config the node will try to use.
 	// When Node.Spec.ConfigSource is updated, the node checkpoints the associated
 	// config payload to local disk, along with a record indicating intended
@@ -4793,14 +4793,14 @@
 	// it tries to make the Assigned config the Active config by loading and
 	// validating the checkpointed payload identified by Assigned.
 	// +optional
-	assigned?: null | NodeConfigSource @go(Assigned,*NodeConfigSource) @protobuf(1,bytes,opt)
+	assigned?: null | #NodeConfigSource @go(Assigned,*NodeConfigSource) @protobuf(1,bytes,opt)
 
 	// Active reports the checkpointed config the node is actively using.
 	// Active will represent either the current version of the Assigned config,
 	// or the current LastKnownGood config, depending on whether attempting to use the
 	// Assigned config results in an error.
 	// +optional
-	active?: null | NodeConfigSource @go(Active,*NodeConfigSource) @protobuf(2,bytes,opt)
+	active?: null | #NodeConfigSource @go(Active,*NodeConfigSource) @protobuf(2,bytes,opt)
 
 	// LastKnownGood reports the checkpointed config the node will fall back to
 	// when it encounters an error attempting to use the Assigned config.
@@ -4814,7 +4814,7 @@
 	// You should not make assumptions about the node's method of determining config stability
 	// and correctness, as this may change or become configurable in the future.
 	// +optional
-	lastKnownGood?: null | NodeConfigSource @go(LastKnownGood,*NodeConfigSource) @protobuf(3,bytes,opt)
+	lastKnownGood?: null | #NodeConfigSource @go(LastKnownGood,*NodeConfigSource) @protobuf(3,bytes,opt)
 
 	// Error describes any problems reconciling the Spec.ConfigSource to the Active config.
 	// Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned
@@ -4833,29 +4833,29 @@
 }
 
 // NodeStatus is information about the current status of a node.
-NodeStatus :: {
+#NodeStatus: {
 	// Capacity represents the total resources of a node.
 	// More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity
 	// +optional
-	capacity?: ResourceList @go(Capacity) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	capacity?: #ResourceList @go(Capacity) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// Allocatable represents the resources of a node that are available for scheduling.
 	// Defaults to Capacity.
 	// +optional
-	allocatable?: ResourceList @go(Allocatable) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	allocatable?: #ResourceList @go(Allocatable) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// NodePhase is the recently observed lifecycle phase of the node.
 	// More info: https://kubernetes.io/docs/concepts/nodes/node/#phase
 	// The field is never populated, and now is deprecated.
 	// +optional
-	phase?: NodePhase @go(Phase) @protobuf(3,bytes,opt,casttype=NodePhase)
+	phase?: #NodePhase @go(Phase) @protobuf(3,bytes,opt,casttype=NodePhase)
 
 	// Conditions is an array of current observed node conditions.
 	// More info: https://kubernetes.io/docs/concepts/nodes/node/#condition
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...NodeCondition] @go(Conditions,[]NodeCondition) @protobuf(4,bytes,rep)
+	conditions?: [...#NodeCondition] @go(Conditions,[]NodeCondition) @protobuf(4,bytes,rep)
 
 	// List of addresses reachable to the node.
 	// Queried from cloud provider, if available.
@@ -4866,40 +4866,40 @@
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	addresses?: [...NodeAddress] @go(Addresses,[]NodeAddress) @protobuf(5,bytes,rep)
+	addresses?: [...#NodeAddress] @go(Addresses,[]NodeAddress) @protobuf(5,bytes,rep)
 
 	// Endpoints of daemons running on the Node.
 	// +optional
-	daemonEndpoints?: NodeDaemonEndpoints @go(DaemonEndpoints) @protobuf(6,bytes,opt)
+	daemonEndpoints?: #NodeDaemonEndpoints @go(DaemonEndpoints) @protobuf(6,bytes,opt)
 
 	// Set of ids/uuids to uniquely identify the node.
 	// More info: https://kubernetes.io/docs/concepts/nodes/node/#info
 	// +optional
-	nodeInfo?: NodeSystemInfo @go(NodeInfo) @protobuf(7,bytes,opt)
+	nodeInfo?: #NodeSystemInfo @go(NodeInfo) @protobuf(7,bytes,opt)
 
 	// List of container images on this node
 	// +optional
-	images?: [...ContainerImage] @go(Images,[]ContainerImage) @protobuf(8,bytes,rep)
+	images?: [...#ContainerImage] @go(Images,[]ContainerImage) @protobuf(8,bytes,rep)
 
 	// List of attachable volumes in use (mounted) by the node.
 	// +optional
-	volumesInUse?: [...UniqueVolumeName] @go(VolumesInUse,[]UniqueVolumeName) @protobuf(9,bytes,rep)
+	volumesInUse?: [...#UniqueVolumeName] @go(VolumesInUse,[]UniqueVolumeName) @protobuf(9,bytes,rep)
 
 	// List of volumes that are attached to the node.
 	// +optional
-	volumesAttached?: [...AttachedVolume] @go(VolumesAttached,[]AttachedVolume) @protobuf(10,bytes,rep)
+	volumesAttached?: [...#AttachedVolume] @go(VolumesAttached,[]AttachedVolume) @protobuf(10,bytes,rep)
 
 	// Status of the config assigned to the node via the dynamic Kubelet config feature.
 	// +optional
-	config?: null | NodeConfigStatus @go(Config,*NodeConfigStatus) @protobuf(11,bytes,opt)
+	config?: null | #NodeConfigStatus @go(Config,*NodeConfigStatus) @protobuf(11,bytes,opt)
 }
 
-UniqueVolumeName :: string
+#UniqueVolumeName: string
 
 // AttachedVolume describes a volume attached to a node
-AttachedVolume :: {
+#AttachedVolume: {
 	// Name of the attached volume
-	name: UniqueVolumeName @go(Name) @protobuf(1,bytes,rep)
+	name: #UniqueVolumeName @go(Name) @protobuf(1,bytes,rep)
 
 	// DevicePath represents the device path where the volume should be available
 	devicePath: string @go(DevicePath) @protobuf(2,bytes,rep)
@@ -4908,21 +4908,21 @@
 // AvoidPods describes pods that should avoid this node. This is the value for a
 // Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and
 // will eventually become a field of NodeStatus.
-AvoidPods :: {
+#AvoidPods: {
 	// Bounded-sized list of signatures of pods that should avoid this node, sorted
 	// in timestamp order from oldest to newest. Size of the slice is unspecified.
 	// +optional
-	preferAvoidPods?: [...PreferAvoidPodsEntry] @go(PreferAvoidPods,[]PreferAvoidPodsEntry) @protobuf(1,bytes,rep)
+	preferAvoidPods?: [...#PreferAvoidPodsEntry] @go(PreferAvoidPods,[]PreferAvoidPodsEntry) @protobuf(1,bytes,rep)
 }
 
 // Describes a class of pods that should avoid this node.
-PreferAvoidPodsEntry :: {
+#PreferAvoidPodsEntry: {
 	// The class of pods.
-	podSignature: PodSignature @go(PodSignature) @protobuf(1,bytes,opt)
+	podSignature: #PodSignature @go(PodSignature) @protobuf(1,bytes,opt)
 
 	// Time at which this entry was added to the list.
 	// +optional
-	evictionTime?: metav1.Time @go(EvictionTime) @protobuf(2,bytes,opt)
+	evictionTime?: metav1.#Time @go(EvictionTime) @protobuf(2,bytes,opt)
 
 	// (brief) reason why this entry was added to the list.
 	// +optional
@@ -4935,14 +4935,14 @@
 
 // Describes the class of pods that should avoid this node.
 // Exactly one field should be set.
-PodSignature :: {
+#PodSignature: {
 	// Reference to controller whose pods should avoid this node.
 	// +optional
-	podController?: null | metav1.OwnerReference @go(PodController,*metav1.OwnerReference) @protobuf(1,bytes,opt)
+	podController?: null | metav1.#OwnerReference @go(PodController,*metav1.OwnerReference) @protobuf(1,bytes,opt)
 }
 
 // Describe a container image
-ContainerImage :: {
+#ContainerImage: {
 	// Names by which this image is known.
 	// e.g. ["k8s.gcr.io/hyperkube:v1.0.7", "dockerhub.io/google_containers/hyperkube:v1.0.7"]
 	names: [...string] @go(Names,[]string) @protobuf(1,bytes,rep)
@@ -4952,61 +4952,61 @@
 	sizeBytes?: int64 @go(SizeBytes) @protobuf(2,varint,opt)
 }
 
-NodePhase :: string // enumNodePhase
+#NodePhase: string // #enumNodePhase
 
-enumNodePhase ::
-	NodePending |
-	NodeRunning |
-	NodeTerminated
+#enumNodePhase:
+	#NodePending |
+	#NodeRunning |
+	#NodeTerminated
 
 // NodePending means the node has been created/added by the system, but not configured.
-NodePending :: NodePhase & "Pending"
+#NodePending: #NodePhase & "Pending"
 
 // NodeRunning means the node has been configured and has Kubernetes components running.
-NodeRunning :: NodePhase & "Running"
+#NodeRunning: #NodePhase & "Running"
 
 // NodeTerminated means the node has been removed from the cluster.
-NodeTerminated :: NodePhase & "Terminated"
+#NodeTerminated: #NodePhase & "Terminated"
 
-NodeConditionType :: string // enumNodeConditionType
+#NodeConditionType: string // #enumNodeConditionType
 
-enumNodeConditionType ::
-	NodeReady |
-	NodeMemoryPressure |
-	NodeDiskPressure |
-	NodePIDPressure |
-	NodeNetworkUnavailable
+#enumNodeConditionType:
+	#NodeReady |
+	#NodeMemoryPressure |
+	#NodeDiskPressure |
+	#NodePIDPressure |
+	#NodeNetworkUnavailable
 
 // NodeReady means kubelet is healthy and ready to accept pods.
-NodeReady :: NodeConditionType & "Ready"
+#NodeReady: #NodeConditionType & "Ready"
 
 // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory.
-NodeMemoryPressure :: NodeConditionType & "MemoryPressure"
+#NodeMemoryPressure: #NodeConditionType & "MemoryPressure"
 
 // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk.
-NodeDiskPressure :: NodeConditionType & "DiskPressure"
+#NodeDiskPressure: #NodeConditionType & "DiskPressure"
 
 // NodePIDPressure means the kubelet is under pressure due to insufficient available PID.
-NodePIDPressure :: NodeConditionType & "PIDPressure"
+#NodePIDPressure: #NodeConditionType & "PIDPressure"
 
 // NodeNetworkUnavailable means that network for the node is not correctly configured.
-NodeNetworkUnavailable :: NodeConditionType & "NetworkUnavailable"
+#NodeNetworkUnavailable: #NodeConditionType & "NetworkUnavailable"
 
 // NodeCondition contains condition information for a node.
-NodeCondition :: {
+#NodeCondition: {
 	// Type of node condition.
-	type: NodeConditionType @go(Type) @protobuf(1,bytes,opt,casttype=NodeConditionType)
+	type: #NodeConditionType @go(Type) @protobuf(1,bytes,opt,casttype=NodeConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
+	status: #ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
 
 	// Last time we got an update on a given condition.
 	// +optional
-	lastHeartbeatTime?: metav1.Time @go(LastHeartbeatTime) @protobuf(3,bytes,opt)
+	lastHeartbeatTime?: metav1.#Time @go(LastHeartbeatTime) @protobuf(3,bytes,opt)
 
 	// Last time the condition transit from one status to another.
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
 
 	// (brief) reason for the condition's last transition.
 	// +optional
@@ -5017,196 +5017,196 @@
 	message?: string @go(Message) @protobuf(6,bytes,opt)
 }
 
-NodeAddressType :: string // enumNodeAddressType
+#NodeAddressType: string // #enumNodeAddressType
 
-enumNodeAddressType ::
-	NodeHostName |
-	NodeExternalIP |
-	NodeInternalIP |
-	NodeExternalDNS |
-	NodeInternalDNS
+#enumNodeAddressType:
+	#NodeHostName |
+	#NodeExternalIP |
+	#NodeInternalIP |
+	#NodeExternalDNS |
+	#NodeInternalDNS
 
-NodeHostName ::    NodeAddressType & "Hostname"
-NodeExternalIP ::  NodeAddressType & "ExternalIP"
-NodeInternalIP ::  NodeAddressType & "InternalIP"
-NodeExternalDNS :: NodeAddressType & "ExternalDNS"
-NodeInternalDNS :: NodeAddressType & "InternalDNS"
+#NodeHostName:    #NodeAddressType & "Hostname"
+#NodeExternalIP:  #NodeAddressType & "ExternalIP"
+#NodeInternalIP:  #NodeAddressType & "InternalIP"
+#NodeExternalDNS: #NodeAddressType & "ExternalDNS"
+#NodeInternalDNS: #NodeAddressType & "InternalDNS"
 
 // NodeAddress contains information for the node's address.
-NodeAddress :: {
+#NodeAddress: {
 	// Node address type, one of Hostname, ExternalIP or InternalIP.
-	type: NodeAddressType @go(Type) @protobuf(1,bytes,opt,casttype=NodeAddressType)
+	type: #NodeAddressType @go(Type) @protobuf(1,bytes,opt,casttype=NodeAddressType)
 
 	// The node address.
 	address: string @go(Address) @protobuf(2,bytes,opt)
 }
 
 // ResourceName is the name identifying various resources in a ResourceList.
-ResourceName :: string // enumResourceName
+#ResourceName: string // #enumResourceName
 
-enumResourceName ::
-	ResourceCPU |
-	ResourceMemory |
-	ResourceStorage |
-	ResourceEphemeralStorage |
-	ResourcePods |
-	ResourceServices |
-	ResourceReplicationControllers |
-	ResourceQuotas |
-	ResourceSecrets |
-	ResourceConfigMaps |
-	ResourcePersistentVolumeClaims |
-	ResourceServicesNodePorts |
-	ResourceServicesLoadBalancers |
-	ResourceRequestsCPU |
-	ResourceRequestsMemory |
-	ResourceRequestsStorage |
-	ResourceRequestsEphemeralStorage |
-	ResourceLimitsCPU |
-	ResourceLimitsMemory |
-	ResourceLimitsEphemeralStorage
+#enumResourceName:
+	#ResourceCPU |
+	#ResourceMemory |
+	#ResourceStorage |
+	#ResourceEphemeralStorage |
+	#ResourcePods |
+	#ResourceServices |
+	#ResourceReplicationControllers |
+	#ResourceQuotas |
+	#ResourceSecrets |
+	#ResourceConfigMaps |
+	#ResourcePersistentVolumeClaims |
+	#ResourceServicesNodePorts |
+	#ResourceServicesLoadBalancers |
+	#ResourceRequestsCPU |
+	#ResourceRequestsMemory |
+	#ResourceRequestsStorage |
+	#ResourceRequestsEphemeralStorage |
+	#ResourceLimitsCPU |
+	#ResourceLimitsMemory |
+	#ResourceLimitsEphemeralStorage
 
 // CPU, in cores. (500m = .5 cores)
-ResourceCPU :: ResourceName & "cpu"
+#ResourceCPU: #ResourceName & "cpu"
 
 // Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
-ResourceMemory :: ResourceName & "memory"
+#ResourceMemory: #ResourceName & "memory"
 
 // Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024)
-ResourceStorage :: ResourceName & "storage"
+#ResourceStorage: #ResourceName & "storage"
 
 // Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
 // The resource name for ResourceEphemeralStorage is alpha and it can change across releases.
-ResourceEphemeralStorage :: ResourceName & "ephemeral-storage"
+#ResourceEphemeralStorage: #ResourceName & "ephemeral-storage"
 
 // Default namespace prefix.
-ResourceDefaultNamespacePrefix :: "kubernetes.io/"
+#ResourceDefaultNamespacePrefix: "kubernetes.io/"
 
 // Name prefix for huge page resources (alpha).
-ResourceHugePagesPrefix :: "hugepages-"
+#ResourceHugePagesPrefix: "hugepages-"
 
 // Name prefix for storage resource limits
-ResourceAttachableVolumesPrefix :: "attachable-volumes-"
+#ResourceAttachableVolumesPrefix: "attachable-volumes-"
 
 // ResourceList is a set of (resource name, quantity) pairs.
-ResourceList :: {[string]: resource.Quantity}
+#ResourceList: {[string]: resource.#Quantity}
 
 // Node is a worker node in Kubernetes.
 // Each node will have a unique identifier in the cache (i.e. in etcd).
-Node :: {
-	metav1.TypeMeta
+#Node: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the behavior of a node.
 	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: NodeSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #NodeSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Most recently observed status of the node.
 	// Populated by the system.
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: NodeStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #NodeStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // NodeList is the whole list of all Nodes which have been registered with master.
-NodeList :: {
-	metav1.TypeMeta
+#NodeList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of nodes
-	items: [...Node] @go(Items,[]Node) @protobuf(2,bytes,rep)
+	items: [...#Node] @go(Items,[]Node) @protobuf(2,bytes,rep)
 }
 
 // FinalizerName is the name identifying a finalizer during namespace lifecycle.
-FinalizerName :: string // enumFinalizerName
+#FinalizerName: string // #enumFinalizerName
 
-enumFinalizerName ::
-	FinalizerKubernetes
+#enumFinalizerName:
+	#FinalizerKubernetes
 
-FinalizerKubernetes :: FinalizerName & "kubernetes"
+#FinalizerKubernetes: #FinalizerName & "kubernetes"
 
 // NamespaceSpec describes the attributes on a Namespace.
-NamespaceSpec :: {
+#NamespaceSpec: {
 	// Finalizers is an opaque list of values that must be empty to permanently remove object from storage.
 	// More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
 	// +optional
-	finalizers?: [...FinalizerName] @go(Finalizers,[]FinalizerName) @protobuf(1,bytes,rep,casttype=FinalizerName)
+	finalizers?: [...#FinalizerName] @go(Finalizers,[]FinalizerName) @protobuf(1,bytes,rep,casttype=FinalizerName)
 }
 
 // NamespaceStatus is information about the current status of a Namespace.
-NamespaceStatus :: {
+#NamespaceStatus: {
 	// Phase is the current lifecycle phase of the namespace.
 	// More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
 	// +optional
-	phase?: NamespacePhase @go(Phase) @protobuf(1,bytes,opt,casttype=NamespacePhase)
+	phase?: #NamespacePhase @go(Phase) @protobuf(1,bytes,opt,casttype=NamespacePhase)
 
 	// Represents the latest available observations of a namespace's current state.
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...NamespaceCondition] @go(Conditions,[]NamespaceCondition) @protobuf(2,bytes,rep)
+	conditions?: [...#NamespaceCondition] @go(Conditions,[]NamespaceCondition) @protobuf(2,bytes,rep)
 }
 
-NamespacePhase :: string // enumNamespacePhase
+#NamespacePhase: string // #enumNamespacePhase
 
-enumNamespacePhase ::
-	NamespaceActive |
-	NamespaceTerminating
+#enumNamespacePhase:
+	#NamespaceActive |
+	#NamespaceTerminating
 
 // NamespaceActive means the namespace is available for use in the system
-NamespaceActive :: NamespacePhase & "Active"
+#NamespaceActive: #NamespacePhase & "Active"
 
 // NamespaceTerminating means the namespace is undergoing graceful termination
-NamespaceTerminating :: NamespacePhase & "Terminating"
+#NamespaceTerminating: #NamespacePhase & "Terminating"
 
 // NamespaceTerminatingCause is returned as a defaults.cause item when a change is
 // forbidden due to the namespace being terminated.
-NamespaceTerminatingCause :: metav1.CauseType & "NamespaceTerminating"
+#NamespaceTerminatingCause: metav1.#CauseType & "NamespaceTerminating"
 
-NamespaceConditionType :: string // enumNamespaceConditionType
+#NamespaceConditionType: string // #enumNamespaceConditionType
 
-enumNamespaceConditionType ::
-	NamespaceDeletionDiscoveryFailure |
-	NamespaceDeletionContentFailure |
-	NamespaceDeletionGVParsingFailure |
-	NamespaceContentRemaining |
-	NamespaceFinalizersRemaining
+#enumNamespaceConditionType:
+	#NamespaceDeletionDiscoveryFailure |
+	#NamespaceDeletionContentFailure |
+	#NamespaceDeletionGVParsingFailure |
+	#NamespaceContentRemaining |
+	#NamespaceFinalizersRemaining
 
 // NamespaceDeletionDiscoveryFailure contains information about namespace deleter errors during resource discovery.
-NamespaceDeletionDiscoveryFailure :: NamespaceConditionType & "NamespaceDeletionDiscoveryFailure"
+#NamespaceDeletionDiscoveryFailure: #NamespaceConditionType & "NamespaceDeletionDiscoveryFailure"
 
 // NamespaceDeletionContentFailure contains information about namespace deleter errors during deletion of resources.
-NamespaceDeletionContentFailure :: NamespaceConditionType & "NamespaceDeletionContentFailure"
+#NamespaceDeletionContentFailure: #NamespaceConditionType & "NamespaceDeletionContentFailure"
 
 // NamespaceDeletionGVParsingFailure contains information about namespace deleter errors parsing GV for legacy types.
-NamespaceDeletionGVParsingFailure :: NamespaceConditionType & "NamespaceDeletionGroupVersionParsingFailure"
+#NamespaceDeletionGVParsingFailure: #NamespaceConditionType & "NamespaceDeletionGroupVersionParsingFailure"
 
 // NamespaceContentRemaining contains information about resources remaining in a namespace.
-NamespaceContentRemaining :: NamespaceConditionType & "NamespaceContentRemaining"
+#NamespaceContentRemaining: #NamespaceConditionType & "NamespaceContentRemaining"
 
 // NamespaceFinalizersRemaining contains information about which finalizers are on resources remaining in a namespace.
-NamespaceFinalizersRemaining :: NamespaceConditionType & "NamespaceFinalizersRemaining"
+#NamespaceFinalizersRemaining: #NamespaceConditionType & "NamespaceFinalizersRemaining"
 
 // NamespaceCondition contains details about state of namespace.
-NamespaceCondition :: {
+#NamespaceCondition: {
 	// Type of namespace controller condition.
-	type: NamespaceConditionType @go(Type) @protobuf(1,bytes,opt,casttype=NamespaceConditionType)
+	type: #NamespaceConditionType @go(Type) @protobuf(1,bytes,opt,casttype=NamespaceConditionType)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
+	status: #ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
 
 	// +optional
-	lastTransitionTime?: metav1.Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
+	lastTransitionTime?: metav1.#Time @go(LastTransitionTime) @protobuf(4,bytes,opt)
 
 	// +optional
 	reason?: string @go(Reason) @protobuf(5,bytes,opt)
@@ -5217,79 +5217,79 @@
 
 // Namespace provides a scope for Names.
 // Use of multiple namespaces is optional.
-Namespace :: {
-	metav1.TypeMeta
+#Namespace: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the behavior of the Namespace.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: NamespaceSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #NamespaceSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status describes the current status of a Namespace.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: NamespaceStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #NamespaceStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // NamespaceList is a list of Namespaces.
-NamespaceList :: {
-	metav1.TypeMeta
+#NamespaceList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is the list of Namespace objects in the list.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/
-	items: [...Namespace] @go(Items,[]Namespace) @protobuf(2,bytes,rep)
+	items: [...#Namespace] @go(Items,[]Namespace) @protobuf(2,bytes,rep)
 }
 
 // Binding ties one object to another; for example, a pod is bound to a node by a scheduler.
 // Deprecated in 1.7, please use the bindings subresource of pods instead.
-Binding :: {
-	metav1.TypeMeta
+#Binding: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// The target object that you want to bind to the standard object.
-	target: ObjectReference @go(Target) @protobuf(2,bytes,opt)
+	target: #ObjectReference @go(Target) @protobuf(2,bytes,opt)
 }
 
 // A list of ephemeral containers used with the Pod ephemeralcontainers subresource.
-EphemeralContainers :: {
-	metav1.TypeMeta
+#EphemeralContainers: {
+	metav1.#TypeMeta
 
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// A list of ephemeral containers associated with this pod. New ephemeral containers
 	// may be appended to this list, but existing ephemeral containers may not be removed
 	// or modified.
 	// +patchMergeKey=name
 	// +patchStrategy=merge
-	ephemeralContainers: [...EphemeralContainer] @go(EphemeralContainers,[]EphemeralContainer) @protobuf(2,bytes,rep)
+	ephemeralContainers: [...#EphemeralContainer] @go(EphemeralContainers,[]EphemeralContainer) @protobuf(2,bytes,rep)
 }
 
 // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
 // +k8s:openapi-gen=false
-Preconditions :: {
+#Preconditions: {
 	// Specifies the target UID.
 	// +optional
-	uid?: null | types.UID @go(UID,*types.UID) @protobuf(1,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
+	uid?: null | types.#UID @go(UID,*types.UID) @protobuf(1,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
 }
 
 // PodLogOptions is the query options for a Pod's logs REST call.
-PodLogOptions :: {
-	metav1.TypeMeta
+#PodLogOptions: {
+	metav1.#TypeMeta
 
 	// The container for which to stream logs. Defaults to only container if there is one container in the pod.
 	// +optional
@@ -5315,7 +5315,7 @@
 	// If this value is in the future, no logs will be returned.
 	// Only one of sinceSeconds or sinceTime may be specified.
 	// +optional
-	sinceTime?: null | metav1.Time @go(SinceTime,*metav1.Time) @protobuf(5,bytes,opt)
+	sinceTime?: null | metav1.#Time @go(SinceTime,*metav1.Time) @protobuf(5,bytes,opt)
 
 	// If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line
 	// of log output. Defaults to false.
@@ -5347,8 +5347,8 @@
 // ---
 // TODO: merge w/ PodExecOptions below for stdin, stdout, etc
 // and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
-PodAttachOptions :: {
-	metav1.TypeMeta
+#PodAttachOptions: {
+	metav1.#TypeMeta
 
 	// Stdin if true, redirects the standard input stream of the pod for this call.
 	// Defaults to false.
@@ -5382,8 +5382,8 @@
 // ---
 // TODO: This is largely identical to PodAttachOptions above, make sure they stay in sync and see about merging
 // and also when we cut V2, we should export a "StreamOptions" or somesuch that contains Stdin, Stdout, Stder and TTY
-PodExecOptions :: {
-	metav1.TypeMeta
+#PodExecOptions: {
+	metav1.#TypeMeta
 
 	// Redirect the standard input stream of the pod for this call.
 	// Defaults to false.
@@ -5420,8 +5420,8 @@
 // ports (comma separated) to forward over.
 // Port forwarding over SPDY does not use these options. It requires the port
 // to be passed in the `port` header as part of request.
-PodPortForwardOptions :: {
-	metav1.TypeMeta
+#PodPortForwardOptions: {
+	metav1.#TypeMeta
 
 	// List of ports to forward
 	// Required when using WebSockets
@@ -5430,8 +5430,8 @@
 }
 
 // PodProxyOptions is the query options to a Pod's proxy call.
-PodProxyOptions :: {
-	metav1.TypeMeta
+#PodProxyOptions: {
+	metav1.#TypeMeta
 
 	// Path is the URL path to use for the current proxy request to pod.
 	// +optional
@@ -5439,8 +5439,8 @@
 }
 
 // NodeProxyOptions is the query options to a Node's proxy call.
-NodeProxyOptions :: {
-	metav1.TypeMeta
+#NodeProxyOptions: {
+	metav1.#TypeMeta
 
 	// Path is the URL path to use for the current proxy request to node.
 	// +optional
@@ -5448,8 +5448,8 @@
 }
 
 // ServiceProxyOptions is the query options to a Service's proxy call.
-ServiceProxyOptions :: {
-	metav1.TypeMeta
+#ServiceProxyOptions: {
+	metav1.#TypeMeta
 
 	// Path is the part of URLs that include service endpoints, suffixes,
 	// and parameters to use for the current proxy request to service.
@@ -5476,7 +5476,7 @@
 // Instead of using this type, create a locally provided and used type that is well-focused on your reference.
 // For example, ServiceReferences for admission registration: https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 .
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-ObjectReference :: {
+#ObjectReference: {
 	// Kind of the referent.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
@@ -5495,7 +5495,7 @@
 	// UID of the referent.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids
 	// +optional
-	uid?: types.UID @go(UID) @protobuf(4,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
+	uid?: types.#UID @go(UID) @protobuf(4,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
 
 	// API version of the referent.
 	// +optional
@@ -5520,7 +5520,7 @@
 
 // LocalObjectReference contains enough information to let you locate the
 // referenced object inside the same namespace.
-LocalObjectReference :: {
+#LocalObjectReference: {
 	// Name of the referent.
 	// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names
 	// TODO: Add other useful fields. apiVersion, kind, uid?
@@ -5530,7 +5530,7 @@
 
 // TypedLocalObjectReference contains enough information to let you locate the
 // typed referenced object inside the same namespace.
-TypedLocalObjectReference :: {
+#TypedLocalObjectReference: {
 	// APIGroup is the group for the resource being referenced.
 	// If APIGroup is not specified, the specified Kind must be in the core API group.
 	// For any other third-party types, APIGroup is required.
@@ -5545,16 +5545,16 @@
 }
 
 // SerializedReference is a reference to serialized object.
-SerializedReference :: {
-	metav1.TypeMeta
+#SerializedReference: {
+	metav1.#TypeMeta
 
 	// The reference to an object in the system.
 	// +optional
-	reference?: ObjectReference @go(Reference) @protobuf(1,bytes,opt)
+	reference?: #ObjectReference @go(Reference) @protobuf(1,bytes,opt)
 }
 
 // EventSource contains information for an event.
-EventSource :: {
+#EventSource: {
 	// Component from which the event is generated.
 	// +optional
 	component?: string @go(Component) @protobuf(1,bytes,opt)
@@ -5565,21 +5565,21 @@
 }
 
 // Information only and will not cause any problems
-EventTypeNormal :: "Normal"
+#EventTypeNormal: "Normal"
 
 // These events are to warn that something might go wrong
-EventTypeWarning :: "Warning"
+#EventTypeWarning: "Warning"
 
 // Event is a report of an event somewhere in the cluster.
-Event :: {
-	metav1.TypeMeta
+#Event: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
-	metadata: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// The object that this event is about.
-	involvedObject: ObjectReference @go(InvolvedObject) @protobuf(2,bytes,opt)
+	involvedObject: #ObjectReference @go(InvolvedObject) @protobuf(2,bytes,opt)
 
 	// This should be a short, machine understandable string that gives the reason
 	// for the transition into the object's current status.
@@ -5594,15 +5594,15 @@
 
 	// The component reporting this event. Should be a short machine understandable string.
 	// +optional
-	source?: EventSource @go(Source) @protobuf(5,bytes,opt)
+	source?: #EventSource @go(Source) @protobuf(5,bytes,opt)
 
 	// The time at which the event was first recorded. (Time of server receipt is in TypeMeta.)
 	// +optional
-	firstTimestamp?: metav1.Time @go(FirstTimestamp) @protobuf(6,bytes,opt)
+	firstTimestamp?: metav1.#Time @go(FirstTimestamp) @protobuf(6,bytes,opt)
 
 	// The time at which the most recent occurrence of this event was recorded.
 	// +optional
-	lastTimestamp?: metav1.Time @go(LastTimestamp) @protobuf(7,bytes,opt)
+	lastTimestamp?: metav1.#Time @go(LastTimestamp) @protobuf(7,bytes,opt)
 
 	// The number of times this event has occurred.
 	// +optional
@@ -5614,11 +5614,11 @@
 
 	// Time when this Event was first observed.
 	// +optional
-	eventTime?: metav1.MicroTime @go(EventTime) @protobuf(10,bytes,opt)
+	eventTime?: metav1.#MicroTime @go(EventTime) @protobuf(10,bytes,opt)
 
 	// Data about the Event series this event represents or nil if it's a singleton Event.
 	// +optional
-	series?: null | EventSeries @go(Series,*EventSeries) @protobuf(11,bytes,opt)
+	series?: null | #EventSeries @go(Series,*EventSeries) @protobuf(11,bytes,opt)
 
 	// What action was taken/failed regarding to the Regarding object.
 	// +optional
@@ -5626,7 +5626,7 @@
 
 	// Optional secondary object for more complex actions.
 	// +optional
-	related?: null | ObjectReference @go(Related,*ObjectReference) @protobuf(13,bytes,opt)
+	related?: null | #ObjectReference @go(Related,*ObjectReference) @protobuf(13,bytes,opt)
 
 	// Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`.
 	// +optional
@@ -5639,239 +5639,239 @@
 
 // EventSeries contain information on series of events, i.e. thing that was/is happening
 // continuously for some time.
-EventSeries :: {
+#EventSeries: {
 	// Number of occurrences in this series up to the last heartbeat time
 	count?: int32 @go(Count) @protobuf(1,varint)
 
 	// Time of the last occurrence observed
-	lastObservedTime?: metav1.MicroTime @go(LastObservedTime) @protobuf(2,bytes)
+	lastObservedTime?: metav1.#MicroTime @go(LastObservedTime) @protobuf(2,bytes)
 
 	// State of this Series: Ongoing or Finished
 	// Deprecated. Planned removal for 1.18
-	state?: EventSeriesState @go(State) @protobuf(3,bytes)
+	state?: #EventSeriesState @go(State) @protobuf(3,bytes)
 }
 
-EventSeriesState :: string // enumEventSeriesState
+#EventSeriesState: string // #enumEventSeriesState
 
-enumEventSeriesState ::
-	EventSeriesStateOngoing |
-	EventSeriesStateFinished |
-	EventSeriesStateUnknown
+#enumEventSeriesState:
+	#EventSeriesStateOngoing |
+	#EventSeriesStateFinished |
+	#EventSeriesStateUnknown
 
-EventSeriesStateOngoing ::  EventSeriesState & "Ongoing"
-EventSeriesStateFinished :: EventSeriesState & "Finished"
-EventSeriesStateUnknown ::  EventSeriesState & "Unknown"
+#EventSeriesStateOngoing:  #EventSeriesState & "Ongoing"
+#EventSeriesStateFinished: #EventSeriesState & "Finished"
+#EventSeriesStateUnknown:  #EventSeriesState & "Unknown"
 
 // EventList is a list of events.
-EventList :: {
-	metav1.TypeMeta
+#EventList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of events
-	items: [...Event] @go(Items,[]Event) @protobuf(2,bytes,rep)
+	items: [...#Event] @go(Items,[]Event) @protobuf(2,bytes,rep)
 }
 
 // List holds a list of objects, which may not be known by the server.
-List :: metav1.List
+#List: metav1.#List
 
 // LimitType is a type of object that is limited
-LimitType :: string // enumLimitType
+#LimitType: string // #enumLimitType
 
-enumLimitType ::
-	LimitTypePod |
-	LimitTypeContainer |
-	LimitTypePersistentVolumeClaim
+#enumLimitType:
+	#LimitTypePod |
+	#LimitTypeContainer |
+	#LimitTypePersistentVolumeClaim
 
 // Limit that applies to all pods in a namespace
-LimitTypePod :: LimitType & "Pod"
+#LimitTypePod: #LimitType & "Pod"
 
 // Limit that applies to all containers in a namespace
-LimitTypeContainer :: LimitType & "Container"
+#LimitTypeContainer: #LimitType & "Container"
 
 // Limit that applies to all persistent volume claims in a namespace
-LimitTypePersistentVolumeClaim :: LimitType & "PersistentVolumeClaim"
+#LimitTypePersistentVolumeClaim: #LimitType & "PersistentVolumeClaim"
 
 // LimitRangeItem defines a min/max usage limit for any resource that matches on kind.
-LimitRangeItem :: {
+#LimitRangeItem: {
 	// Type of resource that this limit applies to.
-	type: LimitType @go(Type) @protobuf(1,bytes,opt,casttype=LimitType)
+	type: #LimitType @go(Type) @protobuf(1,bytes,opt,casttype=LimitType)
 
 	// Max usage constraints on this kind by resource name.
 	// +optional
-	max?: ResourceList @go(Max) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	max?: #ResourceList @go(Max) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// Min usage constraints on this kind by resource name.
 	// +optional
-	min?: ResourceList @go(Min) @protobuf(3,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	min?: #ResourceList @go(Min) @protobuf(3,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// Default resource requirement limit value by resource name if resource limit is omitted.
 	// +optional
-	default?: ResourceList @go(Default) @protobuf(4,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	default?: #ResourceList @go(Default) @protobuf(4,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// DefaultRequest is the default resource requirement request value by resource name if resource request is omitted.
 	// +optional
-	defaultRequest?: ResourceList @go(DefaultRequest) @protobuf(5,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	defaultRequest?: #ResourceList @go(DefaultRequest) @protobuf(5,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// MaxLimitRequestRatio if specified, the named resource must have a request and limit that are both non-zero where limit divided by request is less than or equal to the enumerated value; this represents the max burst for the named resource.
 	// +optional
-	maxLimitRequestRatio?: ResourceList @go(MaxLimitRequestRatio) @protobuf(6,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	maxLimitRequestRatio?: #ResourceList @go(MaxLimitRequestRatio) @protobuf(6,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 }
 
 // LimitRangeSpec defines a min/max usage limit for resources that match on kind.
-LimitRangeSpec :: {
+#LimitRangeSpec: {
 	// Limits is the list of LimitRangeItem objects that are enforced.
-	limits: [...LimitRangeItem] @go(Limits,[]LimitRangeItem) @protobuf(1,bytes,rep)
+	limits: [...#LimitRangeItem] @go(Limits,[]LimitRangeItem) @protobuf(1,bytes,rep)
 }
 
 // LimitRange sets resource usage limits for each kind of resource in a Namespace.
-LimitRange :: {
-	metav1.TypeMeta
+#LimitRange: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the limits enforced.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: LimitRangeSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #LimitRangeSpec @go(Spec) @protobuf(2,bytes,opt)
 }
 
 // LimitRangeList is a list of LimitRange items.
-LimitRangeList :: {
-	metav1.TypeMeta
+#LimitRangeList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is a list of LimitRange objects.
 	// More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/
-	items: [...LimitRange] @go(Items,[]LimitRange) @protobuf(2,bytes,rep)
+	items: [...#LimitRange] @go(Items,[]LimitRange) @protobuf(2,bytes,rep)
 }
 
 // Pods, number
-ResourcePods :: ResourceName & "pods"
+#ResourcePods: #ResourceName & "pods"
 
 // Services, number
-ResourceServices :: ResourceName & "services"
+#ResourceServices: #ResourceName & "services"
 
 // ReplicationControllers, number
-ResourceReplicationControllers :: ResourceName & "replicationcontrollers"
+#ResourceReplicationControllers: #ResourceName & "replicationcontrollers"
 
 // ResourceQuotas, number
-ResourceQuotas :: ResourceName & "resourcequotas"
+#ResourceQuotas: #ResourceName & "resourcequotas"
 
 // ResourceSecrets, number
-ResourceSecrets :: ResourceName & "secrets"
+#ResourceSecrets: #ResourceName & "secrets"
 
 // ResourceConfigMaps, number
-ResourceConfigMaps :: ResourceName & "configmaps"
+#ResourceConfigMaps: #ResourceName & "configmaps"
 
 // ResourcePersistentVolumeClaims, number
-ResourcePersistentVolumeClaims :: ResourceName & "persistentvolumeclaims"
+#ResourcePersistentVolumeClaims: #ResourceName & "persistentvolumeclaims"
 
 // ResourceServicesNodePorts, number
-ResourceServicesNodePorts :: ResourceName & "services.nodeports"
+#ResourceServicesNodePorts: #ResourceName & "services.nodeports"
 
 // ResourceServicesLoadBalancers, number
-ResourceServicesLoadBalancers :: ResourceName & "services.loadbalancers"
+#ResourceServicesLoadBalancers: #ResourceName & "services.loadbalancers"
 
 // CPU request, in cores. (500m = .5 cores)
-ResourceRequestsCPU :: ResourceName & "requests.cpu"
+#ResourceRequestsCPU: #ResourceName & "requests.cpu"
 
 // Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
-ResourceRequestsMemory :: ResourceName & "requests.memory"
+#ResourceRequestsMemory: #ResourceName & "requests.memory"
 
 // Storage request, in bytes
-ResourceRequestsStorage :: ResourceName & "requests.storage"
+#ResourceRequestsStorage: #ResourceName & "requests.storage"
 
 // Local ephemeral storage request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
-ResourceRequestsEphemeralStorage :: ResourceName & "requests.ephemeral-storage"
+#ResourceRequestsEphemeralStorage: #ResourceName & "requests.ephemeral-storage"
 
 // CPU limit, in cores. (500m = .5 cores)
-ResourceLimitsCPU :: ResourceName & "limits.cpu"
+#ResourceLimitsCPU: #ResourceName & "limits.cpu"
 
 // Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
-ResourceLimitsMemory :: ResourceName & "limits.memory"
+#ResourceLimitsMemory: #ResourceName & "limits.memory"
 
 // Local ephemeral storage limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
-ResourceLimitsEphemeralStorage :: ResourceName & "limits.ephemeral-storage"
+#ResourceLimitsEphemeralStorage: #ResourceName & "limits.ephemeral-storage"
 
 // HugePages request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024)
 // As burst is not supported for HugePages, we would only quota its request, and ignore the limit.
-ResourceRequestsHugePagesPrefix :: "requests.hugepages-"
+#ResourceRequestsHugePagesPrefix: "requests.hugepages-"
 
 // Default resource requests prefix
-DefaultResourceRequestsPrefix :: "requests."
+#DefaultResourceRequestsPrefix: "requests."
 
 // A ResourceQuotaScope defines a filter that must match each object tracked by a quota
-ResourceQuotaScope :: string // enumResourceQuotaScope
+#ResourceQuotaScope: string // #enumResourceQuotaScope
 
-enumResourceQuotaScope ::
-	ResourceQuotaScopeTerminating |
-	ResourceQuotaScopeNotTerminating |
-	ResourceQuotaScopeBestEffort |
-	ResourceQuotaScopeNotBestEffort |
-	ResourceQuotaScopePriorityClass
+#enumResourceQuotaScope:
+	#ResourceQuotaScopeTerminating |
+	#ResourceQuotaScopeNotTerminating |
+	#ResourceQuotaScopeBestEffort |
+	#ResourceQuotaScopeNotBestEffort |
+	#ResourceQuotaScopePriorityClass
 
 // Match all pod objects where spec.activeDeadlineSeconds
-ResourceQuotaScopeTerminating :: ResourceQuotaScope & "Terminating"
+#ResourceQuotaScopeTerminating: #ResourceQuotaScope & "Terminating"
 
 // Match all pod objects where !spec.activeDeadlineSeconds
-ResourceQuotaScopeNotTerminating :: ResourceQuotaScope & "NotTerminating"
+#ResourceQuotaScopeNotTerminating: #ResourceQuotaScope & "NotTerminating"
 
 // Match all pod objects that have best effort quality of service
-ResourceQuotaScopeBestEffort :: ResourceQuotaScope & "BestEffort"
+#ResourceQuotaScopeBestEffort: #ResourceQuotaScope & "BestEffort"
 
 // Match all pod objects that do not have best effort quality of service
-ResourceQuotaScopeNotBestEffort :: ResourceQuotaScope & "NotBestEffort"
+#ResourceQuotaScopeNotBestEffort: #ResourceQuotaScope & "NotBestEffort"
 
 // Match all pod objects that have priority class mentioned
-ResourceQuotaScopePriorityClass :: ResourceQuotaScope & "PriorityClass"
+#ResourceQuotaScopePriorityClass: #ResourceQuotaScope & "PriorityClass"
 
 // ResourceQuotaSpec defines the desired hard limits to enforce for Quota.
-ResourceQuotaSpec :: {
+#ResourceQuotaSpec: {
 	// hard is the set of desired hard limits for each named resource.
 	// More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
 	// +optional
-	hard?: ResourceList @go(Hard) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	hard?: #ResourceList @go(Hard) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// A collection of filters that must match each object tracked by a quota.
 	// If not specified, the quota matches all objects.
 	// +optional
-	scopes?: [...ResourceQuotaScope] @go(Scopes,[]ResourceQuotaScope) @protobuf(2,bytes,rep,casttype=ResourceQuotaScope)
+	scopes?: [...#ResourceQuotaScope] @go(Scopes,[]ResourceQuotaScope) @protobuf(2,bytes,rep,casttype=ResourceQuotaScope)
 
 	// scopeSelector is also a collection of filters like scopes that must match each object tracked by a quota
 	// but expressed using ScopeSelectorOperator in combination with possible values.
 	// For a resource to match, both scopes AND scopeSelector (if specified in spec), must be matched.
 	// +optional
-	scopeSelector?: null | ScopeSelector @go(ScopeSelector,*ScopeSelector) @protobuf(3,bytes,opt)
+	scopeSelector?: null | #ScopeSelector @go(ScopeSelector,*ScopeSelector) @protobuf(3,bytes,opt)
 }
 
 // A scope selector represents the AND of the selectors represented
 // by the scoped-resource selector requirements.
-ScopeSelector :: {
+#ScopeSelector: {
 	// A list of scope selector requirements by scope of the resources.
 	// +optional
-	matchExpressions?: [...ScopedResourceSelectorRequirement] @go(MatchExpressions,[]ScopedResourceSelectorRequirement) @protobuf(1,bytes,rep)
+	matchExpressions?: [...#ScopedResourceSelectorRequirement] @go(MatchExpressions,[]ScopedResourceSelectorRequirement) @protobuf(1,bytes,rep)
 }
 
 // A scoped-resource selector requirement is a selector that contains values, a scope name, and an operator
 // that relates the scope name and values.
-ScopedResourceSelectorRequirement :: {
+#ScopedResourceSelectorRequirement: {
 	// The name of the scope that the selector applies to.
-	scopeName: ResourceQuotaScope @go(ScopeName) @protobuf(1,bytes,opt)
+	scopeName: #ResourceQuotaScope @go(ScopeName) @protobuf(1,bytes,opt)
 
 	// Represents a scope's relationship to a set of values.
 	// Valid operators are In, NotIn, Exists, DoesNotExist.
-	operator: ScopeSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=ScopedResourceSelectorOperator)
+	operator: #ScopeSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=ScopedResourceSelectorOperator)
 
 	// An array of string values. If the operator is In or NotIn,
 	// the values array must be non-empty. If the operator is Exists or DoesNotExist,
@@ -5883,74 +5883,74 @@
 
 // A scope selector operator is the set of operators that can be used in
 // a scope selector requirement.
-ScopeSelectorOperator :: string // enumScopeSelectorOperator
+#ScopeSelectorOperator: string // #enumScopeSelectorOperator
 
-enumScopeSelectorOperator ::
-	ScopeSelectorOpIn |
-	ScopeSelectorOpNotIn |
-	ScopeSelectorOpExists |
-	ScopeSelectorOpDoesNotExist
+#enumScopeSelectorOperator:
+	#ScopeSelectorOpIn |
+	#ScopeSelectorOpNotIn |
+	#ScopeSelectorOpExists |
+	#ScopeSelectorOpDoesNotExist
 
-ScopeSelectorOpIn ::           ScopeSelectorOperator & "In"
-ScopeSelectorOpNotIn ::        ScopeSelectorOperator & "NotIn"
-ScopeSelectorOpExists ::       ScopeSelectorOperator & "Exists"
-ScopeSelectorOpDoesNotExist :: ScopeSelectorOperator & "DoesNotExist"
+#ScopeSelectorOpIn:           #ScopeSelectorOperator & "In"
+#ScopeSelectorOpNotIn:        #ScopeSelectorOperator & "NotIn"
+#ScopeSelectorOpExists:       #ScopeSelectorOperator & "Exists"
+#ScopeSelectorOpDoesNotExist: #ScopeSelectorOperator & "DoesNotExist"
 
 // ResourceQuotaStatus defines the enforced hard limits and observed use.
-ResourceQuotaStatus :: {
+#ResourceQuotaStatus: {
 	// Hard is the set of enforced hard limits for each named resource.
 	// More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
 	// +optional
-	hard?: ResourceList @go(Hard) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	hard?: #ResourceList @go(Hard) @protobuf(1,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 
 	// Used is the current observed total usage of the resource in the namespace.
 	// +optional
-	used?: ResourceList @go(Used) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
+	used?: #ResourceList @go(Used) @protobuf(2,bytes,rep,casttype=ResourceList,castkey=ResourceName)
 }
 
 // ResourceQuota sets aggregate quota restrictions enforced per namespace
-ResourceQuota :: {
-	metav1.TypeMeta
+#ResourceQuota: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Spec defines the desired quota.
 	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	spec?: ResourceQuotaSpec @go(Spec) @protobuf(2,bytes,opt)
+	spec?: #ResourceQuotaSpec @go(Spec) @protobuf(2,bytes,opt)
 
 	// Status defines the actual enforced quota and its current usage.
 	// https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status
 	// +optional
-	status?: ResourceQuotaStatus @go(Status) @protobuf(3,bytes,opt)
+	status?: #ResourceQuotaStatus @go(Status) @protobuf(3,bytes,opt)
 }
 
 // ResourceQuotaList is a list of ResourceQuota items.
-ResourceQuotaList :: {
-	metav1.TypeMeta
+#ResourceQuotaList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is a list of ResourceQuota objects.
 	// More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/
-	items: [...ResourceQuota] @go(Items,[]ResourceQuota) @protobuf(2,bytes,rep)
+	items: [...#ResourceQuota] @go(Items,[]ResourceQuota) @protobuf(2,bytes,rep)
 }
 
 // Secret holds secret data of a certain type. The total bytes of the values in
 // the Data field must be less than MaxSecretSize bytes.
-Secret :: {
-	metav1.TypeMeta
+#Secret: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Immutable, if set to true, ensures that data stored in the Secret cannot
 	// be updated (only object metadata can be modified).
@@ -5977,25 +5977,25 @@
 
 	// Used to facilitate programmatic handling of secret data.
 	// +optional
-	type?: SecretType @go(Type) @protobuf(3,bytes,opt,casttype=SecretType)
+	type?: #SecretType @go(Type) @protobuf(3,bytes,opt,casttype=SecretType)
 }
 
-MaxSecretSize :: 1048576
+#MaxSecretSize: 1048576
 
-SecretType :: string // enumSecretType
+#SecretType: string // #enumSecretType
 
-enumSecretType ::
-	SecretTypeOpaque |
-	SecretTypeServiceAccountToken |
-	SecretTypeDockercfg |
-	SecretTypeDockerConfigJson |
-	SecretTypeBasicAuth |
-	SecretTypeSSHAuth |
-	SecretTypeTLS |
-	SecretTypeBootstrapToken
+#enumSecretType:
+	#SecretTypeOpaque |
+	#SecretTypeServiceAccountToken |
+	#SecretTypeDockercfg |
+	#SecretTypeDockerConfigJson |
+	#SecretTypeBasicAuth |
+	#SecretTypeSSHAuth |
+	#SecretTypeTLS |
+	#SecretTypeBootstrapToken
 
 // SecretTypeOpaque is the default. Arbitrary user-defined data
-SecretTypeOpaque :: SecretType & "Opaque"
+#SecretTypeOpaque: #SecretType & "Opaque"
 
 // SecretTypeServiceAccountToken contains a token that identifies a service account to the API
 //
@@ -6003,65 +6003,65 @@
 // - Secret.Annotations["kubernetes.io/service-account.name"] - the name of the ServiceAccount the token identifies
 // - Secret.Annotations["kubernetes.io/service-account.uid"] - the UID of the ServiceAccount the token identifies
 // - Secret.Data["token"] - a token that identifies the service account to the API
-SecretTypeServiceAccountToken :: SecretType & "kubernetes.io/service-account-token"
+#SecretTypeServiceAccountToken: #SecretType & "kubernetes.io/service-account-token"
 
 // ServiceAccountNameKey is the key of the required annotation for SecretTypeServiceAccountToken secrets
-ServiceAccountNameKey :: "kubernetes.io/service-account.name"
+#ServiceAccountNameKey: "kubernetes.io/service-account.name"
 
 // ServiceAccountUIDKey is the key of the required annotation for SecretTypeServiceAccountToken secrets
-ServiceAccountUIDKey :: "kubernetes.io/service-account.uid"
+#ServiceAccountUIDKey: "kubernetes.io/service-account.uid"
 
 // ServiceAccountTokenKey is the key of the required data for SecretTypeServiceAccountToken secrets
-ServiceAccountTokenKey :: "token"
+#ServiceAccountTokenKey: "token"
 
 // ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets
-ServiceAccountKubeconfigKey :: "kubernetes.kubeconfig"
+#ServiceAccountKubeconfigKey: "kubernetes.kubeconfig"
 
 // ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets
-ServiceAccountRootCAKey :: "ca.crt"
+#ServiceAccountRootCAKey: "ca.crt"
 
 // ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls
-ServiceAccountNamespaceKey :: "namespace"
+#ServiceAccountNamespaceKey: "namespace"
 
 // SecretTypeDockercfg contains a dockercfg file that follows the same format rules as ~/.dockercfg
 //
 // Required fields:
 // - Secret.Data[".dockercfg"] - a serialized ~/.dockercfg file
-SecretTypeDockercfg :: SecretType & "kubernetes.io/dockercfg"
+#SecretTypeDockercfg: #SecretType & "kubernetes.io/dockercfg"
 
 // DockerConfigKey is the key of the required data for SecretTypeDockercfg secrets
-DockerConfigKey :: ".dockercfg"
+#DockerConfigKey: ".dockercfg"
 
 // SecretTypeDockerConfigJson contains a dockercfg file that follows the same format rules as ~/.docker/config.json
 //
 // Required fields:
 // - Secret.Data[".dockerconfigjson"] - a serialized ~/.docker/config.json file
-SecretTypeDockerConfigJson :: SecretType & "kubernetes.io/dockerconfigjson"
+#SecretTypeDockerConfigJson: #SecretType & "kubernetes.io/dockerconfigjson"
 
 // DockerConfigJsonKey is the key of the required data for SecretTypeDockerConfigJson secrets
-DockerConfigJsonKey :: ".dockerconfigjson"
+#DockerConfigJsonKey: ".dockerconfigjson"
 
 // SecretTypeBasicAuth contains data needed for basic authentication.
 //
 // Required at least one of fields:
 // - Secret.Data["username"] - username used for authentication
 // - Secret.Data["password"] - password or token needed for authentication
-SecretTypeBasicAuth :: SecretType & "kubernetes.io/basic-auth"
+#SecretTypeBasicAuth: #SecretType & "kubernetes.io/basic-auth"
 
 // BasicAuthUsernameKey is the key of the username for SecretTypeBasicAuth secrets
-BasicAuthUsernameKey :: "username"
+#BasicAuthUsernameKey: "username"
 
 // BasicAuthPasswordKey is the key of the password or token for SecretTypeBasicAuth secrets
-BasicAuthPasswordKey :: "password"
+#BasicAuthPasswordKey: "password"
 
 // SecretTypeSSHAuth contains data needed for SSH authetication.
 //
 // Required field:
 // - Secret.Data["ssh-privatekey"] - private SSH key needed for authentication
-SecretTypeSSHAuth :: SecretType & "kubernetes.io/ssh-auth"
+#SecretTypeSSHAuth: #SecretType & "kubernetes.io/ssh-auth"
 
 // SSHAuthPrivateKey is the key of the required SSH private key for SecretTypeSSHAuth secrets
-SSHAuthPrivateKey :: "ssh-privatekey"
+#SSHAuthPrivateKey: "ssh-privatekey"
 
 // SecretTypeTLS contains information about a TLS client or server secret. It
 // is primarily used with TLS termination of the Ingress resource, but may be
@@ -6071,41 +6071,41 @@
 // - Secret.Data["tls.key"] - TLS private key.
 //   Secret.Data["tls.crt"] - TLS certificate.
 // TODO: Consider supporting different formats, specifying CA/destinationCA.
-SecretTypeTLS :: SecretType & "kubernetes.io/tls"
+#SecretTypeTLS: #SecretType & "kubernetes.io/tls"
 
 // TLSCertKey is the key for tls certificates in a TLS secert.
-TLSCertKey :: "tls.crt"
+#TLSCertKey: "tls.crt"
 
 // TLSPrivateKeyKey is the key for the private key field in a TLS secret.
-TLSPrivateKeyKey :: "tls.key"
+#TLSPrivateKeyKey: "tls.key"
 
 // SecretTypeBootstrapToken is used during the automated bootstrap process (first
 // implemented by kubeadm). It stores tokens that are used to sign well known
 // ConfigMaps. They are used for authn.
-SecretTypeBootstrapToken :: SecretType & "bootstrap.kubernetes.io/token"
+#SecretTypeBootstrapToken: #SecretType & "bootstrap.kubernetes.io/token"
 
 // SecretList is a list of Secret.
-SecretList :: {
-	metav1.TypeMeta
+#SecretList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is a list of secret objects.
 	// More info: https://kubernetes.io/docs/concepts/configuration/secret
-	items: [...Secret] @go(Items,[]Secret) @protobuf(2,bytes,rep)
+	items: [...#Secret] @go(Items,[]Secret) @protobuf(2,bytes,rep)
 }
 
 // ConfigMap holds configuration data for pods to consume.
-ConfigMap :: {
-	metav1.TypeMeta
+#ConfigMap: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Immutable, if set to true, ensures that data stored in the ConfigMap cannot
 	// be updated (only object metadata can be modified).
@@ -6135,34 +6135,34 @@
 }
 
 // ConfigMapList is a resource containing a list of ConfigMap objects.
-ConfigMapList :: {
-	metav1.TypeMeta
+#ConfigMapList: {
+	metav1.#TypeMeta
 
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Items is the list of ConfigMaps.
-	items: [...ConfigMap] @go(Items,[]ConfigMap) @protobuf(2,bytes,rep)
+	items: [...#ConfigMap] @go(Items,[]ConfigMap) @protobuf(2,bytes,rep)
 }
 
 // Type and constants for component health validation.
-ComponentConditionType :: string // enumComponentConditionType
+#ComponentConditionType: string // #enumComponentConditionType
 
-enumComponentConditionType ::
-	ComponentHealthy
+#enumComponentConditionType:
+	#ComponentHealthy
 
-ComponentHealthy :: ComponentConditionType & "Healthy"
+#ComponentHealthy: #ComponentConditionType & "Healthy"
 
 // Information about the condition of a component.
-ComponentCondition :: {
+#ComponentCondition: {
 	// Type of condition for a component.
 	// Valid value: "Healthy"
-	type: ComponentConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ComponentConditionType)
+	type: #ComponentConditionType @go(Type) @protobuf(1,bytes,opt,casttype=ComponentConditionType)
 
 	// Status of the condition for a component.
 	// Valid values for "Healthy": "True", "False", or "Unknown".
-	status: ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
+	status: #ConditionStatus @go(Status) @protobuf(2,bytes,opt,casttype=ConditionStatus)
 
 	// Message about the condition for a component.
 	// For example, information about a health check.
@@ -6176,40 +6176,40 @@
 }
 
 // ComponentStatus (and ComponentStatusList) holds the cluster validation info.
-ComponentStatus :: {
-	metav1.TypeMeta
+#ComponentStatus: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// List of component conditions observed
 	// +optional
 	// +patchMergeKey=type
 	// +patchStrategy=merge
-	conditions?: [...ComponentCondition] @go(Conditions,[]ComponentCondition) @protobuf(2,bytes,rep)
+	conditions?: [...#ComponentCondition] @go(Conditions,[]ComponentCondition) @protobuf(2,bytes,rep)
 }
 
 // Status of all the conditions for the component as a list of ComponentStatus objects.
-ComponentStatusList :: {
-	metav1.TypeMeta
+#ComponentStatusList: {
+	metav1.#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: metav1.ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of ComponentStatus objects.
-	items: [...ComponentStatus] @go(Items,[]ComponentStatus) @protobuf(2,bytes,rep)
+	items: [...#ComponentStatus] @go(Items,[]ComponentStatus) @protobuf(2,bytes,rep)
 }
 
 // DownwardAPIVolumeSource represents a volume containing downward API info.
 // Downward API volumes support ownership management and SELinux relabeling.
-DownwardAPIVolumeSource :: {
+#DownwardAPIVolumeSource: {
 	// Items is a list of downward API volume file
 	// +optional
-	items?: [...DownwardAPIVolumeFile] @go(Items,[]DownwardAPIVolumeFile) @protobuf(1,bytes,rep)
+	items?: [...#DownwardAPIVolumeFile] @go(Items,[]DownwardAPIVolumeFile) @protobuf(1,bytes,rep)
 
 	// Optional: mode bits to use on created files by default. Must be a
 	// value between 0 and 0777. Defaults to 0644.
@@ -6220,21 +6220,21 @@
 	defaultMode?: null | int32 @go(DefaultMode,*int32) @protobuf(2,varint,opt)
 }
 
-DownwardAPIVolumeSourceDefaultMode :: int32 & 0o644
+#DownwardAPIVolumeSourceDefaultMode: int32 & 0o644
 
 // DownwardAPIVolumeFile represents information to create the file containing the pod field
-DownwardAPIVolumeFile :: {
+#DownwardAPIVolumeFile: {
 	// Required: Path is  the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'
 	path: string @go(Path) @protobuf(1,bytes,opt)
 
 	// Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.
 	// +optional
-	fieldRef?: null | ObjectFieldSelector @go(FieldRef,*ObjectFieldSelector) @protobuf(2,bytes,opt)
+	fieldRef?: null | #ObjectFieldSelector @go(FieldRef,*ObjectFieldSelector) @protobuf(2,bytes,opt)
 
 	// Selects a resource of the container: only resources limits and requests
 	// (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.
 	// +optional
-	resourceFieldRef?: null | ResourceFieldSelector @go(ResourceFieldRef,*ResourceFieldSelector) @protobuf(3,bytes,opt)
+	resourceFieldRef?: null | #ResourceFieldSelector @go(ResourceFieldRef,*ResourceFieldSelector) @protobuf(3,bytes,opt)
 
 	// Optional: mode bits to use on this file, must be a value between 0
 	// and 0777. If not specified, the volume defaultMode will be used.
@@ -6247,20 +6247,20 @@
 // Represents downward API info for projecting into a projected volume.
 // Note that this is identical to a downwardAPI volume source without the default
 // mode.
-DownwardAPIProjection :: {
+#DownwardAPIProjection: {
 	// Items is a list of DownwardAPIVolume file
 	// +optional
-	items?: [...DownwardAPIVolumeFile] @go(Items,[]DownwardAPIVolumeFile) @protobuf(1,bytes,rep)
+	items?: [...#DownwardAPIVolumeFile] @go(Items,[]DownwardAPIVolumeFile) @protobuf(1,bytes,rep)
 }
 
 // SecurityContext holds security configuration that will be applied to a container.
 // Some fields are present in both SecurityContext and PodSecurityContext.  When both
 // are set, the values in SecurityContext take precedence.
-SecurityContext :: {
+#SecurityContext: {
 	// The capabilities to add/drop when running containers.
 	// Defaults to the default set of capabilities granted by the container runtime.
 	// +optional
-	capabilities?: null | Capabilities @go(Capabilities,*Capabilities) @protobuf(1,bytes,opt)
+	capabilities?: null | #Capabilities @go(Capabilities,*Capabilities) @protobuf(1,bytes,opt)
 
 	// Run container in privileged mode.
 	// Processes in privileged containers are essentially equivalent to root on the host.
@@ -6273,13 +6273,13 @@
 	// container.  May also be set in PodSecurityContext.  If set in both SecurityContext and
 	// PodSecurityContext, the value specified in SecurityContext takes precedence.
 	// +optional
-	seLinuxOptions?: null | SELinuxOptions @go(SELinuxOptions,*SELinuxOptions) @protobuf(3,bytes,opt)
+	seLinuxOptions?: null | #SELinuxOptions @go(SELinuxOptions,*SELinuxOptions) @protobuf(3,bytes,opt)
 
 	// The Windows specific settings applied to all containers.
 	// If unspecified, the options from the PodSecurityContext will be used.
 	// If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.
 	// +optional
-	windowsOptions?: null | WindowsSecurityContextOptions @go(WindowsOptions,*WindowsSecurityContextOptions) @protobuf(10,bytes,opt)
+	windowsOptions?: null | #WindowsSecurityContextOptions @go(WindowsOptions,*WindowsSecurityContextOptions) @protobuf(10,bytes,opt)
 
 	// The UID to run the entrypoint of the container process.
 	// Defaults to user specified in image metadata if unspecified.
@@ -6323,27 +6323,27 @@
 	// readonly paths and masked paths.
 	// This requires the ProcMountType feature flag to be enabled.
 	// +optional
-	procMount?: null | ProcMountType @go(ProcMount,*ProcMountType) @protobuf(9,bytes,opt)
+	procMount?: null | #ProcMountType @go(ProcMount,*ProcMountType) @protobuf(9,bytes,opt)
 }
 
-ProcMountType :: string // enumProcMountType
+#ProcMountType: string // #enumProcMountType
 
-enumProcMountType ::
-	DefaultProcMount |
-	UnmaskedProcMount
+#enumProcMountType:
+	#DefaultProcMount |
+	#UnmaskedProcMount
 
 // DefaultProcMount uses the container runtime defaults for readonly and masked
 // paths for /proc.  Most container runtimes mask certain paths in /proc to avoid
 // accidental security exposure of special devices or information.
-DefaultProcMount :: ProcMountType & "Default"
+#DefaultProcMount: #ProcMountType & "Default"
 
 // UnmaskedProcMount bypasses the default masking behavior of the container
 // runtime and ensures the newly created /proc the container stays in tact with
 // no modifications.
-UnmaskedProcMount :: ProcMountType & "Unmasked"
+#UnmaskedProcMount: #ProcMountType & "Unmasked"
 
 // SELinuxOptions are the labels to be applied to the container
-SELinuxOptions :: {
+#SELinuxOptions: {
 	// User is a SELinux user label that applies to the container.
 	// +optional
 	user?: string @go(User) @protobuf(1,bytes,opt)
@@ -6362,7 +6362,7 @@
 }
 
 // WindowsSecurityContextOptions contain Windows-specific options and credentials.
-WindowsSecurityContextOptions :: {
+#WindowsSecurityContextOptions: {
 	// GMSACredentialSpecName is the name of the GMSA credential spec to use.
 	// +optional
 	gmsaCredentialSpecName?: null | string @go(GMSACredentialSpecName,*string) @protobuf(1,bytes,opt)
@@ -6382,13 +6382,13 @@
 }
 
 // RangeAllocation is not a public type.
-RangeAllocation :: {
-	metav1.TypeMeta
+#RangeAllocation: {
+	metav1.#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: metav1.ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: metav1.#ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 
 	// Range is string that identifies the range represented by 'data'.
 	range: string @go(Range) @protobuf(2,bytes,opt)
@@ -6398,16 +6398,16 @@
 }
 
 // "default-scheduler" is the name of default scheduler.
-DefaultSchedulerName :: "default-scheduler"
+#DefaultSchedulerName: "default-scheduler"
 
 // RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule
 // corresponding to every RequiredDuringScheduling affinity rule.
 // When the --hard-pod-affinity-weight scheduler flag is not specified,
 // DefaultHardPodAffinityWeight defines the weight of the implicit PreferredDuringScheduling affinity rule.
-DefaultHardPodAffinitySymmetricWeight :: int32 & 1
+#DefaultHardPodAffinitySymmetricWeight: int32 & 1
 
 // Sysctl defines a kernel parameter to be set
-Sysctl :: {
+#Sysctl: {
 	// Name of a property to set
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -6417,50 +6417,50 @@
 
 // NodeResources is an object for conveying resource information about a node.
 // see http://releases.k8s.io/HEAD/docs/design/resources.md for more details.
-NodeResources :: {
+#NodeResources: {
 	// Capacity represents the available resources of a node
-	Capacity: ResourceList @protobuf(1,bytes,rep,name=capacity,casttype=ResourceList,castkey=ResourceName)
+	Capacity: #ResourceList @protobuf(1,bytes,rep,name=capacity,casttype=ResourceList,castkey=ResourceName)
 }
 
 // Enable stdin for remote command execution
-ExecStdinParam :: "input"
+#ExecStdinParam: "input"
 
 // Enable stdout for remote command execution
-ExecStdoutParam :: "output"
+#ExecStdoutParam: "output"
 
 // Enable stderr for remote command execution
-ExecStderrParam :: "error"
+#ExecStderrParam: "error"
 
 // Enable TTY for remote command execution
-ExecTTYParam :: "tty"
+#ExecTTYParam: "tty"
 
 // Command to run for remote command execution
-ExecCommandParam :: "command"
+#ExecCommandParam: "command"
 
 // Name of header that specifies stream type
-StreamType :: "streamType"
+#StreamType: "streamType"
 
 // Value for streamType header for stdin stream
-StreamTypeStdin :: "stdin"
+#StreamTypeStdin: "stdin"
 
 // Value for streamType header for stdout stream
-StreamTypeStdout :: "stdout"
+#StreamTypeStdout: "stdout"
 
 // Value for streamType header for stderr stream
-StreamTypeStderr :: "stderr"
+#StreamTypeStderr: "stderr"
 
 // Value for streamType header for data stream
-StreamTypeData :: "data"
+#StreamTypeData: "data"
 
 // Value for streamType header for error stream
-StreamTypeError :: "error"
+#StreamTypeError: "error"
 
 // Value for streamType header for terminal resize stream
-StreamTypeResize :: "resize"
+#StreamTypeResize: "resize"
 
 // Name of header that specifies the port being forwarded
-PortHeader :: "port"
+#PortHeader: "port"
 
 // Name of header that specifies a request ID used to associate the error
 // and data streams for a single forwarded connection
-PortForwardRequestIDHeader :: "requestID"
+#PortForwardRequestIDHeader: "requestID"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_labels_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_labels_go_gen.cue
index 33525fd..87febc7 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_labels_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_labels_go_gen.cue
@@ -4,31 +4,31 @@
 
 package v1
 
-LabelHostname ::                "kubernetes.io/hostname"
-LabelZoneFailureDomain ::       "failure-domain.beta.kubernetes.io/zone"
-LabelZoneRegion ::              "failure-domain.beta.kubernetes.io/region"
-LabelZoneFailureDomainStable :: "topology.kubernetes.io/zone"
-LabelZoneRegionStable ::        "topology.kubernetes.io/region"
-LabelInstanceType ::            "beta.kubernetes.io/instance-type"
-LabelInstanceTypeStable ::      "node.kubernetes.io/instance-type"
-LabelOSStable ::                "kubernetes.io/os"
-LabelArchStable ::              "kubernetes.io/arch"
+#LabelHostname:                "kubernetes.io/hostname"
+#LabelZoneFailureDomain:       "failure-domain.beta.kubernetes.io/zone"
+#LabelZoneRegion:              "failure-domain.beta.kubernetes.io/region"
+#LabelZoneFailureDomainStable: "topology.kubernetes.io/zone"
+#LabelZoneRegionStable:        "topology.kubernetes.io/region"
+#LabelInstanceType:            "beta.kubernetes.io/instance-type"
+#LabelInstanceTypeStable:      "node.kubernetes.io/instance-type"
+#LabelOSStable:                "kubernetes.io/os"
+#LabelArchStable:              "kubernetes.io/arch"
 
 // LabelWindowsBuild is used on Windows nodes to specify the Windows build number starting with v1.17.0.
 // It's in the format MajorVersion.MinorVersion.BuildNumber (for ex: 10.0.17763)
-LabelWindowsBuild :: "node.kubernetes.io/windows-build"
+#LabelWindowsBuild: "node.kubernetes.io/windows-build"
 
 // LabelNamespaceSuffixKubelet is an allowed label namespace suffix kubelets can self-set ([*.]kubelet.kubernetes.io/*)
-LabelNamespaceSuffixKubelet :: "kubelet.kubernetes.io"
+#LabelNamespaceSuffixKubelet: "kubelet.kubernetes.io"
 
 // LabelNamespaceSuffixNode is an allowed label namespace suffix kubelets can self-set ([*.]node.kubernetes.io/*)
-LabelNamespaceSuffixNode :: "node.kubernetes.io"
+#LabelNamespaceSuffixNode: "node.kubernetes.io"
 
 // LabelNamespaceNodeRestriction is a forbidden label namespace that kubelets may not self-set when the NodeRestriction admission plugin is enabled
-LabelNamespaceNodeRestriction :: "node-restriction.kubernetes.io"
+#LabelNamespaceNodeRestriction: "node-restriction.kubernetes.io"
 
 // IsHeadlessService is added by Controller to an Endpoint denoting if its parent
 // Service is Headless. The existence of this label can be used further by other
 // controllers and kube-proxy to check if the Endpoint objects should be replicated when
 // using Headless Services
-IsHeadlessService :: "service.kubernetes.io/headless"
+#IsHeadlessService: "service.kubernetes.io/headless"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_taints_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_taints_go_gen.cue
index 7f835d1..a48c35e 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_taints_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/api/core/v1/well_known_taints_go_gen.cue
@@ -6,29 +6,29 @@
 
 // TaintNodeNotReady will be added when node is not ready
 // and removed when node becomes ready.
-TaintNodeNotReady :: "node.kubernetes.io/not-ready"
+#TaintNodeNotReady: "node.kubernetes.io/not-ready"
 
 // TaintNodeUnreachable will be added when node becomes unreachable
 // (corresponding to NodeReady status ConditionUnknown)
 // and removed when node becomes reachable (NodeReady status ConditionTrue).
-TaintNodeUnreachable :: "node.kubernetes.io/unreachable"
+#TaintNodeUnreachable: "node.kubernetes.io/unreachable"
 
 // TaintNodeUnschedulable will be added when node becomes unschedulable
 // and removed when node becomes scheduable.
-TaintNodeUnschedulable :: "node.kubernetes.io/unschedulable"
+#TaintNodeUnschedulable: "node.kubernetes.io/unschedulable"
 
 // TaintNodeMemoryPressure will be added when node has memory pressure
 // and removed when node has enough memory.
-TaintNodeMemoryPressure :: "node.kubernetes.io/memory-pressure"
+#TaintNodeMemoryPressure: "node.kubernetes.io/memory-pressure"
 
 // TaintNodeDiskPressure will be added when node has disk pressure
 // and removed when node has enough disk.
-TaintNodeDiskPressure :: "node.kubernetes.io/disk-pressure"
+#TaintNodeDiskPressure: "node.kubernetes.io/disk-pressure"
 
 // TaintNodeNetworkUnavailable will be added when node's network is unavailable
 // and removed when network becomes ready.
-TaintNodeNetworkUnavailable :: "node.kubernetes.io/network-unavailable"
+#TaintNodeNetworkUnavailable: "node.kubernetes.io/network-unavailable"
 
 // TaintNodePIDPressure will be added when node has pid pressure
 // and removed when node has enough disk.
-TaintNodePIDPressure :: "node.kubernetes.io/pid-pressure"
+#TaintNodePIDPressure: "node.kubernetes.io/pid-pressure"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/amount_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/amount_go_gen.cue
index 7756e4a..706b3c8 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/amount_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/amount_go_gen.cue
@@ -7,25 +7,25 @@
 // Scale is used for getting and setting the base-10 scaled value.
 // Base-2 scales are omitted for mathematical simplicity.
 // See Quantity.ScaledValue for more details.
-Scale :: int32 // enumScale
+#Scale: int32 // #enumScale
 
-enumScale ::
-	Nano |
-	Micro |
-	Milli |
-	Kilo |
-	Mega |
-	Giga |
-	Tera |
-	Peta |
-	Exa
+#enumScale:
+	#Nano |
+	#Micro |
+	#Milli |
+	#Kilo |
+	#Mega |
+	#Giga |
+	#Tera |
+	#Peta |
+	#Exa
 
-Nano ::  Scale & -9
-Micro :: Scale & -6
-Milli :: Scale & -3
-Kilo ::  Scale & 3
-Mega ::  Scale & 6
-Giga ::  Scale & 9
-Tera ::  Scale & 12
-Peta ::  Scale & 15
-Exa ::   Scale & 18
+#Nano:  #Scale & -9
+#Micro: #Scale & -6
+#Milli: #Scale & -3
+#Kilo:  #Scale & 3
+#Mega:  #Scale & 6
+#Giga:  #Scale & 9
+#Tera:  #Scale & 12
+#Peta:  #Scale & 15
+#Exa:   #Scale & 18
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/quantity_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/quantity_go_gen.cue
index e121546..6eb9414 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/quantity_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/api/resource/quantity_go_gen.cue
@@ -62,19 +62,19 @@
 // +protobuf.options.(gogoproto.goproto_stringer)=false
 // +k8s:deepcopy-gen=true
 // +k8s:openapi-gen=true
-Quantity :: _
+#Quantity: _
 
 // CanonicalValue allows a quantity amount to be converted to a string.
-CanonicalValue :: _
+#CanonicalValue: _
 
 // Format lists the three possible formattings of a quantity.
-Format :: string // enumFormat
+#Format: string // #enumFormat
 
-enumFormat ::
-	DecimalExponent |
-	BinarySI |
-	DecimalSI
+#enumFormat:
+	#DecimalExponent |
+	#BinarySI |
+	#DecimalSI
 
-DecimalExponent :: Format & "DecimalExponent"
-BinarySI ::        Format & "BinarySI"
-DecimalSI ::       Format & "DecimalSI"
+#DecimalExponent: #Format & "DecimalExponent"
+#BinarySI:        #Format & "BinarySI"
+#DecimalSI:       #Format & "DecimalSI"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/duration_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/duration_go_gen.cue
index 8479f49..25ea8ec 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/duration_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/duration_go_gen.cue
@@ -7,4 +7,4 @@
 // Duration is a wrapper around time.Duration which supports correct
 // marshaling to YAML and JSON. In particular, it marshals into strings, which
 // can be used as map keys in json.
-Duration :: _
+#Duration: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/group_version_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/group_version_go_gen.cue
index fdc98a3..8ee2b15 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/group_version_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/group_version_go_gen.cue
@@ -8,7 +8,7 @@
 // concepts during lookup stages without having partially valid types
 //
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-GroupResource :: {
+#GroupResource: {
 	group:    string @go(Group) @protobuf(1,bytes,opt)
 	resource: string @go(Resource) @protobuf(2,bytes,opt)
 }
@@ -17,7 +17,7 @@
 // to avoid automatic coersion.  It doesn't use a GroupVersion to avoid custom marshalling
 //
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-GroupVersionResource :: {
+#GroupVersionResource: {
 	group:    string @go(Group) @protobuf(1,bytes,opt)
 	version:  string @go(Version) @protobuf(2,bytes,opt)
 	resource: string @go(Resource) @protobuf(3,bytes,opt)
@@ -27,7 +27,7 @@
 // concepts during lookup stages without having partially valid types
 //
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-GroupKind :: {
+#GroupKind: {
 	group: string @go(Group) @protobuf(1,bytes,opt)
 	kind:  string @go(Kind) @protobuf(2,bytes,opt)
 }
@@ -36,7 +36,7 @@
 // to avoid automatic coersion.  It doesn't use a GroupVersion to avoid custom marshalling
 //
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-GroupVersionKind :: {
+#GroupVersionKind: {
 	group:   string @go(Group) @protobuf(1,bytes,opt)
 	version: string @go(Version) @protobuf(2,bytes,opt)
 	kind:    string @go(Kind) @protobuf(3,bytes,opt)
@@ -45,4 +45,4 @@
 // GroupVersion contains the "group" and the "version", which uniquely identifies the API.
 //
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-GroupVersion :: _
+#GroupVersion: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/meta_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/meta_go_gen.cue
index 9944f9e..f3c39a4 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/meta_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/meta_go_gen.cue
@@ -5,29 +5,29 @@
 package v1
 
 // TODO: move this, Object, List, and Type to a different package
-ObjectMetaAccessor :: _
+#ObjectMetaAccessor: _
 
 // Object lets you work with object metadata from any of the versioned or
 // internal API objects. Attempting to set or retrieve a field on an object that does
 // not support that field (Name, UID, Namespace on lists) will be a no-op and return
 // a default value.
-Object :: _
+#Object: _
 
 // ListMetaAccessor retrieves the list interface from an object
-ListMetaAccessor :: _
+#ListMetaAccessor: _
 
 // Common lets you work with core metadata from any of the versioned or
 // internal API objects. Attempting to set or retrieve a field on an object that does
 // not support that field will be a no-op and return a default value.
 // TODO: move this, and TypeMeta and ListMeta, to a different package
-Common :: _
+#Common: _
 
 // ListInterface lets you work with list metadata from any of the versioned or
 // internal API objects. Attempting to set or retrieve a field on an object that does
 // not support that field will be a no-op and return a default value.
 // TODO: move this, and TypeMeta and ListMeta, to a different package
-ListInterface :: _
+#ListInterface: _
 
 // Type exposes the type and APIVersion of versioned or internal API objects.
 // TODO: move this, and TypeMeta and ListMeta, to a different package
-Type :: _
+#Type: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_go_gen.cue
index 4097996..3c067ba 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time_go_gen.cue
@@ -4,11 +4,11 @@
 
 package v1
 
-RFC3339Micro :: "2006-01-02T15:04:05.000000Z07:00"
+#RFC3339Micro: "2006-01-02T15:04:05.000000Z07:00"
 
 // MicroTime is version of Time with microsecond level precision.
 //
 // +protobuf.options.marshal=false
 // +protobuf.as=Timestamp
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-MicroTime :: _
+#MicroTime: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/register_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/register_go_gen.cue
index edb4dbb..39d23b2 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/register_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/register_go_gen.cue
@@ -4,6 +4,6 @@
 
 package v1
 
-GroupName :: "meta.k8s.io"
+#GroupName: "meta.k8s.io"
 
-WatchEventKind :: "WatchEvent"
+#WatchEventKind: "WatchEvent"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_go_gen.cue
index 52a66e8..b3c8ec2 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_go_gen.cue
@@ -11,4 +11,4 @@
 // +protobuf.options.marshal=false
 // +protobuf.as=Timestamp
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-Time :: _
+#Time: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto_go_gen.cue
index 0219f06..8353927 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/time_proto_go_gen.cue
@@ -7,7 +7,7 @@
 // Timestamp is a struct that is equivalent to Time, but intended for
 // protobuf marshalling/unmarshalling. It is generated into a serialization
 // that matches Time. Do not use in Go structs.
-Timestamp :: {
+#Timestamp: {
 	// Represents seconds of UTC time since Unix epoch
 	// 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to
 	// 9999-12-31T23:59:59Z inclusive.
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/types_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/types_go_gen.cue
index 866ab4e..997841d 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/types_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/types_go_gen.cue
@@ -23,7 +23,7 @@
 // Structures that are versioned or persisted should inline TypeMeta.
 //
 // +k8s:deepcopy-gen=false
-TypeMeta :: {
+#TypeMeta: {
 	// Kind is a string value representing the REST resource this object represents.
 	// Servers may infer this from the endpoint the client submits requests to.
 	// Cannot be updated.
@@ -42,7 +42,7 @@
 
 // ListMeta describes metadata that synthetic resources must have, including lists and
 // various status objects. A resource may have only one of {ObjectMeta, ListMeta}.
-ListMeta :: {
+#ListMeta: {
 	// selfLink is a URL representing this object.
 	// Populated by the system.
 	// Read-only.
@@ -84,12 +84,12 @@
 	remainingItemCount?: null | int64 @go(RemainingItemCount,*int64) @protobuf(4,bytes,opt)
 }
 
-FinalizerOrphanDependents :: "orphan"
-FinalizerDeleteDependents :: "foregroundDeletion"
+#FinalizerOrphanDependents: "orphan"
+#FinalizerDeleteDependents: "foregroundDeletion"
 
 // ObjectMeta is metadata that all persisted resources must have, which includes all objects
 // users must create.
-ObjectMeta :: {
+#ObjectMeta: {
 	// Name must be unique within a namespace. Is required when creating resources, although
 	// some resources may allow a client to request the generation of an appropriate name
 	// automatically. Name is primarily intended for creation idempotence and configuration
@@ -146,7 +146,7 @@
 	// Read-only.
 	// More info: http://kubernetes.io/docs/user-guide/identifiers#uids
 	// +optional
-	uid?: types.UID @go(UID) @protobuf(5,bytes,opt,casttype=k8s.io/kubernetes/pkg/types.UID)
+	uid?: types.#UID @go(UID) @protobuf(5,bytes,opt,casttype=k8s.io/kubernetes/pkg/types.UID)
 
 	// An opaque value that represents the internal version of this object that can
 	// be used by clients to determine when objects have changed. May be used for optimistic
@@ -175,7 +175,7 @@
 	// Null for lists.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	creationTimestamp?: Time @go(CreationTimestamp) @protobuf(8,bytes,opt)
+	creationTimestamp?: #Time @go(CreationTimestamp) @protobuf(8,bytes,opt)
 
 	// DeletionTimestamp is RFC 3339 date and time at which this resource will be deleted. This
 	// field is set by the server when a graceful deletion is requested by the user, and is not
@@ -196,7 +196,7 @@
 	// Read-only.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	deletionTimestamp?: null | Time @go(DeletionTimestamp,*Time) @protobuf(9,bytes,opt)
+	deletionTimestamp?: null | #Time @go(DeletionTimestamp,*Time) @protobuf(9,bytes,opt)
 
 	// Number of seconds allowed for this object to gracefully terminate before
 	// it will be removed from the system. Only set when deletionTimestamp is also set.
@@ -226,7 +226,7 @@
 	// +optional
 	// +patchMergeKey=uid
 	// +patchStrategy=merge
-	ownerReferences?: [...OwnerReference] @go(OwnerReferences,[]OwnerReference) @protobuf(13,bytes,rep)
+	ownerReferences?: [...#OwnerReference] @go(OwnerReferences,[]OwnerReference) @protobuf(13,bytes,rep)
 
 	// Must be empty before the object is deleted from the registry. Each entry
 	// is an identifier for the responsible component that will remove the entry
@@ -260,28 +260,28 @@
 	// workflow used when modifying the object.
 	//
 	// +optional
-	managedFields?: [...ManagedFieldsEntry] @go(ManagedFields,[]ManagedFieldsEntry) @protobuf(17,bytes,rep)
+	managedFields?: [...#ManagedFieldsEntry] @go(ManagedFields,[]ManagedFieldsEntry) @protobuf(17,bytes,rep)
 }
 
 // NamespaceDefault means the object is in the default namespace which is applied when not specified by clients
-NamespaceDefault :: "default"
+#NamespaceDefault: "default"
 
 // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces
-NamespaceAll :: ""
+#NamespaceAll: ""
 
 // NamespaceNone is the argument for a context when there is no namespace.
-NamespaceNone :: ""
+#NamespaceNone: ""
 
 // NamespaceSystem is the system namespace where we place system components.
-NamespaceSystem :: "kube-system"
+#NamespaceSystem: "kube-system"
 
 // NamespacePublic is the namespace where we place public info (ConfigMaps)
-NamespacePublic :: "kube-public"
+#NamespacePublic: "kube-public"
 
 // OwnerReference contains enough information to let you identify an owning
 // object. An owning object must be in the same namespace as the dependent, or
 // be cluster-scoped, so there is no namespace field.
-OwnerReference :: {
+#OwnerReference: {
 	// API version of the referent.
 	apiVersion: string @go(APIVersion) @protobuf(5,bytes,opt)
 
@@ -295,7 +295,7 @@
 
 	// UID of the referent.
 	// More info: http://kubernetes.io/docs/user-guide/identifiers#uids
-	uid: types.UID @go(UID) @protobuf(4,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
+	uid: types.#UID @go(UID) @protobuf(4,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
 
 	// If true, this reference points to the managing controller.
 	// +optional
@@ -312,8 +312,8 @@
 }
 
 // ListOptions is the query options to a standard REST list call.
-ListOptions :: {
-	TypeMeta
+#ListOptions: {
+	#TypeMeta
 
 	// A selector to restrict the list of returned objects by their labels.
 	// Defaults to everything.
@@ -392,8 +392,8 @@
 
 // ExportOptions is the query options to the standard REST get call.
 // Deprecated. Planned for removal in 1.18.
-ExportOptions :: {
-	TypeMeta
+#ExportOptions: {
+	#TypeMeta
 
 	// Should this value be exported.  Export strips fields that a user can not specify.
 	// Deprecated. Planned for removal in 1.18.
@@ -405,8 +405,8 @@
 }
 
 // GetOptions is the standard query options to the standard REST get call.
-GetOptions :: {
-	TypeMeta
+#GetOptions: {
+	#TypeMeta
 
 	// When specified:
 	// - if unset, then the result is returned from remote storage based on quorum-read flag;
@@ -417,34 +417,34 @@
 
 // DeletionPropagation decides if a deletion will propagate to the dependents of
 // the object, and how the garbage collector will handle the propagation.
-DeletionPropagation :: string // enumDeletionPropagation
+#DeletionPropagation: string // #enumDeletionPropagation
 
-enumDeletionPropagation ::
-	DeletePropagationOrphan |
-	DeletePropagationBackground |
-	DeletePropagationForeground
+#enumDeletionPropagation:
+	#DeletePropagationOrphan |
+	#DeletePropagationBackground |
+	#DeletePropagationForeground
 
 // Orphans the dependents.
-DeletePropagationOrphan :: DeletionPropagation & "Orphan"
+#DeletePropagationOrphan: #DeletionPropagation & "Orphan"
 
 // Deletes the object from the key-value store, the garbage collector will
 // delete the dependents in the background.
-DeletePropagationBackground :: DeletionPropagation & "Background"
+#DeletePropagationBackground: #DeletionPropagation & "Background"
 
 // The object exists in the key-value store until the garbage collector
 // deletes all the dependents whose ownerReference.blockOwnerDeletion=true
 // from the key-value store.  API sever will put the "foregroundDeletion"
 // finalizer on the object, and sets its deletionTimestamp.  This policy is
 // cascading, i.e., the dependents will be deleted with Foreground.
-DeletePropagationForeground :: DeletionPropagation & "Foreground"
+#DeletePropagationForeground: #DeletionPropagation & "Foreground"
 
 // DryRunAll means to complete all processing stages, but don't
 // persist changes to storage.
-DryRunAll :: "All"
+#DryRunAll: "All"
 
 // DeleteOptions may be provided when deleting an API object.
-DeleteOptions :: {
-	TypeMeta
+#DeleteOptions: {
+	#TypeMeta
 
 	// The duration in seconds before the object should be deleted. Value must be non-negative integer.
 	// The value zero indicates delete immediately. If this value is nil, the default grace period for the
@@ -457,7 +457,7 @@
 	// returned.
 	// +k8s:conversion-gen=false
 	// +optional
-	preconditions?: null | Preconditions @go(Preconditions,*Preconditions) @protobuf(2,bytes,opt)
+	preconditions?: null | #Preconditions @go(Preconditions,*Preconditions) @protobuf(2,bytes,opt)
 
 	// Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7.
 	// Should the dependent objects be orphaned. If true/false, the "orphan"
@@ -475,7 +475,7 @@
 	// 'Foreground' - a cascading policy that deletes all dependents in the
 	// foreground.
 	// +optional
-	propagationPolicy?: null | DeletionPropagation @go(PropagationPolicy,*DeletionPropagation) @protobuf(4,varint,opt)
+	propagationPolicy?: null | #DeletionPropagation @go(PropagationPolicy,*DeletionPropagation) @protobuf(4,varint,opt)
 
 	// When present, indicates that modifications should not be
 	// persisted. An invalid or unrecognized dryRun directive will
@@ -487,8 +487,8 @@
 }
 
 // CreateOptions may be provided when creating an API object.
-CreateOptions :: {
-	TypeMeta
+#CreateOptions: {
+	#TypeMeta
 
 	// When present, indicates that modifications should not be
 	// persisted. An invalid or unrecognized dryRun directive will
@@ -508,8 +508,8 @@
 
 // PatchOptions may be provided when patching an API object.
 // PatchOptions is meant to be a superset of UpdateOptions.
-PatchOptions :: {
-	TypeMeta
+#PatchOptions: {
+	#TypeMeta
 
 	// When present, indicates that modifications should not be
 	// persisted. An invalid or unrecognized dryRun directive will
@@ -538,8 +538,8 @@
 
 // UpdateOptions may be provided when updating an API object.
 // All fields in UpdateOptions should also be present in PatchOptions.
-UpdateOptions :: {
-	TypeMeta
+#UpdateOptions: {
+	#TypeMeta
 
 	// When present, indicates that modifications should not be
 	// persisted. An invalid or unrecognized dryRun directive will
@@ -558,10 +558,10 @@
 }
 
 // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.
-Preconditions :: {
+#Preconditions: {
 	// Specifies the target UID.
 	// +optional
-	uid?: null | types.UID @go(UID,*types.UID) @protobuf(1,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
+	uid?: null | types.#UID @go(UID,*types.UID) @protobuf(1,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
 
 	// Specifies the target ResourceVersion
 	// +optional
@@ -569,13 +569,13 @@
 }
 
 // Status is a return value for calls that don't return other objects.
-Status :: {
-	TypeMeta
+#Status: {
+	#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: #ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// Status of the operation.
 	// One of: "Success" or "Failure".
@@ -592,14 +592,14 @@
 	// is no information available. A Reason clarifies an HTTP status
 	// code but does not override it.
 	// +optional
-	reason?: StatusReason @go(Reason) @protobuf(4,bytes,opt,casttype=StatusReason)
+	reason?: #StatusReason @go(Reason) @protobuf(4,bytes,opt,casttype=StatusReason)
 
 	// Extended data associated with the reason.  Each reason may define its
 	// own extended details. This field is optional and the data returned
 	// is not guaranteed to conform to any schema except that defined by
 	// the reason type.
 	// +optional
-	details?: null | StatusDetails @go(Details,*StatusDetails) @protobuf(5,bytes,opt)
+	details?: null | #StatusDetails @go(Details,*StatusDetails) @protobuf(5,bytes,opt)
 
 	// Suggested HTTP return code for this status, 0 if not set.
 	// +optional
@@ -612,7 +612,7 @@
 // must ignore fields that do not match the defined type of each attribute,
 // and should assume that any attribute may be empty, invalid, or under
 // defined.
-StatusDetails :: {
+#StatusDetails: {
 	// The name attribute of the resource associated with the status StatusReason
 	// (when there is a single name which can be described).
 	// +optional
@@ -632,12 +632,12 @@
 	// (when there is a single resource which can be described).
 	// More info: http://kubernetes.io/docs/user-guide/identifiers#uids
 	// +optional
-	uid?: types.UID @go(UID) @protobuf(6,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
+	uid?: types.#UID @go(UID) @protobuf(6,bytes,opt,casttype=k8s.io/apimachinery/pkg/types.UID)
 
 	// The Causes array includes more details associated with the StatusReason
 	// failure. Not all StatusReasons may provide detailed causes.
 	// +optional
-	causes?: [...StatusCause] @go(Causes,[]StatusCause) @protobuf(4,bytes,rep)
+	causes?: [...#StatusCause] @go(Causes,[]StatusCause) @protobuf(4,bytes,rep)
 
 	// If specified, the time in seconds before the operation should be retried. Some errors may indicate
 	// the client must take an alternate action - for those errors this field may indicate how long to wait
@@ -646,47 +646,47 @@
 	retryAfterSeconds?: int32 @go(RetryAfterSeconds) @protobuf(5,varint,opt)
 }
 
-StatusSuccess :: "Success"
-StatusFailure :: "Failure"
+#StatusSuccess: "Success"
+#StatusFailure: "Failure"
 
 // StatusReason is an enumeration of possible failure causes.  Each StatusReason
 // must map to a single HTTP status code, but multiple reasons may map
 // to the same HTTP status code.
 // TODO: move to apiserver
-StatusReason :: string // enumStatusReason
+#StatusReason: string // #enumStatusReason
 
-enumStatusReason ::
-	StatusReasonUnknown |
-	StatusReasonUnauthorized |
-	StatusReasonForbidden |
-	StatusReasonNotFound |
-	StatusReasonAlreadyExists |
-	StatusReasonConflict |
-	StatusReasonGone |
-	StatusReasonInvalid |
-	StatusReasonServerTimeout |
-	StatusReasonTimeout |
-	StatusReasonTooManyRequests |
-	StatusReasonBadRequest |
-	StatusReasonMethodNotAllowed |
-	StatusReasonNotAcceptable |
-	StatusReasonRequestEntityTooLarge |
-	StatusReasonUnsupportedMediaType |
-	StatusReasonInternalError |
-	StatusReasonExpired |
-	StatusReasonServiceUnavailable
+#enumStatusReason:
+	#StatusReasonUnknown |
+	#StatusReasonUnauthorized |
+	#StatusReasonForbidden |
+	#StatusReasonNotFound |
+	#StatusReasonAlreadyExists |
+	#StatusReasonConflict |
+	#StatusReasonGone |
+	#StatusReasonInvalid |
+	#StatusReasonServerTimeout |
+	#StatusReasonTimeout |
+	#StatusReasonTooManyRequests |
+	#StatusReasonBadRequest |
+	#StatusReasonMethodNotAllowed |
+	#StatusReasonNotAcceptable |
+	#StatusReasonRequestEntityTooLarge |
+	#StatusReasonUnsupportedMediaType |
+	#StatusReasonInternalError |
+	#StatusReasonExpired |
+	#StatusReasonServiceUnavailable
 
 // StatusReasonUnknown means the server has declined to indicate a specific reason.
 // The details field may contain other information about this error.
 // Status code 500.
-StatusReasonUnknown :: StatusReason & ""
+#StatusReasonUnknown: #StatusReason & ""
 
 // StatusReasonUnauthorized means the server can be reached and understood the request, but requires
 // the user to present appropriate authorization credentials (identified by the WWW-Authenticate header)
 // in order for the action to be completed. If the user has specified credentials on the request, the
 // server considers them insufficient.
 // Status code 401
-StatusReasonUnauthorized :: StatusReason & "Unauthorized"
+#StatusReasonUnauthorized: #StatusReason & "Unauthorized"
 
 // StatusReasonForbidden means the server can be reached and understood the request, but refuses
 // to take any further action.  It is the result of the server being configured to deny access for some reason
@@ -697,7 +697,7 @@
 //                   resource.
 //   "id"   string - the identifier of the forbidden resource
 // Status code 403
-StatusReasonForbidden :: StatusReason & "Forbidden"
+#StatusReasonForbidden: #StatusReason & "Forbidden"
 
 // StatusReasonNotFound means one or more resources required for this operation
 // could not be found.
@@ -707,26 +707,26 @@
 //                   resource.
 //   "id"   string - the identifier of the missing resource
 // Status code 404
-StatusReasonNotFound :: StatusReason & "NotFound"
+#StatusReasonNotFound: #StatusReason & "NotFound"
 
 // StatusReasonAlreadyExists means the resource you are creating already exists.
 // Details (optional):
 //   "kind" string - the kind attribute of the conflicting resource
 //   "id"   string - the identifier of the conflicting resource
 // Status code 409
-StatusReasonAlreadyExists :: StatusReason & "AlreadyExists"
+#StatusReasonAlreadyExists: #StatusReason & "AlreadyExists"
 
 // StatusReasonConflict means the requested operation cannot be completed
 // due to a conflict in the operation. The client may need to alter the
 // request. Each resource may define custom details that indicate the
 // nature of the conflict.
 // Status code 409
-StatusReasonConflict :: StatusReason & "Conflict"
+#StatusReasonConflict: #StatusReason & "Conflict"
 
 // StatusReasonGone means the item is no longer available at the server and no
 // forwarding address is known.
 // Status code 410
-StatusReasonGone :: StatusReason & "Gone"
+#StatusReasonGone: #StatusReason & "Gone"
 
 // StatusReasonInvalid means the requested create or update operation cannot be
 // completed due to invalid data provided as part of the request. The client may
@@ -739,7 +739,7 @@
 //                   provided resource that was invalid.  The code, message, and
 //                   field attributes will be set.
 // Status code 422
-StatusReasonInvalid :: StatusReason & "Invalid"
+#StatusReasonInvalid: #StatusReason & "Invalid"
 
 // StatusReasonServerTimeout means the server can be reached and understood the request,
 // but cannot complete the action in a reasonable time. The client should retry the request.
@@ -751,7 +751,7 @@
 //   "id"   string - the operation that is being attempted.
 //   "retryAfterSeconds" int32 - the number of seconds before the operation should be retried
 // Status code 500
-StatusReasonServerTimeout :: StatusReason & "ServerTimeout"
+#StatusReasonServerTimeout: #StatusReason & "ServerTimeout"
 
 // StatusReasonTimeout means that the request could not be completed within the given time.
 // Clients can get this response only when they specified a timeout param in the request,
@@ -761,7 +761,7 @@
 // Details (optional):
 //   "retryAfterSeconds" int32 - the number of seconds before the operation should be retried
 // Status code 504
-StatusReasonTimeout :: StatusReason & "Timeout"
+#StatusReasonTimeout: #StatusReason & "Timeout"
 
 // StatusReasonTooManyRequests means the server experienced too many requests within a
 // given window and that the client must wait to perform the action again. A client may
@@ -770,63 +770,63 @@
 // Details (optional):
 //   "retryAfterSeconds" int32 - the number of seconds before the operation should be retried
 // Status code 429
-StatusReasonTooManyRequests :: StatusReason & "TooManyRequests"
+#StatusReasonTooManyRequests: #StatusReason & "TooManyRequests"
 
 // StatusReasonBadRequest means that the request itself was invalid, because the request
 // doesn't make any sense, for example deleting a read-only object.  This is different than
 // StatusReasonInvalid above which indicates that the API call could possibly succeed, but the
 // data was invalid.  API calls that return BadRequest can never succeed.
 // Status code 400
-StatusReasonBadRequest :: StatusReason & "BadRequest"
+#StatusReasonBadRequest: #StatusReason & "BadRequest"
 
 // StatusReasonMethodNotAllowed means that the action the client attempted to perform on the
 // resource was not supported by the code - for instance, attempting to delete a resource that
 // can only be created. API calls that return MethodNotAllowed can never succeed.
 // Status code 405
-StatusReasonMethodNotAllowed :: StatusReason & "MethodNotAllowed"
+#StatusReasonMethodNotAllowed: #StatusReason & "MethodNotAllowed"
 
 // StatusReasonNotAcceptable means that the accept types indicated by the client were not acceptable
 // to the server - for instance, attempting to receive protobuf for a resource that supports only json and yaml.
 // API calls that return NotAcceptable can never succeed.
 // Status code 406
-StatusReasonNotAcceptable :: StatusReason & "NotAcceptable"
+#StatusReasonNotAcceptable: #StatusReason & "NotAcceptable"
 
 // StatusReasonRequestEntityTooLarge means that the request entity is too large.
 // Status code 413
-StatusReasonRequestEntityTooLarge :: StatusReason & "RequestEntityTooLarge"
+#StatusReasonRequestEntityTooLarge: #StatusReason & "RequestEntityTooLarge"
 
 // StatusReasonUnsupportedMediaType means that the content type sent by the client is not acceptable
 // to the server - for instance, attempting to send protobuf for a resource that supports only json and yaml.
 // API calls that return UnsupportedMediaType can never succeed.
 // Status code 415
-StatusReasonUnsupportedMediaType :: StatusReason & "UnsupportedMediaType"
+#StatusReasonUnsupportedMediaType: #StatusReason & "UnsupportedMediaType"
 
 // StatusReasonInternalError indicates that an internal error occurred, it is unexpected
 // and the outcome of the call is unknown.
 // Details (optional):
 //   "causes" - The original error
 // Status code 500
-StatusReasonInternalError :: StatusReason & "InternalError"
+#StatusReasonInternalError: #StatusReason & "InternalError"
 
 // StatusReasonExpired indicates that the request is invalid because the content you are requesting
 // has expired and is no longer available. It is typically associated with watches that can't be
 // serviced.
 // Status code 410 (gone)
-StatusReasonExpired :: StatusReason & "Expired"
+#StatusReasonExpired: #StatusReason & "Expired"
 
 // StatusReasonServiceUnavailable means that the request itself was valid,
 // but the requested service is unavailable at this time.
 // Retrying the request after some time might succeed.
 // Status code 503
-StatusReasonServiceUnavailable :: StatusReason & "ServiceUnavailable"
+#StatusReasonServiceUnavailable: #StatusReason & "ServiceUnavailable"
 
 // StatusCause provides more information about an api.Status failure, including
 // cases when multiple errors are encountered.
-StatusCause :: {
+#StatusCause: {
 	// A machine-readable description of the cause of the error. If this value is
 	// empty there is no information available.
 	// +optional
-	reason?: CauseType @go(Type) @protobuf(1,bytes,opt,casttype=CauseType)
+	reason?: #CauseType @go(Type) @protobuf(1,bytes,opt,casttype=CauseType)
 
 	// A human-readable description of the cause of the error.  This field may be
 	// presented as-is to a reader.
@@ -849,57 +849,57 @@
 // CauseType is a machine readable value providing more detail about what
 // occurred in a status response. An operation may have multiple causes for a
 // status (whether Failure or Success).
-CauseType :: string // enumCauseType
+#CauseType: string // #enumCauseType
 
-enumCauseType ::
-	CauseTypeFieldValueNotFound |
-	CauseTypeFieldValueRequired |
-	CauseTypeFieldValueDuplicate |
-	CauseTypeFieldValueInvalid |
-	CauseTypeFieldValueNotSupported |
-	CauseTypeUnexpectedServerResponse |
-	CauseTypeFieldManagerConflict
+#enumCauseType:
+	#CauseTypeFieldValueNotFound |
+	#CauseTypeFieldValueRequired |
+	#CauseTypeFieldValueDuplicate |
+	#CauseTypeFieldValueInvalid |
+	#CauseTypeFieldValueNotSupported |
+	#CauseTypeUnexpectedServerResponse |
+	#CauseTypeFieldManagerConflict
 
 // CauseTypeFieldValueNotFound is used to report failure to find a requested value
 // (e.g. looking up an ID).
-CauseTypeFieldValueNotFound :: CauseType & "FieldValueNotFound"
+#CauseTypeFieldValueNotFound: #CauseType & "FieldValueNotFound"
 
 // CauseTypeFieldValueRequired is used to report required values that are not
 // provided (e.g. empty strings, null values, or empty arrays).
-CauseTypeFieldValueRequired :: CauseType & "FieldValueRequired"
+#CauseTypeFieldValueRequired: #CauseType & "FieldValueRequired"
 
 // CauseTypeFieldValueDuplicate is used to report collisions of values that must be
 // unique (e.g. unique IDs).
-CauseTypeFieldValueDuplicate :: CauseType & "FieldValueDuplicate"
+#CauseTypeFieldValueDuplicate: #CauseType & "FieldValueDuplicate"
 
 // CauseTypeFieldValueInvalid is used to report malformed values (e.g. failed regex
 // match).
-CauseTypeFieldValueInvalid :: CauseType & "FieldValueInvalid"
+#CauseTypeFieldValueInvalid: #CauseType & "FieldValueInvalid"
 
 // CauseTypeFieldValueNotSupported is used to report valid (as per formatting rules)
 // values that can not be handled (e.g. an enumerated string).
-CauseTypeFieldValueNotSupported :: CauseType & "FieldValueNotSupported"
+#CauseTypeFieldValueNotSupported: #CauseType & "FieldValueNotSupported"
 
 // CauseTypeUnexpectedServerResponse is used to report when the server responded to the client
 // without the expected return type. The presence of this cause indicates the error may be
 // due to an intervening proxy or the server software malfunctioning.
-CauseTypeUnexpectedServerResponse :: CauseType & "UnexpectedServerResponse"
+#CauseTypeUnexpectedServerResponse: #CauseType & "UnexpectedServerResponse"
 
 // FieldManagerConflict is used to report when another client claims to manage this field,
 // It should only be returned for a request using server-side apply.
-CauseTypeFieldManagerConflict :: CauseType & "FieldManagerConflict"
+#CauseTypeFieldManagerConflict: #CauseType & "FieldManagerConflict"
 
 // List holds a list of objects, which may not be known by the server.
-List :: {
-	TypeMeta
+#List: {
+	#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: #ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// List of objects
-	items: [...runtime.RawExtension] @go(Items,[]runtime.RawExtension) @protobuf(2,bytes,rep)
+	items: [...runtime.#RawExtension] @go(Items,[]runtime.RawExtension) @protobuf(2,bytes,rep)
 }
 
 // APIVersions lists the versions that are available, to allow clients to
@@ -907,8 +907,8 @@
 //
 // +protobuf.options.(gogoproto.goproto_stringer)=false
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-APIVersions :: {
-	TypeMeta
+#APIVersions: {
+	#TypeMeta
 
 	// versions are the api versions that are available.
 	versions: [...string] @go(Versions,[]string) @protobuf(1,bytes,rep)
@@ -920,33 +920,33 @@
 	// The server returns only those CIDRs that it thinks that the client can match.
 	// For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP.
 	// Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.
-	serverAddressByClientCIDRs: [...ServerAddressByClientCIDR] @go(ServerAddressByClientCIDRs,[]ServerAddressByClientCIDR) @protobuf(2,bytes,rep)
+	serverAddressByClientCIDRs: [...#ServerAddressByClientCIDR] @go(ServerAddressByClientCIDRs,[]ServerAddressByClientCIDR) @protobuf(2,bytes,rep)
 }
 
 // APIGroupList is a list of APIGroup, to allow clients to discover the API at
 // /apis.
-APIGroupList :: {
-	TypeMeta
+#APIGroupList: {
+	#TypeMeta
 
 	// groups is a list of APIGroup.
-	groups: [...APIGroup] @go(Groups,[]APIGroup) @protobuf(1,bytes,rep)
+	groups: [...#APIGroup] @go(Groups,[]APIGroup) @protobuf(1,bytes,rep)
 }
 
 // APIGroup contains the name, the supported versions, and the preferred version
 // of a group.
-APIGroup :: {
-	TypeMeta
+#APIGroup: {
+	#TypeMeta
 
 	// name is the name of the group.
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
 	// versions are the versions supported in this group.
-	versions: [...GroupVersionForDiscovery] @go(Versions,[]GroupVersionForDiscovery) @protobuf(2,bytes,rep)
+	versions: [...#GroupVersionForDiscovery] @go(Versions,[]GroupVersionForDiscovery) @protobuf(2,bytes,rep)
 
 	// preferredVersion is the version preferred by the API server, which
 	// probably is the storage version.
 	// +optional
-	preferredVersion?: GroupVersionForDiscovery @go(PreferredVersion) @protobuf(3,bytes,opt)
+	preferredVersion?: #GroupVersionForDiscovery @go(PreferredVersion) @protobuf(3,bytes,opt)
 
 	// a map of client CIDR to server address that is serving this group.
 	// This is to help clients reach servers in the most network-efficient way possible.
@@ -956,11 +956,11 @@
 	// For example: the master will return an internal IP CIDR only, if the client reaches the server using an internal IP.
 	// Server looks at X-Forwarded-For header or X-Real-Ip header or request.RemoteAddr (in that order) to get the client IP.
 	// +optional
-	serverAddressByClientCIDRs?: [...ServerAddressByClientCIDR] @go(ServerAddressByClientCIDRs,[]ServerAddressByClientCIDR) @protobuf(4,bytes,rep)
+	serverAddressByClientCIDRs?: [...#ServerAddressByClientCIDR] @go(ServerAddressByClientCIDRs,[]ServerAddressByClientCIDR) @protobuf(4,bytes,rep)
 }
 
 // ServerAddressByClientCIDR helps the client to determine the server address that they should use, depending on the clientCIDR that they match.
-ServerAddressByClientCIDR :: {
+#ServerAddressByClientCIDR: {
 	// The CIDR with which clients can match their IP to figure out the server address that they should use.
 	clientCIDR: string @go(ClientCIDR) @protobuf(1,bytes,opt)
 
@@ -971,7 +971,7 @@
 
 // GroupVersion contains the "group/version" and "version" string of a version.
 // It is made a struct to keep extensibility.
-GroupVersionForDiscovery :: {
+#GroupVersionForDiscovery: {
 	// groupVersion specifies the API group and version in the form "group/version"
 	groupVersion: string @go(GroupVersion) @protobuf(1,bytes,opt)
 
@@ -981,7 +981,7 @@
 }
 
 // APIResource specifies the name of a resource and whether it is namespaced.
-APIResource :: {
+#APIResource: {
 	// name is the plural name of the resource.
 	name: string @go(Name) @protobuf(1,bytes,opt)
 
@@ -1006,7 +1006,7 @@
 
 	// verbs is a list of supported kube verbs (this includes get, list, watch, create,
 	// update, patch, delete, deletecollection, and proxy)
-	verbs: Verbs @go(Verbs) @protobuf(4,bytes,opt)
+	verbs: #Verbs @go(Verbs) @protobuf(4,bytes,opt)
 
 	// shortNames is a list of suggested short names of the resource.
 	shortNames?: [...string] @go(ShortNames,[]string) @protobuf(5,bytes,rep)
@@ -1029,36 +1029,36 @@
 //
 // +protobuf.nullable=true
 // +protobuf.options.(gogoproto.goproto_stringer)=false
-Verbs :: [...string]
+#Verbs: [...string]
 
 // APIResourceList is a list of APIResource, it is used to expose the name of the
 // resources supported in a specific group and version, and if the resource
 // is namespaced.
-APIResourceList :: {
-	TypeMeta
+#APIResourceList: {
+	#TypeMeta
 
 	// groupVersion is the group and version this APIResourceList is for.
 	groupVersion: string @go(GroupVersion) @protobuf(1,bytes,opt)
 
 	// resources contains the name of the resources and if they are namespaced.
-	resources: [...APIResource] @go(APIResources,[]APIResource) @protobuf(2,bytes,rep)
+	resources: [...#APIResource] @go(APIResources,[]APIResource) @protobuf(2,bytes,rep)
 }
 
 // RootPaths lists the paths available at root.
 // For example: "/healthz", "/apis".
-RootPaths :: {
+#RootPaths: {
 	// paths are the paths available at root.
 	paths: [...string] @go(Paths,[]string) @protobuf(1,bytes,rep)
 }
 
 // Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.
-Patch :: {
+#Patch: {
 }
 
 // A label selector is a label query over a set of resources. The result of matchLabels and
 // matchExpressions are ANDed. An empty label selector matches all objects. A null
 // label selector matches no objects.
-LabelSelector :: {
+#LabelSelector: {
 	// matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
 	// map is equivalent to an element of matchExpressions, whose key field is "key", the
 	// operator is "In", and the values array contains only "value". The requirements are ANDed.
@@ -1067,12 +1067,12 @@
 
 	// matchExpressions is a list of label selector requirements. The requirements are ANDed.
 	// +optional
-	matchExpressions?: [...LabelSelectorRequirement] @go(MatchExpressions,[]LabelSelectorRequirement) @protobuf(2,bytes,rep)
+	matchExpressions?: [...#LabelSelectorRequirement] @go(MatchExpressions,[]LabelSelectorRequirement) @protobuf(2,bytes,rep)
 }
 
 // A label selector requirement is a selector that contains values, a key, and an operator that
 // relates the key and values.
-LabelSelectorRequirement :: {
+#LabelSelectorRequirement: {
 	// key is the label key that the selector applies to.
 	// +patchMergeKey=key
 	// +patchStrategy=merge
@@ -1080,7 +1080,7 @@
 
 	// operator represents a key's relationship to a set of values.
 	// Valid operators are In, NotIn, Exists and DoesNotExist.
-	operator: LabelSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=LabelSelectorOperator)
+	operator: #LabelSelectorOperator @go(Operator) @protobuf(2,bytes,opt,casttype=LabelSelectorOperator)
 
 	// values is an array of string values. If the operator is In or NotIn,
 	// the values array must be non-empty. If the operator is Exists or DoesNotExist,
@@ -1091,28 +1091,28 @@
 }
 
 // A label selector operator is the set of operators that can be used in a selector requirement.
-LabelSelectorOperator :: string // enumLabelSelectorOperator
+#LabelSelectorOperator: string // #enumLabelSelectorOperator
 
-enumLabelSelectorOperator ::
-	LabelSelectorOpIn |
-	LabelSelectorOpNotIn |
-	LabelSelectorOpExists |
-	LabelSelectorOpDoesNotExist
+#enumLabelSelectorOperator:
+	#LabelSelectorOpIn |
+	#LabelSelectorOpNotIn |
+	#LabelSelectorOpExists |
+	#LabelSelectorOpDoesNotExist
 
-LabelSelectorOpIn ::           LabelSelectorOperator & "In"
-LabelSelectorOpNotIn ::        LabelSelectorOperator & "NotIn"
-LabelSelectorOpExists ::       LabelSelectorOperator & "Exists"
-LabelSelectorOpDoesNotExist :: LabelSelectorOperator & "DoesNotExist"
+#LabelSelectorOpIn:           #LabelSelectorOperator & "In"
+#LabelSelectorOpNotIn:        #LabelSelectorOperator & "NotIn"
+#LabelSelectorOpExists:       #LabelSelectorOperator & "Exists"
+#LabelSelectorOpDoesNotExist: #LabelSelectorOperator & "DoesNotExist"
 
 // ManagedFieldsEntry is a workflow-id, a FieldSet and the group version of the resource
 // that the fieldset applies to.
-ManagedFieldsEntry :: {
+#ManagedFieldsEntry: {
 	// Manager is an identifier of the workflow managing these fields.
 	manager?: string @go(Manager) @protobuf(1,bytes,opt)
 
 	// Operation is the type of operation which lead to this ManagedFieldsEntry being created.
 	// The only valid values for this field are 'Apply' and 'Update'.
-	operation?: ManagedFieldsOperationType @go(Operation) @protobuf(2,bytes,opt,casttype=ManagedFieldsOperationType)
+	operation?: #ManagedFieldsOperationType @go(Operation) @protobuf(2,bytes,opt,casttype=ManagedFieldsOperationType)
 
 	// APIVersion defines the version of this resource that this field set
 	// applies to. The format is "group/version" just like the top-level
@@ -1122,7 +1122,7 @@
 
 	// Time is timestamp of when these fields were set. It should always be empty if Operation is 'Apply'
 	// +optional
-	time?: null | Time @go(Time,*Time) @protobuf(4,bytes,opt)
+	time?: null | #Time @go(Time,*Time) @protobuf(4,bytes,opt)
 
 	// FieldsType is the discriminator for the different fields format and version.
 	// There is currently only one possible value: "FieldsV1"
@@ -1130,18 +1130,18 @@
 
 	// FieldsV1 holds the first JSON version format as described in the "FieldsV1" type.
 	// +optional
-	fieldsV1?: null | FieldsV1 @go(FieldsV1,*FieldsV1) @protobuf(7,bytes,opt)
+	fieldsV1?: null | #FieldsV1 @go(FieldsV1,*FieldsV1) @protobuf(7,bytes,opt)
 }
 
 // ManagedFieldsOperationType is the type of operation which lead to a ManagedFieldsEntry being created.
-ManagedFieldsOperationType :: string // enumManagedFieldsOperationType
+#ManagedFieldsOperationType: string // #enumManagedFieldsOperationType
 
-enumManagedFieldsOperationType ::
-	ManagedFieldsOperationApply |
-	ManagedFieldsOperationUpdate
+#enumManagedFieldsOperationType:
+	#ManagedFieldsOperationApply |
+	#ManagedFieldsOperationUpdate
 
-ManagedFieldsOperationApply ::  ManagedFieldsOperationType & "Apply"
-ManagedFieldsOperationUpdate :: ManagedFieldsOperationType & "Update"
+#ManagedFieldsOperationApply:  #ManagedFieldsOperationType & "Apply"
+#ManagedFieldsOperationUpdate: #ManagedFieldsOperationType & "Update"
 
 // FieldsV1 stores a set of fields in a data structure like a Trie, in JSON format.
 //
@@ -1154,31 +1154,31 @@
 // If a key maps to an empty Fields value, the field that key represents is part of the set.
 //
 // The exact format is defined in sigs.k8s.io/structured-merge-diff
-FieldsV1 :: _
+#FieldsV1: _
 
 // Table is a tabular representation of a set of API resources. The server transforms the
 // object into a set of preferred columns for quickly reviewing the objects.
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 // +protobuf=false
-Table :: {
-	TypeMeta
+#Table: {
+	#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: ListMeta @go(ListMeta)
+	metadata?: #ListMeta @go(ListMeta)
 
 	// columnDefinitions describes each column in the returned items array. The number of cells per row
 	// will always match the number of column definitions.
-	columnDefinitions: [...TableColumnDefinition] @go(ColumnDefinitions,[]TableColumnDefinition)
+	columnDefinitions: [...#TableColumnDefinition] @go(ColumnDefinitions,[]TableColumnDefinition)
 
 	// rows is the list of items in the table.
-	rows: [...TableRow] @go(Rows,[]TableRow)
+	rows: [...#TableRow] @go(Rows,[]TableRow)
 }
 
 // TableColumnDefinition contains information about a column returned in the Table.
 // +protobuf=false
-TableColumnDefinition :: {
+#TableColumnDefinition: {
 	// name is a human readable name for the column.
 	name: string @go(Name)
 
@@ -1205,7 +1205,7 @@
 
 // TableRow is an individual row in a table.
 // +protobuf=false
-TableRow :: {
+#TableRow: {
 	// cells will be as wide as the column definitions array and may contain strings, numbers (float64 or
 	// int64), booleans, simple maps, lists, or null. See the type field of the column definition for a
 	// more detailed description.
@@ -1216,7 +1216,7 @@
 	// condition type is 'Completed', for a row that indicates a resource that has run to completion and
 	// can be given less visual priority.
 	// +optional
-	conditions?: [...TableRowCondition] @go(Conditions,[]TableRowCondition)
+	conditions?: [...#TableRowCondition] @go(Conditions,[]TableRowCondition)
 
 	// This field contains the requested additional information about each object based on the includeObject
 	// policy when requesting the Table. If "None", this field is empty, if "Object" this will be the
@@ -1225,20 +1225,20 @@
 	// The media type of the object will always match the enclosing list - if this as a JSON table, these
 	// will be JSON encoded objects.
 	// +optional
-	object?: runtime.RawExtension @go(Object)
+	object?: runtime.#RawExtension @go(Object)
 }
 
 // TableRowCondition allows a row to be marked with additional information.
 // +protobuf=false
-TableRowCondition :: {
+#TableRowCondition: {
 	// Type of row condition. The only defined value is 'Completed' indicating that the
 	// object this row represents has reached a completed state and may be given less visual
 	// priority than other rows. Clients are not required to honor any conditions but should
 	// be consistent where possible about handling the conditions.
-	type: RowConditionType @go(Type)
+	type: #RowConditionType @go(Type)
 
 	// Status of the condition, one of True, False, Unknown.
-	status: ConditionStatus @go(Status)
+	status: #ConditionStatus @go(Status)
 
 	// (brief) machine readable reason for the condition's last transition.
 	// +optional
@@ -1249,78 +1249,78 @@
 	message?: string @go(Message)
 }
 
-RowConditionType :: string // enumRowConditionType
+#RowConditionType: string // #enumRowConditionType
 
-enumRowConditionType ::
-	RowCompleted
+#enumRowConditionType:
+	#RowCompleted
 
 // RowCompleted means the underlying resource has reached completion and may be given less
 // visual priority than other resources.
-RowCompleted :: RowConditionType & "Completed"
+#RowCompleted: #RowConditionType & "Completed"
 
-ConditionStatus :: string // enumConditionStatus
+#ConditionStatus: string // #enumConditionStatus
 
-enumConditionStatus ::
-	ConditionTrue |
-	ConditionFalse |
-	ConditionUnknown
+#enumConditionStatus:
+	#ConditionTrue |
+	#ConditionFalse |
+	#ConditionUnknown
 
-ConditionTrue ::    ConditionStatus & "True"
-ConditionFalse ::   ConditionStatus & "False"
-ConditionUnknown :: ConditionStatus & "Unknown"
+#ConditionTrue:    #ConditionStatus & "True"
+#ConditionFalse:   #ConditionStatus & "False"
+#ConditionUnknown: #ConditionStatus & "Unknown"
 
 // IncludeObjectPolicy controls which portion of the object is returned with a Table.
-IncludeObjectPolicy :: string // enumIncludeObjectPolicy
+#IncludeObjectPolicy: string // #enumIncludeObjectPolicy
 
-enumIncludeObjectPolicy ::
-	IncludeNone |
-	IncludeMetadata |
-	IncludeObject
+#enumIncludeObjectPolicy:
+	#IncludeNone |
+	#IncludeMetadata |
+	#IncludeObject
 
 // IncludeNone returns no object.
-IncludeNone :: IncludeObjectPolicy & "None"
+#IncludeNone: #IncludeObjectPolicy & "None"
 
 // IncludeMetadata serializes the object containing only its metadata field.
-IncludeMetadata :: IncludeObjectPolicy & "Metadata"
+#IncludeMetadata: #IncludeObjectPolicy & "Metadata"
 
 // IncludeObject contains the full object.
-IncludeObject :: IncludeObjectPolicy & "Object"
+#IncludeObject: #IncludeObjectPolicy & "Object"
 
 // TableOptions are used when a Table is requested by the caller.
 // +k8s:conversion-gen:explicit-from=net/url.Values
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-TableOptions :: {
-	TypeMeta
+#TableOptions: {
+	#TypeMeta
 
 	// includeObject decides whether to include each object along with its columnar information.
 	// Specifying "None" will return no object, specifying "Object" will return the full object contents, and
 	// specifying "Metadata" (the default) will return the object's metadata in the PartialObjectMetadata kind
 	// in version v1beta1 of the meta.k8s.io API group.
-	includeObject?: IncludeObjectPolicy @go(IncludeObject) @protobuf(1,bytes,opt,casttype=IncludeObjectPolicy)
+	includeObject?: #IncludeObjectPolicy @go(IncludeObject) @protobuf(1,bytes,opt,casttype=IncludeObjectPolicy)
 }
 
 // PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients
 // to get access to a particular ObjectMeta schema without knowing the details of the version.
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-PartialObjectMetadata :: {
-	TypeMeta
+#PartialObjectMetadata: {
+	#TypeMeta
 
 	// Standard object's metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
 	// +optional
-	metadata?: ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
+	metadata?: #ObjectMeta @go(ObjectMeta) @protobuf(1,bytes,opt)
 }
 
 // PartialObjectMetadataList contains a list of objects containing only their metadata
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-PartialObjectMetadataList :: {
-	TypeMeta
+#PartialObjectMetadataList: {
+	#TypeMeta
 
 	// Standard list metadata.
 	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
 	// +optional
-	metadata?: ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
+	metadata?: #ListMeta @go(ListMeta) @protobuf(1,bytes,opt)
 
 	// items contains each of the included items.
-	items: [...PartialObjectMetadata] @go(Items,[]PartialObjectMetadata) @protobuf(2,bytes,rep)
+	items: [...#PartialObjectMetadata] @go(Items,[]PartialObjectMetadata) @protobuf(2,bytes,rep)
 }
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/watch_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/watch_go_gen.cue
index 1874729..12f5f1b 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/watch_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/apis/meta/v1/watch_go_gen.cue
@@ -14,7 +14,7 @@
 // +protobuf=true
 // +k8s:deepcopy-gen=true
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
-WatchEvent :: {
+#WatchEvent: {
 	type: string @go(Type) @protobuf(1,bytes,opt)
 
 	// Object is:
@@ -22,9 +22,9 @@
 	//  * If Type is Deleted: the state of the object immediately before deletion.
 	//  * If Type is Error: *Status is recommended; other types may make sense
 	//    depending on context.
-	object: runtime.RawExtension @go(Object) @protobuf(2,bytes,opt)
+	object: runtime.#RawExtension @go(Object) @protobuf(2,bytes,opt)
 }
 
 // InternalEvent makes watch.Event versioned
 // +protobuf=false
-InternalEvent :: watch.Event
+#InternalEvent: watch.#Event
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/codec_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/codec_go_gen.cue
index 881c325..39bbb1f 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/codec_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/codec_go_gen.cue
@@ -5,11 +5,11 @@
 package runtime
 
 // NoopEncoder converts an Decoder to a Serializer or Codec for code that expects them but only uses decoding.
-NoopEncoder :: {
-	"Decoder": Decoder
+#NoopEncoder: {
+	Decoder: #Decoder
 }
 
 // NoopDecoder converts an Encoder to a Serializer or Codec for code that expects them but only uses encoding.
-NoopDecoder :: {
-	"Encoder": Encoder
+#NoopDecoder: {
+	Encoder: #Encoder
 }
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/converter_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/converter_go_gen.cue
index 71b3fec..f49ad1e 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/converter_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/converter_go_gen.cue
@@ -6,4 +6,4 @@
 
 // UnstructuredConverter is an interface for converting between interface{}
 // and map[string]interface representation.
-UnstructuredConverter :: _
+#UnstructuredConverter: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/helper_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/helper_go_gen.cue
index ace575c..8d5ecee 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/helper_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/helper_go_gen.cue
@@ -5,16 +5,16 @@
 package runtime
 
 // MultiObjectTyper returns the types of objects across multiple schemes in order.
-MultiObjectTyper :: [...ObjectTyper]
+#MultiObjectTyper: [...#ObjectTyper]
 
 // WithVersionEncoder serializes an object and ensures the GVK is set.
-WithVersionEncoder :: {
-	Version:       GroupVersioner
-	"Encoder":     Encoder
-	"ObjectTyper": ObjectTyper
+#WithVersionEncoder: {
+	Version:     #GroupVersioner
+	Encoder:     #Encoder
+	ObjectTyper: #ObjectTyper
 }
 
 // WithoutVersionDecoder clears the group version kind of a deserialized object.
-WithoutVersionDecoder :: {
-	"Decoder": Decoder
+#WithoutVersionDecoder: {
+	Decoder: #Decoder
 }
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/interfaces_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/interfaces_go_gen.cue
index a673d37..f34d761 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/interfaces_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/interfaces_go_gen.cue
@@ -7,44 +7,44 @@
 // APIVersionInternal may be used if you are registering a type that should not
 // be considered stable or serialized - it is a convention only and has no
 // special behavior in this package.
-APIVersionInternal :: "__internal"
+#APIVersionInternal: "__internal"
 
 // GroupVersioner refines a set of possible conversion targets into a single option.
-GroupVersioner :: _
+#GroupVersioner: _
 
 // Identifier represents an identifier.
 // Identitier of two different objects should be equal if and only if for every
 // input the output they produce is exactly the same.
-Identifier :: string // enumIdentifier
+#Identifier: string // #enumIdentifier
 
-enumIdentifier ::
-	noopEncoderIdentifier
+#enumIdentifier:
+	_#noopEncoderIdentifier
 
 // Encoder writes objects to a serialized form
-Encoder :: _
+#Encoder: _
 
 // Decoder attempts to load an object from data.
-Decoder :: _
+#Decoder: _
 
 // Serializer is the core interface for transforming objects into a serialized format and back.
 // Implementations may choose to perform conversion of the object, but no assumptions should be made.
-Serializer :: _
+#Serializer: _
 
 // Codec is a Serializer that deals with the details of versioning objects. It offers the same
 // interface as Serializer, so this is a marker to consumers that care about the version of the objects
 // they receive.
-Codec :: Serializer
+#Codec: #Serializer
 
 // ParameterCodec defines methods for serializing and deserializing API objects to url.Values and
 // performing any necessary conversion. Unlike the normal Codec, query parameters are not self describing
 // and the desired version must be specified.
-ParameterCodec :: _
+#ParameterCodec: _
 
 // Framer is a factory for creating readers and writers that obey a particular framing pattern.
-Framer :: _
+#Framer: _
 
 // SerializerInfo contains information about a specific serialization format
-SerializerInfo :: {
+#SerializerInfo: {
 	// MediaType is the value that represents this serializer over the wire.
 	MediaType: string
 
@@ -58,90 +58,90 @@
 	EncodesAsText: bool
 
 	// Serializer is the individual object serializer for this media type.
-	"Serializer": Serializer
+	Serializer: #Serializer
 
 	// PrettySerializer, if set, can serialize this object in a form biased towards
 	// readability.
-	PrettySerializer: Serializer
+	PrettySerializer: #Serializer
 
 	// StreamSerializer, if set, describes the streaming serialization format
 	// for this media type.
-	StreamSerializer?: null | StreamSerializerInfo @go(,*StreamSerializerInfo)
+	StreamSerializer?: null | #StreamSerializerInfo @go(,*StreamSerializerInfo)
 }
 
 // StreamSerializerInfo contains information about a specific stream serialization format
-StreamSerializerInfo :: {
+#StreamSerializerInfo: {
 	// EncodesAsText indicates this serializer can be encoded to UTF-8 safely.
 	EncodesAsText: bool
 
 	// Serializer is the top level object serializer for this type when streaming
-	"Serializer": Serializer
+	Serializer: #Serializer
 
 	// Framer is the factory for retrieving streams that separate objects on the wire
-	"Framer": Framer
+	Framer: #Framer
 }
 
 // NegotiatedSerializer is an interface used for obtaining encoders, decoders, and serializers
 // for multiple supported media types. This would commonly be accepted by a server component
 // that performs HTTP content negotiation to accept multiple formats.
-NegotiatedSerializer :: _
+#NegotiatedSerializer: _
 
 // ClientNegotiator handles turning an HTTP content type into the appropriate encoder.
 // Use NewClientNegotiator or NewVersionedClientNegotiator to create this interface from
 // a NegotiatedSerializer.
-ClientNegotiator :: _
+#ClientNegotiator: _
 
 // StorageSerializer is an interface used for obtaining encoders, decoders, and serializers
 // that can read and write data at rest. This would commonly be used by client tools that must
 // read files, or server side storage interfaces that persist restful objects.
-StorageSerializer :: _
+#StorageSerializer: _
 
 // NestedObjectEncoder is an optional interface that objects may implement to be given
 // an opportunity to encode any nested Objects / RawExtensions during serialization.
-NestedObjectEncoder :: _
+#NestedObjectEncoder: _
 
 // NestedObjectDecoder is an optional interface that objects may implement to be given
 // an opportunity to decode any nested Objects / RawExtensions during serialization.
-NestedObjectDecoder :: _
+#NestedObjectDecoder: _
 
-ObjectDefaulter :: _
+#ObjectDefaulter: _
 
-ObjectVersioner :: _
+#ObjectVersioner: _
 
 // ObjectConvertor converts an object to a different version.
-ObjectConvertor :: _
+#ObjectConvertor: _
 
 // ObjectTyper contains methods for extracting the APIVersion and Kind
 // of objects.
-ObjectTyper :: _
+#ObjectTyper: _
 
 // ObjectCreater contains methods for instantiating an object by kind and version.
-ObjectCreater :: _
+#ObjectCreater: _
 
 // EquivalentResourceMapper provides information about resources that address the same underlying data as a specified resource
-EquivalentResourceMapper :: _
+#EquivalentResourceMapper: _
 
 // EquivalentResourceRegistry provides an EquivalentResourceMapper interface,
 // and allows registering known resource[/subresource] -> kind
-EquivalentResourceRegistry :: _
+#EquivalentResourceRegistry: _
 
 // ResourceVersioner provides methods for setting and retrieving
 // the resource version from an API object.
-ResourceVersioner :: _
+#ResourceVersioner: _
 
 // SelfLinker provides methods for setting and retrieving the SelfLink field of an API object.
-SelfLinker :: _
+#SelfLinker: _
 
 // Object interface must be supported by all API types registered with Scheme. Since objects in a scheme are
 // expected to be serialized to the wire, the interface an Object must provide to the Scheme allows
 // serializers to set the kind, version, and group the object is represented as. An Object may choose
 // to return a no-op ObjectKindAccessor in cases where it is not expected to be serialized.
-Object :: _
+#Object: _
 
 // CacheableObject allows an object to cache its different serializations
 // to avoid performing the same serialization multiple times.
-CacheableObject :: _
+#CacheableObject: _
 
 // Unstructured objects store values as map[string]interface{}, with only values that can be serialized
 // to JSON allowed.
-Unstructured :: _
+#Unstructured: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/negotiate_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/negotiate_go_gen.cue
index 50756a8..7580f46 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/negotiate_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/negotiate_go_gen.cue
@@ -6,7 +6,7 @@
 
 // NegotiateError is returned when a ClientNegotiator is unable to locate
 // a serializer for the requested operation.
-NegotiateError :: {
+#NegotiateError: {
 	ContentType: string
 	Stream:      bool
 }
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator_go_gen.cue
index 06820e8..9dfc078 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/swagger_doc_generator_go_gen.cue
@@ -5,10 +5,10 @@
 package runtime
 
 // Pair of strings. We keed the name of fields and the doc
-Pair :: {
+#Pair: {
 	Name: string
 	Doc:  string
 }
 
 // KubeTypes is an array to represent all available types in a parsed file. [0] is for the type itself
-KubeTypes :: [...Pair]
+#KubeTypes: [...#Pair]
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_go_gen.cue
index 172de66..7a2b8e5 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_go_gen.cue
@@ -18,7 +18,7 @@
 // +k8s:deepcopy-gen=false
 // +protobuf=true
 // +k8s:openapi-gen=true
-TypeMeta :: {
+#TypeMeta: {
 	// +optional
 	apiVersion?: string @go(APIVersion) @protobuf(1,bytes,opt)
 
@@ -26,9 +26,9 @@
 	kind?: string @go(Kind) @protobuf(2,bytes,opt)
 }
 
-ContentTypeJSON ::     "application/json"
-ContentTypeYAML ::     "application/yaml"
-ContentTypeProtobuf :: "application/vnd.kubernetes.protobuf"
+#ContentTypeJSON:     "application/json"
+#ContentTypeYAML:     "application/yaml"
+#ContentTypeProtobuf: "application/vnd.kubernetes.protobuf"
 
 // RawExtension is used to hold extensions in external versions.
 //
@@ -75,7 +75,7 @@
 // +k8s:deepcopy-gen=true
 // +protobuf=true
 // +k8s:openapi-gen=true
-RawExtension :: _
+#RawExtension: _
 
 // Unknown allows api objects with unknown types to be passed-through. This can be used
 // to deal with the API objects from a plug-in. Unknown objects still have functioning
@@ -87,4 +87,4 @@
 // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
 // +protobuf=true
 // +k8s:openapi-gen=true
-Unknown :: _
+#Unknown: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_proto_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_proto_go_gen.cue
index 50626df..8b8ddf8 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_proto_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/runtime/types_proto_go_gen.cue
@@ -4,6 +4,6 @@
 
 package runtime
 
-ProtobufMarshaller :: _
+#ProtobufMarshaller: _
 
-ProtobufReverseMarshaller :: _
+#ProtobufReverseMarshaller: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/namespacedname_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/namespacedname_go_gen.cue
index f308da9..7cb2745 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/namespacedname_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/namespacedname_go_gen.cue
@@ -4,9 +4,9 @@
 
 package types
 
-NamespacedName :: {
+#NamespacedName: {
 	Namespace: string
 	Name:      string
 }
 
-Separator :: 47 // '/'
+#Separator: 47 // '/'
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/nodename_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/nodename_go_gen.cue
index 5289541..c45c603 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/nodename_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/nodename_go_gen.cue
@@ -28,4 +28,4 @@
 //   For AWS, the InstanceID is not yet suitable for use as a Node.Name, so we actually use the
 //   PrivateDnsName for the Node.Name.  And this is _not_ always the same as the hostname: if
 //   we are using a custom DHCP domain it won't be.
-NodeName :: string
+#NodeName: string
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/patch_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/patch_go_gen.cue
index 76eeff8..3de5d80 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/patch_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/patch_go_gen.cue
@@ -7,15 +7,15 @@
 // Similarly to above, these are constants to support HTTP PATCH utilized by
 // both the client and server that didn't make sense for a whole package to be
 // dedicated to.
-PatchType :: string // enumPatchType
+#PatchType: string // #enumPatchType
 
-enumPatchType ::
-	JSONPatchType |
-	MergePatchType |
-	StrategicMergePatchType |
-	ApplyPatchType
+#enumPatchType:
+	#JSONPatchType |
+	#MergePatchType |
+	#StrategicMergePatchType |
+	#ApplyPatchType
 
-JSONPatchType ::           PatchType & "application/json-patch+json"
-MergePatchType ::          PatchType & "application/merge-patch+json"
-StrategicMergePatchType :: PatchType & "application/strategic-merge-patch+json"
-ApplyPatchType ::          PatchType & "application/apply-patch+yaml"
+#JSONPatchType:           #PatchType & "application/json-patch+json"
+#MergePatchType:          #PatchType & "application/merge-patch+json"
+#StrategicMergePatchType: #PatchType & "application/strategic-merge-patch+json"
+#ApplyPatchType:          #PatchType & "application/apply-patch+yaml"
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/uid_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/uid_go_gen.cue
index fbd0932..40bdd82 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/uid_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/types/uid_go_gen.cue
@@ -7,4 +7,4 @@
 // UID is a type that holds unique ID values, including UUIDs.  Because we
 // don't ONLY use UUIDs, this is an alias to string.  Being a type captures
 // intent and helps make sure that UIDs and names do not get conflated.
-UID :: string
+#UID: string
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/util/intstr/intstr_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/util/intstr/intstr_go_gen.cue
index 904500d..879f4d4 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/util/intstr/intstr_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/util/intstr/intstr_go_gen.cue
@@ -13,14 +13,14 @@
 // +protobuf=true
 // +protobuf.options.(gogoproto.goproto_stringer)=false
 // +k8s:openapi-gen=true
-IntOrString :: _
+#IntOrString: _
 
 // Type represents the stored type of IntOrString.
-Type :: int64 // enumType
+#Type: int64 // #enumType
 
-enumType ::
-	Int |
-	String
+#enumType:
+	#Int |
+	#String
 
-Int ::    Type & 0
-String :: Type & 1
+#Int:    #Type & 0
+#String: #Type & 1
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/filter_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/filter_go_gen.cue
index 244baae..045e8ec 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/filter_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/filter_go_gen.cue
@@ -5,6 +5,6 @@
 package watch
 
 // Recorder records all events that are sent from the watch until it is closed.
-Recorder :: {
-	"Interface": Interface
+#Recorder: {
+	Interface: #Interface
 }
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/mux_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/mux_go_gen.cue
index e37e769..46d1c89 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/mux_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/mux_go_gen.cue
@@ -6,11 +6,11 @@
 
 // FullChannelBehavior controls how the Broadcaster reacts if a watcher's watch
 // channel is full.
-FullChannelBehavior :: int // enumFullChannelBehavior
+#FullChannelBehavior: int // #enumFullChannelBehavior
 
-enumFullChannelBehavior ::
-	WaitIfChannelFull |
-	DropIfChannelFull
+#enumFullChannelBehavior:
+	#WaitIfChannelFull |
+	#DropIfChannelFull
 
-WaitIfChannelFull :: FullChannelBehavior & 0
-DropIfChannelFull :: FullChannelBehavior & 1
+#WaitIfChannelFull: #FullChannelBehavior & 0
+#DropIfChannelFull: #FullChannelBehavior & 1
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/streamwatcher_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/streamwatcher_go_gen.cue
index ac496d2..f0805cf 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/streamwatcher_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/streamwatcher_go_gen.cue
@@ -5,8 +5,8 @@
 package watch
 
 // Decoder allows StreamWatcher to watch any stream for which a Decoder can be written.
-Decoder :: _
+#Decoder: _
 
 // Reporter hides the details of how an error is turned into a runtime.Object for
 // reporting on a watch stream since this package may not import a higher level report.
-Reporter :: _
+#Reporter: _
diff --git a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/watch_go_gen.cue b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/watch_go_gen.cue
index acc7cf3..4c837a1 100644
--- a/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/watch_go_gen.cue
+++ b/doc/tutorial/kubernetes/quick/cue.mod/gen/k8s.io/apimachinery/pkg/watch/watch_go_gen.cue
@@ -7,29 +7,29 @@
 import "k8s.io/apimachinery/pkg/runtime"
 
 // Interface can be implemented by anything that knows how to watch and report changes.
-Interface :: _
+#Interface: _
 
 // EventType defines the possible types of events.
-EventType :: string // enumEventType
+#EventType: string // #enumEventType
 
-enumEventType ::
-	Added |
-	Modified |
-	Deleted |
-	Bookmark |
-	Error
+#enumEventType:
+	#Added |
+	#Modified |
+	#Deleted |
+	#Bookmark |
+	#Error
 
-Added ::           EventType & "ADDED"
-Modified ::        EventType & "MODIFIED"
-Deleted ::         EventType & "DELETED"
-Bookmark ::        EventType & "BOOKMARK"
-Error ::           EventType & "ERROR"
-DefaultChanSize :: int32 & 100
+#Added:           #EventType & "ADDED"
+#Modified:        #EventType & "MODIFIED"
+#Deleted:         #EventType & "DELETED"
+#Bookmark:        #EventType & "BOOKMARK"
+#Error:           #EventType & "ERROR"
+#DefaultChanSize: int32 & 100
 
 // Event represents a single event to a watched resource.
 // +k8s:deepcopy-gen=true
-Event :: {
-	Type: EventType
+#Event: {
+	Type: #EventType
 
 	// Object is:
 	//  * If Type is Added or Modified: the new state of the object.
@@ -40,10 +40,10 @@
 	//    nor miss any events.
 	//  * If Type is Error: *api.Status is recommended; other types may make sense
 	//    depending on context.
-	Object: runtime.Object
+	Object: runtime.#Object
 }
 
 // RaceFreeFakeWatcher lets you test anything that consumes a watch.Interface; threadsafe.
-RaceFreeFakeWatcher :: {
+#RaceFreeFakeWatcher: {
 	Stopped: bool
 }
diff --git a/doc/tutorial/kubernetes/quick/services/frontend/kube.cue b/doc/tutorial/kubernetes/quick/services/frontend/kube.cue
index 6cea719..488c771 100644
--- a/doc/tutorial/kubernetes/quick/services/frontend/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/frontend/kube.cue
@@ -1,6 +1,6 @@
 package kube
 
-Component :: "frontend"
+#Component: "frontend"
 
 deployment: [string]: spec: template: {
 	metadata: annotations: {
diff --git a/doc/tutorial/kubernetes/quick/services/infra/kube.cue b/doc/tutorial/kubernetes/quick/services/infra/kube.cue
index 3403c30..312c5b9 100644
--- a/doc/tutorial/kubernetes/quick/services/infra/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/infra/kube.cue
@@ -1,3 +1,3 @@
 package kube
 
-Component :: "infra"
+#Component: "infra"
diff --git a/doc/tutorial/kubernetes/quick/services/k8s_defs.cue b/doc/tutorial/kubernetes/quick/services/k8s_defs.cue
index c87bb23..d20358c 100644
--- a/doc/tutorial/kubernetes/quick/services/k8s_defs.cue
+++ b/doc/tutorial/kubernetes/quick/services/k8s_defs.cue
@@ -5,7 +5,7 @@
   apps_v1 "k8s.io/api/apps/v1"
 )
 
-service: [string]:     v1.Service
-deployment: [string]:  apps_v1.Deployment
-daemonSet: [string]:   apps_v1.DaemonSet
-statefulSet: [string]: apps_v1.StatefulSet
+service: [string]:     v1.#Service
+deployment: [string]:  apps_v1.#Deployment
+daemonSet: [string]:   apps_v1.#DaemonSet
+statefulSet: [string]: apps_v1.#StatefulSet
diff --git a/doc/tutorial/kubernetes/quick/services/kitchen/kube.cue b/doc/tutorial/kubernetes/quick/services/kitchen/kube.cue
index 5b77d2a..c4690b1 100644
--- a/doc/tutorial/kubernetes/quick/services/kitchen/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/kitchen/kube.cue
@@ -1,6 +1,6 @@
 package kube
 
-Component :: "kitchen"
+#Component: "kitchen"
 
 deployment: [string]: spec: template: {
 	metadata: annotations: "prometheus.io.scrape": "true"
@@ -20,10 +20,10 @@
 }
 
 deployment: [ID=_]: spec: template: spec: {
-	hasDisks :: *true | bool
+	_hasDisks: *true | bool
 
 	// field comprehension using just "if"
-	if hasDisks {
+	if _hasDisks {
 		volumes: [{
 			name: *"\(ID)-disk" | string
 			gcePersistentDisk: pdName: *"\(ID)-disk" | string
diff --git a/doc/tutorial/kubernetes/quick/services/kitchen/souschef/kube.cue b/doc/tutorial/kubernetes/quick/services/kitchen/souschef/kube.cue
index e7c178f..3d035f4 100644
--- a/doc/tutorial/kubernetes/quick/services/kitchen/souschef/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/kitchen/souschef/kube.cue
@@ -4,4 +4,4 @@
 	image: "gcr.io/myproj/souschef:v0.5.3"
 }]
 
-deployment: souschef: spec: template: spec: hasDisks :: false
+deployment: souschef: spec: template: spec: _hasDisks: false
diff --git a/doc/tutorial/kubernetes/quick/services/kube.cue b/doc/tutorial/kubernetes/quick/services/kube.cue
index fee8edb..0ffedc7 100644
--- a/doc/tutorial/kubernetes/quick/services/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/kube.cue
@@ -6,9 +6,9 @@
 	metadata: {
 		name: ID
 		labels: {
-			app:       ID        // by convention
-			domain:    "prod"    // always the same in the given files
-			component: Component // varies per directory
+			app:       ID         // by convention
+			domain:    "prod"     // always the same in the given files
+			component: #Component // varies per directory
 		}
 	}
 	spec: {
@@ -33,7 +33,7 @@
 			metadata: labels: {
 				app:       ID
 				domain:    "prod"
-				component: Component
+				component: #Component
 			}
 			// we always have one namesake container
 			spec: containers: [{name: ID}]
@@ -41,45 +41,45 @@
 	}
 }
 
-Component :: string
+#Component: string
 
 daemonSet: [ID=_]: _spec & {
 	apiVersion: "apps/v1"
 	kind:       "DaemonSet"
-	Name ::     ID
+	_name:      ID
 }
 
 statefulSet: [ID=_]: _spec & {
 	apiVersion: "apps/v1"
 	kind:       "StatefulSet"
-	Name ::     ID
+	_name:      ID
 }
 
 deployment: [ID=_]: _spec & {
 	apiVersion: "apps/v1"
 	kind:       "Deployment"
-	Name ::     ID
+	_name:      ID
 	spec: replicas: *1 | int
 }
 
 configMap: [ID=_]: {
 	metadata: name: ID
-	metadata: labels: component: Component
+	metadata: labels: component: #Component
 }
 
 _spec: {
-	Name :: string
+	_name: string
 
-	metadata: name: Name
-	metadata: labels: component: Component
+	metadata: name: _name
+	metadata: labels: component: #Component
 	spec: selector: {}
 	spec: template: {
 		metadata: labels: {
-			app:       Name
-			component: Component
+			app:       _name
+			component: #Component
 			domain:    "prod"
 		}
-		spec: containers: [{name: Name}]
+		spec: containers: [{name: _name}]
 	}
 }
 
diff --git a/doc/tutorial/kubernetes/quick/services/mon/kube.cue b/doc/tutorial/kubernetes/quick/services/mon/kube.cue
index 1db3b13..b270252 100644
--- a/doc/tutorial/kubernetes/quick/services/mon/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/mon/kube.cue
@@ -1,3 +1,3 @@
 package kube
 
-Component :: "mon"
+#Component: "mon"
diff --git a/doc/tutorial/kubernetes/quick/services/proxy/kube.cue b/doc/tutorial/kubernetes/quick/services/proxy/kube.cue
index 2c4dc2e..177d385 100644
--- a/doc/tutorial/kubernetes/quick/services/proxy/kube.cue
+++ b/doc/tutorial/kubernetes/quick/services/proxy/kube.cue
@@ -1,3 +1,3 @@
 package kube
 
-Component :: "proxy"
+#Component: "proxy"
diff --git a/doc/tutorial/kubernetes/testdata/quick.out b/doc/tutorial/kubernetes/testdata/quick.out
index a678e55..d62eb2a 100644
--- a/doc/tutorial/kubernetes/testdata/quick.out
+++ b/doc/tutorial/kubernetes/testdata/quick.out
@@ -3,9 +3,8 @@
 deployment: {}
 daemonSet: {}
 statefulSet: {}
-Component :: string
+#Component: string
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -30,15 +29,15 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {}
 deployment: {}
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -63,6 +62,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -94,7 +94,6 @@
 }
 deployment: {
     bartender: {
-        Name ::     "bartender"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -131,13 +130,13 @@
             }
             replicas: 1
         }
+        _name: "bartender"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -162,6 +161,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -193,7 +193,6 @@
 }
 deployment: {
     breaddispatcher: {
-        Name ::     "breaddispatcher"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -230,13 +229,13 @@
             }
             replicas: 1
         }
+        _name: "breaddispatcher"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -261,6 +260,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -292,7 +292,6 @@
 }
 deployment: {
     host: {
-        Name ::     "host"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -329,13 +328,13 @@
             }
             replicas: 2
         }
+        _name: "host"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -360,6 +359,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -391,7 +391,6 @@
 }
 deployment: {
     maitred: {
-        Name ::     "maitred"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -428,13 +427,13 @@
             }
             replicas: 1
         }
+        _name: "maitred"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -459,6 +458,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -490,7 +490,6 @@
 }
 deployment: {
     valeter: {
-        Name ::     "valeter"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -527,13 +526,13 @@
             }
             replicas: 1
         }
+        _name: "valeter"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -558,6 +557,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -589,7 +589,6 @@
 }
 deployment: {
     waiter: {
-        Name ::     "waiter"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -625,13 +624,13 @@
             }
             replicas: 5
         }
+        _name: "waiter"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -656,6 +655,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -687,7 +687,6 @@
 }
 deployment: {
     waterdispatcher: {
-        Name ::     "waterdispatcher"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -724,13 +723,13 @@
             }
             replicas: 1
         }
+        _name: "waterdispatcher"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "frontend"
+#Component: "frontend"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -755,15 +754,15 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {}
 deployment: {}
 daemonSet: {}
 statefulSet: {}
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -788,6 +787,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -819,7 +819,6 @@
 }
 deployment: {
     download: {
-        Name ::     "download"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -851,13 +850,13 @@
             }
             replicas: 1
         }
+        _name: "download"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -882,6 +881,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -921,7 +921,6 @@
 daemonSet: {}
 statefulSet: {
     etcd: {
-        Name ::     "etcd"
         kind:       "StatefulSet"
         apiVersion: "apps/v1"
         metadata: {
@@ -1028,11 +1027,11 @@
             }]
             serviceName: "etcd"
         }
+        _name: "etcd"
     }
 }
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1057,6 +1056,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1088,7 +1088,6 @@
 }
 deployment: {
     events: {
-        Name ::     "events"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1152,13 +1151,13 @@
             }
             replicas: 2
         }
+        _name: "events"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1183,6 +1182,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1216,7 +1216,6 @@
 }
 deployment: {
     tasks: {
-        Name ::     "tasks"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1265,13 +1264,13 @@
             }
             replicas: 1
         }
+        _name: "tasks"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1296,6 +1295,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1327,7 +1327,6 @@
 }
 deployment: {
     updater: {
-        Name ::     "updater"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1370,13 +1369,13 @@
             }
             replicas: 1
         }
+        _name: "updater"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1401,6 +1400,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1434,7 +1434,6 @@
 }
 deployment: {
     watcher: {
-        Name ::     "watcher"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1479,13 +1478,13 @@
             }
             replicas: 1
         }
+        _name: "watcher"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "infra"
+#Component: "infra"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1510,15 +1509,15 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {}
 deployment: {}
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1543,6 +1542,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1574,7 +1574,6 @@
 }
 deployment: {
     caller: {
-        Name ::     "caller"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1643,18 +1642,18 @@
                             }
                         }
                     }]
-                    hasDisks :: true
+                    _hasDisks: true
                 }
             }
             replicas: 3
         }
+        _name: "caller"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1679,6 +1678,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1710,7 +1710,6 @@
 }
 deployment: {
     dishwasher: {
-        Name ::     "dishwasher"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1779,18 +1778,18 @@
                             }
                         }
                     }]
-                    hasDisks :: true
+                    _hasDisks: true
                 }
             }
             replicas: 5
         }
+        _name: "dishwasher"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1815,6 +1814,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1846,7 +1846,6 @@
 }
 deployment: {
     expiditer: {
-        Name ::     "expiditer"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -1906,18 +1905,18 @@
                             }
                         }
                     }]
-                    hasDisks :: true
+                    _hasDisks: true
                 }
             }
             replicas: 1
         }
+        _name: "expiditer"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -1942,6 +1941,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -1973,7 +1973,6 @@
 }
 deployment: {
     headchef: {
-        Name ::     "headchef"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -2033,18 +2032,18 @@
                             }
                         }
                     }]
-                    hasDisks :: true
+                    _hasDisks: true
                 }
             }
             replicas: 1
         }
+        _name: "headchef"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2069,6 +2068,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -2100,7 +2100,6 @@
 }
 deployment: {
     linecook: {
-        Name ::     "linecook"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -2160,18 +2159,18 @@
                             }
                         }
                     }]
-                    hasDisks :: true
+                    _hasDisks: true
                 }
             }
             replicas: 1
         }
+        _name: "linecook"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2196,6 +2195,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -2227,7 +2227,6 @@
 }
 deployment: {
     pastrychef: {
-        Name ::     "pastrychef"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -2287,18 +2286,18 @@
                             }
                         }
                     }]
-                    hasDisks :: true
+                    _hasDisks: true
                 }
             }
             replicas: 1
         }
+        _name: "pastrychef"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2323,6 +2322,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -2354,7 +2354,6 @@
 }
 deployment: {
     souschef: {
-        Name ::     "souschef"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -2393,18 +2392,18 @@
                             }
                         }
                     }]
-                    hasDisks :: false
+                    _hasDisks: false
                 }
             }
             replicas: 1
         }
+        _name: "souschef"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "kitchen"
+#Component: "kitchen"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2429,15 +2428,15 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {}
 deployment: {}
 daemonSet: {}
 statefulSet: {}
-Component :: "mon"
+#Component: "mon"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2462,6 +2461,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {
     alertmanager: {
@@ -2528,7 +2528,6 @@
 }
 deployment: {
     alertmanager: {
-        Name ::     "alertmanager"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -2583,13 +2582,13 @@
             }
             replicas: 1
         }
+        _name: "alertmanager"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "mon"
+#Component: "mon"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2614,6 +2613,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -2645,7 +2645,6 @@
 }
 deployment: {
     grafana: {
-        Name ::     "grafana"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -2709,13 +2708,13 @@
             }
             replicas: 1
         }
+        _name: "grafana"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "mon"
+#Component: "mon"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2740,6 +2739,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -2777,7 +2777,6 @@
 deployment: {}
 daemonSet: {
     "node-exporter": {
-        Name ::     "node-exporter"
         kind:       "DaemonSet"
         apiVersion: "apps/v1"
         metadata: {
@@ -2844,12 +2843,12 @@
                 }
             }
         }
+        _name: "node-exporter"
     }
 }
 statefulSet: {}
-Component :: "mon"
+#Component: "mon"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -2874,6 +2873,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {
     prometheus: {
@@ -3152,7 +3152,6 @@
 }
 deployment: {
     prometheus: {
-        Name ::     "prometheus"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -3211,13 +3210,13 @@
                 }
             }
         }
+        _name: "prometheus"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "mon"
+#Component: "mon"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -3242,15 +3241,15 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {}
 deployment: {}
 daemonSet: {}
 statefulSet: {}
-Component :: "proxy"
+#Component: "proxy"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -3275,6 +3274,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {
     authproxy: {
@@ -3372,7 +3372,6 @@
 }
 deployment: {
     authproxy: {
-        Name ::     "authproxy"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -3415,13 +3414,13 @@
             }
             replicas: 1
         }
+        _name: "authproxy"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "proxy"
+#Component: "proxy"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -3446,6 +3445,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {}
 service: {
@@ -3479,7 +3479,6 @@
 }
 deployment: {
     goget: {
-        Name ::     "goget"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -3521,13 +3520,13 @@
             }
             replicas: 1
         }
+        _name: "goget"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "proxy"
+#Component: "proxy"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -3552,6 +3551,7 @@
             }
         }
     }
+    _name: string
 }
 configMap: {
     nginx: {
@@ -3757,7 +3757,6 @@
 }
 deployment: {
     nginx: {
-        Name ::     "nginx"
         kind:       "Deployment"
         apiVersion: "apps/v1"
         metadata: {
@@ -3811,13 +3810,13 @@
             }
             replicas: 1
         }
+        _name: "nginx"
     }
 }
 daemonSet: {}
 statefulSet: {}
-Component :: "proxy"
+#Component: "proxy"
 _spec: {
-    Name :: string
     metadata: {
         name: string
         labels: {
@@ -3842,4 +3841,5 @@
             }
         }
     }
+    _name: string
 }
\ No newline at end of file