Platform failure and user failure are different outcomes. Every row's fourth column says what the engineer sees, because conflating the two is what teaches people to retry instead of read.
"Flake" is never a root cause in this table. Runner loss is detected by lease expiry, dependency outage by mirror miss rate, cache poisoning by integrity check — each has a named detection signal.
Permanent user failure is never retried. A retried compile error wastes capacity and hides the first-failure summary.
Fail-closed choices
Gate service unavailable fails closed for production and is configurable only below it.
Store failure pauses scheduling rather than making decisions on stale state; a run never completes without its artefacts durable.
Risks
Nine classes is the set that is designed for. The class not in the table — a control-plane logic bug that mis-signs or mis-attributes — has no automatic response and relies on the transparency log being independently verifiable.