Phase-3 R1 foundation. harness.level.compute_level(rungs)->(level,cap_reason) with YunoHost gap-caps semantics: level = highest rung 1..L all clean PASS; first non-PASS (FAIL or N/A) caps, recorded in cap_reason. N/A caps like fail but distinctly (L5 'no integration surface' example). Helpers backup_restore_status + tier_to_rung. 16 unit tests incl U0 gate cases (L4-pass, L2-cap). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>