From 20f4cbcb0fc29143efeef2d92b3c3c81d74e91e9 Mon Sep 17 00:00:00 2001 From: murashit Date: Wed, 10 Jun 2026 09:27:02 +0900 Subject: [PATCH] Document runtime request null semantics --- tests/features/chat/chat-state-reducer.test.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/features/chat/chat-state-reducer.test.ts b/tests/features/chat/chat-state-reducer.test.ts index e4f6e6c3..1db56dfa 100644 --- a/tests/features/chat/chat-state-reducer.test.ts +++ b/tests/features/chat/chat-state-reducer.test.ts @@ -419,6 +419,24 @@ describe("chatReducer", () => { expect(state.runtime.activeApprovalsReviewer).toBe("user"); }); + it("keeps null runtime request semantics explicit", () => { + let state = createChatState(); + state = chatReducer(state, { type: "runtime/requested-model-set", model: "gpt-5.1" }); + state = chatReducer(state, { type: "runtime/requested-effort-set", effort: "high" }); + state = chatReducer(state, { type: "runtime/requested-service-tier-set", serviceTier: "fast" }); + state = chatReducer(state, { type: "runtime/requested-approvals-reviewer-set", approvalsReviewer: "auto_review" }); + + state = chatReducer(state, { type: "runtime/requested-model-set", model: null }); + state = chatReducer(state, { type: "runtime/requested-effort-set", effort: null }); + state = chatReducer(state, { type: "runtime/requested-service-tier-set", serviceTier: null }); + state = chatReducer(state, { type: "runtime/requested-approvals-reviewer-set", approvalsReviewer: null }); + + expect(state.runtime.requestedModel).toEqual({ kind: "resetToConfig" }); + expect(state.runtime.requestedReasoningEffort).toEqual({ kind: "resetToConfig" }); + expect(state.runtime.requestedServiceTier).toEqual({ kind: "unchanged" }); + expect(state.runtime.requestedApprovalsReviewer).toEqual({ kind: "unchanged" }); + }); + it("stores updates through ChatStateStore without mutating the initial snapshot", () => { const initial = createChatState(); initial.transcript.displayItems = [message("initial")];