fix: fail safe on missing workspace revisions

This commit is contained in:
2026-08-08 20:03:41 +02:00
parent c3a5621737
commit 1b1213317b
10 changed files with 205 additions and 98 deletions
+7 -5
View File
@@ -180,12 +180,11 @@ export function ComposerFooter() {
const workspace = preferences.workspaceId ?? settings?.workspace ?? "";
const selectedWorkspace = workspaces.find((candidate) => candidate.id === workspace);
const selectedWorkspaceHasRevision = Boolean(selectedWorkspace?.revision);
const { data: workspaceRecord, isError: workspacePolicyError } = useQuery({
queryKey: ["workspace", workspace],
queryFn: () => getWorkspace(workspace),
// Legacy metadata responses do not carry a registry revision, so retain the
// existing selector behavior without issuing an incompatible detail request.
enabled: Boolean(selectedWorkspace?.revision),
enabled: selectedWorkspaceHasRevision,
});
const model = preferences.model ?? settings?.model ?? "";
const thinking = preferences.thinking ?? settings?.thinking ?? "medium";
@@ -202,6 +201,8 @@ export function ComposerFooter() {
workspacePolicyGate.beginSummary(workspace);
} else if (workspaceSummariesError) {
workspacePolicyGate.rejectSummary(workspace);
} else if (selectedWorkspace && !selectedWorkspaceHasRevision) {
workspacePolicyGate.rejectSummary(workspace);
} else if (selectedWorkspace?.revision?.state === "migration_required") {
workspacePolicyGate.rejectSummary(workspace);
} else if (selectedWorkspace?.revision) {
@@ -241,7 +242,8 @@ export function ComposerFooter() {
function update(patch: WorkspacePreference) {
if (patch.workspaceId && patch.workspaceId !== workspace) {
const selected = workspaces.find((candidate) => candidate.id === patch.workspaceId);
if (selected?.revision?.state === "migration_required") workspacePolicyGate.rejectSummary(patch.workspaceId);
if (selected && !selected.revision) workspacePolicyGate.rejectSummary(patch.workspaceId);
else if (selected?.revision?.state === "migration_required") workspacePolicyGate.rejectSummary(patch.workspaceId);
else if (selected?.revision) workspacePolicyGate.select(patch.workspaceId);
else workspacePolicyGate.allowLegacy(patch.workspaceId);
}
@@ -267,7 +269,7 @@ export function ComposerFooter() {
{workspaces.length === 0 ? (
<option value="">— workspace —</option>
) : (
workspaces.filter((w) => w.revision?.state !== "migration_required").map((w) => (
workspaces.filter((w) => w.revision && w.revision.state !== "migration_required").map((w) => (
<option key={w.name} value={w.name}>
{w.name}
</option>