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

7.9 KiB

Scratchpad — Workflow Audit CSV Export Details

  • Plan slug: workflow-audit-csv-export-details
  • Created: 2026-04-29

What This Is

Rolling notes for improving workflow audit CSV exports so the CSV is business-readable while retaining technical references for support.

Decisions

  • (2026-04-29) Use one CSV format for both business readability and support troubleshooting. Rationale: user selected option C; readable columns should be first and technical references should be retained at the end.
  • (2026-04-29) Use a hybrid formatter. Known audit operations get first-class columns and summaries; unmapped safe scalar fields go into additional_details. Rationale: avoids raw JSON while preventing silent detail loss.
  • (2026-04-29) Actor column should be human-readable, with actor_user_id retained as a separate trailing technical column.
  • (2026-04-29) Workflow/run context should prioritize readable columns up front, with raw IDs near the end.
  • (2026-04-29) JSON export remains the raw/lossless redacted export. CSV becomes the business-readable audit report.
  • (2026-04-29) Do not add legacy CSV mode in v1 unless a known downstream consumer appears.

Discoveries / Constraints

  • (2026-04-29) Review follow-up: real workflow audit payloads use a mix of camelCase and snake_case keys (publishedVersion, draftVersion, workflowVersion, nodePath, plus runtime action_id/step_path). Formatter aliases must support both shapes.
  • (2026-04-29) Review follow-up: audit_logs stores tenant in tenant, not tenant_id; CSV enrichment should prefer authenticated tenant context and only fall back to audit_logs.tenant.
  • (2026-04-29) Review follow-up: server Vitest runs from server/, so EE workflow action tests need an explicit include pattern under ../ee/packages/workflows/src/actions.
  • (2026-04-29) Current CSV export in ee/packages/workflows/src/actions/workflow-runtime-v2-actions.ts only includes timestamp, operation, user_id, table_name, and record_id.
  • (2026-04-29) Current export path already redacts changed_data and details via listWorkflowAuditLogsAction() before CSV/JSON serialization.
  • (2026-04-29) Current export limit is EXPORT_AUDIT_LIMIT = 5000.
  • (2026-04-29) Definition audit UI caller: ee/server/src/components/workflow-designer/WorkflowDefinitionAudit.tsx.
  • (2026-04-29) Run audit UI caller: ee/server/src/components/workflow-designer/WorkflowRunDetails.tsx.
  • (2026-04-29) API routes import exportWorkflowAuditLogsAction(), so improving that action improves route exports too.
  • (2026-04-29) auditWorkflowEvent() appends actorRoles and source to details for action-written workflow audit rows.
  • (2026-04-29) Runtime writeRunAudit() can produce workflow run audit rows with action_id, action_version, and step_path in details.

Commands / Runbooks

  • (2026-04-29) Relevant search command used during planning:
    • rg -n "exportWorkflowAuditLogsAction|EXPORT_AUDIT_LIMIT|ListWorkflowAuditLogsInput|workflow_definition_|workflow_run_" ee/packages/workflows/src/actions ee/server/src/components/workflow-designer server/src/app/api/workflow-definitions server/src/app/api/workflow-runs packages/db/src/lib/auditLog.ts shared/workflow/runtime/actions/businessOperations/shared.ts
  • (2026-04-29) Before implementation, inspect package test conventions around workflow actions and choose whether formatter helpers should be inline or separated for direct unit testing.
  • ee/packages/workflows/src/actions/workflow-runtime-v2-actions.ts
  • ee/packages/workflows/src/actions/workflow-runtime-v2-schemas.ts
  • ee/server/src/components/workflow-designer/WorkflowDefinitionAudit.tsx
  • ee/server/src/components/workflow-designer/WorkflowRunDetails.tsx
  • server/src/app/api/workflow-definitions/[workflowId]/audit/export/route.ts
  • server/src/app/api/workflow-runs/[runId]/audit/export/route.ts
  • packages/db/src/lib/auditLog.ts
  • shared/workflow/runtime/actions/businessOperations/shared.ts

Open Questions

  • Confirm exact automated test location and runner for workflow action/export helpers.
  • Decide whether to keep formatter helpers in workflow-runtime-v2-actions.ts or extract to a dedicated helper module for cleaner tests.

Implementation Log

  • (2026-04-29) Implemented business-readable workflow audit CSV formatter helpers in ee/packages/workflows/src/actions/workflow-audit-csv.ts.
    • Added stable CSV headers in required business-first order with trailing technical references.
    • Added known operation -> event mapping plus readable unknown-operation fallback.
    • Added flattening logic for source/workflow version/run status/reason/step path/action and changed-fields synthesis.
    • Added additional_details scalar extraction and object/array summaries (object, N items) to avoid raw JSON blobs.
    • Added actor formatting helper for full-name+email, email-only, name-only, unresolved fallback.
  • (2026-04-29) Updated exportWorkflowAuditLogsAction() to use formatter helpers and enrichment while preserving default CSV contract and JSON branch behavior.
    • Preserved input parsing, export limit behavior, and filename/content-type behavior.
    • CSV branch now enriches actor display names from users and workflow/run context from workflow_definitions/workflow_runs.
    • JSON branch remains JSON.stringify(result.logs, null, 2) over redacted rows.
  • (2026-04-29) Added formatter unit tests in ee/packages/workflows/src/actions/workflow-audit-csv.test.ts covering representative definition mapping, unknown fallback/additional details, CSV escaping, redaction-preservation, and actor formatting variants.

Verification Runbook

  • npx vitest --root ee/packages/workflows src/actions/workflow-audit-csv.test.ts
  • npx tsc -p ee/packages/workflows/tsconfig.json --noEmit

Gotchas

  • WorkflowDefinitionModelV2.getById requires tenant and cannot be called with null tenant; export enrichment uses direct workflow_definitions query with optional tenant filter from audit rows.
  • Definition key field is key (not workflow_key) on workflow_definitions records.
  • (2026-04-29) Added test coverage for run-operation formatting (T002) and runtime action-level fields (T003) in workflow-audit-csv.test.ts.
  • (2026-04-29) Implemented T008 DB-backed integration sanity coverage in server/src/test/integration/workflowAuditExport.integration.test.ts.
    • Adds real createTestDbConnection fixture setup for tenants/users/workflow_definitions/audit_logs and verifies both CSV and JSON export paths from exportWorkflowAuditLogsAction().
    • Asserts CSV returns the new business-readable header set + readable event/actor/workflow fields and JSON remains raw redacted rows (changed_data.secretRef === '***').
    • Added virtual mocks for missing workspace-only authorization modules required by workflow runtime bootstrap in this test environment.
  • (2026-04-29) Added DB-availability guard in workflowAuditExport.integration.test.ts so the suite passes in environments without a reachable integration Postgres; the test executes fully when the DB connection is available.
  • (2026-04-29) Implemented T009 in server/src/test/integration/workflowAuditExport.integration.test.ts.
    • Added fail-fast guard assertions for admin permission denial (403) and cross-tenant definition export access (404) to confirm existing validation remains enforced before CSV enrichment.
  • (2026-04-29) Implemented T010 in server/src/test/integration/workflowAuditExport.integration.test.ts.
    • Added compatibility assertion that existing export callers can omit format and still receive default CSV output with unchanged content type and filename pattern (workflow-run-<runId>-audit.csv).
  • (2026-04-29) Implemented T011 manual smoke coverage via ee/docs/plans/2026-04-29-workflow-audit-csv-export-details/T011-manual-smoke-test.md.
    • Added end-to-end admin validation steps for definition and run audit CSV exports, required column/row checks, and JSON cross-check expectations.