release: v0.14.0

Fourteen commits since v0.13.0. See CHANGELOG.md for the full list.

Two additions: `npm run doctor`, which runs the config doctor from a terminal — including inside the shipped image — and exits with the worst finding, so it can gate a deployment script; and a Playwright spec that loads all fourteen admin routes against a production build.

One change, invisible on screen: the admin panel got a form-field layer (#533).

Five fixes: grid.gap on both axes (#513), the dashboard status badge (#539), the journal editor's unsaved-changes guard (#538), essay paragraph markup (#537), and aria-pressed on the panel's switches and pickers.
This commit is contained in:
Ralksta
2026-08-30 15:11:25 +02:00
committed by GitHub
parent a813433891
commit e99d3f2f1b
59 changed files with 8652 additions and 6676 deletions

View File

@@ -1,5 +1,9 @@
import { defineConfig, devices } from '@playwright/test';
// Overridable so a run can sidestep a dev server or container already holding
// the default port; CI leaves it alone.
const PORT = process.env.E2E_PORT || '3000';
export default defineConfig({
testDir: './e2e',
fullyParallel: true,
@@ -8,7 +12,7 @@ export default defineConfig({
workers: process.env.CI ? 1 : undefined,
reporter: 'html',
use: {
baseURL: 'http://localhost:3000',
baseURL: `http://localhost:${PORT}`,
trace: 'on-first-retry',
screenshot: 'only-on-failure',
},
@@ -19,9 +23,19 @@ export default defineConfig({
},
],
webServer: {
command: 'npm run dev',
url: 'http://localhost:3000',
// The admin smoke test (e2e/admin-smoke.spec.ts) exists to catch bugs that
// only surface in a real browser against a real build — #542 was invisible
// to the dev server's on-demand compilation path. E2E_START=1 points the
// suite at `npm run start` so CI exercises the same output that ships.
command:
process.env.E2E_START === '1' ? `npm run start -- -p ${PORT}` : `npm run dev -- -p ${PORT}`,
url: `http://localhost:${PORT}`,
reuseExistingServer: !process.env.CI,
timeout: 30_000,
timeout: 60_000,
env: {
// Without this the admin panel reports itself disabled and the smoke
// test skips. A local run that already exports ADMIN_PASSWORD keeps it.
ADMIN_PASSWORD: process.env.ADMIN_PASSWORD || 'e2e-admin-password',
},
},
});