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
7.9 KiB
7.9 KiB
Scratchpad — Workflow Import/Export (2026-01-25)
Context
- Workflow Runtime V2 stores:
workflow_definitions(draft + metadata)workflow_definition_versions(published immutable versions)
- Existing test helpers exist under
server/src/test/helpers/workflowRuntimeV2TestHelpers.ts.
Decisions (draft)
- Use a JSON bundle format with explicit
format+formatVersion. - V1 accepts exactly one version and rejects others (no migration/back-compat).
- “Full fidelity” targets workflow behavior + operational settings, not audit timestamps.
- Bundle requires a stable portable
keyper workflow (distinct from DB ids). - Import always regenerates
workflow_id. - Import is create-only by default;
--force/force=trueoverwrites by deleting the existing workflow (matched by key) and recreating it from the bundle. - V1 is API-only plus a CLI wrapper in
tools/(no UI).
Proposed docs locations
ee/docs/schemas/workflow-bundle.v1.schema.jsonee/docs/guides/workflows/workflow-import-export.md
Open Questions to resolve
- Do we need additional explicit validation beyond DB constraints for specific reference types (if constraints are insufficient)?
Notes / references
- Workflow Runtime V2 PRD:
ee/docs/plans/2025-12-21-workflow-overhaul.md - Persistence models:
shared/workflow/persistence/workflowDefinitionModelV2.tsshared/workflow/persistence/workflowDefinitionVersionModelV2.ts
Work log
- 2026-01-25: Added v1 bundle header constants/types in
shared/workflow/bundle/workflowBundleV1.ts(format,formatVersion,exportedAt) to centralize the accepted format/version. - 2026-01-25: Defined v1 bundle TypeScript shape (workflow metadata + draft + published versions) in
shared/workflow/bundle/workflowBundleV1.tsas the shared contract for exporter/importer/tests. - 2026-01-25: Standardized portable workflow identifier as
workflows[].keywith a basic validation pattern inshared/workflow/bundle/workflowBundleV1.ts. - 2026-01-25: Added canonical JSON rules implementation in
shared/workflow/bundle/canonicalJson.ts(recursive key sort, 2-space indent, trailing newline) for stable bundle bytes. - 2026-01-25: Added JSON Schema
ee/docs/schemas/workflow-bundle.v1.schema.json(draft-07) as the machine-checkable contract for v1 bundles. - 2026-01-25: Added human-readable format spec at
ee/docs/guides/workflows/workflow-import-export.md(header, key semantics, canonical JSON, import policies). - 2026-01-25: Added
workflow_definitions.key(nullable, unique) viaserver/migrations/20260125120000_add_workflow_definition_key.cjsto support portable bundle identity and create/overwrite semantics. Backfills the seeded email workflow tosystem.email-processing. - 2026-01-25: Implemented single-workflow exporter
server/src/lib/workflow/bundle/exportWorkflowBundleV1.ts(loads workflow_definitions + workflow_definition_versions into the v1 bundle shape). - 2026-01-25: Extended exporter to support multi-workflow bundles via
exportWorkflowBundleV1ForWorkflowIds(bulk-load definitions + versions; workflows sorted by key). - 2026-01-25: Exporter intentionally omits instance-specific audit/actor fields (timestamps, *_by, version_id) by projecting only the portable subset into the bundle.
- 2026-01-25: Exporter includes operational settings in
metadata(isPaused/isVisible/concurrency/retention/auto-pause thresholds) for behavioral fidelity. - 2026-01-25: Added dependency summary collection (
shared/workflow/bundle/dependencySummaryV1.ts) and includeddependenciesin bundle exports (actions/node types/schema refs) to support structured missing-dependency errors on import. - 2026-01-25: Added import-time header validation for v1 bundles in
server/src/lib/workflow/bundle/validateWorkflowBundleHeaderV1.ts(rejects unsupported formatVersion with a structured error). - 2026-01-25: Added Ajv-based bundle schema validation using
ee/docs/schemas/workflow-bundle.v1.schema.jsonviaserver/src/lib/workflow/bundle/validateWorkflowBundleSchemaV1.ts. - 2026-01-25: Added dependency validation helper
server/src/lib/workflow/bundle/validateWorkflowBundleDependenciesV1.tsthat checks bundle-declared actions/nodeTypes/schemaRefs against runtime registries and throws structured missing-dependency errors. - 2026-01-25: Implemented bundle importer core in
server/src/lib/workflow/bundle/importWorkflowBundleV1.tsusing a singleknex.transaction(...)for all writes (rolls back on any error). - 2026-01-25: Importer creates
workflow_definitionsfrom bundle workflows (metadata + draft), regeneratingworkflow_idand rewriting workflow definition JSONidfields to match. - 2026-01-25: Importer creates
workflow_definition_versionsfor eachpublishedVersions[]entry, inserting immutable definition_json + payload schema snapshots. - 2026-01-25: Importer default policy is create-only: conflicts on existing
workflow_definitions.keythrowWORKFLOW_KEY_CONFLICTunlessforceis enabled. - 2026-01-25: Importer supports
forceoverwrite: delete existing workflow by key (cascades versions/runs) and recreate from bundle with a regeneratedworkflow_id. - 2026-01-25: Importer returns a summary object (created workflows, deleted workflows, created published versions) from
importWorkflowBundleV1. - 2026-01-25: Added HTTP export endpoint
server/src/app/api/workflow-definitions/[workflowId]/export/route.tsreturning canonical bundle JSON for a single workflow. - 2026-01-25: Added HTTP import endpoint
server/src/app/api/workflow-definitions/import/route.ts(POST bundle JSON; supports?force=true; returns import summary). Updated API error handling to include structureddetailswhen present. - 2026-01-25: Import/export endpoints are admin-gated via
requireWorkflowPermission(user, 'admin', knex)in the underlying server actions. - 2026-01-25: Added a minimal API-wrapping CLI at
tools/workflow-bundle-cli/workflow-bundle.js(ESM; supportsexportandimportwith optional--cookie+--tenantheaders). - 2026-01-25: Added a representative fixture bundle
server/src/test/fixtures/workflow-bundles/email-processing.v1.json(control flow + action.call usage) for import/export tests. - 2026-01-25: Canonicalization utility
shared/workflow/bundle/canonicalJson.tsis used by the export endpoint to emit stable bundle bytes and will be used in round-trip tests. - 2026-01-25: Added integration test
server/src/test/integration/workflowBundleV1.importExport.integration.test.tscovering unsupported formatVersion rejection (T001). - 2026-01-25: Extended bundle integration tests for schema validation failures (T002).
- 2026-01-25: Added missing dependency validation coverage for actions/node types/schema refs (T003).
- 2026-01-25: Added canonical export formatting test via HTTP export route (T010).
- 2026-01-25: Added audit-field exclusion assertion for exported bundles (T011).
- 2026-01-25: Added import-to-empty-DB integration coverage (creates definitions + versions; rewrites workflow ids) (T020).
- 2026-01-25: Added create-only conflict test (duplicate key without force) (T021).
- 2026-01-25: Added force overwrite import test (delete+recreate with regenerated workflow_id) (T022).
- 2026-01-25: Added transactional rollback coverage (unique constraint failure does not persist partial workflow rows) (T023).
- 2026-01-25: Added export→import→export round-trip test with canonical normalization (exportedAt + workflowId placeholder) (T030).
- 2026-01-25: Added end-to-end execution test for imported workflows (imports bundle then runs the published version to SUCCEEDED) (T031).
- 2026-01-25: Added explicit HTTP export endpoint smoke test asserting bundle header + workflow key (T040).
- 2026-01-25: Added HTTP import endpoint test (POST bundle JSON returns summary and persists workflow row) (T041).
- 2026-01-25: Refactored
tools/workflow-bundle-cli/workflow-bundle.jsto exposerunWorkflowBundleClifor unit testing; added CLI export test (T050). - 2026-01-25: Added CLI import test covering
--forcequery parameter wiring (T051).