Gates are the enforcement primitive of governed automation. The condition can be human (an approval must be given) or structural (all child work finished, a status reached, context recorded). What makes something a gate rather than an instruction is who evaluates it: an instruction is read by the model, a gate is checked by the engine.
That distinction is why gates hold against the failure mode instructions cannot: a model talking itself past a checkpoint. A refused gate returns exactly which conditions are unmet, which makes the block visible and actionable instead of silent.
Place gates sparingly and deliberately: each one is a point where the loop stops. The craft is putting them where the cost of a wrong advance is high (a release, an outbound message, a publish) and nowhere else.