---
id: CAP-PFM-INT-021
title: Reuse validated action and workflow recipes
feature: FEAT-PFM-INT-06
product_area: platform
module: integrations
revision: 1
status: draft
product_intent: proposed
implementation_evidence: observed
supersedes:
  - CAP-PFM-INT-019
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
intent_sources:
  - 'services-platform:docs/proposals/application-processes-and-workflow-actions/14-decisions.md#D-03'
  - 'services-platform:docs/proposals/application-processes-and-workflow-actions/14-decisions.md#D-08'
purpose: >-
  Administrators save reusable action settings and workflow stages, then adopt copies that remain independent
  of later recipe edits.
outcomes:
  - Saved recipes contain actions that pass configuration validation.
concepts:
  - CON-PFM-INT-006
actors:
  - ACT-PFM-022
  - ACT-PFM-006
surfaces:
  - api
preconditions: []
postconditions: []
permissions:
  - key: platform.workflow-actions.registry-read
    where_checked: api
    scope: tenant
  - key: platform.workflow-actions.templates-manage
    where_checked: api
    scope: tenant
rules:
  - id: BR-CAP-PFM-INT-021-01
    proved_by: [ATS-PFM-INT-021-01, TST-PFM-INT-587, TST-PFM-INT-591, TST-PFM-INT-604]
    statement: >-
      Lists place Rhythm’s eight shipped action recipes and six workflow recipes first, identify them as
      shipped and refuse customer edits or deletion.
    kind: policy
    enforced_at:
      - api
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/workflow-actions/tests/integration/services/persistence/action-templates.integration.spec.js#refuses
      a replacement of one (405)
    origin: none
  - id: BR-CAP-PFM-INT-021-02
    proved_by: [ATS-PFM-INT-021-02, TST-PFM-INT-591, TST-PFM-INT-600, TST-PFM-INT-605]
    statement: >-
      Recipe saves validate every action against active enabled registry types, host and trigger restrictions,
      current contract version, settings schema and configurator permissions, with workflow stages also
      checked against their contract.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/workflow-actions/tests/integration/services/persistence/action-templates.integration.spec.js#refuses
      a type that is declared and switched off
    origin: none
  - id: BR-CAP-PFM-INT-021-03
    proved_by: [ATS-PFM-INT-021-03, TST-PFM-INT-591]
    statement: >-
      Customer recipe identifiers are unique within the workspace, cannot use Rhythm’s reserved prefix and
      require the read version on replacement.
    kind: validation
    enforced_at:
      - service
    must_prove: true
    provenance: test
    source: >-
      services-platform:modules/workflow-actions/tests/integration/services/persistence/action-templates.integration.spec.js#refuses
      an id in Rhythm’s own prefix, which the configuration-id grammar reserves (400)
    origin: none
  - id: BR-CAP-PFM-INT-021-04
    proved_by: [ATS-PFM-INT-021-05]
    statement: 'A recipe is copied into its using definition, so later template edits do not change that definition.'
    kind: policy
    enforced_at:
      - service
    must_prove: true
    provenance: documented
    source: >-
      services-platform:docs/workflow-actions/README.md#Workflow actions: Platform's part of the Workflow
      Action Engine
    origin: none
  - id: BR-CAP-PFM-INT-021-05
    proved_by: [ATS-PFM-INT-021-04, TST-PFM-INT-587]
    statement: >-
      Registry read permits recipe reads and templates manage permits creating, replacing or deleting
      workspace recipes.
    kind: permission
    enforced_at:
      - api
    must_prove: true
    provenance: observed
    source: 'services-platform:modules/workflow-actions/aws/api/workflow-actions.routes.ts:workflowActionsRoutes'
    origin: none
scenarios:
  - id: SC-CAP-PFM-INT-021-01
    given: A workspace adopts a valid action recipe into a definition.
    when: An administrator changes the reusable recipe.
    then: The definition keeps its copied settings.
    provenance: documented
    source: >-
      services-platform:docs/workflow-actions/README.md#Workflow actions: Platform's part of the Workflow
      Action Engine
edge_cases: []
constraints: []
depends_on:
  - CAP-PFM-INT-018
related:
  - CAP-PFM-INT-020
journeys: []
open_questions: []
evidence:
  - >-
    services-platform source inventory: modules/workflow-actions/services/persistence/action-templates.ts,
    workflow-templates.ts, business-calendars.ts, services/validation/action-lists.ts,
    contracts/workflow-template-document.ts, services/maintenance/*; rule-level automated test references;
    docs/workflow-actions/README.md; 14-decisions.md (D-03, D-08).
  - >-
    macroservice-libraries source inventory: packages/workflow-actions/src/business-days.ts; associated unit
    test.
  - 'End-to-end definition inventory: workflow-actions.e2e.spec.js.'
controls: [TC-AVL-004, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-006, TC-LOG-004, TC-LOG-005, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-VEN-001, TC-VEN-002, TC-VEN-003]
exercised_by: [FAS-PFM-INT-06-01, FAS-PFM-INT-06-02, FAS-PFM-INT-06-03, FAS-PFM-INT-06-04, FAS-PFM-INT-06-05]
suites: [TST-PFM-INT-587, TST-PFM-INT-591, TST-PFM-INT-600, TST-PFM-INT-604, TST-PFM-INT-605]
---
# Reuse validated action and workflow recipes

## Purpose

Administrators save reusable action settings and workflow stages, then adopt copies that remain independent of later recipe edits.

## How It Works

Staff select a reusable action or workflow recipe. Validation checks whether its settings are configurable for the intended context. Shipped recipes provide a read-only starting point. Workspace recipes can be maintained separately. Adoption copies the contents into the using definition. The product should keep later recipe maintenance separate from changing the published definition.

## Relationships

The action registry determines which saved configurations are valid. Application definitions adopt recipe contents and own the resulting execution.
