From 72cf55bbd2067d13fc4b049e3e16f1588108644c Mon Sep 17 00:00:00 2001 From: make-it-realll Date: Sat, 25 Jul 2026 17:53:47 +0800 Subject: [PATCH] fix(apple): decode reason_code in Contract 1.1 rest suggestion The 1.1 evaluate response (restSuggestionV1_1Schema) always includes a required reason_code, but the Apple client's RestSuggestionResponse decoder and RestDecision dropped it. Add the field and thread it through so it is available to UI/telemetry. Pure client-side, backward compatible. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../DeviceActivityMonitorExt/HTTPRestDecisionProvider.swift | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/HushApp/DeviceActivityMonitorExt/HTTPRestDecisionProvider.swift b/apps/HushApp/DeviceActivityMonitorExt/HTTPRestDecisionProvider.swift index c895744..1aad31c 100644 --- a/apps/HushApp/DeviceActivityMonitorExt/HTTPRestDecisionProvider.swift +++ b/apps/HushApp/DeviceActivityMonitorExt/HTTPRestDecisionProvider.swift @@ -13,6 +13,7 @@ struct RestDecision { let requestID: String let shouldOfferRest: Bool let message: String + let reasonCode: String let generatedTask: GeneratedRestTask? } @@ -120,6 +121,7 @@ final class HTTPRestDecisionProvider: RestDecisionProviding { requestID: suggestion.requestID, shouldOfferRest: suggestion.shouldOfferRest, message: suggestion.message, + reasonCode: suggestion.reasonCode, generatedTask: suggestion.generatedTask ) } @@ -167,6 +169,7 @@ private struct RestSuggestionResponse: Decodable { let requestID: String let shouldOfferRest: Bool let message: String + let reasonCode: String let generatedTask: GeneratedRestTask? let defaultQuestID: String? @@ -174,6 +177,7 @@ private struct RestSuggestionResponse: Decodable { case requestID = "request_id" case shouldOfferRest = "should_offer_rest" case message + case reasonCode = "reason_code" case generatedTask = "generated_task" case defaultQuestID = "default_quest_id" }