The expand steps of the redesign kept older app versions and API clients working. This removes those compatibility paths: - Entry date text (period/date) is written from the structured dates on every save; an edit to the text alone is overwritten. - application.archived is dropped; archived rows close first. CSV import still reads the flag from older exports. - resume_version.label is dropped; versions are named by kind and name. - rejected is no longer accepted as a stage; remaining rows and history close first. CSV import still maps it to closed. BREAKING CHANGE: older app versions and API clients that read or write archived, version labels, the rejected stage or date text alone no longer work. migrations/20260929063245_contract_redesign_legacy_fields has a rollback.sql that restores the dropped columns.
E2E Tests
Reactive Resume uses Playwright for PR-gated browser coverage of deterministic core flows.
Local setup
Start PostgreSQL:
sudo docker compose -f compose.dev.yml up -d postgres
Generate local test secrets:
export AUTH_SECRET=$(openssl rand -hex 32)
export ENCRYPTION_SECRET=$(openssl rand -hex 32)
Run database migrations:
APP_URL=http://localhost:3000 PORT=3000 DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres FLAG_DISABLE_SIGNUPS=false FLAG_DISABLE_EMAIL_AUTH=false FLAG_DISABLE_API_RATE_LIMIT=true LOCAL_STORAGE_PATH=/workspace/data/e2e pnpm db:migrate
Build the production app:
APP_URL=http://localhost:3000 PORT=3000 DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres FLAG_DISABLE_SIGNUPS=false FLAG_DISABLE_EMAIL_AUTH=false FLAG_DISABLE_API_RATE_LIMIT=true LOCAL_STORAGE_PATH=/workspace/data/e2e pnpm build
Run tests:
APP_URL=http://localhost:3000 PORT=3000 DATABASE_URL=postgresql://postgres:postgres@localhost:5432/postgres FLAG_DISABLE_SIGNUPS=false FLAG_DISABLE_EMAIL_AUTH=false FLAG_DISABLE_API_RATE_LIMIT=true FLAG_ALLOW_UNSAFE_AI_BASE_URL=true LOCAL_STORAGE_PATH=/workspace/data/e2e pnpm test:e2e
Coverage
- Email/password auth smoke.
- Dashboard resume lifecycle: create, rename, duplicate, delete.
- Builder section editing, autosave/navigation, and locking.
- JSON export/import.
- Public sharing for anonymous visitors.
- The assistant and inline Improve, against a scripted OpenAI-compatible provider (
fixtures/ai-stub.ts). It needsFLAG_ALLOW_UNSAFE_AI_BASE_URL=trueso the server may call the stub on 127.0.0.1, and skips without it.
Visual regression, PDF/DOCX rasterization parity, thumbnail resolution, and import-fixture reproduction are intentionally outside the PR gate to keep it fast; the opt-in geometry, offline-font, and root-resume suites stay behind their environment flags.