Top-level ADO pipeline definition.
ADO pipelines come in three shapes:
(a) stages → jobs → steps
(b) jobs → steps (no stages key)
(c) steps only (no stages or jobs key)
A single resources.repositories[] entry — declares an external repo
alias the pipeline can consume via template: x@alias, extends:, or
checkout: alias.
Deployment-job strategy: block. ADO ships three strategies — runOnce,
rolling, canary — each with multiple lifecycle phases that may carry
their own step list. We capture all of them; the AdoJob::all_steps
helper flattens them into one sequence.
Lifecycle phases carried by every deployment strategy. Each phase may
have its own steps:. Covering all six avoids silently dropping
privileged setup/teardown steps from the authority graph.
ADO dependsOn: accepts two YAML shapes — a single string
(dependsOn: my_job) or a sequence of strings
(dependsOn: [a, b, c]). The untagged enum normalises both at
deserialization time so callers can iterate uniformly.