Track A (§9.1 items 1-4, DESIGN-HYBRID.md):
- dispatch_task_hybrid: route by tier + lease state (resident resume/cold
vs pool hit/cold/queue, 300s queue timeout -> host_capacity_exceeded)
- clean pool prewarm split from prewarm_persistent_vm: tenant-less birth
(no data disk, no seed, no Gitea sync wait), binding deferred to
acquire; warm_pool_sync_incomplete fail-closed at allocation
- tenant data disk mount at acquire (attach_tenant_data_disk, PUT
/vm.add-disk + chv-data-mount) and unmount+sync at release;
_verify_task_disk_source invariant: task disk must be the tenant's
data disk, never the clean snapshot disk
- restore_vm validates tenant_id before restore: unregistered/unmarked
snapshot denied in strict (hybrid) mode, mismatch -> snapshot_tenant_
mismatch fail-closed, audit vm_restore_denied (host_id + tenant only)
- settled values: 2 warm per host, pool cap 50% of low-freq peak,
resident cap 50% of VM slots, 1 snapshot per tenant per 30 days
Tests: cloud/tests/test_chv_hybrid_a.py (27 tests, all passing)
Full cloud suite: 4606 tests, 0 failures, 0 errors, 15 skipped
(TMPDIR on /home; ~91 min, slowed by concurrent track-C suite)