The canvas lays itself out: a layered graph, left to right on a desktop and top to bottom on a phone, with room reserved for the value each edge carries. Nodes cannot be dragged and `NodeDef.position` is gone from the document — a graph nobody can arrange is one worth keeping small, which is what keeps flows atomic. Endpoints join the same layout, so their lanes and the localStorage that remembered where they were dragged go too. Mobile, per the new Responsive section of DESIGN-GUIDELINES.md: the dock caps its width and wraps instead of running off the screen, the dashboard stacks into one column rather than shrinking a wall panel to a fifth of its size, and Home stops widening its grid track past the viewport. A Playwright project at a phone's width fails the build when a screen no longer fits. Along the way: publish is the checkmark that was already there rather than a button that appears and disappears, with discard beside it on both the flow and the dashboard; the brain reveals a neuron's name on the first tap; and the port sparklines get room to breathe. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01VDSXaRhvqHYNevgDGmNAto
98 lines
2.9 KiB
TypeScript
98 lines
2.9 KiB
TypeScript
import { defineConfig, devices } from '@playwright/test';
|
|
import 'dotenv/config'
|
|
|
|
/**
|
|
* Read environment variables from file.
|
|
* https://github.com/motdotla/dotenv
|
|
*/
|
|
|
|
/**
|
|
* See https://playwright.dev/docs/test-configuration.
|
|
*/
|
|
export default defineConfig({
|
|
testDir: './tests',
|
|
/* Run tests in files in parallel */
|
|
fullyParallel: true,
|
|
/* Fail the build on CI if you accidentally left test.only in the source code. */
|
|
forbidOnly: !!process.env.CI,
|
|
/* Retry on CI only */
|
|
retries: process.env.CI ? 2 : 0,
|
|
/* Opt out of parallel tests on CI. */
|
|
workers: process.env.CI ? 1 : undefined,
|
|
/* Reporter to use. See https://playwright.dev/docs/test-reporters */
|
|
reporter: process.env.CI ? 'blob' : 'html',
|
|
/* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */
|
|
use: {
|
|
/* Base URL to use in actions like `await page.goto('/')`. Defaults to the
|
|
integrated stack (`make dev`), the only origin the API allows CORS from.
|
|
Point PLAYWRIGHT_BASE_URL elsewhere to test another running server. */
|
|
baseURL: process.env.PLAYWRIGHT_BASE_URL || 'http://app.localhost',
|
|
|
|
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
|
|
trace: 'on-first-retry',
|
|
},
|
|
|
|
/* Configure projects for major browsers */
|
|
projects: [
|
|
{ name: 'setup', testMatch: /.*\.setup\.ts/ },
|
|
|
|
{
|
|
name: 'chromium',
|
|
use: {
|
|
...devices['Desktop Chrome'],
|
|
storageState: 'playwright/.auth/user.json',
|
|
},
|
|
/* The mobile suite is the same app at a phone's width; running it here
|
|
too would only re-assert the desktop layout. */
|
|
testIgnore: /mobile\.spec\.ts/,
|
|
dependencies: ['setup'],
|
|
},
|
|
|
|
/* Every screen at 393px, checking the one thing that is easy to break and
|
|
hard to notice: a page that scrolls sideways. See the Responsive section
|
|
of the root DESIGN-GUIDELINES.md. */
|
|
{
|
|
name: 'mobile',
|
|
use: {
|
|
...devices['Pixel 5'],
|
|
storageState: 'playwright/.auth/user.json',
|
|
},
|
|
testMatch: /mobile\.spec\.ts/,
|
|
dependencies: ['setup'],
|
|
},
|
|
|
|
// {
|
|
// name: 'firefox',
|
|
// use: {
|
|
// ...devices['Desktop Firefox'],
|
|
// storageState: 'playwright/.auth/user.json',
|
|
// },
|
|
// dependencies: ['setup'],
|
|
// },
|
|
|
|
// {
|
|
// name: 'webkit',
|
|
// use: {
|
|
// ...devices['Desktop Safari'],
|
|
// storageState: 'playwright/.auth/user.json',
|
|
// },
|
|
// dependencies: ['setup'],
|
|
// },
|
|
|
|
// {
|
|
// name: 'Mobile Safari',
|
|
// use: { ...devices['iPhone 12'] },
|
|
// },
|
|
|
|
/* Test against branded browsers. */
|
|
// {
|
|
// name: 'Microsoft Edge',
|
|
// use: { ...devices['Desktop Edge'], channel: 'msedge' },
|
|
// },
|
|
// {
|
|
// name: 'Google Chrome',
|
|
// use: { ...devices['Desktop Chrome'], channel: 'chrome' },
|
|
// },
|
|
],
|
|
});
|