Remember the New Workspace isolation choice
The local/worktree choice was unstored component state and reset on every remount of the New Workspace screen (e.g. after creating a workspace). Persist it in the create-form preferences (FormPreferences.isolation). Also rename the app-layer "backing" to "isolation" to match its UI label. Isolation is the create-time intent; it stays distinct from workspaceKind, the git-derived persisted property, and the wire's source.kind.
This commit is contained in:
@@ -84,4 +84,27 @@ describe("create agent preferences", () => {
|
||||
it("loads invalid stored preferences as empty preferences", () => {
|
||||
expect(parseFormPreferences({ providerPreferences: { codex: { mode: 42 } } })).toEqual({});
|
||||
});
|
||||
|
||||
it("persists and reloads the workspace isolation choice", async () => {
|
||||
const storage = new FakeCreateAgentPreferenceStorage();
|
||||
const preferences = new CreateAgentPreferencesService(storage);
|
||||
|
||||
const save = preferences.update({ isolation: "worktree" });
|
||||
await storage.nextWrite();
|
||||
storage.finishOldestWrite();
|
||||
await save;
|
||||
|
||||
expect(storage.savedPreferences()).toEqual({ isolation: "worktree" });
|
||||
expect(await new CreateAgentPreferencesService(storage).load()).toEqual({
|
||||
isolation: "worktree",
|
||||
});
|
||||
});
|
||||
|
||||
it("treats stored preferences without an isolation choice as undefined", () => {
|
||||
expect(parseFormPreferences({ provider: "codex" }).isolation).toBeUndefined();
|
||||
});
|
||||
|
||||
it("rejects an unknown isolation value as invalid stored preferences", () => {
|
||||
expect(parseFormPreferences({ provider: "codex", isolation: "sandbox" })).toEqual({});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -33,6 +33,7 @@ const formPreferencesSchema = z.object({
|
||||
}),
|
||||
)
|
||||
.optional(),
|
||||
isolation: z.enum(["local", "worktree"]).optional(),
|
||||
});
|
||||
|
||||
export type ProviderPreferences = z.infer<typeof providerPreferencesSchema>;
|
||||
|
||||
Reference in New Issue
Block a user