You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maka.apache.org by wy...@apache.org on 2026/09/03 07:57:52 UTC
(maka) branch main updated: refactor(desktop): retire obsolete Astryx workarounds (#4628)
This is an automated email from the ASF dual-hosted git repository.
M4n5ter pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/maka.git
The following commit(s) were added to refs/heads/main by this push:
new 15e4b6b9ec refactor(desktop): retire obsolete Astryx workarounds (#4628)
15e4b6b9ec is described below
commit 15e4b6b9ec45d695456a378e04bbe2e796095fdb
Author: Wang <m4...@gmail.com>
AuthorDate: Thu Sep 3 15:57:33 2026 +0800
refactor(desktop): retire obsolete Astryx workarounds (#4628)
Astryx now owns the resize-handle hit area and ChatLayout flex contract that Maka still overrode. Remove those stale compatibility rules, delete the compositor-sensitive E2E that duplicated vendor behavior, and retain only the product-owned sidebar geometry check.
Generated-by: OpenAI Codex
---
apps/desktop/e2e/sidebar-geometry.spec.ts | 103 ++-------------------
.../features/session-navigation/testing.ts | 2 -
apps/desktop/src/renderer/styles/chat-header.css | 15 ---
.../renderer/styles/module-pages/module-shell.css | 12 ---
apps/desktop/src/renderer/styles/shell-layout.css | 6 +-
apps/desktop/src/renderer/styles/sidebar.css | 19 ----
6 files changed, 7 insertions(+), 150 deletions(-)
diff --git a/apps/desktop/e2e/sidebar-geometry.spec.ts b/apps/desktop/e2e/sidebar-geometry.spec.ts
index e1f8b3c67f..a0e52cd609 100644
--- a/apps/desktop/e2e/sidebar-geometry.spec.ts
+++ b/apps/desktop/e2e/sidebar-geometry.spec.ts
@@ -18,47 +18,20 @@
*/
/*
- * Locks the two invariants of the Astryx sidenav column that live only in
- * hand-tuned CSS and were, before this file, verified by nothing (#3834):
- *
- * 1. Geometry — `.maka-sidenav-motion { height: 100% }` (shell-layout.css).
- * Without a definite height the wrapper grows to its unclipped content and
- * the footer leaves the window. `sidenav footer stays inside the window`
- * is the lock shell-layout.css's comment already names by this path.
- *
- * 2. The resize handle — the two workaround rules that keep it grabbable:
- * `top: var(--h-titlebar)` (shell-layout.css) and `transform: none
- * !important` (sidebar.css, the Astryx hitAreaOffsetX fix). A regression
- * in either leaves a column that looks right and simply cannot be dragged.
- * `resize handle drag ...` grabs the handle at its vertical centre — the
- * exact point the bug left ungrabbable — and asserts the width changes.
- *
- * Both run on `projectSidebarWindow`: the only fixture that boots the shell
- * expanded (so the handle is mounted) with a populated, overflowing list (60
- * sessions, so the footer has content to be pushed past). It opens with the
- * search modal over an inert shell, so dismiss it first — the same first step
- * sidebar-project-row.spec.ts takes.
+ * Locks `.maka-sidenav-motion { height: 100% }` in shell-layout.css. Without a
+ * definite height, the sidenav grows to its unclipped content and pushes the
+ * footer below the window. `projectSidebarWindow` supplies the overflowing
+ * session list needed to expose that regression.
*/
import { expect, test } from './fixtures';
-import {
- SESSION_LIST_EXPANDED_MAX_WIDTH,
- SESSION_LIST_EXPANDED_MIN_WIDTH,
-} from '../src/renderer/features/session-navigation/testing';
-import type { Locator, Page } from '@playwright/test';
+import type { Page } from '@playwright/test';
-async function revealPopulatedSidebar(page: Page): Promise<Locator> {
+async function revealPopulatedSidebar(page: Page): Promise<void> {
await page.keyboard.press('Escape');
await expect(page.locator('[data-maka-contract="search-modal"]')).not.toBeVisible();
const sidebar = page.getByRole('navigation', { name: '任务列表' });
await expect(sidebar).toBeVisible();
- return sidebar;
-}
-
-async function wrapperWidth(wrapper: Locator): Promise<number> {
- const box = await wrapper.boundingBox();
- if (!box) throw new Error('sidenav wrapper (.maka-sidenav-motion) has no visible bounds');
- return box.width;
}
test('sidenav footer stays inside the window under an overflowing list', async ({
@@ -98,67 +71,3 @@ test('sidenav footer stays inside the window under an overflowing list', async (
expect(wrapperBox!.y + wrapperBox!.height).toBeLessThanOrEqual(innerHeight + 1);
expect(footerBox!.y + footerBox!.height).toBeLessThanOrEqual(innerHeight + 1);
});
-
-test('resize handle drag from its vertical centre changes the column width', async ({
- projectSidebarWindow: page,
-}) => {
- await revealPopulatedSidebar(page);
-
- const handle = page.getByTestId('astryx-sidenav-resize-handle');
- await expect(handle).toBeVisible();
- const wrapper = page.locator('.maka-sidenav-motion');
-
- const initialWidth = await wrapperWidth(wrapper);
- expect(initialWidth).toBeGreaterThanOrEqual(SESSION_LIST_EXPANDED_MIN_WIDTH);
- expect(initialWidth).toBeLessThanOrEqual(SESSION_LIST_EXPANDED_MAX_WIDTH);
-
- // Grab the vertical centre. The Astryx hitAreaOffsetX bug leaves only the top
- // half grabbable, so the centre no-ops unless sidebar.css's `transform: none
- // !important` is applied — this point is the regression probe for that rule.
- // Let locator actionability resolve the handle's live centre before reading
- // its endpoint; replaying a box captured before that wait can miss a moving
- // 16px handle under load.
- await handle.hover();
- const handleBox = await handle.boundingBox();
- if (!handleBox) throw new Error('resize handle has no visible bounds');
- const grabX = handleBox.x + handleBox.width / 2;
- const grabY = handleBox.y + handleBox.height / 2;
-
- await page.mouse.down();
-
- // Astryx flags the separator while a drag is in flight; shell-layout.css keys
- // its transition-suppression (`:has([data-resizing])`) on it, so the width
- // tracks the pointer live rather than easing behind it. Check the second the
- // pointer goes down, so a missed grab fails directly instead of timing out on
- // an unrelated width assertion.
- await expect(handle).toHaveAttribute('data-resizing', /.*/);
- await page.mouse.move(grabX + 80, grabY, { steps: 20 });
- await expect.poll(() => wrapperWidth(wrapper)).toBeGreaterThan(initialWidth + 40);
- await page.mouse.up();
- await expect(handle).not.toHaveAttribute('data-resizing', /.*/);
-
- const widenedWidth = await wrapperWidth(wrapper);
- expect(widenedWidth).toBeGreaterThan(initialWidth + 40);
- expect(widenedWidth).toBeLessThanOrEqual(SESSION_LIST_EXPANDED_MAX_WIDTH + 1);
-
- // Drag the other way to prove the handle also narrows the column, grabbing
- // the centre again at the handle's new right-edge position.
- await handle.hover();
- const widenedHandleBox = await handle.boundingBox();
- if (!widenedHandleBox) throw new Error('resize handle lost its bounds after widening');
- const shrinkX = widenedHandleBox.x + widenedHandleBox.width / 2;
- const shrinkY = widenedHandleBox.y + widenedHandleBox.height / 2;
-
- await page.mouse.down();
- await expect(handle).toHaveAttribute('data-resizing', /.*/);
- // Undo the 80px widening. Keeping the reverse drag symmetric means every
- // width accepted by the precondition stays above the collapsible region.
- await page.mouse.move(shrinkX - 80, shrinkY, { steps: 20 });
- await expect.poll(() => wrapperWidth(wrapper)).toBeLessThan(widenedWidth - 40);
- await page.mouse.up();
- await expect(handle).not.toHaveAttribute('data-resizing', /.*/);
-
- const narrowedWidth = await wrapperWidth(wrapper);
- expect(narrowedWidth).toBeLessThan(widenedWidth - 40);
- expect(narrowedWidth).toBeGreaterThanOrEqual(SESSION_LIST_EXPANDED_MIN_WIDTH);
-});
diff --git a/apps/desktop/src/renderer/features/session-navigation/testing.ts b/apps/desktop/src/renderer/features/session-navigation/testing.ts
index f20d456de7..980c22f9f5 100644
--- a/apps/desktop/src/renderer/features/session-navigation/testing.ts
+++ b/apps/desktop/src/renderer/features/session-navigation/testing.ts
@@ -51,8 +51,6 @@ export {
} from './model/session-selection.js';
export {
readSessionListViewMode,
- SESSION_LIST_EXPANDED_MAX_WIDTH,
- SESSION_LIST_EXPANDED_MIN_WIDTH,
writeSessionListViewMode,
} from './model/session-list-layout.js';
export { createSessionRailLayoutStore } from './model/session-rail-layout-store.js';
diff --git a/apps/desktop/src/renderer/styles/chat-header.css b/apps/desktop/src/renderer/styles/chat-header.css
index c88f3d25b6..369ef5e7f1 100644
--- a/apps/desktop/src/renderer/styles/chat-header.css
+++ b/apps/desktop/src/renderer/styles/chat-header.css
@@ -201,21 +201,6 @@
overscroll-behavior: contain;
}
-/*
- * Compatibility with Astryx #2573 until its fixed ChatLayout ships in a
- * stable package. Published 0.2.0 gives the message area min-height: 100%,
- * then adds the in-flow dock below it, creating a dock-height phantom range.
- * These are the upstream flex contracts and can be removed on that upgrade.
- */
-.maka-chat-layout > :first-child {
- min-height: 0;
- flex: 1 0 auto;
-}
-
-.maka-chat-layout > :last-child {
- flex-shrink: 0;
-}
-
.maka-chat-shell {
position: relative;
min-height: 0;
diff --git a/apps/desktop/src/renderer/styles/module-pages/module-shell.css b/apps/desktop/src/renderer/styles/module-pages/module-shell.css
index 5832c497a2..fad4083048 100644
--- a/apps/desktop/src/renderer/styles/module-pages/module-shell.css
+++ b/apps/desktop/src/renderer/styles/module-pages/module-shell.css
@@ -65,18 +65,6 @@
background: var(--muted);
}
-/* The ResizeHandle's wider hit area is absolutely positioned with a vendor
- bug: it gets the pill's translateY(-50%) centering without the pill's
- top:50%, so the full-height strip lands shifted half its height upward —
- over the page header, where it swallows the toolbar's clicks (技能 / MCP
- with the inspector open; 定时任务 has the same latent strip). Drop the
- stray translate. The !important is load-bearing: the vendor injects the
- transform unlayered with :not(#\#) escalation, which beats any layered
- product rule. */
-.maka-module-page .astryx-resize-handle > :not(.astryx-resize-handle-pill) {
- transform: none !important;
-}
-
/* The page's one control bar: module switch on the left, this page's view +
filters on the right. It is the last row of the Layout header.
diff --git a/apps/desktop/src/renderer/styles/shell-layout.css b/apps/desktop/src/renderer/styles/shell-layout.css
index f4cbd53a55..1ce69237d2 100644
--- a/apps/desktop/src/renderer/styles/shell-layout.css
+++ b/apps/desktop/src/renderer/styles/shell-layout.css
@@ -79,11 +79,7 @@
Keyed on the sidenav handle's own testid, not on the class: every Astryx
ResizeHandle carries that class, and a page's own inspector handle is a
`position: relative` flex item, so the same `top` shoved its divider 36px
- down the page — it started below the header's rule instead of meeting it.
-
- e2e/sidebar-geometry.spec.ts drags this handle from its vertical centre and
- asserts the column width changes, so this rule and sidebar.css's grab-zone
- fix both fail loudly if the handle stops being grabbable. */
+ down the page — it started below the header's rule instead of meeting it. */
.maka-shell-astryx [data-testid="astryx-sidenav-resize-handle"] {
top: var(--h-titlebar);
}
diff --git a/apps/desktop/src/renderer/styles/sidebar.css b/apps/desktop/src/renderer/styles/sidebar.css
index b0ceeafc71..963cea5be9 100644
--- a/apps/desktop/src/renderer/styles/sidebar.css
+++ b/apps/desktop/src/renderer/styles/sidebar.css
@@ -25,25 +25,6 @@
height: 100%;
}
-/*
- * Astryx 0.2.0 ResizeHandle: when pillPlacement is not "center", hitAreaOffsetX
- * applies translateY(-50%) without a matching top: 50%. The grab zone then only
- * covers the top half of the handle, so a pointer drag at the vertical center
- * (where the pill sits) hits the handle root — which has no pointerdown — and
- * no-ops. SideNav uses pillPlacement="end" (sub-pixel X bias) and mounts the
- * handle as a sibling of <nav.maka-session-panel>, not a descendant — target the
- * handle test id. Remove once Astryx fixes hitAreaOffsetX.
- *
- * e2e/sidebar-geometry.spec.ts drags the handle from its vertical centre — the
- * half this fix restores — and asserts the column resizes, so removing this
- * before Astryx is fixed fails loudly instead of silently killing the grab.
- */
-[data-testid="astryx-sidenav-resize-handle"] > div:not(.astryx-resize-handle-pill) {
- /* !important: Astryx StyleX injects the bad transform unlayered, which
- otherwise beats every rule in @layer maka.legacy. */
- transform: none !important;
-}
-
.maka-session-list {
min-width: 0;
max-width: 100%;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@maka.apache.org
For additional commands, e-mail: commits-help@maka.apache.org