feat: fold pod controls into workspace body

This commit is contained in:
Yahya Alhinai
2026-06-28 05:14:08 +00:00
parent aeb75c310e
commit dc937a783d
2 changed files with 292 additions and 310 deletions
+23 -15
View File
@@ -186,9 +186,9 @@ function assertNoOverlap(left, main, right, label) {
}
}
function assertStableTopbar(before, after, label) {
if (Math.abs(before.x - after.x) > 2 || Math.abs(before.width - after.width) > 2) {
throw new Error(`${label}: top bar moved or resized with sidebar state`);
function assertContained(container, child, label) {
if (child.x < container.x - 2 || child.x + child.width > container.x + container.width + 2) {
throw new Error(`${label}: body summary is not contained inside the main workspace`);
}
}
@@ -268,12 +268,16 @@ try {
if (!hasPodCards) throw new Error('pod cards did not render');
if (hasOverlay) throw new Error('Vite error overlay is visible');
await page.getByRole('button', { name: 'Team memory' }).click();
await page.getByRole('button', { name: 'Pod actions' }).first().click();
await page.getByRole('menuitem', { name: 'Team memory' }).click();
await page.getByText('Workflow metrics').waitFor({ timeout: 15_000 });
await page.getByText('Learning edges').waitFor({ timeout: 15_000 });
await page.getByRole('img', { name: 'PodMan team-memory graph' }).waitFor({ timeout: 15_000 });
await page.getByRole('button', { name: 'engineer: Karti' }).click();
await page.getByText('Learned owner of auth; backend + DB wiring.').waitFor({ timeout: 15_000 });
await page
.getByRole('button', { name: /engineer:/ })
.first()
.click();
await page.getByText('Relationships').waitFor({ timeout: 15_000 });
await page.getByRole('button', { name: 'Whole graph' }).click();
await page.getByRole('button', { name: /Pods/i }).click();
@@ -288,19 +292,22 @@ try {
}
await page.getByRole('heading', { name: 'My stream' }).waitFor({ timeout: 15_000 });
await page.getByRole('heading', { name: 'Team stream' }).waitFor({ timeout: 15_000 });
const topbar = page.getByTestId('pod-topbar');
const bodySummary = page.getByTestId('pod-body-summary');
const mainWorkspace = page.getByTestId('pod-main-workspace');
const mySidebar = page.getByTestId('my-stream-sidebar');
const teamSidebar = page.getByTestId('team-stream-sidebar');
await topbar.waitFor({ timeout: 15_000 });
await bodySummary.waitFor({ timeout: 15_000 });
await mainWorkspace.waitFor({ timeout: 15_000 });
await mySidebar.waitFor({ timeout: 15_000 });
await teamSidebar.waitFor({ timeout: 15_000 });
if ((await topbar.getByRole('button', { name: /stream|team/i }).count()) > 0) {
throw new Error('pod top bar contains sidebar stream/team controls');
if ((await page.getByTestId('pod-topbar').count()) > 0) {
throw new Error('pod detail view still renders a topbar test id');
}
if ((await bodySummary.getByRole('button', { name: /stream|team/i }).count()) > 0) {
throw new Error('pod body summary contains sidebar stream/team controls');
}
const expandedLayout = {
topbar: await boxOf(topbar, 'top bar expanded'),
summary: await boxOf(bodySummary, 'body summary expanded'),
main: await boxOf(mainWorkspace, 'main workspace expanded'),
left: await boxOf(mySidebar, 'my stream sidebar expanded'),
right: await boxOf(teamSidebar, 'team stream sidebar expanded'),
@@ -311,13 +318,14 @@ try {
expandedLayout.right,
'expanded layout',
);
assertContained(expandedLayout.main, expandedLayout.summary, 'expanded layout');
await page.locator('[data-testid="my-stream-toggle"]:visible').click();
await page.waitForTimeout(300);
const leftCollapsedLayout = {
main: await boxOf(mainWorkspace, 'main workspace after left collapse'),
left: await boxOf(mySidebar, 'my stream sidebar collapsed'),
right: await boxOf(teamSidebar, 'team stream sidebar with left collapsed'),
topbar: await boxOf(topbar, 'top bar after left collapse'),
summary: await boxOf(bodySummary, 'body summary after left collapse'),
};
if (leftCollapsedLayout.left.width >= expandedLayout.left.width - 24) {
throw new Error('my stream sidebar did not collapse into a compact rail');
@@ -331,14 +339,14 @@ try {
leftCollapsedLayout.right,
'left collapsed layout',
);
assertStableTopbar(expandedLayout.topbar, leftCollapsedLayout.topbar, 'left collapsed layout');
assertContained(leftCollapsedLayout.main, leftCollapsedLayout.summary, 'left collapsed layout');
await page.locator('[data-testid="team-stream-toggle"]:visible').click();
await page.waitForTimeout(300);
const bothCollapsedLayout = {
main: await boxOf(mainWorkspace, 'main workspace after both collapse'),
left: await boxOf(mySidebar, 'my stream sidebar with both collapsed'),
right: await boxOf(teamSidebar, 'team stream sidebar collapsed'),
topbar: await boxOf(topbar, 'top bar after both collapse'),
summary: await boxOf(bodySummary, 'body summary after both collapse'),
};
if (bothCollapsedLayout.right.width >= expandedLayout.right.width - 24) {
throw new Error('team stream sidebar did not collapse into a compact rail');
@@ -352,7 +360,7 @@ try {
bothCollapsedLayout.right,
'both collapsed layout',
);
assertStableTopbar(expandedLayout.topbar, bothCollapsedLayout.topbar, 'both collapsed layout');
assertContained(bothCollapsedLayout.main, bothCollapsedLayout.summary, 'both collapsed layout');
await page.locator('[data-testid="my-stream-toggle"]:visible').click();
await page.locator('[data-testid="team-stream-toggle"]:visible').click();
await page.waitForTimeout(300);