diff --git a/go/test/plan/v1/plan.pb.go b/go/test/plan/v1/plan.pb.go
index b5e39fb..3a78e97 100644
--- a/go/test/plan/v1/plan.pb.go
+++ b/go/test/plan/v1/plan.pb.go
@@ -229,6 +229,9 @@
 }
 
 // Specifies a particular set of tests to be run to meet specific conditions.
+//
+// TODO(pprabhu): Add a full example showcasing test_constraints,
+// dut_coverage_consraints and exclusions together.
 type Unit struct {
 	// A globally unique test plan unit name.
 	//
@@ -368,10 +371,6 @@
 	//     && "crosbolt_perbuild" in test.attributes
 	// - network Tauto tests, selected by name
 	//     test.name.startsWith("network_")
-	//
-	// ## CEL support
-	//
-	// All standard CEL syntax, macros and functions MUST be supported.
 	Expression           string   `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -484,9 +483,6 @@
 	//   - Additionally available with the short-hand `fleet.*`
 	//
 	// The full CEL spec can be found at https://github.com/google/cel-spec.
-	// This API only supports a sub-set of the CEL features as described here.
-	// Test Platform MUST validate the expression and reject use of unsupported
-	// features.
 	//
 	// TODO(crbug.com/1051689) Add reference to the metadata validator package.
 	//
@@ -494,17 +490,13 @@
 	//
 	// Typical instructive examples of expressions are:
 	//
-	// - Constraints: All pre-F20 plans only specify constraints on what devices
-	//   may be used, e.g.:
-	//    - Run each test on one DUT with model 'nautilus'.
-	//        TODO(pprabhu, shapiroc): Need a way to specify model for migration.
-	//        duts.all(dut, dut.id.model_id.value = 'nautilus') && size(duts) == 1
+	// - Constraints:
 	//    - Run each test on one DUT with a stylus.
 	//        (duts.all(dut, dut.hardware_features.stylus
 	//                       == api.HardwareFeatures.Present.PRESENT))
 	//         && size(duts) == 1)
-	//  - Fanout (not yet supported): In addition to constraints, the
-	//    plan may want to ensure coverage across some device features.
+	//  - Fanout: In addition to constraints, the plan may want to ensure coverage
+	//    across some device features.
 	//    TODO(pprabhu) This is an instructive example. We can't say what arch
 	//    yet.
 	//    - Run each test on one x86 and ARM DUT with a specific camera.
@@ -520,70 +512,6 @@
 	//      devices, even though it passed on other devices in the set such that
 	//      the expression was satsifed by the passing subset. Selection of a
 	//      minimal set of devices to run the plan is best effort.
-	//
-	// Currently, only single-DUT constraints are supported by the Test Platform.
-	// i.e., `expression` MUST be of the form:
-	//   duts.all(DUT_SELECTOR) && size(duts) == 1
-	// where DUT_SELECTOR is an expression that does not refer to `duts`.
-	// This restriction will be lifted as this API matures.
-	//
-	// ## CEL support
-	//
-	// The full CEL spec can be found at https://github.com/google/cel-spec.
-	//
-	// Current support for `expression` evaluation is very restricted due to
-	// limitations in the scheduling infrastructure used by Test Platform.
-	//
-	// As this API matures, features will be added to the scheduling
-	// infrastructure of Test Platform and restrictions here will be lifted based
-	// on requirements collected from test authors. See milestones in
-	// go/cros-f20-plan for expected feature iterations. Test Lab Environments
-	// SHOULD validate the expression and reject use of unsupported features.
-	//
-	// TODO(crbug.com/1051689) Add reference to the metadata validator package.
-	//
-	// ### Syntax
-	//
-	// See full syntax definition at
-	// https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax
-	//
-	// CEL standard syntax allows expressions that evaluate to errors (e.g.,
-	// syntax allows negation of lists, which has no semantics in CEL).
-	// Thus, this spec does not attempt to restrict the syntax, but specifies what
-	// operations are unsupported to aid metadata producers. Ultimately, the
-	// reference metadata validator is the authority on what expressions are
-	// allowed.
-	//
-	// Unsupported standard CEL semantics:
-	//   - Binary arithmetic operations
-	//     e.g.: +, *, /, % ...
-	//   - Relational Operators beyond (in)equality are not supported.
-	//     e.g.: (>, <, >=, <= ...)
-	//   - Logical OR in expressions is not supported.
-	//     e.g.: (a || b), !(a && b) ...
-	//
-	// ### Macros
-	//
-	// See full macro definition at
-	// https://github.com/google/cel-spec/blob/master/doc/langdef.md#macros
-	//
-	// Supported macros: has(), e.all()
-	// Unsupported macros: e.exists(), e.exists_one(), e.map(), e.filter()
-	//
-	// ### Standard functions
-	//
-	// See full list of standard definitions at
-	// https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions
-	//
-	// Most standard functions are not supported.
-	//
-	// - Supported operators: !_, -_, _!=_, _&&_, _=_, _[_]
-	//   - All other operators are not supported.
-	// - All other standard functions are not supported. In particular:
-	//   - size() is not supported.
-	//   - string functions like endsWith() and contains() are not supported.
-	//   - type conversions like int() and string() are not supported.
-	//   - reflection with type(), null_type() and dyn() is not supported.
 	Expression           string   `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -789,6 +717,10 @@
 	// - Types: Protobuf messages from `chromiumos.config.api.*`
 	//   - Additionally available with the short-hand `api.*`
 	//
+	// The full CEL spec can be found at https://github.com/google/cel-spec.
+	//
+	// TODO(crbug.com/1051689) Add reference to the metadata validator package.
+	//
 	// ## Examples
 	//
 	// Typical examples of expressions are:
@@ -796,64 +728,6 @@
 	// - Must not run on a device with a given screen size:
 	//     dut.hardware_features.screen.milliinch.value == 14000
 	// - TODO: Add model / build target example.
-	//
-	// ## CEL support
-	//
-	// The full CEL spec can be found at https://github.com/google/cel-spec.
-	//
-	// Current support for `expression` evaluation is very restricted due to
-	// limitations in the scheduling infrastructure used by Test Platform.
-	//
-	// As this API matures, features will be added to the scheduling
-	// infrastructure of Test Platform and restrictions here will be lifted based
-	// on requirements collected from test authors. See milestones in
-	// go/cros-f20-plan for expected feature iterations. Test Lab Environments
-	// SHOULD validate the expression and reject use of unsupported features.
-	//
-	// TODO(crbug.com/1051689) Add reference to the metadata validator package.
-	//
-	// ### Syntax
-	//
-	// See full syntax definition at
-	// https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax
-	//
-	// CEL standard syntax allows expressions that evaluate to errors (e.g.,
-	// syntax allows negation of lists, which has no semantics in CEL).
-	// Thus, this spec does not attempt to restrict the syntax, but specifies what
-	// operations are unsupported to aid metadata producers. Ultimately, the
-	// reference metadata validator is the authority on what expressions are
-	// allowed.
-	//
-	// Unsupported standard CEL semantics:
-	//   - Binary arithmetic operations
-	//     e.g.: +, *, /, % ...
-	//   - Relational Operators beyond (in)equality are not supported.
-	//     e.g.: (>, <, >=, <= ...)
-	//   - Logical OR in expressions is not supported.
-	//     e.g.: (a || b), !(a && b) ...
-	//
-	// ### Macros
-	//
-	// See full macro definition at
-	// https://github.com/google/cel-spec/blob/master/doc/langdef.md#macros
-	//
-	// Supported macros: has(), e.all()
-	// Unsupported macros: e.exists(), e.exists_one(), e.map(), e.filter()
-	//
-	// ### Standard functions
-	//
-	// See full list of standard definitions at
-	// https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions
-	//
-	// Most standard functions are not supported.
-	//
-	// - Supported operators: !_, -_, _!=_, _&&_, _=_, _[_]
-	//   - All other operators are not supported.
-	// - All other standard functions are not supported. In particular:
-	//   - size() is not supported.
-	//   - string functions like endsWith() and contains() are not supported.
-	//   - type conversions like int() and string() are not supported.
-	//   - reflection with type(), null_type() and dyn() is not supported.
 	Expression           string   `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -967,10 +841,6 @@
 	//       ].exists(s, p.startsWith(s)))
 	// - Do not include test plan unit if there are changes to private overlays
 	//     blamelist.repo_paths.all(p, !p.contains("private-overlays"))
-	//
-	// ## CEL support
-	//
-	// All standard CEL syntax, macros and functions MUST be supported.
 	Expression           string   `protobuf:"bytes,1,opt,name=expression,proto3" json:"expression,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
diff --git a/src/test/plan/v1/plan.proto b/src/test/plan/v1/plan.proto
index 4a77ab8..6594155 100644
--- a/src/test/plan/v1/plan.proto
+++ b/src/test/plan/v1/plan.proto
@@ -42,6 +42,9 @@
 }
 
 // Specifies a particular set of tests to be run to meet specific conditions.
+//
+// TODO(pprabhu): Add a full example showcasing test_constraints,
+// dut_coverage_consraints and exclusions together.
 message Unit {
   // A globally unique test plan unit name.
   //
@@ -122,10 +125,6 @@
   //     && "crosbolt_perbuild" in test.attributes
   // - network Tauto tests, selected by name
   //     test.name.startsWith("network_")
-  //
-  // ## CEL support
-  //
-  // All standard CEL syntax, macros and functions MUST be supported.
   string expression = 1;
 
   message Test {
@@ -162,9 +161,6 @@
   //   - Additionally available with the short-hand `fleet.*`
   //
   // The full CEL spec can be found at https://github.com/google/cel-spec.
-  // This API only supports a sub-set of the CEL features as described here.
-  // Test Platform MUST validate the expression and reject use of unsupported
-  // features.
   //
   // TODO(crbug.com/1051689) Add reference to the metadata validator package.
   //
@@ -172,17 +168,13 @@
   //
   // Typical instructive examples of expressions are:
   //
-  // - Constraints: All pre-F20 plans only specify constraints on what devices
-  //   may be used, e.g.:
-  //    - Run each test on one DUT with model 'nautilus'.
-  //        TODO(pprabhu, shapiroc): Need a way to specify model for migration.
-  //        duts.all(dut, dut.id.model_id.value = 'nautilus') && size(duts) == 1
+  // - Constraints:
   //    - Run each test on one DUT with a stylus.
   //        (duts.all(dut, dut.hardware_features.stylus
   //                       == api.HardwareFeatures.Present.PRESENT))
   //         && size(duts) == 1)
-  //  - Fanout (not yet supported): In addition to constraints, the
-  //    plan may want to ensure coverage across some device features.
+  //  - Fanout: In addition to constraints, the plan may want to ensure coverage
+  //    across some device features.
   //    TODO(pprabhu) This is an instructive example. We can't say what arch
   //    yet.
   //    - Run each test on one x86 and ARM DUT with a specific camera.
@@ -198,70 +190,6 @@
   //      devices, even though it passed on other devices in the set such that
   //      the expression was satsifed by the passing subset. Selection of a
   //      minimal set of devices to run the plan is best effort.
-  //
-  // Currently, only single-DUT constraints are supported by the Test Platform.
-  // i.e., `expression` MUST be of the form:
-  //   duts.all(DUT_SELECTOR) && size(duts) == 1
-  // where DUT_SELECTOR is an expression that does not refer to `duts`.
-  // This restriction will be lifted as this API matures.
-  //
-  // ## CEL support
-  //
-  // The full CEL spec can be found at https://github.com/google/cel-spec.
-  //
-  // Current support for `expression` evaluation is very restricted due to
-  // limitations in the scheduling infrastructure used by Test Platform.
-  //
-  // As this API matures, features will be added to the scheduling
-  // infrastructure of Test Platform and restrictions here will be lifted based
-  // on requirements collected from test authors. See milestones in
-  // go/cros-f20-plan for expected feature iterations. Test Lab Environments
-  // SHOULD validate the expression and reject use of unsupported features.
-  //
-  // TODO(crbug.com/1051689) Add reference to the metadata validator package.
-  //
-  // ### Syntax
-  //
-  // See full syntax definition at
-  // https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax
-  //
-  // CEL standard syntax allows expressions that evaluate to errors (e.g.,
-  // syntax allows negation of lists, which has no semantics in CEL).
-  // Thus, this spec does not attempt to restrict the syntax, but specifies what
-  // operations are unsupported to aid metadata producers. Ultimately, the
-  // reference metadata validator is the authority on what expressions are
-  // allowed.
-  //
-  // Unsupported standard CEL semantics:
-  //   - Binary arithmetic operations
-  //     e.g.: +, *, /, % ...
-  //   - Relational Operators beyond (in)equality are not supported.
-  //     e.g.: (>, <, >=, <= ...)
-  //   - Logical OR in expressions is not supported.
-  //     e.g.: (a || b), !(a && b) ...
-  //
-  // ### Macros
-  //
-  // See full macro definition at
-  // https://github.com/google/cel-spec/blob/master/doc/langdef.md#macros
-  //
-  // Supported macros: has(), e.all()
-  // Unsupported macros: e.exists(), e.exists_one(), e.map(), e.filter()
-  //
-  // ### Standard functions
-  //
-  // See full list of standard definitions at
-  // https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions
-  //
-  // Most standard functions are not supported.
-  //
-  // - Supported operators: !_, -_, _!=_, _&&_, _=_, _[_]
-  //   - All other operators are not supported.
-  // - All other standard functions are not supported. In particular:
-  //   - size() is not supported.
-  //   - string functions like endsWith() and contains() are not supported.
-  //   - type conversions like int() and string() are not supported.
-  //   - reflection with type(), null_type() and dyn() is not supported.
   string expression = 1;
 
   // The evaluation context for `expression` MUST include the Chrome OS
@@ -389,6 +317,10 @@
   // - Types: Protobuf messages from `chromiumos.config.api.*`
   //   - Additionally available with the short-hand `api.*`
   //
+  // The full CEL spec can be found at https://github.com/google/cel-spec.
+  //
+  // TODO(crbug.com/1051689) Add reference to the metadata validator package.
+  //
   // ## Examples
   //
   // Typical examples of expressions are:
@@ -396,64 +328,6 @@
   // - Must not run on a device with a given screen size:
   //     dut.hardware_features.screen.milliinch.value == 14000
   // - TODO: Add model / build target example.
-  //
-  // ## CEL support
-  //
-  // The full CEL spec can be found at https://github.com/google/cel-spec.
-  //
-  // Current support for `expression` evaluation is very restricted due to
-  // limitations in the scheduling infrastructure used by Test Platform.
-  //
-  // As this API matures, features will be added to the scheduling
-  // infrastructure of Test Platform and restrictions here will be lifted based
-  // on requirements collected from test authors. See milestones in
-  // go/cros-f20-plan for expected feature iterations. Test Lab Environments
-  // SHOULD validate the expression and reject use of unsupported features.
-  //
-  // TODO(crbug.com/1051689) Add reference to the metadata validator package.
-  //
-  // ### Syntax
-  //
-  // See full syntax definition at
-  // https://github.com/google/cel-spec/blob/master/doc/langdef.md#syntax
-  //
-  // CEL standard syntax allows expressions that evaluate to errors (e.g.,
-  // syntax allows negation of lists, which has no semantics in CEL).
-  // Thus, this spec does not attempt to restrict the syntax, but specifies what
-  // operations are unsupported to aid metadata producers. Ultimately, the
-  // reference metadata validator is the authority on what expressions are
-  // allowed.
-  //
-  // Unsupported standard CEL semantics:
-  //   - Binary arithmetic operations
-  //     e.g.: +, *, /, % ...
-  //   - Relational Operators beyond (in)equality are not supported.
-  //     e.g.: (>, <, >=, <= ...)
-  //   - Logical OR in expressions is not supported.
-  //     e.g.: (a || b), !(a && b) ...
-  //
-  // ### Macros
-  //
-  // See full macro definition at
-  // https://github.com/google/cel-spec/blob/master/doc/langdef.md#macros
-  //
-  // Supported macros: has(), e.all()
-  // Unsupported macros: e.exists(), e.exists_one(), e.map(), e.filter()
-  //
-  // ### Standard functions
-  //
-  // See full list of standard definitions at
-  // https://github.com/google/cel-spec/blob/master/doc/langdef.md#standard-definitions
-  //
-  // Most standard functions are not supported.
-  //
-  // - Supported operators: !_, -_, _!=_, _&&_, _=_, _[_]
-  //   - All other operators are not supported.
-  // - All other standard functions are not supported. In particular:
-  //   - size() is not supported.
-  //   - string functions like endsWith() and contains() are not supported.
-  //   - type conversions like int() and string() are not supported.
-  //   - reflection with type(), null_type() and dyn() is not supported.
   string expression = 1;
 
   // The evaluation context for `expression` MUST include the Chrome OS
@@ -498,10 +372,6 @@
   //       ].exists(s, p.startsWith(s)))
   // - Do not include test plan unit if there are changes to private overlays
   //     blamelist.repo_paths.all(p, !p.contains("private-overlays"))
-  //
-  // ## CEL support
-  //
-  // All standard CEL syntax, macros and functions MUST be supported.
   string expression = 1;
 
   message Blamelist {
