Skip to content
atomize
GitHub

Templates

Schema Reference

Development docs · main. Your installed version may differ.

Everything you can put in an Atomize YAML File. Browse Templates or Mixins, search for a field, and follow its link to the Template Reference for behaviour and examples.

Reference Atomize YAML Template

The format, field by field

Schema Reference.

Everything you can put in an Atomize YAML File.
Types, defaults and constraints, straight from the source.

Template

A recipe for turning Stories into Tasks.

17 fields
formatVersionstringOptional

Which edition of the Atomize schema this file follows. Currently "1.0"; omit it to mean "1.0". Not the template's own revision: that's version.

Allowed values
"1.0"

Runtime rules

  • Must be a format this release of Atomize can read: "1.0". Write it as a quoted string; an unquoted 1.0 is read as a number.
versionstringOptional

The author's own revision of this file, e.g. '1.2' or '2026-10'. Free text: Atomize shows it but never interprets it. A child Template does not inherit its parent's Revision.

minLength
1
namestringRequired unless extends is set

Unique display name for this template.

minLength
1
descriptionstringOptional

What this template is for and when to use it.

authorstringOptional

Author or team that owns this template.

tagsarrayOptional

Tags for template discovery in the catalog.

Each item
string
createdstringOptionalDeprecated

Deprecated: nothing in Atomize reads or maintains it. Version control records when the file was created.

Runtime rules

  • Using this deprecated field produces a non-blocking warning, even in strict mode.
lastModifiedstringOptionalDeprecated

Deprecated: nothing in Atomize reads or maintains it, so it goes stale. Version control records changes.

Runtime rules

  • Using this deprecated field produces a non-blocking warning, even in strict mode.
filterobjectRequired unless extends is set

Criteria used to select which stories this template applies to.

additionalProperties
false

Template Reference

  • teamstringOptional
    filter.team

    Azure DevOps team name. Overrides the team from the selected Connection Profile for this Template, including team-scoped query macros.

    Template Reference

  • workItemTypesarrayOptional
    filter.workItemTypes

    Work item types to include (e.g. ['User Story', 'Bug']). With savedQuery, declares which types the query returns: it doesn't filter, but tells Atomize which fields to look up and validate.

    Each item
    string

    Template Reference

  • statesarrayOptional
    filter.states

    Story states to target (e.g. ['Active', 'New']).

    Each item
    string

    Template Reference

  • statesExcludearrayOptional
    filter.statesExclude

    Story states to exclude from selection.

    Each item
    string

    Template Reference

  • statesWereEverarrayOptional
    filter.statesWereEver

    Include stories that were ever in any of these states.

    Each item
    string

    Template Reference

  • tagsobjectOptional
    filter.tags

    Include or exclude Stories by tag.

    additionalProperties
    false

    Template Reference

    • includearrayOptional
      filter.tags.include

      Include stories that have at least one of these tags.

      Each item
      string
    • excludearrayOptional
      filter.tags.exclude

      Exclude stories that have any of these tags.

      Each item
      string
  • areaPathsarrayOptional
    filter.areaPaths

    Area paths to match exactly, without descendants. Use '@TeamAreas' to match all areas owned by the configured team. Matching follows the platform's query semantics.

    Each item
    string

    Template Reference

    • Alternative 1stringOptional
      filter.areaPaths[]
    • Alternative 2stringOptional
      filter.areaPaths[]
      Allowed values
      "@TeamAreas"
  • areaPathsUnderarrayOptional
    filter.areaPathsUnder

    Include stories in these area paths and all sub-paths.

    Each item
    string

    Template Reference

  • iterationsarrayOptional
    filter.iterations

    Iteration paths to match exactly, without descendants. Use '@CurrentIteration' for the configured team's current sprint.

    Each item
    string

    Template Reference

    • Alternative 1stringOptional
      filter.iterations[]
    • Alternative 2stringOptional
      filter.iterations[]
      Allowed values
      "@CurrentIteration"
  • iterationsUnderarrayOptional
    filter.iterationsUnder

    Include stories in these iterations and all sub-iterations.

    Each item
    string

    Template Reference

  • assignedToarrayOptional
    filter.assignedTo

    Assignee filter. Accepts email addresses or '@Me' for the authenticated user.

    Each item
    string

    Template Reference

    • Alternative 1stringOptional
      filter.assignedTo[]
      pattern
      "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
      format
      "email"
    • Alternative 2stringOptional
      filter.assignedTo[]
      Allowed values
      "@Me"
  • changedAfterstringOptional
    filter.changedAfter

    Include Stories changed on or after this date (inclusive). ISO 8601 date or date macro (e.g. '@Today-7').

    Runtime rules

    • Use an ISO 8601 date (YYYY-MM-DD, optionally with a time) or @Today, @StartOfDay, @StartOfMonth, @StartOfWeek or @StartOfYear with an optional integer offset such as @Today-7.

    Template Reference

  • createdAfterstringOptional
    filter.createdAfter

    Include Stories created on or after this date (inclusive). ISO 8601 date or date macro.

    Runtime rules

    • Use an ISO 8601 date (YYYY-MM-DD, optionally with a time) or @Today, @StartOfDay, @StartOfMonth, @StartOfWeek or @StartOfYear with an optional integer offset such as @Today-7.

    Template Reference

  • priorityobjectOptional
    filter.priority

    Priority range filter for story selection.

    additionalProperties
    false

    Template Reference

    • minnumberOptional
      filter.priority.min

      Minimum priority value (inclusive); on Azure DevOps, 1 is the highest priority.

    • maxnumberOptional
      filter.priority.max

      Maximum priority value (inclusive).

  • excludeIfHasTasksbooleanOptional
    filter.excludeIfHasTasks

    If true, skips stories that already have child tasks.

    Template Reference

  • savedQueryobjectOptional
    filter.savedQuery

    Reference an existing Azure DevOps saved query to select stories.

    additionalProperties
    false

    Runtime rules

    • Set exactly one of id or path.
    • Only flat (Work Items) saved queries are supported; tree and one-hop queries are rejected at runtime.
    • State filters, tags, area or iteration paths, assignedTo, date filters or priority alongside savedQuery produce a validation warning and are ignored; the query controls the returned Stories. workItemTypes is allowed because it declares the query's Work Item types rather than filtering them.

    YAML examples

    savedQuery:
      path: Shared Queries/Teams/Backend Team/Sprint Active Stories
    
    savedQuery:
      id: a1b2c3d4-0000-4000-8000-000000000000
    

    Template Reference

    • idstringOptional
      filter.savedQuery.id

      Azure DevOps saved query GUID.

      pattern
      "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
      format
      "uuid"

      Template Reference

    • pathstringOptional
      filter.savedQuery.path

      Path to the saved query in Azure DevOps (e.g. 'My Queries/Sprint Stories').

      minLength
      1

      Template Reference

tasksarrayRequired unless extends is set

Task definitions that will be generated from this template.

Each item
object
minItems
1

Runtime rules

  • Percentage validation uses lower and upper bounds. A task's bounds come from estimationPercent (0 when omitted) and every estimationPercentCondition percentage. A task without a condition contributes its lowest percentage to the lower total; a conditional task contributes 0. Every task contributes its highest percentage to the upper total. Each repeated copy contributes separately.
  • validation.totalEstimationMustBe must lie between the lower and upper totals. When it is unset, validation.totalEstimationRange must overlap those bounds. Neither setting imposes an automatic 100% limit.
  • Generated task counts include each repeated copy and must satisfy validation.minTasks and validation.maxTasks when set.
  • Without an explicit total constraint, the sum of the written estimationPercent values, counting repeated copies, may exceed 100%. Unless estimation.normalize is always, this produces a non-blocking warning rather than a validation error, even in strict mode.

Template Reference

  • idstringOptional
    tasks[].id

    Unique identifier for this task within the template. Referenced by 'dependsOn'.

    Runtime rules

    • Non-empty task IDs must be unique within the file.

    Template Reference

  • titlestringRequired
    tasks[].title

    The Work Item title shown on the platform. Supports Story variable interpolation.

    minLength
    1

    Template Reference

  • descriptionstringOptional
    tasks[].description

    Task description. Supports Story variable interpolation.

    Template Reference

  • estimationPercentnumberOptional
    tasks[].estimationPercent

    Percentage of the parent story's estimate assigned to this task (0–100). Requires estimation.strategy = 'percentage'.

    minimum
    0
    maximum
    100

    Template Reference

  • estimationPercentConditionarrayOptional
    tasks[].estimationPercentCondition

    Conditional estimation rules evaluated in order. The first matching condition's percent is used.

    Each item
    object

    YAML examples

    estimationPercentCondition:
      - condition:
          field: tags
          operator: contains
          value: critical
        percent: 60
      - condition:
          field: estimation
          operator: gte
          value: 13
        percent: 55
    

    Template Reference

    • conditionobjectRequired
      tasks[].estimationPercentCondition[].condition

      Condition evaluated against the parent story. Applied when this condition matches.

      Template Reference

      • Alternative 1objectRequired
        tasks[].estimationPercentCondition[].condition
        additionalProperties
        false
        • fieldstringRequired
          tasks[].estimationPercentCondition[].condition.field

          Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

          minLength
          1
        • operatorstringRequired
          tasks[].estimationPercentCondition[].condition.operator

          Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

          Allowed values
          "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

          Runtime rules

          • When field is tags, only contains and not-contains are supported because tags is multi-value.
        • valuestring | number | booleanRequired
          tasks[].estimationPercentCondition[].condition.value

          Value to compare against. Can be a string, number, or boolean.

      • Alternative 2objectRequired
        tasks[].estimationPercentCondition[].condition
        additionalProperties
        false
        • customFieldstringRequired
          tasks[].estimationPercentCondition[].condition.customField

          Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

          pattern
          "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
        • operatorstringRequired
          tasks[].estimationPercentCondition[].condition.operator

          Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

          Allowed values
          "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
        • valuestring | number | booleanRequired
          tasks[].estimationPercentCondition[].condition.value

          Value to compare against. Can be a string, number, or boolean.

      • Alternative 3objectRequired
        tasks[].estimationPercentCondition[].condition
        additionalProperties
        false
        • allarrayRequired
          tasks[].estimationPercentCondition[].condition.all

          Sub-conditions that must all match (logical AND).

          Each item
          object
          minItems
          1
          • Alternative 1objectOptional
            tasks[].estimationPercentCondition[].condition.all[]
            additionalProperties
            false
            • fieldstringRequired
              tasks[].estimationPercentCondition[].condition.all[].field

              Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

              minLength
              1
            • operatorstringRequired
              tasks[].estimationPercentCondition[].condition.all[].operator

              Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

              Allowed values
              "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

              Runtime rules

              • When field is tags, only contains and not-contains are supported because tags is multi-value.
            • valuestring | number | booleanRequired
              tasks[].estimationPercentCondition[].condition.all[].value

              Value to compare against. Can be a string, number, or boolean.

          • Alternative 2objectOptional
            tasks[].estimationPercentCondition[].condition.all[]
            additionalProperties
            false
            • customFieldstringRequired
              tasks[].estimationPercentCondition[].condition.all[].customField

              Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

              pattern
              "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
            • operatorstringRequired
              tasks[].estimationPercentCondition[].condition.all[].operator

              Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

              Allowed values
              "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
            • valuestring | number | booleanRequired
              tasks[].estimationPercentCondition[].condition.all[].value

              Value to compare against. Can be a string, number, or boolean.

          • Alternative 3objectOptional
            tasks[].estimationPercentCondition[].condition.all[]
            additionalProperties
            false

            Recursive structure; follows the same fields as its parent.

          • Alternative 4objectOptional
            tasks[].estimationPercentCondition[].condition.all[]
            additionalProperties
            false
            • anyarrayRequired
              tasks[].estimationPercentCondition[].condition.all[].any

              Sub-conditions where at least one must match (logical OR).

              Each item
              object
              minItems
              1
              • Alternative 1objectOptional
                tasks[].estimationPercentCondition[].condition.all[].any[]
                additionalProperties
                false
                • fieldstringRequired
                  tasks[].estimationPercentCondition[].condition.all[].any[].field

                  Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

                  minLength
                  1
                • operatorstringRequired
                  tasks[].estimationPercentCondition[].condition.all[].any[].operator

                  Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                  Allowed values
                  "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

                  Runtime rules

                  • When field is tags, only contains and not-contains are supported because tags is multi-value.
                • valuestring | number | booleanRequired
                  tasks[].estimationPercentCondition[].condition.all[].any[].value

                  Value to compare against. Can be a string, number, or boolean.

              • Alternative 2objectOptional
                tasks[].estimationPercentCondition[].condition.all[].any[]
                additionalProperties
                false
                • customFieldstringRequired
                  tasks[].estimationPercentCondition[].condition.all[].any[].customField

                  Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

                  pattern
                  "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
                • operatorstringRequired
                  tasks[].estimationPercentCondition[].condition.all[].any[].operator

                  Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                  Allowed values
                  "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
                • valuestring | number | booleanRequired
                  tasks[].estimationPercentCondition[].condition.all[].any[].value

                  Value to compare against. Can be a string, number, or boolean.

              • Alternative 3objectOptional
                tasks[].estimationPercentCondition[].condition.all[].any[]
                additionalProperties
                false

                Recursive structure; follows the same fields as its parent.

              • Alternative 4objectOptional
                tasks[].estimationPercentCondition[].condition.all[].any[]
                additionalProperties
                false

                Recursive structure; follows the same fields as its parent.

      • Alternative 4objectRequired
        tasks[].estimationPercentCondition[].condition
        additionalProperties
        false
        • anyarrayRequired
          tasks[].estimationPercentCondition[].condition.any

          Sub-conditions where at least one must match (logical OR).

          Each item
          object
          minItems
          1
          • Alternative 1objectOptional
            tasks[].estimationPercentCondition[].condition.any[]
            additionalProperties
            false
            • fieldstringRequired
              tasks[].estimationPercentCondition[].condition.any[].field

              Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

              minLength
              1
            • operatorstringRequired
              tasks[].estimationPercentCondition[].condition.any[].operator

              Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

              Allowed values
              "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

              Runtime rules

              • When field is tags, only contains and not-contains are supported because tags is multi-value.
            • valuestring | number | booleanRequired
              tasks[].estimationPercentCondition[].condition.any[].value

              Value to compare against. Can be a string, number, or boolean.

          • Alternative 2objectOptional
            tasks[].estimationPercentCondition[].condition.any[]
            additionalProperties
            false
            • customFieldstringRequired
              tasks[].estimationPercentCondition[].condition.any[].customField

              Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

              pattern
              "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
            • operatorstringRequired
              tasks[].estimationPercentCondition[].condition.any[].operator

              Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

              Allowed values
              "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
            • valuestring | number | booleanRequired
              tasks[].estimationPercentCondition[].condition.any[].value

              Value to compare against. Can be a string, number, or boolean.

          • Alternative 3objectOptional
            tasks[].estimationPercentCondition[].condition.any[]
            additionalProperties
            false
            • allarrayRequired
              tasks[].estimationPercentCondition[].condition.any[].all

              Sub-conditions that must all match (logical AND).

              Each item
              object
              minItems
              1
              • Alternative 1objectOptional
                tasks[].estimationPercentCondition[].condition.any[].all[]
                additionalProperties
                false
                • fieldstringRequired
                  tasks[].estimationPercentCondition[].condition.any[].all[].field

                  Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

                  minLength
                  1
                • operatorstringRequired
                  tasks[].estimationPercentCondition[].condition.any[].all[].operator

                  Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                  Allowed values
                  "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

                  Runtime rules

                  • When field is tags, only contains and not-contains are supported because tags is multi-value.
                • valuestring | number | booleanRequired
                  tasks[].estimationPercentCondition[].condition.any[].all[].value

                  Value to compare against. Can be a string, number, or boolean.

              • Alternative 2objectOptional
                tasks[].estimationPercentCondition[].condition.any[].all[]
                additionalProperties
                false
                • customFieldstringRequired
                  tasks[].estimationPercentCondition[].condition.any[].all[].customField

                  Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

                  pattern
                  "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
                • operatorstringRequired
                  tasks[].estimationPercentCondition[].condition.any[].all[].operator

                  Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                  Allowed values
                  "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
                • valuestring | number | booleanRequired
                  tasks[].estimationPercentCondition[].condition.any[].all[].value

                  Value to compare against. Can be a string, number, or boolean.

              • Alternative 3objectOptional
                tasks[].estimationPercentCondition[].condition.any[].all[]
                additionalProperties
                false

                Recursive structure; follows the same fields as its parent.

              • Alternative 4objectOptional
                tasks[].estimationPercentCondition[].condition.any[].all[]
                additionalProperties
                false

                Recursive structure; follows the same fields as its parent.

          • Alternative 4objectOptional
            tasks[].estimationPercentCondition[].condition.any[]
            additionalProperties
            false

            Recursive structure; follows the same fields as its parent.

    • percentnumberRequired
      tasks[].estimationPercentCondition[].percent

      Estimation percentage used when this condition matches (0–100).

      minimum
      0
      maximum
      100

      Template Reference

  • estimationFixednumberOptional
    tasks[].estimationFixed

    Fixed Task Estimate in the Task's unit, independent of the Story Estimate. Written as supplied; percentage rounding and the minimum do not apply.

    minimum
    0

    Template Reference

  • estimationFormulastringOptionalDeprecated
    tasks[].estimationFormula

    Deprecated: formulas were never evaluated and give the task a Task Estimate of 0. Use estimationPercent or estimationFixed.

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • tagsarrayOptional
    tasks[].tags

    Tags applied to the generated task.

    Each item
    string

    Template Reference

  • conditionobjectOptional
    tasks[].condition

    Condition evaluated against the parent story. If it does not match, this task is skipped.

    Runtime rules

    • Offline Validation of a Template warns when this condition references custom fields; Online Validation is needed to verify that those fields exist on the platform.

    YAML examples

    condition:
      field: tags
      operator: contains
      value: security
    
    condition:
      customField: Custom.ClientTier
      operator: equals
      value: Enterprise
    
    condition:
      all:
        - field: tags
          operator: contains
          value: database
        - any:
            - field: estimation
              operator: gt
              value: 5
            - field: priority
              operator: equals
              value: 1
    

    Template Reference

    • Alternative 1objectOptional
      tasks[].condition
      additionalProperties
      false
      • fieldstringRequired
        tasks[].condition.field

        Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

        minLength
        1
      • operatorstringRequired
        tasks[].condition.operator

        Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

        Allowed values
        "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

        Runtime rules

        • When field is tags, only contains and not-contains are supported because tags is multi-value.
      • valuestring | number | booleanRequired
        tasks[].condition.value

        Value to compare against. Can be a string, number, or boolean.

    • Alternative 2objectOptional
      tasks[].condition
      additionalProperties
      false
      • customFieldstringRequired
        tasks[].condition.customField

        Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

        pattern
        "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
      • operatorstringRequired
        tasks[].condition.operator

        Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

        Allowed values
        "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
      • valuestring | number | booleanRequired
        tasks[].condition.value

        Value to compare against. Can be a string, number, or boolean.

    • Alternative 3objectOptional
      tasks[].condition
      additionalProperties
      false
      • allarrayRequired
        tasks[].condition.all

        Sub-conditions that must all match (logical AND).

        Each item
        object
        minItems
        1
        • Alternative 1objectOptional
          tasks[].condition.all[]
          additionalProperties
          false
          • fieldstringRequired
            tasks[].condition.all[].field

            Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

            minLength
            1
          • operatorstringRequired
            tasks[].condition.all[].operator

            Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

            Allowed values
            "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

            Runtime rules

            • When field is tags, only contains and not-contains are supported because tags is multi-value.
          • valuestring | number | booleanRequired
            tasks[].condition.all[].value

            Value to compare against. Can be a string, number, or boolean.

        • Alternative 2objectOptional
          tasks[].condition.all[]
          additionalProperties
          false
          • customFieldstringRequired
            tasks[].condition.all[].customField

            Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

            pattern
            "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
          • operatorstringRequired
            tasks[].condition.all[].operator

            Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

            Allowed values
            "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
          • valuestring | number | booleanRequired
            tasks[].condition.all[].value

            Value to compare against. Can be a string, number, or boolean.

        • Alternative 3objectOptional
          tasks[].condition.all[]
          additionalProperties
          false

          Recursive structure; follows the same fields as its parent.

        • Alternative 4objectOptional
          tasks[].condition.all[]
          additionalProperties
          false
          • anyarrayRequired
            tasks[].condition.all[].any

            Sub-conditions where at least one must match (logical OR).

            Each item
            object
            minItems
            1
            • Alternative 1objectOptional
              tasks[].condition.all[].any[]
              additionalProperties
              false
              • fieldstringRequired
                tasks[].condition.all[].any[].field

                Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

                minLength
                1
              • operatorstringRequired
                tasks[].condition.all[].any[].operator

                Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                Allowed values
                "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

                Runtime rules

                • When field is tags, only contains and not-contains are supported because tags is multi-value.
              • valuestring | number | booleanRequired
                tasks[].condition.all[].any[].value

                Value to compare against. Can be a string, number, or boolean.

            • Alternative 2objectOptional
              tasks[].condition.all[].any[]
              additionalProperties
              false
              • customFieldstringRequired
                tasks[].condition.all[].any[].customField

                Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

                pattern
                "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
              • operatorstringRequired
                tasks[].condition.all[].any[].operator

                Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                Allowed values
                "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
              • valuestring | number | booleanRequired
                tasks[].condition.all[].any[].value

                Value to compare against. Can be a string, number, or boolean.

            • Alternative 3objectOptional
              tasks[].condition.all[].any[]
              additionalProperties
              false

              Recursive structure; follows the same fields as its parent.

            • Alternative 4objectOptional
              tasks[].condition.all[].any[]
              additionalProperties
              false

              Recursive structure; follows the same fields as its parent.

    • Alternative 4objectOptional
      tasks[].condition
      additionalProperties
      false
      • anyarrayRequired
        tasks[].condition.any

        Sub-conditions where at least one must match (logical OR).

        Each item
        object
        minItems
        1
        • Alternative 1objectOptional
          tasks[].condition.any[]
          additionalProperties
          false
          • fieldstringRequired
            tasks[].condition.any[].field

            Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

            minLength
            1
          • operatorstringRequired
            tasks[].condition.any[].operator

            Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

            Allowed values
            "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

            Runtime rules

            • When field is tags, only contains and not-contains are supported because tags is multi-value.
          • valuestring | number | booleanRequired
            tasks[].condition.any[].value

            Value to compare against. Can be a string, number, or boolean.

        • Alternative 2objectOptional
          tasks[].condition.any[]
          additionalProperties
          false
          • customFieldstringRequired
            tasks[].condition.any[].customField

            Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

            pattern
            "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
          • operatorstringRequired
            tasks[].condition.any[].operator

            Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

            Allowed values
            "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
          • valuestring | number | booleanRequired
            tasks[].condition.any[].value

            Value to compare against. Can be a string, number, or boolean.

        • Alternative 3objectOptional
          tasks[].condition.any[]
          additionalProperties
          false
          • allarrayRequired
            tasks[].condition.any[].all

            Sub-conditions that must all match (logical AND).

            Each item
            object
            minItems
            1
            • Alternative 1objectOptional
              tasks[].condition.any[].all[]
              additionalProperties
              false
              • fieldstringRequired
                tasks[].condition.any[].all[].field

                Standard work item field name to evaluate (e.g. 'tags', 'priority', 'state', 'title').

                minLength
                1
              • operatorstringRequired
                tasks[].condition.any[].all[].operator

                Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                Allowed values
                "equals""not-equals""contains""not-contains""gt""lt""gte""lte"

                Runtime rules

                • When field is tags, only contains and not-contains are supported because tags is multi-value.
              • valuestring | number | booleanRequired
                tasks[].condition.any[].all[].value

                Value to compare against. Can be a string, number, or boolean.

            • Alternative 2objectOptional
              tasks[].condition.any[].all[]
              additionalProperties
              false
              • customFieldstringRequired
                tasks[].condition.any[].all[].customField

                Azure DevOps custom field reference in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

                pattern
                "^[A-Za-z][A-Za-z0-9_.]*\\.[A-Za-z][A-Za-z0-9_]*$"
              • operatorstringRequired
                tasks[].condition.any[].all[].operator

                Comparison operator. equals/not-equals: exact match. contains/not-contains: substring or array membership. gt/lt/gte/lte: numeric comparison.

                Allowed values
                "equals""not-equals""contains""not-contains""gt""lt""gte""lte"
              • valuestring | number | booleanRequired
                tasks[].condition.any[].all[].value

                Value to compare against. Can be a string, number, or boolean.

            • Alternative 3objectOptional
              tasks[].condition.any[].all[]
              additionalProperties
              false

              Recursive structure; follows the same fields as its parent.

            • Alternative 4objectOptional
              tasks[].condition.any[].all[]
              additionalProperties
              false

              Recursive structure; follows the same fields as its parent.

        • Alternative 4objectOptional
          tasks[].condition.any[]
          additionalProperties
          false

          Recursive structure; follows the same fields as its parent.

  • dependsOnarrayOptional
    tasks[].dependsOn

    IDs of tasks this task depends on. Atomize creates predecessor dependency links between these tasks.

    Each item
    string

    Runtime rules

    • In a Resolved Template, dependencies must reference existing task IDs and must not form a cycle, including a dependency on the task itself.
    • A task with repeat set cannot have a non-empty dependsOn, and another task cannot depend on it, even when repeat is 1.
    • A task with dependencies should have its own id; validation reports a warning when it does not.

    Template Reference

  • repeatintegerOptional
    tasks[].repeat

    Number of identical Tasks to generate from this definition (default 1). Each copy's title gets its position, e.g. 'Review (2)'. Cannot be combined with dependsOn.

    minimum
    1
    maximum
    9007199254740991

    Runtime rules

    • When repeat is set, dependsOn must be absent or empty and other tasks cannot depend on this task, even when repeat is 1.
    • In a Resolved Template, repeat must not exceed validation.maxRepeat (20 by default). A Mixin defers this cap to the composing Template.

    Template Reference

  • assignTostringOptional
    tasks[].assignTo

    Email address or alias to assign this task to.

    YAML examples

    assignTo: "@ParentAssignee"
    
    assignTo: "@Me"
    
    assignTo: "@Unassigned"
    
    assignTo: lead@company.com
    

    Template Reference

  • prioritynumberOptional
    tasks[].priority

    Priority value for the generated task.

    Template Reference

  • activitystringOptional
    tasks[].activity

    Azure DevOps activity type for this task (e.g. 'Development', 'Testing', 'Design').

    Template Reference

  • acceptanceCriteriaarrayOptionalDeprecated
    tasks[].acceptanceCriteria

    Deprecated: acceptance criteria are never written to the generated task. Move the text to description yourself; no removal quick fix is offered so the text is not lost.

    Each item
    string

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • acceptanceCriteriaAsChecklistbooleanOptionalDeprecated
    tasks[].acceptanceCriteriaAsChecklist

    Deprecated: acceptance criteria are never written to the generated task, so this setting has no effect. Remove it.

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • customFieldsobjectOptional
    tasks[].customFields

    Azure DevOps custom fields to set on the task. Keys must be in 'Namespace.FieldName' format (e.g. 'Custom.ClientTier').

    Runtime rules

    • Every key must be a platform field reference in Namespace.FieldName format, such as Custom.ClientTier.
    • Azure DevOps single-line and multi-line text fields accept strings; only multi-line fields accept newlines. Boolean fields require booleans; decimal fields require numbers; integer fields require whole numbers.
    • Date/time fields accept ISO 8601 strings or supported macros such as @Today. Identity fields accept strings such as email addresses or @Me when supported by Azure DevOps.
    • Picklist values must match an allowed value and its string or integer type.
    • Offline Validation checks shape only. Online Validation verifies field existence, read-only status, types and allowed values; generation verifies them against live platform metadata before creating Work Items.

    YAML examples

    customFields:
      Custom.ClientTier: Enterprise
      Custom.IsBillable: true
      Custom.TierRank: 3
      Custom.ReleaseVersion: "{{ story.customFields['Custom.ReleaseVersion'] }}"
      Custom.ReleaseDate: "@Today"
    

    Template Reference

    • [key]string | number | booleanOptional
      tasks[].customFields.*
taskTypestringOptional

Work Item type generated Tasks are created as, in the platform's own vocabulary (e.g. 'Task', 'Sub-task'). Defaults to Task on Azure DevOps. Online Validation checks custom fields and targetFields against this type.

minLength
1

Template Reference

estimationobjectOptional

Global estimation configuration for all tasks in this template.

additionalProperties
false

Template Reference

  • strategystringOptional
    estimation.strategy

    Estimation strategy. 'percentage' distributes the parent story's estimate across tasks proportionally.

    Default
    "percentage"
    Allowed values
    "percentage"

    Template Reference

  • sourcestringOptional
    estimation.source

    Story field that supplies the Story Estimate, as a platform field reference name (e.g. 'Custom.TShirtSize'). Replaces the platform's default fields with no fallback: a blank override is unresolvable. Azure DevOps defaults to StoryPoints, then Effort, Size and OriginalEstimate.

    minLength
    1

    Template Reference

  • conversionobjectOptional
    estimation.conversion

    Translates the Story Estimate into the Task's unit before it is split across tasks. Set exactly one of factor or table; omit for one-to-one.

    additionalProperties
    false

    Runtime rules

    • Set exactly one of factor or table.
    • Rounding and minimumTaskEstimate apply after conversion and percentage distribution.

    YAML examples

    conversion:
      factor: 4
    
    conversion:
      table:
        "1": 2
        "2": 4
        "3": 8
        "5": 16
    
    conversion:
      table:
        S: 2
        M: 4
        L: 5
        XL: 13
      multipliers: true
    

    Template Reference

    • factornumberOptional
      estimation.conversion.factor

      Multiplier from the Story's unit to the Task's unit, e.g. 4 when 1 point = 4 hours.

      exclusiveMinimum
      0

      Template Reference

    • tableobjectOptional
      estimation.conversion.table

      Story Estimate value to non-negative Task-unit amount, matched exactly, e.g. { XS: 1, S: 2, M: 4, L: 5 } or { 1: 2, 2: 4, 3: 8 } for scales that aren't linear. A value missing from the table is unresolvable unless enabled multipliers match it; ifParentHasNoEstimation decides what happens next.

      Runtime rules

      • The conversion table must contain at least one entry.

      Template Reference

      • [key]numberOptional
        estimation.conversion.table.*
        minimum
        0
    • multipliersbooleanOptional
      estimation.conversion.multipliers

      Also accept a number followed by a table key, with optional whitespace: '0.3XL' or '0.3 XL' = 0.3 × XL. Defaults to false. Exact keys win; otherwise the longest matching suffix key wins. Forms such as 'XL*0.3' or '0,3XL' are unresolvable. Requires a table with at least one non-numeric key.

      Runtime rules

      • When multipliers is true, conversion.table must be set and at least one table key must be non-numeric.

      Template Reference

  • targetFieldsarrayOptional
    estimation.targetFields

    Task fields that receive the Task Estimate, as platform field reference names. Azure DevOps defaults to Microsoft.VSTS.Scheduling.RemainingWork and Microsoft.VSTS.Scheduling.OriginalEstimate, with Microsoft.VSTS.Scheduling.CompletedWork initialised to 0. Overrides replace all default writes, including CompletedWork initialisation; values are written exactly as calculated.

    Each item
    string · minLength 1
    minItems
    1

    Template Reference

  • normalizestringOptional
    estimation.normalize

    What to do when the generated tasks' percentages don't add up to 100%. 'auto' (default) scales totals below 100% up and leaves totals above 100% as written unless you choose otherwise at generate time; 'always' scales to 100% in both directions; 'never' uses the percentages exactly as written, so a skipped task's share stays unallocated.

    Allowed values
    "auto""always""never"

    Template Reference

  • roundingstringOptional
    estimation.rounding

    Rounding mode for percentage-based Task Estimates. Defaults to none, keeping decimal values. nearest rounds to the nearest half unit (0.5), up to the next half unit, and down to the previous half unit. Applied after conversion and distribution, before the minimum.

    Default
    "none"
    Allowed values
    "nearest""up""down""none"

    Template Reference

  • minimumTaskEstimatenumberOptional
    estimation.minimumTaskEstimate

    Minimum percentage-based Task Estimate after rounding, in the Task's unit (hours on Azure DevOps). Defaults to 0. Takes precedence over deprecated minimumTaskPoints when both are set; fixed estimates bypass it.

    Template Reference

  • minimumTaskPointsnumberOptionalDeprecated
    estimation.minimumTaskPoints

    Deprecated: use minimumTaskEstimate. Still honoured when minimumTaskEstimate is absent.

    Runtime rules

    • minimumTaskEstimate takes precedence when both minimum fields are set. Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • ifParentHasNoEstimationstringOptional
    estimation.ifParentHasNoEstimation

    Behaviour when the Story Estimate is missing or cannot be converted. 'warn' (default) creates the tasks with blank estimates (never 0) and reports a warning, 'skip' creates no tasks for the Story and reports why, 'use-default' uses defaultParentEstimation instead. Without a defaultParentEstimation, use-default behaves like warn.

    Allowed values
    "skip""warn""use-default"

    Template Reference

  • defaultParentEstimationnumber | stringOptional
    estimation.defaultParentEstimation

    Story Estimate used when the real one is missing or cannot be converted and ifParentHasNoEstimation is 'use-default', in the Story's unit (e.g. 'M' or 5). Goes through the same conversion as a real Story Estimate.

    Runtime rules

    • When ifParentHasNoEstimation is use-default and this value is set, it must be convertible: numeric without a table, or a matching conversion.table key (including enabled multipliers).

    Template Reference

    • Alternative 1numberOptional
      estimation.defaultParentEstimation
    • Alternative 2stringOptional
      estimation.defaultParentEstimation
      minLength
      1
validationobjectOptional

Validation rules applied when this template is used.

additionalProperties
false

Template Reference

  • modestringOptional
    validation.mode

    'strict' treats blocking validation warnings as errors; 'lenient' (default) allows warnings. Non-blocking advisories remain warnings in both modes.

    Allowed values
    "strict""lenient"

    Template Reference

  • totalEstimationMustBenumberOptional
    validation.totalEstimationMustBe

    Required total estimation percentage, counting each repeated copy. Validation checks that it is reachable between the lower and upper allocation bounds, including conditions and percentage overrides. It may exceed 100 when Tasks span roles.

    Runtime rules

    • Choose one total constraint. If both are supplied, totalEstimationMustBe takes precedence and totalEstimationRange is ignored.

    Template Reference

  • totalEstimationRangeobjectOptional
    validation.totalEstimationRange

    Allowed total estimation percentage range, counting each repeated copy. Must overlap the lower and upper reachable allocation bounds, including conditions and percentage overrides. Bounds may exceed 100 when Tasks span roles.

    additionalProperties
    false

    Runtime rules

    • Choose one total constraint. If both are supplied, totalEstimationMustBe takes precedence and totalEstimationRange is ignored.

    Template Reference

    • minnumberRequired
      validation.totalEstimationRange.min

      Minimum allowed total estimation percentage (inclusive).

    • maxnumberRequired
      validation.totalEstimationRange.max

      Maximum allowed total estimation percentage (inclusive).

  • minTasksnumberOptional
    validation.minTasks

    Minimum generated Task count the Template must define, counting each repeated copy.

    Template Reference

  • maxTasksnumberOptional
    validation.maxTasks

    Maximum generated Task count the Template may define, counting each repeated copy.

    Template Reference

  • maxRepeatintegerOptional
    validation.maxRepeat

    Highest 'repeat' any task in this template may use (default 20). Raise it for a template that genuinely needs more copies.

    minimum
    1
    maximum
    9007199254740991

    Runtime rules

    • This cap applies to every task definition in the Resolved Template, including tasks contributed by Mixins.

    Template Reference

  • taskEstimationRangeobjectOptional
    validation.taskEstimationRange

    Inclusive bounds for each final task percentage after normalization, including percentage rounding. Fixed estimates are excluded.

    additionalProperties
    false

    Runtime rules

    • min must be less than or equal to max.
    • Checked after normalization and its percentage rounding, per repeated copy. With normalize: never, supplied percentages are used unchanged. Fixed estimates are excluded. Story-dependent conditions and percentage overrides are checked during preview and generation, once the active allocation is known. Task Estimate rounding in hours or points does not change this percentage constraint.

    Template Reference

    • minnumberRequired
      validation.taskEstimationRange.min

      Minimum allowed estimation percentage for a single task.

      minimum
      0
      maximum
      100
    • maxnumberRequired
      validation.taskEstimationRange.max

      Maximum allowed estimation percentage for a single task.

      minimum
      0
      maximum
      100
  • requiredTasksarrayOptional
    validation.requiredTasks

    Tasks that must be present in the template, matched by title or id.

    Each item
    object

    Runtime rules

    • Each required entry must match an existing task by its supplied id or its title. Both comparisons are case-insensitive; a title match is accepted even if the supplied id does not match.

    Template Reference

    • titlestringRequired
      validation.requiredTasks[].title

      Required task title. Matched case-insensitively against task titles.

    • idstringOptional
      validation.requiredTasks[].id

      Optional required task ID, matched case-insensitively. A matching title also satisfies the requirement when this ID is absent or does not match.

metadataobjectOptional

Additional metadata for template discovery and documentation.

additionalProperties
false

Template Reference

  • categorystringOptional
    metadata.category

    Template category for discovery and grouping (e.g. 'Frontend', 'Backend', 'Infrastructure').

    Template Reference

  • difficultystringOptionalDeprecated
    metadata.difficulty

    Deprecated: nothing in Atomize reads it. Describe the work in description instead.

    Allowed values
    "beginner""intermediate""advanced"

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • recommendedForarrayOptionalDeprecated
    metadata.recommendedFor

    Deprecated: nothing in Atomize reads it. filter.workItemTypes already declares which Work Item types the template targets.

    Each item
    string

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • estimationGuidelinesstringOptional
    metadata.estimationGuidelines

    Human-readable guidance on how to estimate stories before using this template.

    Template Reference

  • notesstringOptional
    metadata.notes

    Free-form context for the template's authors and maintainers.

    Template Reference

  • examplesarrayOptionalDeprecated
    metadata.examples

    Deprecated: nothing in Atomize reads it. Describe when to use the template in description instead.

    Each item
    string

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

  • changelogarrayOptionalDeprecated
    metadata.changelog

    Deprecated: nothing in Atomize reads it. Keep the template's history in version control.

    Each item
    object

    Runtime rules

    • Using this deprecated field produces a non-blocking warning, even in strict mode.

    Template Reference

    • versionstringRequired
      metadata.changelog[].version

      Template version this changelog entry describes.

    • datestringRequired
      metadata.changelog[].date

      Date of the change in YYYY-MM-DD format.

    • changesstringRequired
      metadata.changelog[].changes

      Summary of what changed in this version.

extendsstringOptional

Catalog Template name or file path of a parent Template to inherit from. Resolved by the Template Library.

Template Reference

mixinsarrayOptional

Catalog Mixin names or file paths to compose into this Template. Resolved by the Template Library.

Each item
string

Template Reference

originstringOptional

Catalog ref (template:<name> or mixin:<name>) this template was derived from. Informational only; does not affect ref resolution.

Generated from the Atomize schema main @ 6b0ace1 · 2026-10-22