PSA/ee/docs/plans/workflow-overhaul-scratchpad.md
Hermes 284313f908
Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Initial import of AlgaPSA codebase from PSA server
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz

Source: /opt/alga-psa on psa.joliet.tech
2026-06-22 16:12:17 -05:00

55 KiB
Raw Permalink Blame History

Workflow Overhaul Scratchpad

2025-12-21 — Initial Survey

Docs reviewed

  • docs/AI_coding_standards.md (general coding rules + UI rules).
  • docs/workflow/README.md (points to current workflow system docs).
  • docs/workflow/workflow-system.md + docs/workflow/workflow-event-sourcing-model.md (legacy TS runtime: action registry, event sourcing, worker, Redis streams, etc.).
  • PRD: ee/docs/plans/2025-12-21-workflow-overhaul.md (new data-defined runtime, Envelope, structured pipeline, JSONata, registries, node types, email workflow, GUI, API, etc.).
  • Checklist: ee/docs/plans/workflow_runtime_feature_checklist.json (all items currently false).

Legacy runtime + email workflow code locations

  • Legacy runtime core: shared/workflow/core/workflowRuntime.ts (TypeScriptWorkflowRuntime)
  • Legacy action registry: shared/workflow/core/actionRegistry.ts
  • Worker service: services/workflow-worker/src/WorkflowWorker.ts
  • Legacy system email workflow (code-based): shared/workflow/workflows/system-email-processing-workflow.ts
  • Email workflow actions (shared): shared/workflow/actions/emailWorkflowActions.ts
  • Email workflow action registration: shared/workflow/init/registerWorkflowActions.ts (registers find_contact_by_email, find_ticket_by_reply_token, etc.)

Workflow editor UI

  • Existing editor components under server/src/components/workflow-editor/* and actions in server/src/lib/actions/workflow-editor-actions.ts (currently code-based definitions, not new structured pipeline).

DB schema status

  • Existing workflow tables: workflow_executions, workflow_events, workflow_action_results, etc.
  • No tables yet for new runtime entities (workflow_runs, workflow_run_steps, workflow_run_waits, workflow_action_invocations), per checklist.
  • System workflow registration tables exist (system_workflow_registrations, versions, event attachments).

Observations

  • Current workflow system is code-based TS workflow execution with ActionRegistry idempotency, Redis Streams, event sourcing.
  • PRD requires new data-defined runtime (Envelope, NodeTypeRegistry, ActionRegistry with Zod schemas + idempotency), JSONata expression engine, structured pipeline steps, waits/retries, run history, GUI node-in-pipe designer, plus new email workflow as data.

Next steps

  • Deep read of shared/workflow/core/workflowRuntime.ts and related persistence models to map reuse/impact.
  • Locate existing validation utilities and editor flows for potential reuse.
  • Draft new schema + registry components and runtime interpreter design within repo structure (likely in shared/workflow + server actions + worker).
  • Begin checklist execution by implementing foundational registry + schema + expression engine + persistence + runtime.

2025-12-21 — Runtime V2 Implementation Progress

New runtime foundation (shared/workflow/runtime)

  • Added Zod-based runtime types + workflow definition schema + envelope schema in shared/workflow/runtime/types.ts.
  • Implemented SchemaRegistry + NodeTypeRegistry + ActionRegistry (V2) under shared/workflow/runtime/registries/.
  • JSONata expression engine with allowlist + timeout/output size checks in shared/workflow/runtime/expressionEngine.ts.
  • Expression resolver supports recursive Expr objects and wraps errors as ExpressionError.
  • Redaction utilities with JSON pointer masking + secretRef masking in shared/workflow/runtime/utils/redactionUtils.ts.
  • Assignment utilities for dot-path + JSON pointer updates in shared/workflow/runtime/utils/assignmentUtils.ts.
  • Publish validation (shared/workflow/runtime/validation/publishValidation.ts) validates WorkflowDefinition shape, step IDs, node types, action references, configs, and Exprs (plus best-effort assign path warnings).

Runtime interpreter + persistence

  • Implemented deterministic interpreter in shared/workflow/runtime/runtime/workflowRuntimeV2.ts:
    • Uses workflow_runs, workflow_run_steps, workflow_run_waits, workflow_action_invocations, workflow_run_snapshots.
    • Persists nodePath after each step; supports RUNNING/WAITING/SUCCEEDED/FAILED/CANCELED.
    • Retry scheduling with backoff + jitter to workflow_run_waits.
    • Event waits + timeout handling (TimeoutError) + try/catch + per-item forEach error handling.
    • Idempotency enforced via unique (action_id, action_version, idempotency_key) with cached outputs.
    • OutputMapping for control.callWorkflow now maps child run snapshots into parent env.

Node types (registry)

  • Implemented required node types in shared/workflow/runtime/nodes/registerDefaultNodes.ts:
    • state.set, event.wait, transform.assign, action.call, email.parseBody, email.renderCommentBlocks, human.task.
  • Email node fallbacks in shared/workflow/runtime/nodes/utils/emailNodes.ts.

Action registry (email workflow)

  • Registered Zod-schemas for required email actions in shared/workflow/runtime/actions/registerEmailWorkflowActions.ts:
    • parse_email_reply, find_ticket_by_reply_token, find_ticket_by_email_thread, convert_html_to_blocks, create_comment_from_email, process_email_attachment, find_contact_by_email, resolve_inbound_ticket_defaults, create_ticket_from_email, create_human_task_for_email_processing_failure, send_ticket_acknowledgement_email.

Schema registry

  • Email payload schema payload.EmailWorkflowPayload.v1 registered in shared/workflow/runtime/schemas/emailWorkflowSchemas.ts and shared/workflow/runtime/init.ts.

DB + migrations

  • Added migration server/migrations/20251221090000_create_workflow_runtime_v2_tables.cjs creating:
    • workflow_definitions, workflow_definition_versions, workflow_runs, workflow_run_steps, workflow_run_waits, workflow_action_invocations, workflow_run_snapshots, workflow_runtime_events.
  • Added migration server/migrations/20251221103000_register_email_workflow_runtime_v2.cjs to seed draft + version for new JSON email workflow.

Email workflow (data-defined)

  • Draft JSON definition in shared/workflow/runtime/workflows/email-processing-workflow.v1.json (structured pipeline, no initial event.wait per instruction).
  • Covers reply-token threading, fallback to threading headers, new ticket creation, attachment processing, human task on failure.

API endpoints (server)

  • Added Next.js API routes:
    • /api/workflow-definitions (list/create)
    • /api/workflow-definitions/{id}/{version} (get/update)
    • /api/workflow-definitions/{id}/{version}/publish
    • /api/workflow-runs (start)
    • /api/workflow-runs/{runId} (status)
    • /api/workflow-runs/{runId}/steps
    • /api/workflow-runs/{runId}/cancel
    • /api/workflow-runs/{runId}/resume
    • /api/workflow/registry/nodes, /api/workflow/registry/actions, /api/workflow/registry/schemas/{schemaRef}
    • /api/workflow/events (submit + list; submit now transactional/atomic).

Worker / Scheduler

  • Added services/workflow-worker/src/v2/WorkflowRuntimeV2Worker.ts polling:
    • due retry waits + timeout waits + runnable runs.
  • Wired worker start/stop in services/workflow-worker/src/index.ts.

Package updates

  • Added jsonata + zod-to-json-schema to shared/package.json.
  • Added zod-to-json-schema to server/package.json.
  • Added shared exports for ./workflow/runtime.

Known gaps / to-do

  • GUI node-in-pipe designer + run viewer not implemented.
  • No expression inline validation in UI yet.
  • No tests added yet for runtime, registries, expression engine.
  • Event wait start step removed per instruction; checklist item for 10s wait remains false.
  • HTML->blocks fallback in initial comment not wired into workflow definition.

2025-12-21 - Server actions first-class for workflow runtime V2

  • Added server/src/lib/actions/workflow-runtime-v2-actions.ts with server actions for all V2 definition, publish, run, registry, schema, and event operations (server actions are now the primary entry point).
  • Added shared schemas in server/src/lib/actions/workflow-runtime-v2-schemas.ts and API error helper server/src/lib/api/workflowRuntimeV2Api.ts.
  • Updated workflow V2 API routes to delegate to server actions and use the API error helper:
    • server/src/app/api/workflow-definitions/route.ts
    • server/src/app/api/workflow-definitions/[workflowId]/[version]/route.ts
    • server/src/app/api/workflow-definitions/[workflowId]/[version]/publish/route.ts
    • server/src/app/api/workflow-runs/route.ts
    • server/src/app/api/workflow-runs/[runId]/route.ts
    • server/src/app/api/workflow-runs/[runId]/steps/route.ts
    • server/src/app/api/workflow-runs/[runId]/cancel/route.ts
    • server/src/app/api/workflow-runs/[runId]/resume/route.ts
    • server/src/app/api/workflow/registry/nodes/route.ts
    • server/src/app/api/workflow/registry/actions/route.ts
    • server/src/app/api/workflow/registry/schemas/[schemaRef]/route.ts
    • server/src/app/api/workflow/events/route.ts

2025-12-21 - PRD aligned with server-action-first pattern

  • Updated PRD section 6.1 to state server actions are first-class and API routes are thin delegates.
  • Expanded section 11 with a Server Actions table and labeled API surfaces as delegating layers.
  • Clarified publish response applies to server actions and endpoints.

2025-12-21 — Tests + Event Triggers + Redaction + Admin Resume

Test plan implementation

  • All 220 backend test plan items now have matching Vitest tests; ee/docs/plans/workflow_runtime_backend_test_plan.json updated to implemented=true for all items.
  • Added new integration suites:
    • server/src/test/integration/workflowRuntimeV2.eventTrigger.integration.test.ts (event-triggered runs, payload validation, audit events).
    • server/src/test/integration/workflowRuntimeV2.redaction.integration.test.ts (snapshot redaction, action invocation redaction, snapshot truncation, retention).
  • Added new E2E suite: server/src/test/e2e/workflowRuntimeV2.e2e.test.ts covering publish/run, event triggers, waits/resume/timeouts, retries, idempotency, cancel/resume, and email workflow paths.
  • Updated existing tests:
    • server/src/test/integration/workflowRuntimeV2.control.integration.test.ts (retry/catch behavior + exact test names).
    • server/src/test/integration/workflowRuntimeV2.email.integration.test.ts (use beforeEach to avoid DB resets wiping shared runs).
    • server/src/test/integration/workflowRuntimeV2.publish.integration.test.ts (resume action now completes event waits).

Runtime/Actions updates driven by tests

  • shared/workflow/runtime/runtime/workflowRuntimeV2.ts: respect RetryPolicy.maxAttempts when deciding to schedule retries.
  • server/src/lib/actions/workflow-runtime-v2-actions.ts: admin resume now resolves one WAITING wait, sets resume_event_name to the wait event, clears resume payload, and executes the run (enables "resume to completion" E2E).

Redaction + retention checks

  • Added integration coverage for redacted snapshots + action invocations, snapshot truncation, and retention pruning via event wait resume.

PRD updates

  • Added terminology section + expression best-practices subsection in ee/docs/plans/2025-12-21-workflow-overhaul.md.

Feature checklist adjustments

  • Updated ee/docs/plans/workflow_runtime_feature_checklist.json for backend/runtime items (goals, validation pipeline, events, tests, idempotency patterns).
  • Remaining false items are GUI designer + UI workflow run viewer + rollout tasks (parallel-run + cutover) and "tenant_id log context".

Dev environment setup (Alga Dev Env + Test Env skill)

  • Ports chosen via detect_ports (env #8): app 3007, postgres 5439, redis 6386, hocuspocus 1241, pgbouncer 6439.
  • Secrets regenerated into ./secrets via generate_secrets.py.
  • Updated server/.env with PROJECT_NAME=workflow_overhaul_env8 and new ports.
  • Docker dev build started with docker compose -f docker-compose.yaml -f docker-compose.base.yaml -f docker-compose.ee.yaml --env-file server/.env build server redis workflow-worker setup.
    • Build emits warnings about unset env vars (ITERATION, HOST, etc.) but proceeds.

Notable findings

  • Event waits do not create snapshots while waiting; retention pruning requires a later snapshot (handled via resume).
  • Admin resume previously re-waited; now resolves waits and resumes using wait event name to allow completion.

2025-12-21 — Dev env fixes + stack up

  • docker compose up -d initially failed due to missing secrets secrets/ninjaone_client_id + secrets/ninjaone_client_secret; created empty files to satisfy bind mounts.
  • docker compose up -d then hit host port conflict on pgbouncer (6432). Updated server/.env to use internal ports for container-to-container connections and EXPOSE_* for host mappings:
    • Internal: DB 5432, Redis 6379, Hocuspocus 1234, PgBouncer 6432.
    • Exposed: DB 5439, Redis 6386, Hocuspocus 1241, PgBouncer 6439, Server 3007.
  • Brought stack down/up with new env; setup now connects via pgbouncer 6432, migrations + seeds completed, and all containers started successfully.

2025-12-21 — Runtime test fixes (control integration)

Runtime fixes

  • Fixed expression normalization to handle nested allowlisted functions (non-consuming lookahead). This resolved coalesce / append ExpressionError in forEach body assignments.
  • Corrected path stack containerPath handling for nested blocks in resolveStepAtPath so forEach loops resume correctly across body steps.
  • Cleared lease_owner + lease_expires_at whenever runs enter WAITING (event waits + retry scheduling) to allow resume by other workers.
  • control.callWorkflow now checks child run status after inline execution and throws ActionError if child failed (enables propagation + retry scheduling).
  • Idempotency keys are now tenant-scoped by prefixing with tenantId when present.

Test helper updates

  • actionCallStep helper now accepts retry and sets it on the step.
  • Stale-lease test setup uses tenant-scoped idempotency keys (${tenantId}:fixed|stale).

Test expectation fixes

  • control.return inside control.if now asserts the downstream action never runs (instead of expecting only 1 step record).
  • WAITING resume test now checks definition_step_id === 'state-1' (step_path is index-based).

Tests run

  • npx vitest --run server/src/test/integration/workflowRuntimeV2.control.integration.test.ts -t "control.return inside control.if|WAITING run resumes" (both tests pass after updates).

Open items

  • None in control integration suite after fixes; full suite expected to pass (only earlier failures were expectation mismatches).

2025-12-22 — Workflow UI tests (Runs detail) + env note

Environment

  • Confirmed correct stack: workflow_overhaul_env8 (workflow-overhaul/workflow_overhaul_env8).

Playwright runs-detail suite fixes

  • ee/server/src/__tests__/integration/workflow-designer-runs.playwright.test.ts: createWorkflowAuditLog now normalizes empty userId → null and uses a transaction to set app.current_tenant + insert on the same connection (avoids invalid input syntax for type uuid: "" from audit log insert + trigger).

Tests executed (all passing after fix)

  • run logs tab filters by search and level
  • run logs load more appends additional entries
  • run audit logs tab loads entries and supports export
  • run audit logs load more appends additional entries

Notes

  • Audit log failures were due to set_config being connection-scoped; pooling meant the insert ran without app.current_tenant set.

2025-12-21 — Workflow Designer Playwright UI tests (batch 2)

UI test coverage added

  • ee/server/src/__tests__/page-objects/WorkflowDesignerPage.ts: added workflow step locators + helpers (selectWorkflowByName, selectStepById) and settings panel locators.
  • ee/server/src/__tests__/integration/workflow-designer-basic.playwright.test.ts: added 8 tests:
    • Read-only users see the read-only message when selecting steps.
    • Workflow selection loads payload schema ref and trigger event name from stored definition.
    • Editing workflow name, version, description updates the draft inputs.
    • Trigger input accepts a non-empty event name and clears to empty.
  • Read-only test permissions now include workflow:read to allow workflow list load.
  • ee/docs/plans/workflow_ui_test_plan.json: marked 8 additional items as implemented.

Test run

  • Ran npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts --project=chromium with Playwright DB port 5437; 13 tests passed.

Observations

  • Read-only users trigger registry server actions that return 403 (expected with current UI); UI shows toast but tests still pass.
  • Occasional ECONNRESET / Error: aborted logs during navigation and repeated NotificationAccumulator Redis auth warnings (existing noise; did not fail tests).

2025-12-21 — Full workflow runtime v2 test run (unit + integration + e2e)

Fixes applied before full run

  • Email workflow integration expectations updated:
    • Attachment idempotency key assertion now checks both attachment ids irrespective of call order (non-deterministic iteration).
    • resolve_inbound_ticket_defaults expectation updated to assert input object { tenant, providerId } rather than positional args.

Tests run

  • DB_HOST=localhost DB_PORT=5437 DB_USER_ADMIN=postgres DB_USER_SERVER=app_user DB_PASSWORD_ADMIN=$(cat secrets/postgres_password) DB_PASSWORD_SERVER=$(cat secrets/db_password_server) npx vitest --run server/src/test/unit/workflowRuntimeV2.unit.test.ts server/src/test/integration/workflowRuntimeV2.*.test.ts server/src/test/e2e/workflowRuntimeV2.e2e.test.ts

Results

  • All tests passed: 221/221 across unit, integration, and e2e suites.
  • Known DB log warnings during failure-path tests (invalid uuid like provider-1 / tenant-...) are expected in negative-path coverage and did not fail.
  • workflow_runtime_backend_test_plan.json already shows all 220 tests marked implemented: true (no update needed).

Checklist status

  • workflow_runtime_feature_checklist.json still has 22 items marked implemented: false (appears to be GUI/editor-focused items such as inline syntax validation). Backend checklist items appear complete.

2025-12-21 — Workflow Designer (Section 10) Progress

Implemented UI (EE)

  • Added ee/server/src/components/workflow-designer/WorkflowDesigner.tsx with node-in-pipe canvas, nested blocks, and right-side config panel.
  • Integrated designer as the workflow entry point by exporting it from packages/product-workflows/ee/entry.tsx and packages/product-workflows/ee/entry.ts.
  • Node palette loads from /api/workflow/registry/nodes with search; steps insert into selected pipe.
  • Drag/drop reorder within pipes and move between nested pipes via @hello-pangea/dnd.
  • Config panel generates forms from node config JSON Schema with required-field warnings and JSON fallback editors.
  • Expression editor supports field picker insertion (payload/vars/meta/error) and local JSONata syntax validation.
  • Publish workflow triggers server validation and surfaces publish errors with step breadcrumb context.

Remaining

  • Run list + run detail viewer (status filters, timelines, snapshots, logs).
  • Admin resume/cancel UI actions.
  • Redacted snapshot rendering in UI.

2025-12-21 — Operational/Observability Expansion

PRD updates

  • Added Section 14 (Operational Support, Observability, and Governance) to the PRD with run list, run detail, logging, audit, RBAC, retention/export, metrics/alerts, ops controls, event observability, and performance targets.

Checklist updates

  • Appended detailed operational/observability features (run history, logs, audit, RBAC, retention, metrics, alerting, ops controls, event observability, performance) to workflow_runtime_feature_checklist.json.

Run list implementation start

  • Added workflow run list API (GET /api/workflow-runs) via listWorkflowRunsAction with filters, pagination, and workflow name join.
  • Added run list UI tab with filters and table in ee/server/src/components/workflow-designer/WorkflowRunList.tsx and wired into WorkflowDesigner tabs.
  • Marked checklist item for run list view as implemented.

Run details implementation

  • Added run details panel with step timeline, snapshot viewer, action invocation logs, and wait summary.
  • Added admin resume/cancel UI actions with confirmation dialogs.
  • Added UI-side masking for sensitive keys (secret/token/password/etc.) before rendering JSON.
  • Updated run steps API payload to include invocations + waits.
  • Marked checklist items for run details, snapshots/logs, admin actions, and redaction as implemented.

Operational iteration (Section 14)

  • Added run summary endpoint (GET /api/workflow-runs/summary) with counts by status and filters.
  • Added quick time-range chips (last 24h/7d) and status count badges to the run list UI.
  • Expanded run detail wait history to show event name, correlation key, timeouts, and resolution timestamps.
  • Marked §14 items for timeline display, wait history, correlation fields, and quick filters as implemented.

2025-12-21 — Operational Section Progress (continued)

Run list enhancements

  • Added tenant context column (shown when multiple tenants appear) and correlation key search (via wait key join).
  • Implemented bulk select with resume/cancel actions and confirmation dialogs.

Run detail enhancements

  • Added workflow metadata (workflow id/version/trigger/run id) and richer error display.
  • Step details now include status/attempt/timestamps, error category/at, and next retry.
  • Added payload/vars/meta/error/raw tabs with redaction notice; action invocation redaction notice.
  • Added timeline filters (status + node type), collapse nested blocks toggle, and step deep-linking via ?step=.

API shim alignment (server actions first)

  • Workflow designer UI now uses server actions directly for definitions, registries, runs, logs, audits, events, exports, and admin operations.
  • Export logic moved into server actions (runs/events/audits/logs); API routes are thin shims over actions.
  • Added workflow run log export action and API shim for external access.

Run log observability

  • Added workflow_run_logs persistence + model, runtime log hooks (steps, waits, action invocations, retries, resume/timeouts).
  • Implemented log APIs (/api/workflow-runs/{runId}/logs) with pagination + CSV export.
  • Added run log viewer with level filters, search, and export in run details.
  • Action invocation cards now show input/output size and truncation markers in UI.

Audit trail

  • Added audit logging for workflow definition create/update/publish and run cancel/resume (with reasons).
  • Added audit APIs for workflows and runs plus CSV export routes.
  • Added Audit tab for workflow definitions and audit trail section in run details.

RBAC + workflow metadata

  • Added workflow permissions (view/publish/admin) migration and wired RBAC checks across workflow actions.
  • Added workflow definition metadata (system/visible/paused/concurrency/auto-pause thresholds) + UI settings + metadata endpoint.
  • Enforced system workflow edit protection and visibility filtering; hid admin controls based on permissions.

2025-12-21 — Operational Section Progress (ops controls + events)

Run controls + dead-letter

  • Added retry/replay/requeue admin actions with required reasons, audit log entries, and run log markers.
  • New API routes: /api/workflow-runs/{runId}/retry, /replay, /requeue, plus /api/workflow-runs/dead-letter.
  • Dead-letter queue UI (retries threshold + run detail panel) added as a new tab.
  • Added run list CSV export and run detail JSON export with redactions.

Event observability

  • Added event tracking fields (matched_run_id, matched_wait_id, error_message, created_at index) and lookup index migration.
  • Event ingestion now records match metadata, error messages, and processed timestamps.
  • Event list UI with filters, status badges, payload preview (redacted), and event detail panel linking to matched run.
  • Event summary endpoint + UI badges for matched/unmatched/error counts.
  • Event export endpoints (CSV/JSON) wired to the event list filters.

Performance + indexing

  • Added index on workflow_runs (workflow_id, status, updated_at) and workflow_run_steps (run_id, step_id).
  • Enforced per-tenant run start rate limits and max payload size checks in server action.

2025-12-21 — Runtime V2 fixes + test stabilization

Runtime/action changes

  • shared/workflow/runtime/runtime/workflowRuntimeV2.ts
    • Retry scheduling now stops when attempt >= maxAttempts.
    • control.forEach now treats non-array items as ValidationError.
    • control.callWorkflow now checks child run status and throws ActionError on failure (enables parent failure + retry policy).
    • Idempotency keys are tenant-scoped (prefix with tenantId: unless already prefixed).
    • acquireRunnableRun uses JS time (new Date().toISOString()) for stale-lease comparison for better test consistency.
    • Snapshot retention pruning added (default 30 days, env override WORKFLOW_RUN_SNAPSHOT_RETENTION_DAYS).
  • server/src/lib/actions/workflow-runtime-v2-actions.ts
    • startWorkflowRunAction now uses latest published version when version omitted and validates payload against schema registry.
    • submitWorkflowEventAction now resumes both event and human waits.
    • listWorkflowEventsAction accepts undefined input (defaults to {}) and still returns { events, nextCursor }.
    • resumeWorkflowRunAction now records admin resume events and re-stores resume_event_payload after execution (admin override metadata persists).
  • services/workflow-worker/src/v2/WorkflowRuntimeV2Worker.ts
    • Scheduler skips retries/timeouts for CANCELED runs; marks waits CANCELED instead of resuming.
  • shared/workflow/runtime/nodes/registerDefaultNodes.ts
    • Admin resume bypasses human-task validation when resume event name is ADMIN_RESUME or payload includes __admin_override.

Test plan + test updates

  • Updated admin-resume test plan wording to reference admin override metadata.
  • workflowRuntimeV2.control.integration.test.ts now expects listWorkflowEventsAction() to return { events }.
  • Increased beforeAll timeout for workflowRuntimeV2.email.integration.test.ts to 180s to avoid hook timeouts on heavy DB resets.
  • Marked checklist item “Persist sanitized envelope snapshot per checkpoint and cap size/retention” as implemented.

Test runs

  • Control + publish integration suites now pass when run together.
  • Full workflow runtime suite (unit + integration + e2e) still fails in this environment due to Knex connection pool timeouts during repeated createTestDbConnection() calls:
    • Errors: Knex: Timeout acquiring a connection during DB recreation.
    • Cascading failures in multiple workflow runtime test files and e2e runtime suite.
    • Suggest running workflow runtime test files in smaller batches or increasing DB connection capacity/timeout when running the full suite.

2025-12-21 Playwright UI test plan

  • Created ee/docs/plans/workflow_ui_test_plan.json with 207 Playwright-focused UI tests covering Workflow Designer, Runs, Events, Dead Letter, and Audit tabs.
  • Tests are framed as user-facing behavior with mockable non-target dependencies, and include 8 E2E scenarios for end-to-end UI flows.
  • Plan aligns with the workflow overhaul UI (node-in-pipe designer, run viewer, event list) surfaced at /msp/workflows (EE uses WorkflowDesigner via @product/workflows/entry).

2025-12-21 — Playwright UI tests (batch 3)

  • Fixed workflow list count assertion regex (removed escaped backslashes) so it matches digits.
  • Added workflow:read to MANAGE_PERMISSIONS in workflow-designer-basic.playwright.test.ts so Runs tab data can load (listWorkflowRunsAction requires read).
  • Ran Playwright workflow designer suite after fixes: ee/server/src/__tests__/integration/workflow-designer-basic.playwright.test.ts now passes (17/17).
  • Marked UI test plan items implemented: workflow list count, admin Dead Letter/Audit tabs + empty states, settings panel visibility, Runs/Events/Dead Letter/Audit empty states.
  • Observed recurring logs during tests: registry 401/403 on aborted requests, Redis NOAUTH notifications, ECONNRESET “aborted” logs; tests still pass.

2025-12-22 — Playwright UI tests (batch 4)

  • Added new workflow designer control block coverage in ee/server/src/__tests__/integration/workflow-designer-blocks.playwright.test.ts:
    • Pipe selector root + nested pipe updates (If THEN/ELSE).
    • control.forEach BODY pipe + config fields + Block badge.
    • control.tryCatch TRY/CATCH + capture error field.
    • control.return helper text.
    • control.callWorkflow input/output mapping add/edit/remove flows + empty state.
  • Fixed selector failures by targeting stable IDs instead of labels (Input labels dont use htmlFor).
  • Final run: workflow-designer-blocks.playwright.test.ts passes (7/7). Observed recurring server logs: Redis NOAUTH and occasional ECONNRESET + one Unauthorized log from listWorkflowRegistryActionsAction during setup; tests still green.
  • Marked 19 UI test plan items implemented (control blocks, mapping editor behaviors, pipe selector updates, return helper text, Block badge).

2025-12-22 — Playwright UI tests (batch 5)

  • Updated workflow permission model to match PRD/test plan: manage no longer implies publish/admin.
    • ee/server/src/components/workflow-designer/WorkflowDesigner.tsx: canPublish now requires workflow:publish (or admin), canAdmin requires workflow:admin, canManage allows manage/admin.
    • server/src/lib/actions/workflow-runtime-v2-actions.ts: requireWorkflowPermission fallback now allows admin for manage/publish; removed manage→publish fallback. listWorkflowRegistryNodesAction/listWorkflowRegistryActionsAction now require read (not manage).
  • Expanded WorkflowDesignerPage helpers (setName, selectWorkflowByName, selectStepById, clickSaveDraft) to support new tests.
  • Fixed control test expectations to check active workflow selection after tab switches (switch to Runs then back to Designer).
  • Ran workflow-designer-controls.playwright.test.ts with env to avoid DB auth mismatch when Playwright forces admin credentials:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3300 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-controls.playwright.test.ts
    • Result: 4/4 passing (manage-only save vs publish, publish-only, active selection persists across tabs, switching workflows clears config panel).
    • Noted recurring server logs: Redis NOAUTH and occasional ECONNRESET aborted requests (no test failures).

2025-12-22 — Playwright UI tests (batch 6)

  • Added workflow designer settings coverage in ee/server/src/__tests__/integration/workflow-designer-controls.playwright.test.ts:
    • System workflow settings hidden for non-admin.
    • System workflow settings visible for admin.
  • Added workflow list/metadata coverage in ee/server/src/__tests__/integration/workflow-designer-basic.playwright.test.ts:
    • Workflow list shows total count and buttons.
    • Selecting a workflow loads draft metadata (Inbound Email Processing fields).
    • Version field accepts numeric input.
    • Clearing trigger event name removes trigger from draft.
    • Added cleanup for created workflows (delete from workflow_definitions).
  • Fixed list count assertion to poll until label count matches button count to avoid timing flakiness.
  • Ran Playwright subset (basic + controls) with DB env overrides to keep admin creds aligned:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3300 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts src/__tests__/integration/workflow-designer-controls.playwright.test.ts
    • Result: 21/21 passing.
  • Noted recurring logs during run (no test failures): Redis NOAUTH notification accumulator, ECONNRESET aborted requests, occasional Unauthorized errors from registry actions when non-admin sessions hit registry endpoints.

2025-12-22 — Playwright UI tests (batch 7)

  • Added workflow settings tests in ee/server/src/__tests__/integration/workflow-designer-controls.playwright.test.ts:
    • Settings toggles update draft values (Visible, Paused), concurrency accepts numeric/empty, auto-pause toggles enable failure inputs.
    • Save Settings persists metadata overrides; verified UI state after reload and DB values.
  • Added helper createSavedWorkflow in workflow-designer-controls.playwright.test.ts for reuse.
  • Updated settings UI so failure threshold/min inputs are disabled when auto-pause is off:
    • ee/server/src/components/workflow-designer/WorkflowDesigner.tsx now passes disabled={!metadataDraft.autoPauseOnFailure} to both inputs.
  • Ran controls suite with DB env overrides:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3300 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-controls.playwright.test.ts
    • Result: 12/12 passing.
  • Recurring logs during run (no test failures): Redis NOAUTH notification accumulator, ECONNRESET aborted requests, registry Unauthorized logs during non-admin sessions.

2025-12-22 — Playwright UI tests (batch 8)

  • Added workflow persistence + palette search coverage in ee/server/src/__tests__/integration/workflow-designer-basic.playwright.test.ts:
    • Save draft persists metadata + steps after reload (verifies step label and id).
    • Palette search filters nodes by id.
  • Marked UI test plan items implemented for save draft persistence and palette search (plus related helper-text/step label items already covered).
  • Ran basic suite with DB env overrides:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3300 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts
    • Result: 13/13 passing.
  • Noted recurring server logs during run (no test failures): Redis NOAUTH notification accumulator, ECONNRESET aborted requests, and intermittent workflow runtime action errors (401/403/404) during registry/schema fetches.

2025-12-22 — Playwright UI tests (batch 9)

  • Added empty-list state coverage in ee/server/src/__tests__/integration/workflow-designer-basic.playwright.test.ts:
    • New snapshot/restore helpers for workflow_definitions + workflow_definition_versions.
    • Test asserts 0 workflows, no workflow buttons, Save Draft/Publish disabled, empty metadata fields, and workflow settings not shown.
  • Marked UI plan items implemented: empty workflow list, save draft disabled (no active definition), publish disabled (no active definition), save settings disabled when workflow id missing.
  • Ran basic suite with DB env overrides:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3300 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts
    • Result: 14/14 passing.
  • Recurring logs during run (no test failures): Redis NOAUTH notification accumulator, ECONNRESET aborted requests, intermittent workflow runtime action 401/404 noise.

2025-12-22 — Playwright UI tests (batch 10)

  • Fixed WorkflowDesignerPage.saveDraft() to wait for the Save Draft button to be enabled (avoids timeout when button text stays “Saving...” longer than default wait).
  • Adjusted forEach on-item-error selection/assertion to target the combobox role selector to avoid strict-mode failures from duplicate IDs.
  • Reran workflow-designer-basic.playwright.test.ts with DB env overrides:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3300 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts
    • Result: 18/18 passing.
  • Recurring logs during run (no test failures): Redis NOAUTH notification accumulator, ECONNRESET aborted requests, intermittent workflow action 401/403/404 noise.

UI tests batch 5 (expressions)

  • Added Playwright tests for expression field + picker in ee/server/src/__tests__/integration/workflow-designer-expressions.playwright.test.ts.
  • Covered: field picker roots, insert field into expression, append to existing expression, invalid syntax styling + clears when valid, multi-line, and empty input handling.
  • Locator stability: Radix Select options were flaky with role selectors; switched assertions to listbox.toContainText(...) with longer timeout.
  • Latest run: workflow-designer-expressions.playwright.test.ts passes (6/6). Still seeing benign ECONNRESET + NOAUTH log noise during runs.

2025-12-22 — Playwright UI tests (batch 11: basic + blocks re-run)

  • Re-ran workflow-designer-basic + workflow-designer-blocks after adding unauth redirect + pipe insertion tests.
  • Had to move Playwright dev server to port 3301 because 3300 was in use.
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3301 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts src/__tests__/integration/workflow-designer-blocks.playwright.test.ts
  • Result: 27/27 passed.
  • Noisy server logs persisted (expected / non-failing): Redis NOAUTH notification accumulator, occasional ECONNRESET aborted requests, and intermittent 401/403/404 errors from workflow registry/schema actions during setup.

2025-12-22 — Playwright UI tests (batch 12: control blocks drag/drop)

  • Added nested-pipe drag fallback + selectors:
    • ee/server/src/components/workflow-designer/WorkflowDesigner.tsx: track hovered pipe via data-pipe-path + global mousemove when dragging; add data-step-id to top-level draggable wrappers for reliable step queries.
    • ee/server/src/__tests__/integration/workflow-designer-blocks.playwright.test.ts: getStepIdsIn now reads direct [data-step-id] children (avoids nested pipe leakage).
    • ee/server/src/__tests__/page-objects/WorkflowDesignerPage.ts: wait for New Workflow button visibility before clicking.
  • Reran workflow-designer-blocks full suite with DB env overrides:
    • Command: PW_REUSE=false PLAYWRIGHT_APP_PORT=3301 PLAYWRIGHT_DB_PORT=5437 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env DB_PASSWORD_ADMIN=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) DB_PASSWORD_SERVER=$(cat ../../secrets/postgres_password) npx playwright test src/__tests__/integration/workflow-designer-blocks.playwright.test.ts
    • Result: 10/10 passed (1.3m).
  • Still seeing noisy logs during runs (non-failing): Redis NOAUTH notification accumulator, occasional ECONNRESET aborted requests, and intermittent 401/403/404 errors from workflow registry/schema actions.

2025-12-22 — Env alignment

  • Confirmed the correct dev stack for this work is workflow-overhaul / workflow_overhaul_env8.
  • Updated server/.env to align ports + names with env8 (app 3007, pg 5439, redis 6386, hocuspocus 1241, pgbouncer 6439).

2025-12-22 — Playwright UI tests (batch 13: action.call + publish)

  • Confirmed active stack is workflow-overhaul/workflow_overhaul_env8.
  • UI change: moved “Available actions: X” display into StepConfigPanel for action.call steps so its always visible regardless of schema title logic.
  • Added workflow-designer-publish.playwright.test.ts and new action.call config tests in workflow-designer-config.playwright.test.ts.
  • Tests added:
    • action.call shows available actions count
    • action.call config args/saveAs/idempotencyKey persist after save
    • publish without saving shows toast
    • publish failure shows error cards + breadcrumbs + error badge
    • publish warnings show warning badge count
  • Ran with env8 DB overrides:
    • Command: ADMIN_PASS="$(cat ../../secrets/db_password_server)" PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_ADMIN_PASSWORD=$ADMIN_PASS PLAYWRIGHT_DB_APP_PASSWORD=$ADMIN_PASS DB_PASSWORD_ADMIN=$ADMIN_PASS DB_PASSWORD=$ADMIN_PASS DB_PASSWORD_SERVER=$ADMIN_PASS DB_PASSWORD_SUPERUSER=$ADMIN_PASS npx playwright test src/__tests__/integration/workflow-designer-config.playwright.test.ts src/__tests__/integration/workflow-designer-publish.playwright.test.ts
    • Result: 8/8 passed (2.1m).
  • Noisy server logs persisted (non-failing): Redis WRONGPASS/NOAUTH notifications and occasional 401 Unauthorized from registry/schema actions.

2025-12-22 — Playwright UI tests (batch 14: publish + latest published version)

  • Added publish flow tests in ee/server/src/__tests__/integration/workflow-designer-publish.playwright.test.ts:
    • publish success clears errors + warnings (by removing invalid steps and re-publishing)
    • publish errors reset when switching workflows
    • publish button disabled while publish in progress (uses publish delay override)
    • publish failure toast preserves draft (uses failPublish override)
    • publish success updates latest published version indicator
  • Added Playwright overrides in WorkflowDesigner for publish delay/failure, and surfaced latest published version in UI (#workflow-designer-published-version).
  • Updated listWorkflowDefinitionsAction to include published_version (max version per workflow) and added type support in shared model.
  • Marked publish-related UI checklist items as implemented, including step error badge count.
  • Test run (env8 DB) passed:
    • Command (from ee/server): ADMIN_PASS="$(cat ../../secrets/db_password_server)" PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_ADMIN_PASSWORD=$ADMIN_PASS PLAYWRIGHT_DB_APP_PASSWORD=$ADMIN_PASS PLAYWRIGHT_DB_NAME=alga_contract_wizard_test npx playwright test src/__tests__/integration/workflow-designer-publish.playwright.test.ts
    • Result: 8/8 passed (2.3m).
  • Non-failing noisy logs: intermittent 401 Unauthorized from workflow actions, Redis WRONGPASS reconnect errors, and various migration/seed warnings during bootstrap.

2025-12-22 — Playwright UI tests (batch 15: runs details + admin bulk actions)

  • Added run detail status selector: workflow-run-detail-status in ee/server/src/components/workflow-designer/WorkflowRunDetails.tsx.
  • Updated runs test helpers to also insert workflow_definition_versions so runtime resume/cancel can execute.
  • Added run details + admin/bulk action tests in ee/server/src/__tests__/integration/workflow-designer-runs.playwright.test.ts:
    • run row click opens details panel
    • run details shows workflow name/version + status badge
    • admin selection checkboxes + bulk action controls
    • select all toggles selection
    • bulk resume/cancel flows
    • bulk action clears selection
  • Updated checklist items to implemented in ee/docs/plans/workflow_ui_test_plan.json for the above.
  • Test run (env8 DB):
    • Command (from ee/server): PLAYWRIGHT_APP_PORT=3314 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_NAME=alga_contract_wizard_test REDIS_HOST=localhost REDIS_PORT=6386 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env npx playwright test src/__tests__/integration/workflow-designer-runs.playwright.test.ts -g "run details panel|run metadata|admin sees run selection|select all toggles|bulk resume|bulk cancel|bulk action clears"
    • Result: 7/7 passed (1.6m).
  • Noisy but non-failing logs continue: NOAUTH notification accumulator, occasional ECONNRESET, intermittent Unauthorized from workflow actions during background load.

2025-12-22 — Playwright UI tests (batch 16: run detail admin actions + export/error)

  • Environment note: using workflow-overhaul/workflow_overhaul_env8 stack.
  • Added run detail helpers in ee/server/src/__tests__/integration/workflow-designer-runs.playwright.test.ts:
    • openRunDetails, createWorkflowRunStep, optional run error/node fields, wait type override.
  • Added run-detail tests:
    • error card renders on failed run
    • run export downloads JSON bundle
    • admin resume/cancel/retry/replay/requeue actions (with reasons/payload)
  • Marked corresponding checklist items implemented in ee/docs/plans/workflow_ui_test_plan.json.
  • Test run (env8 DB):
    • Command (from ee/server): PLAYWRIGHT_APP_PORT=3314 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_NAME=alga_contract_wizard_test REDIS_HOST=localhost REDIS_PORT=6386 SECRET_READ_CHAIN=env SECRET_WRITE_PROVIDER=env npx playwright test src/__tests__/integration/workflow-designer-runs.playwright.test.ts -g "run details shows run error card|run details export|admin resume action|admin cancel action|admin retry action|admin replay action|admin requeue action"
    • Result: 7/7 passed (1.8m).
  • Noisy but non-failing logs: NOAUTH notification accumulator, intermittent ECONNRESET during test navigation, and post-teardown Unauthorized from listWorkflowRunStepsAction.

2025-12-22 UI Playwright progress (batch)

  • Env confirmed: workflow_overhaul_env8 stack.
  • Dead Letter tests: fixed row status locator and changed error-handling test to remove workflow admin permission and assert toast via [role="status"].
    • File: ee/server/src/tests/integration/workflow-designer-dead-letter.playwright.test.ts
    • Result: npx playwright test ...dead-letter... => 7 passed.
  • Audit tests: error-handling test now revokes workflow admin permission and asserts toast via [role="status"] with polling.
    • File: ee/server/src/tests/integration/workflow-designer-audit.playwright.test.ts
    • Result: npx playwright test ...audit... => 6 passed.
  • E2E flows: npx playwright test ...workflow-designer-e2e... => 5 passed.
  • workflow_ui_test_plan.json now shows 0 remaining unimplemented items.

2025-12-22 — Runs error handling tests stabilized

  • Updated runs error-handling tests to avoid flaky server-action interception:
    • run list fetch error now uses invalid workflow version (0) to trigger validation error and toast.
    • run details fetch error now deletes the run record before clicking view to force a 404 + toast + close.
  • Removed unused server-action manifest lookup helpers from ee/server/src/__tests__/integration/workflow-designer-runs.playwright.test.ts.
  • Test run:
    • Command (from ee/server): PLAYWRIGHT_APP_PORT=3310 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) PW_REUSE=true npx playwright test src/__tests__/integration/workflow-designer-runs.playwright.test.ts -g "run list fetch error|run details fetch error"
    • Result: 2/2 passed.
  • Note: noisy but non-failing server logs still show intermittent Unauthorized errors during background fetches.

2025-12-22 — Playwright UI tests (batch 17: audit + dead-letter + events + e2e combined)

  • Env: workflow_overhaul_env8 stack.
  • Ran combined suite to validate cross-page flows after recent fixes.
  • Command (from ee/server): PLAYWRIGHT_APP_PORT=3312 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) REDIS_HOST=localhost REDIS_PORT=6386 npx playwright test src/__tests__/integration/workflow-designer-events.playwright.test.ts src/__tests__/integration/workflow-designer-dead-letter.playwright.test.ts src/__tests__/integration/workflow-designer-audit.playwright.test.ts src/__tests__/integration/workflow-designer-e2e.playwright.test.ts
  • Result: 36/36 passed (5.4m).
  • Noise: expected Unauthorized/Forbidden logs during error-handling tests and background fetches; no test failures.

2025-12-22 — Playwright UI tests (batch 18: basic suite)

  • Env: workflow_overhaul_env8 stack (app port 3312).
  • Command (from ee/server): PLAYWRIGHT_APP_PORT=3312 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) REDIS_HOST=localhost REDIS_PORT=6386 npx playwright test src/__tests__/integration/workflow-designer-basic.playwright.test.ts
  • Result: 27/27 passed (4.1m).
  • Noise: recurring ECONNRESET + Unauthorized/Forbidden logs from server actions during negative paths; no test failures.

2025-12-22 — Playwright UI tests (batch 19: runs detail sub-suite)

  • Env: workflow_overhaul_env8 stack (app port 3312).
  • Command (from ee/server): PLAYWRIGHT_APP_PORT=3312 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) REDIS_HOST=localhost REDIS_PORT=6386 npx playwright test src/__tests__/integration/workflow-designer-runs.playwright.test.ts --grep "(runs row click|run details panel|admin sees run selection|select all toggles|bulk resume|bulk cancel|bulk action clears|run details shows|run details export|admin resume action|admin cancel action|admin retry action|admin replay action|admin requeue action|step timeline filter|collapse nested blocks|step timeline view|step details show|step error card|step wait history|envelope tabs|envelope view shows redaction|envelope view shows empty-state|action invocations list|action invocations empty state|run logs tab|run logs export|run logs load more|run logs empty|run audit logs tab|run audit logs load more|run audit logs empty)"
  • Result: 33/33 passed (4.9m).
  • Noise: intermittent ECONNRESET and a transient Unauthorized in server logs for listWorkflowRunStepsAction during admin replay flow; no test failures.

2025-12-22 — Playwright UI tests (batch 20: runs tab + publish + config)

  • Env: workflow_overhaul_env8 stack (app port 3312).
  • Command (from ee/server): PLAYWRIGHT_APP_PORT=3312 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) REDIS_HOST=localhost REDIS_PORT=6386 npx playwright test src/__tests__/integration/workflow-designer-runs.playwright.test.ts src/__tests__/integration/workflow-designer-publish.playwright.test.ts src/__tests__/integration/workflow-designer-config.playwright.test.ts --grep "(runs (tab lists|tab shows summary counts by status|filter by status|filter by workflow id and version updates list|search filters by run id or correlation key|date range filters update list|sort order changes list ordering|reset filters restores defaults and reloads list|quick range buttons set date inputs|refresh reloads list without changing filters|export triggers CSV download and success toast|load more appends additional results|empty state displays when no runs available)|run list fetch error shows toast and preserves filters|run details fetch error shows toast and closes details panel|publish|node config renders|json field|action\\.call config)"
  • Result: 28/28 passed (4.1m).
  • Noise: recurring ECONNRESET and Unauthorized errors in server logs during background fetches; expected Zod validation errors for invalid version in error-handling tests; no test failures.

2025-12-22 — Playwright UI tests (batch 21: flake fixes for runs/expression selectors)

  • Env: workflow_overhaul_env8 stack (app port 3312).
  • Fixes:
    • Expression picker tests now select exact listbox option to avoid matching payload.* entries.
    • openRunsTab now clicks the Runs tab by role/name and waits for data-state="active" before proceeding (also updated in E2E helper).
  • Command (from ee/server): PLAYWRIGHT_APP_PORT=3312 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) REDIS_HOST=localhost REDIS_PORT=6386 npx playwright test src/__tests__/integration/workflow-designer-expressions.playwright.test.ts src/__tests__/integration/workflow-designer-runs.playwright.test.ts -g "expression field inserts|expression field combines|bulk cancel prompts|step timeline filter by node type|action invocations list renders|run audit logs empty state"
  • Result: 6/6 passed (1.4m).
  • Note: Server startup logs are noisy; no new Unauthorized/Forbidden issues observed in these runs.

2025-12-22 — Playwright UI tests (batch 22: controls + blocks + expressions)

  • Env: workflow_overhaul_env8 stack (app port 3312).
  • Command (from ee/server): PLAYWRIGHT_APP_PORT=3312 PLAYWRIGHT_DB_HOST=localhost PLAYWRIGHT_DB_PORT=5439 PLAYWRIGHT_DB_NAME=alga_contract_wizard_test PLAYWRIGHT_DB_ADMIN_USER=postgres PLAYWRIGHT_DB_ADMIN_PASSWORD=$(cat ../../secrets/postgres_password) PLAYWRIGHT_DB_APP_USER=app_user PLAYWRIGHT_DB_APP_PASSWORD=$(cat ../../secrets/db_password_server) REDIS_HOST=localhost REDIS_PORT=6386 npx playwright test src/__tests__/integration/workflow-designer-controls.playwright.test.ts src/__tests__/integration/workflow-designer-blocks.playwright.test.ts src/__tests__/integration/workflow-designer-expressions.playwright.test.ts
  • Result: 29/29 passed (2.8m).
  • Noise: intermittent Unauthorized/Forbidden logs during background fetches and occasional ECONNRESET/Error: aborted messages; no test failures.