feat: refine workbench chrome (#761)

* docs: define product and design direction

* style: establish restrained workbench primitives

* refactor: declutter board and task topbars

* style: align dockview panel chrome

* fix: align task topbar vcs control sizing

* refactor: surface integrations navigation

* fix: repair integrations and task creation workflow

* refactor: include linear in integrations navigation

* style: restore familiar workbench tones

* fix: add dockview tab breathing room

* fix: show configured integration shortcuts

* fix: hover open integrations menu

* fix: stabilize integrations hover menu

* fix: align home and dockview topbars

* fix: normalize home topbar controls

* fix: compact home topbar height

* fix: simplify home chrome and split buttons

* fix: move integrations to left chrome

* fix: restore home stats shortcut

* fix: add dockview tab breathing room

* fix: border home stats button

* fix: streamline dockview topbar actions

* fix: align task split button seam

* fix: address review feedback

* fix: restore topbar e2e affordances

* fix: stabilize workflow e2e isolation

* fix: add task topbar action overflow

* fix: address PR review feedback
This commit is contained in:
José Almeida
2026-05-01 21:02:41 +01:00
committed by GitHub
parent c8fcd6c5aa
commit 68c94dfa3a
48 changed files with 2615 additions and 890 deletions
+12 -8
View File
@@ -30,19 +30,23 @@ export class WorkflowSettingsPage {
/** Find a workflow card by the name shown in its input field using its current value. */
async findWorkflowCard(name: string): Promise<Locator> {
const cards = this.page.locator('[data-testid^="workflow-card-"]');
const count = await cards.count();
for (let i = 0; i < count; i++) {
const card = cards.nth(i);
await expect(cards.first()).toBeVisible();
const testIds = await cards.evaluateAll((elements) =>
elements
.map((element) => element.getAttribute("data-testid"))
.filter((testId): testId is string => Boolean(testId)),
);
for (const testId of testIds) {
const card = this.page.getByTestId(testId);
const input = card.locator("input").first();
const value = await input.inputValue();
const value = await input.inputValue({ timeout: 500 }).catch(() => null);
if (value === name) {
// Return a stable locator using the specific data-testid, not positional nth()
const testId = await card.getAttribute("data-testid");
if (testId) return this.page.getByTestId(testId);
return card;
}
}
// Return a locator that won't match so assertions can fail with a good message
return this.page.getByTestId(`workflow-card-not-found-${name}`);
}