diff --git a/dsl-reference.md b/dsl-reference.md
index da23ee67..5650e2e3 100644
--- a/dsl-reference.md
+++ b/dsl-reference.md
@@ -249,7 +249,7 @@ The Serverless Workflow DSL defines a list of [tasks](#task) that **must be** su
| Name | Type | Required | Description|
|:--|:---:|:---:|:---|
-| if | `string` | `no` | A [`runtime expression`](dsl.md#runtime-expressions), if any, used to determine whether or not the task should be run.
The task is considered skipped if not run. |
+| if | `string` | `no` | A [`runtime expression`](dsl.md#runtime-expressions), if any, used to determine whether or not the task should be run.
The task is considered skipped if not run, and the *raw* task input becomes the task's output. The expression is evaluated against the *raw* task input before any other expression of the task. |
| input | [`input`](#input) | `no` | An object used to customize the task's input and to document its schema, if any. |
| output | [`output`](#output) | `no` | An object used to customize the task's output and to document its schema, if any. |
| export | [`export`](#export) | `no` | An object used to customize the content of the workflow context. |
diff --git a/dsl.md b/dsl.md
index 18ca7240..a0b658f9 100644
--- a/dsl.md
+++ b/dsl.md
@@ -256,6 +256,7 @@ flowchart TD
workflow_transformed_input{{Transformed Workflow Input}}
task_raw_input{{Raw Task Input}}
+ task_if[Task: if
]
task_input_schema[\Task: input.schema
/]
task_input_from[Task: input.from
]
task_transformed_input{{Transformed Task Input}}
@@ -282,7 +283,8 @@ flowchart TD
subgraph Task
- task_raw_input -- Validated by --> task_input_schema
+ task_raw_input -- Passed to --> task_if
+ task_if -- Validated by --> task_input_schema
task_input_schema -- Passed to --> task_input_from
task_input_from -- Produces --> task_transformed_input
task_transformed_input -- Set as --> input_arg