Index: rtemsspec/tests/spec-validation/action2.yml
===================================================================
--- rtemsspec/tests/spec-validation/action2.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ rtemsspec/tests/spec-validation/action2.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -67,4 +67,9 @@
     text: |
       Pre B Y.
+  - name: Z
+    test-code: |
+      /* Pre B Z */
+    text: |
+      Pre B Z.
   test-epilogue: |
     /* Pre B epilogue. */
@@ -72,4 +77,7 @@
     /* Pre B prologue. */
 requirement-type: functional
+skip-reasons:
+  SkipReason: |
+    Skip it due to some reason.
 test-action: |
   /* Action */
@@ -149,4 +157,20 @@
     B:
     - Y
+- enabled-by: true
+  post-conditions:
+    A: X
+    B: X
+  pre-conditions:
+    A:
+    - X
+    B:
+    - Z
+- enabled-by: true
+  post-conditions: SkipReason
+  pre-conditions:
+    A:
+    - Y
+    B:
+    - Z
 rationale: null
 references: []
Index: rtemsspec/tests/spec-validation/directive.yml
===================================================================
--- rtemsspec/tests/spec-validation/directive.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ rtemsspec/tests/spec-validation/directive.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -153,4 +153,5 @@
   test-prologue: null
 requirement-type: functional
+skip-reasons: {}
 test-action: |
   ctx->status = rtems_task_ident( ctx->name, ctx->node, ctx->id );
Index: rtemsspec/tests/test_validation.py
===================================================================
--- rtemsspec/tests/test_validation.py	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ rtemsspec/tests/test_validation.py	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -636,4 +636,5 @@
 
 static const struct {
+  uint8_t Skip : 1;
   uint8_t Pre_Name_NA : 1;
   uint8_t Pre_Node_NA : 1;
@@ -641,83 +642,83 @@
 } ClassicTaskIdentification_TransitionInfo[] = {
   {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
   }, {
 #if defined(RTEMS_MULTIPROCESSING)
-    0, 0, 0
+    0, 0, 0, 0
 #else
-    0, 0, 0
+    0, 0, 0, 0
 #endif
   }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
   }, {
 #if defined(RTEMS_MULTIPROCESSING)
-    0, 0, 0
+    0, 0, 0, 0
 #else
-    0, 0, 0
+    0, 0, 0, 0
 #endif
   }, {
-    0, 0, 0
-  }, {
-    0, 0, 0
+    0, 0, 0, 0
+  }, {
+    0, 0, 0, 0
   }
 };
@@ -773,4 +774,9 @@
           ctx->pcs[ 2 ] = ClassicTaskIdentification_Pre_Id_NA;
           index += ( ClassicTaskIdentification_Pre_Id_NA - 1 );
+        }
+
+        if ( ClassicTaskIdentification_TransitionInfo[ index ].Skip ) {
+          ++index;
+          continue;
         }
 
@@ -1050,4 +1056,5 @@
   Action2_Pre_B_X,
   Action2_Pre_B_Y,
+  Action2_Pre_B_Z,
   Action2_Pre_B_NA
 } Action2_Pre_B;
@@ -1194,5 +1201,6 @@
 static const char * const Action2_PreDesc_B[] = {
   "X",
-  "Y"
+  "Y",
+  "Z"
 };
 
@@ -1239,4 +1247,9 @@
     case Action2_Pre_B_Y: {
       /* Pre B Y */
+      break;
+    }
+
+    case Action2_Pre_B_Z: {
+      /* Pre B Z */
       break;
     }
@@ -1359,23 +1372,34 @@
   }, {
     Action2_Post_A_X,
+    Action2_Post_B_X
+  }, {
+    Action2_Post_A_X,
     Action2_Post_B_Y
   }, {
     Action2_Post_A_Y,
     Action2_Post_B_X
+  }, {
+    Action2_Post_A_Y,
+    Action2_Post_B_Y
   }
 };
 
 static const struct {
+  uint8_t Skip : 1;
   uint8_t Pre_A_NA : 1;
   uint8_t Pre_B_NA : 1;
 } Action2_TransitionInfo[] = {
   {
-    0, 0
-  }, {
-    1, 0
-  }, {
-    0, 0
-  }, {
-    1, 0
+    0, 0, 0
+  }, {
+    0, 1, 0
+  }, {
+    0, 0, 0
+  }, {
+    0, 0, 0
+  }, {
+    0, 1, 0
+  }, {
+    1, 0, 0
   }
 };
@@ -1415,4 +1439,9 @@
         ctx->pcs[ 1 ] = Action2_Pre_B_NA;
         index += ( Action2_Pre_B_NA - 1 );
+      }
+
+      if ( Action2_TransitionInfo[ index ].Skip ) {
+        ++index;
+        continue;
       }
 
Index: rtemsspec/validation.py
===================================================================
--- rtemsspec/validation.py	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ rtemsspec/validation.py	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -399,8 +399,18 @@
                           ]  # type: _TransitionMap
         for transition in self["transition-map"]:
-            post = tuple(self._post_state_to_index[index][
-                transition["post-conditions"][self._post_index_to_name[index]]]
-                         for index in range(self._post_condition_count))
-            self._add_transitions(0, 0, transition, transition_map, [], post)
+            if isinstance(transition["post-conditions"], dict):
+                info = ["0"]
+                post_cond = tuple(
+                    self._post_state_to_index[index][
+                        transition["post-conditions"][
+                            self._post_index_to_name[index]]]
+                    for index in range(self._post_condition_count))
+            else:
+                info = ["1"]
+                post_cond = tuple(
+                    len(self._post_state_to_index[index]) - 1
+                    for index in range(self._post_condition_count))
+            self._add_transitions(0, 0, transition, transition_map, info,
+                                  post_cond)
         return transition_map
 
@@ -449,7 +459,9 @@
                 info_elements.append("\n".join(info_enumerators))
         content.append(["\n  }, {\n".join(map_elements), "  }", "};"])
-        pre_bits = 2**max(math.ceil(math.log2(self._pre_condition_count)), 3)
+        pre_bits = 2**max(math.ceil(math.log2(self._pre_condition_count + 1)),
+                          3)
         content.add("static const struct {")
         with content.indent():
+            content.append(f"uint{pre_bits}_t Skip : 1;")
             for condition in self["pre-conditions"]:
                 content.append(
@@ -459,4 +471,6 @@
 
     def _add_action(self, content: CContent) -> None:
+        with content.condition(f"{self.ident}_TransitionInfo[ index ].Skip"):
+            content.append(["++index;", "continue;"])
         content.add_blank_line()
         for index, enum in enumerate(self._pre_index_to_enum):
Index: spec/req/rtems/ident-local.yml
===================================================================
--- spec/req/rtems/ident-local.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ spec/req/rtems/ident-local.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -84,4 +84,5 @@
   test-prologue: null
 requirement-type: functional
+skip-reasons: {}
 test-action: |
   ctx->status = ( *ctx->action )( ctx->name, ctx->id );
Index: spec/req/rtems/ident.yml
===================================================================
--- spec/req/rtems/ident.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ spec/req/rtems/ident.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -137,4 +137,5 @@
   test-prologue: null
 requirement-type: functional
+skip-reasons: {}
 test-action: |
   ctx->status = ( *ctx->action )( ctx->name, ctx->node, ctx->id );
Index: spec/req/rtems/tasks/ident.yml
===================================================================
--- spec/req/rtems/tasks/ident.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ spec/req/rtems/tasks/ident.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -44,4 +44,5 @@
   test-prologue: null
 requirement-type: functional
+skip-reasons: {}
 test-action: |
   if ( ctx->id != NULL ) {
Index: spec/spec/requirement-action-skip-reasons.yml
===================================================================
--- spec/spec/requirement-action-skip-reasons.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
+++ spec/spec/requirement-action-skip-reasons.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -0,0 +1,27 @@
+SPDX-License-Identifier: CC-BY-SA-4.0 OR BSD-2-Clause
+copyrights:
+- Copyright (C) 2020 embedded brains GmbH (http://www.embedded-brains.de)
+enabled-by: true
+links:
+- role: spec-member
+  uid: root
+spec-description: null
+spec-example: null
+spec-info:
+  dict:
+    attributes: {}
+    description: |
+      This set of attributes specifies skip reasons used to justify why
+      transitions in the transition map are skipped.
+    generic-attributes:
+      description: |
+        The key defines the name of a skip reason.  The name can be used in
+        :ref:`SpecTypeActionRequirementTransitionPostConditions` to skip the
+        corresponding transitions.  The value shall give a reason why the
+        transitions are skipped.
+      key-spec-type: requirement-action-name
+      value-spec-type: str
+    mandatory-attributes: all
+spec-name: Action Requirement Skip Reasons
+spec-type: requirement-action-skip-reasons
+type: spec
Index: spec/spec/requirement-action-transition-post.yml
===================================================================
--- spec/spec/requirement-action-transition-post.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ spec/spec/requirement-action-transition-post.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -23,4 +23,14 @@
       value-spec-type: requirement-action-name
     mandatory-attributes: all
+  str:
+    assert:
+      and:
+      - re: ^[A-Z][a-zA-Z0-9]+$
+      - not:
+          eq: NA
+    description: |
+      It shall be the name of a skip reason.  If a skip reason is given instead
+      of a listing of post-condition states, then this transition is skipped
+      and no test code runs for this transition.
 spec-name: Action Requirement Transition Post-Conditions
 spec-type: requirement-action-transition-post
Index: spec/spec/requirement-action.yml
===================================================================
--- spec/spec/requirement-action.yml	(revision 244b2771339059836c1dc22c3664f1b4fa772f51)
+++ spec/spec/requirement-action.yml	(revision 55e17d23c133681cf4a6a24e5190216f5378f1e8)
@@ -82,4 +82,5 @@
     test-prologue: null
   requirement-type: functional
+  skip-reasons: {}
   test-action: |
     /* Call the function of the action */
@@ -138,4 +139,7 @@
         description: null
         spec-type: requirement-action-condition-list
+      skip-reasons:
+        description: null
+        spec-type: requirement-action-skip-reasons
       test-action:
         description: |
