diff --git a/frontend/public/locales/en-GB/translation.toml b/frontend/public/locales/en-GB/translation.toml
index 38b9369015..e13550e5f1 100644
--- a/frontend/public/locales/en-GB/translation.toml
+++ b/frontend/public/locales/en-GB/translation.toml
@@ -7899,7 +7899,7 @@ viewerMode = "Switch to the file editor to add multiple files."
[toolPanel]
allTools = "All tools"
alpha = "Alpha"
-backToTools = "Back to all tools"
+backToTools = "Back to tools"
collapse = "Collapse panel"
comingSoon = "Coming soon:"
expand = "Expand panel"
diff --git a/frontend/src/core/components/shared/WorkbenchBar.tsx b/frontend/src/core/components/shared/WorkbenchBar.tsx
index e0e036c309..b50e8ae47e 100644
--- a/frontend/src/core/components/shared/WorkbenchBar.tsx
+++ b/frontend/src/core/components/shared/WorkbenchBar.tsx
@@ -357,7 +357,7 @@ export default function WorkbenchBar({
data-tour="workbench-bar"
>
{/* Left: View switcher */}
-
+
{hasFiles &&
viewOptions.map((opt) => (
}
onClick={handleBackToTools}
- aria-label={t("toolPanel.backToTools", "Back to all tools")}
+ aria-label={t("toolPanel.backToTools", "Back to tools")}
styles={{ root: { justifyContent: "flex-start" } }}
>
- {t("toolPanel.backToTools", "Back to all tools")}
+ {t("toolPanel.backToTools", "Back to tools")}
diff --git a/frontend/src/core/tests/helpers/api-stubs.ts b/frontend/src/core/tests/helpers/api-stubs.ts
index b18653d88d..a8291a181e 100644
--- a/frontend/src/core/tests/helpers/api-stubs.ts
+++ b/frontend/src/core/tests/helpers/api-stubs.ts
@@ -230,6 +230,11 @@ export async function mockAppApis(
route.fulfill({ json: {} }),
);
+ // License info — stubbed so admin settings doesn't log proxy errors
+ await page.route("**/api/v1/admin/license-info", (route: Route) =>
+ route.fulfill({ json: { licenseType: "FREE", valid: true, maxUsers: 5 } }),
+ );
+
// Settings sections touched by the settings page
await page.route("**/api/v1/admin/settings", (route: Route) =>
route.fulfill({ json: {} }),
diff --git a/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts b/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts
index 50163806b1..126e13060c 100644
--- a/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts
+++ b/frontend/src/core/tests/stubbed/automation-page-ui.spec.ts
@@ -82,8 +82,7 @@ test.describe("11. Automation Page", () => {
test.describe("11.1 Automation - Suggested Workflows", () => {
test("should display saved and suggested workflows", async ({ page }) => {
// Step 1: Verify the Automation Selection header is present
- const automateLink = page.locator('a[href="/automate"]').first();
- await expect(automateLink).toBeVisible();
+ await expect(page).toHaveURL(/\/automate/);
await expect(
page.getByText(/Automation Selection/i).first(),
diff --git a/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts b/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts
index 8176f37d71..41b64c1419 100644
--- a/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts
+++ b/frontend/src/core/tests/stubbed/tour-onboarding.spec.ts
@@ -204,8 +204,11 @@ test.describe("15.7 Tour selectors — admin modal nav items", () => {
const navItem = page
.locator(`[data-tour="admin-${section}-nav"]`)
.first();
+ // Use waitFor attached (not isVisible) because admin nav items live in a
+ // scrollable sidebar and may be below the visible fold even when rendered.
const isPresent = await navItem
- .isVisible({ timeout: 5_000 })
+ .waitFor({ state: "attached", timeout: 5_000 })
+ .then(() => true)
.catch(() => false);
if (!isPresent) {
test.skip(
@@ -214,6 +217,7 @@ test.describe("15.7 Tour selectors — admin modal nav items", () => {
);
return;
}
+ await navItem.scrollIntoViewIfNeeded();
await expect(navItem).toBeVisible();
});
}