Fix confirmed-no-PR clearing and cross-host race in PR state tri-state master
- pullRequestsByWorktreeID assigned a nil literal through the optional-value dictionary subscript, which removes the key instead of storing an explicit nil. The confirmed-no-PR clear never reached the reducer, so stale PR badges were never cleared and the tri-state mechanism was a no-op. Use updateValue(nil, forKey:) instead. - A failed host batch arriving before the final refreshed outcome left the accumulated confirmed-no-PR set intact, so a healthy host could clear a PR that lives on the failed host. Track failed batches per repository and suppress confirmed clears when any batch failed, regardless of outcome arrival order. - Add reducer tests for explicit clear, unknown-status preserve, both failed/refreshed arrival orderings, and a later host batch overriding an earlier confirmation; add coordinator tests covering confirmedNoPrBranches computation (all-candidates-succeeded vs partial candidate failure).