Playbook block reference

BlockFieldsNotes
playbook "name"description (required), version (default "0.0.0"), gather*, vars?, play*one per file
gather "label"description?, from (required, pkg.gatherer), params?label becomes the variable holding the result
varsfree-form name = exprexpressions may reference gatherer results and other vars
play "name"description (required), parallel (default true), step*, container*parallel = false = strict declaration order
container "name"description (required), condition?, step*, container*condition applies to all children
step "name"description (required), resource (required), condition?, requires?, concurrency?, properties?concurrency may *tighten* the resource's class, never loosen
properties / paramsfree-form name = exprvalidated against the resource/gatherer param declarations

description is mandatory wherever shown as required — the loader enforces it.