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
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
55 KiB
55 KiB
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 inserver/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.tsand 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.callWorkflownow maps child run snapshots into parent env.
- Uses
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.v1registered inshared/workflow/runtime/schemas/emailWorkflowSchemas.tsandshared/workflow/runtime/init.ts.
DB + migrations
- Added migration
server/migrations/20251221090000_create_workflow_runtime_v2_tables.cjscreating:- 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.cjsto 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.tspolling:- 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-schematoshared/package.json. - Added
zod-to-json-schematoserver/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.tswith 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.tsand API error helperserver/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.tsserver/src/app/api/workflow-definitions/[workflowId]/[version]/route.tsserver/src/app/api/workflow-definitions/[workflowId]/[version]/publish/route.tsserver/src/app/api/workflow-runs/route.tsserver/src/app/api/workflow-runs/[runId]/route.tsserver/src/app/api/workflow-runs/[runId]/steps/route.tsserver/src/app/api/workflow-runs/[runId]/cancel/route.tsserver/src/app/api/workflow-runs/[runId]/resume/route.tsserver/src/app/api/workflow/registry/nodes/route.tsserver/src/app/api/workflow/registry/actions/route.tsserver/src/app/api/workflow/registry/schemas/[schemaRef]/route.tsserver/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.jsonupdated toimplemented=truefor 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.tscovering 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: respectRetryPolicy.maxAttemptswhen 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.jsonfor 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
./secretsviagenerate_secrets.py. - Updated
server/.envwith 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 -dinitially failed due to missing secretssecrets/ninjaone_client_id+secrets/ninjaone_client_secret; created empty files to satisfy bind mounts.docker compose up -dthen hit host port conflict on pgbouncer (6432). Updatedserver/.envto 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/appendExpressionError in forEach body assignments. - Corrected path stack containerPath handling for nested blocks in
resolveStepAtPathso forEach loops resume correctly across body steps. - Cleared
lease_owner+lease_expires_atwhenever runs enter WAITING (event waits + retry scheduling) to allow resume by other workers. control.callWorkflownow checks child run status after inline execution and throwsActionErrorif child failed (enables propagation + retry scheduling).- Idempotency keys are now tenant-scoped by prefixing with
tenantIdwhen present.
Test helper updates
actionCallStephelper now acceptsretryand sets it on the step.- Stale-lease test setup uses tenant-scoped idempotency keys (
${tenantId}:fixed|stale).
Test expectation fixes
control.return inside control.ifnow 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:createWorkflowAuditLognow normalizes empty userId → null and uses a transaction to setapp.current_tenant+ insert on the same connection (avoidsinvalid input syntax for type uuid: ""from audit log insert + trigger).
Tests executed (all passing after fix)
run logs tab filters by search and levelrun logs load more appends additional entriesrun audit logs tab loads entries and supports exportrun audit logs load more appends additional entries
Notes
- Audit log failures were due to
set_configbeing connection-scoped; pooling meant the insert ran withoutapp.current_tenantset.
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:readto 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=chromiumwith 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: abortedlogs during navigation and repeatedNotificationAccumulatorRedis 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_defaultsexpectation 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.jsonalready shows all 220 tests markedimplemented: true(no update needed).
Checklist status
workflow_runtime_feature_checklist.jsonstill has 22 items markedimplemented: 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.tsxwith 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.tsxandpackages/product-workflows/ee/entry.ts. - Node palette loads from
/api/workflow/registry/nodeswith 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) vialistWorkflowRunsActionwith filters, pagination, and workflow name join. - Added run list UI tab with filters and table in
ee/server/src/components/workflow-designer/WorkflowRunList.tsxand wired intoWorkflowDesignertabs. - 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_logspersistence + 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.forEachnow treats non-array items asValidationError.control.callWorkflownow checks child run status and throwsActionErroron failure (enables parent failure + retry policy).- Idempotency keys are tenant-scoped (prefix with
tenantId:unless already prefixed). acquireRunnableRunuses 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).
- Retry scheduling now stops when
server/src/lib/actions/workflow-runtime-v2-actions.tsstartWorkflowRunActionnow uses latest published version when version omitted and validates payload against schema registry.submitWorkflowEventActionnow resumes botheventandhumanwaits.listWorkflowEventsActionacceptsundefinedinput (defaults to{}) and still returns{ events, nextCursor }.resumeWorkflowRunActionnow records admin resume events and re-storesresume_event_payloadafter 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_RESUMEor payload includes__admin_override.
- Admin resume bypasses human-task validation when resume event name is
Test plan + test updates
- Updated admin-resume test plan wording to reference admin override metadata.
workflowRuntimeV2.control.integration.test.tsnow expectslistWorkflowEventsAction()to return{ events }.- Increased
beforeAlltimeout forworkflowRuntimeV2.email.integration.test.tsto 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 repeatedcreateTestDbConnection()calls:- Errors:
Knex: Timeout acquiring a connectionduring 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.
- Errors:
2025-12-21 Playwright UI test plan
- Created
ee/docs/plans/workflow_ui_test_plan.jsonwith 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:readtoMANAGE_PERMISSIONSinworkflow-designer-basic.playwright.test.tsso 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.tsnow 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 don’t use
htmlFor). - Final run:
workflow-designer-blocks.playwright.test.tspasses (7/7). Observed recurring server logs: Redis NOAUTH and occasionalECONNRESET+ oneUnauthorizedlog fromlistWorkflowRegistryActionsActionduring 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:canPublishnow requiresworkflow:publish(or admin),canAdminrequiresworkflow:admin,canManageallows manage/admin.server/src/lib/actions/workflow-runtime-v2-actions.ts:requireWorkflowPermissionfallback now allows admin for manage/publish; removed manage→publish fallback.listWorkflowRegistryNodesAction/listWorkflowRegistryActionsActionnow requireread(not manage).
- Expanded
WorkflowDesignerPagehelpers (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.tswith 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).
- Command:
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.
- Command:
- Noted recurring logs during run (no test failures): Redis NOAUTH notification accumulator,
ECONNRESETaborted requests, occasionalUnauthorizederrors 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
createSavedWorkflowinworkflow-designer-controls.playwright.test.tsfor reuse. - Updated settings UI so failure threshold/min inputs are disabled when auto-pause is off:
ee/server/src/components/workflow-designer/WorkflowDesigner.tsxnow passesdisabled={!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.
- Command:
- 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.
- Command:
- 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.
- Command:
- 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.tswith 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.
- Command:
- 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.tspasses (6/6). Still seeing benignECONNRESET+NOAUTHlog noise during runs.
2025-12-22 — Playwright UI tests (batch 11: basic + blocks re-run)
- Re-ran
workflow-designer-basic+workflow-designer-blocksafter 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
- Command:
- Result: 27/27 passed.
- Noisy server logs persisted (expected / non-failing): Redis
NOAUTHnotification accumulator, occasionalECONNRESETaborted 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 viadata-pipe-path+ global mousemove when dragging; adddata-step-idto top-level draggable wrappers for reliable step queries.ee/server/src/__tests__/integration/workflow-designer-blocks.playwright.test.ts:getStepIdsInnow 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-blocksfull 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).
- Command:
- Still seeing noisy logs during runs (non-failing): Redis
NOAUTHnotification accumulator, occasionalECONNRESETaborted 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/.envto 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
StepConfigPanelforaction.callsteps so it’s always visible regardless of schema title logic. - Added
workflow-designer-publish.playwright.test.tsand new action.call config tests inworkflow-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).
- Command:
- Noisy server logs persisted (non-failing): Redis
WRONGPASS/NOAUTHnotifications and occasional 401Unauthorizedfrom 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
WorkflowDesignerfor publish delay/failure, and surfaced latest published version in UI (#workflow-designer-published-version). - Updated
listWorkflowDefinitionsActionto includepublished_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).
- Command (from
- 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-statusinee/server/src/components/workflow-designer/WorkflowRunDetails.tsx. - Updated runs test helpers to also insert
workflow_definition_versionsso 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.jsonfor 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).
- Command (from
- Noisy but non-failing logs continue:
NOAUTHnotification accumulator, occasionalECONNRESET, 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_env8stack. - 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).
- Command (from
- Noisy but non-failing logs:
NOAUTHnotification accumulator, intermittentECONNRESETduring test navigation, and post-teardownUnauthorizedfromlistWorkflowRunStepsAction.
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 errornow uses invalid workflow version (0) to trigger validation error and toast.run details fetch errornow 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.
- Command (from
- 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
ECONNRESETand a transientUnauthorizedin server logs forlistWorkflowRunStepsActionduring 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
ECONNRESETandUnauthorizederrors 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. openRunsTabnow clicks the Runs tab by role/name and waits fordata-state="active"before proceeding (also updated in E2E helper).
- Expression picker tests now select exact listbox option to avoid matching
- 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: abortedmessages; no test failures.