ManifestFetchEvidence
data class ManifestFetchEvidence(val url: String, val host: String, val outcome: String, val status: Int?, val ms: Long, val hostOk: Int, val hostFail: Int)
What a failed manifest read can say for itself. Twin of ManifestFetchEvidence in packages/core/src/services/ManifestService.ts — see there for why the field set is this small and no smaller.
The short version: "timeout" alone is equally true of a dead backend, a slow edge, and a device on a long network path, and those need opposite responses. hostOk/hostFail are what separate them without a second run.