diff --git a/src/app/services/flows/flows.spec.ts b/src/app/services/flows/flows.spec.ts
index fa69bd9..1eb3f27 100644
--- a/src/app/services/flows/flows.spec.ts
+++ b/src/app/services/flows/flows.spec.ts
@@ -53,6 +53,10 @@ describe('FlowsService', () => {
createNewFlow: vi.fn()
};
+ // See the same line in projects.spec.ts: a user left in storage by an earlier test would make
+ // the sign-in below a no-op transition, and the cache would have no reason to reset.
+ localStorage.removeItem(Authorization.USER_STORAGE_KEY);
+
TestBed.configureTestingModule({});
service = TestBed.inject(FlowsService);
service.flowsCallService = callServiceSpy as unknown as FlowsCallServiceBase;
diff --git a/src/app/services/projects/projects.spec.ts b/src/app/services/projects/projects.spec.ts
index 20f4ac7..9ef62d7 100644
--- a/src/app/services/projects/projects.spec.ts
+++ b/src/app/services/projects/projects.spec.ts
@@ -43,6 +43,10 @@ describe('ProjectsService', () => {
deleteProject: vi.fn()
};
+ // Authorization restores the signed-in user from storage when it is constructed, and storage
+ // outlives a TestBed. Left over, it makes "bob signs in" a no-op transition in the test below.
+ localStorage.removeItem(Authorization.USER_STORAGE_KEY);
+
TestBed.configureTestingModule({});
service = TestBed.inject(ProjectsService);
service.projectsCallService = callServiceSpy as unknown as ProjectsCallServiceBase;
diff --git a/src/app/shared/nodes/generic-node/generic-node.html b/src/app/shared/nodes/generic-node/generic-node.html
index 7cf540c..dda92fc 100644
--- a/src/app/shared/nodes/generic-node/generic-node.html
+++ b/src/app/shared/nodes/generic-node/generic-node.html
@@ -548,6 +548,16 @@