Reference

Task Aggregate

How to model named verification entrypoints and other dependency-closure tasks without fake no-op shell bodies.

referenceautomation buildersintermediatestable2026-05-30

Purpose

Use this page when a task exists only to run other tasks in a declared order.

The strong default for that shape is a first-class aggregate body, not run: "true" plus depends_on.

  • aggregate owns the execution body for named dependency-closure entrypoints
  • depends_on stays the prerequisite edge for executable child tasks
  • aggregate membership should stay under aggregate.tasks, not duplicated in depends_on
  • aggregate tasks should stay plain: no command body and no task-local execution surface such as context, requirements, runtime, effects, execution, or variants layered on top
  • aggregate tasks are entrypoints, not prerequisites; executable tasks should expand the child tasks directly instead of depending on an aggregate

Preferred aggregate shape

Named verification entrypointyaml
tasks:  verify:    description: Run the canonical verification entrypoint    aggregate:      tasks:        - lint        - security:brakeman        - security:audit        - test

Why this is stronger

  • removes fake no-op shells such as run: "true"
  • keeps aggregate membership separate from prerequisite edges
  • lets ota validate aggregate-specific rules and surface aggregate results honestly in receipts and JSON output
  • gives docs, examples, and agents one canonical verification-entrypoint shape

Keep depends_on for prerequisites

Executable task with prerequisitesyaml
tasks:  build:    run: pnpm build    depends_on:      - setup