---
id: SVC-PFM-INT-workflow-actions
title: Shared workflow action configuration service
product_area: platform
module: integrations
revision: 1
status: draft
repository: services-platform
source_module: modules/workflow-actions
design_intent: confirmed
origin: >-
  docs/proposals/application-processes-and-workflow-actions/14-decisions.md D-03, D-08, D-10 (Andrew
  2026-10-17)
implementation_evidence: observed
inference: []
source_sha:
  services-platform: ad3f6a6582843008ed0f5a17b131878d15829af1
  macroservice-libraries: 54536a441935c6e09fdb7f96f0bec71c52ba4e03
owns:
  - DOM-PFM-INT-006
does_not_own:
  - 'Hosts execute actions and own their runs, timers, batches, retries and skip operations.'
  - Event-owning applications evaluate automation in their own transactions.
  - The query service exposes datasets backed by the shared run and timer views.
  - Workspace lifecycle invokes provisioning and cleanup participants.
operations:
  - operation_id: getWorkflowActionsHealth
    intent: Return deployment health for the workflow configuration API.
    access: public
    permission: 'none: public health route'
    realises: []
    published_to_submissions: 'not published: deployment health, not a business operation'
  - operation_id: registerWorkflowActionsManifest
    intent: >-
      Replace the calling application’s trigger and action declarations, retiring entries omitted from its
      manifest.
    access: service
    permission: platform.workflow-actions.registry-register (service caller for its own application)
    realises:
      - CAP-PFM-INT-018
    published_to_submissions: 'not published: a service or adapter call made by code, never a person’s intake'
  - operation_id: getWorkflowActionsTenantHealth
    intent: Return workflow configuration health within an authorized workspace.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-018
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: listWorkflowTriggerPoints
    intent: Browse active trigger declarations and their available facts.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-018
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: listWorkflowActionTypes
    intent: 'Browse active action declarations applicable to a host, category and trigger.'
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-018
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: getWorkflowActionType
    intent: 'Inspect an action declaration, including its schemas and retirement standing.'
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-018
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: listWorkflowActionTemplates
    intent: Browse action templates available for copying into a definition.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: createWorkflowActionTemplate
    intent: Validate and save a reusable action specification for this workspace.
    access: console
    permission: platform.workflow-actions.templates-manage
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: getWorkflowActionTemplate
    intent: Inspect a workspace-owned or shipped action template.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: replaceWorkflowActionTemplate
    intent: Edit a workspace action template using the previously read version.
    access: console
    permission: platform.workflow-actions.templates-manage
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: deleteWorkflowActionTemplate
    intent: Remove a workspace action template without changing definitions that already copied it.
    access: console
    permission: platform.workflow-actions.templates-manage
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: listWorkflowTemplates
    intent: Browse workflow templates available for copying.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: createWorkflowTemplate
    intent: Save a reusable stage-and-action document for this workspace.
    access: console
    permission: platform.workflow-actions.templates-manage
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: getWorkflowTemplate
    intent: Inspect the document of a workspace-owned or shipped workflow template.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: replaceWorkflowTemplate
    intent: Edit a workspace workflow template using the previously read version.
    access: console
    permission: platform.workflow-actions.templates-manage
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: deleteWorkflowTemplate
    intent: Remove a workspace workflow template.
    access: console
    permission: platform.workflow-actions.templates-manage
    realises:
      - CAP-PFM-INT-021
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: listBusinessCalendars
    intent: 'Browse calendar names, default markers and record versions.'
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-022
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: createBusinessCalendar
    intent: 'Create a business calendar, clearing the previous default if the new calendar is selected as default.'
    access: console
    permission: platform.workflow-actions.calendars-manage
    realises:
      - CAP-PFM-INT-022
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: getBusinessCalendar
    intent: Load a calendar in the shape accepted by the shared timing library.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-022
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: replaceBusinessCalendar
    intent: Edit a calendar at the previously read version and transfer default status when requested.
    access: console
    permission: platform.workflow-actions.calendars-manage
    realises:
      - CAP-PFM-INT-022
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: deleteBusinessCalendar
    intent: Remove a calendar without recalculating existing timer instants.
    access: console
    permission: platform.workflow-actions.calendars-manage
    realises:
      - CAP-PFM-INT-022
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: listAutomationRules
    intent: 'Browse automation rules, optionally filtering by standing or source event.'
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: createAutomationRule
    intent: Create a rule and its initial editable version.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: getAutomationRule
    intent: Inspect rule metadata together with its draft and current published version.
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: replaceAutomationRule
    intent: Edit rule metadata at the previously read version; its source event becomes fixed after publication.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: deleteAutomationRule
    intent: Remove a never-published rule; published rules require retirement.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: saveAutomationRuleDraft
    intent: Save the editable version or create the next draft after publication.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: publishAutomationRule
    intent: 'Validate and freeze a draft, select it as current and enable a newly published rule.'
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: enableAutomationRule
    intent: Allow a disabled rule to respond to future events.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: disableAutomationRule
    intent: Stop an enabled rule from responding to future events.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: retireAutomationRule
    intent: Permanently stop a rule while retaining it for historical runs.
    access: console
    permission: platform.workflow-actions.automation-manage
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: configuration or operational administration by staff, not an intake capture'
  - operation_id: listAutomationRuleVersions
    intent: 'Browse a rule’s version history, subject to the two-hundred-version retention limit.'
    access: console
    permission: platform.workflow-actions.registry-read
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: listWorkflowActionRuns
    intent: 'Browse action runs across hosts, with an optional failed-run attention filter.'
    access: console
    permission: platform.workflow-actions.runs-read
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: a read or explanation, not a capture'
  - operation_id: listWorkflowTimers
    intent: 'Browse timers across hosts by due time, with an optional blocked-timer attention filter.'
    access: console
    permission: platform.workflow-actions.runs-read
    realises:
      - CAP-PFM-INT-020
    published_to_submissions: 'not published: a read or explanation, not a capture'
events:
  - name: Workflow-actions manifest
    direction: consumed
    when: A host deployment replaces its workflow declarations.
    payload_summary: 'Host ownership, trigger facts and action schemas together with permitted hosts, triggers and authority.'
  - name: Direct table reads by hosts
    direction: produced
    when: A host evaluates automation or calculates business time.
    payload_summary: Calendar configuration and enabled published automation versions loaded by the shared host reader.
jobs:
  - Workspace setup seeds the default Standard week calendar.
  - >-
    Platform setup registers its workflow declarations and shipped templates, then rebuilds shared run and
    timer views.
integrations:
  - system: Host application schemas
    direction: inbound
    contract: >-
      Host run and timer views expose the required columns; Platform builds their union when shared views are
      refreshed.
consistency:
  - rule: Registry replacement commits the complete manifest or retains the previous registry.
    kind: transactional
    compensation: A refused replacement changes no registry entries.
  - rule: 'Publication locks the rule and draft, freezes the version and changes the current pointer atomically.'
    kind: transactional
    compensation: A failed publish leaves the prior rule and draft intact.
  - rule: Choosing a default calendar clears competing defaults within the same transaction.
    kind: transactional
    compensation: A failed edit retains the prior default selection.
  - rule: >-
      Hosts load current configuration on their next read; already-computed timers retain their scheduled
      instants.
    kind: eventual
    compensation: Configuration edits do not reschedule existing timers.
evidence:
  - >-
    services-platform at ad3f6a65: modules/workflow-actions/aws/api/workflow-actions.routes.ts,
    workflow-actions-service.routes.ts; services/**; db/cross-workflow-views.view.ts; aws/platform.service.ts
    (workflow-actions keys)
  - >-
    services-platform at ad3f6a65: docs/workflow-actions/README.md, automation-rules.md,
    cross-service-views.md
controls: [TC-AVL-001, TC-AVL-004, TC-AVL-005, TC-AZ-001, TC-AZ-002, TC-AZ-003, TC-AZ-004, TC-CHG-001, TC-CHG-002, TC-CHG-003, TC-CHG-004, TC-CHG-005, TC-CHG-006, TC-DAT-001, TC-DAT-002, TC-DAT-003, TC-DAT-004, TC-IAM-001, TC-IAM-002, TC-IAM-004, TC-IAM-005, TC-IAM-006, TC-LOG-001, TC-LOG-002, TC-LOG-003, TC-LOG-004, TC-LOG-005, TC-MON-001, TC-PI-001, TC-PI-002, TC-PI-003, TC-PI-004, TC-PI-005, TC-PRV-001, TC-PRV-002, TC-TEN-001, TC-TEN-002, TC-TEN-003, TC-TEN-004, TC-VEN-001, TC-VEN-002, TC-VEN-003]
---

# Shared workflow action configuration service

## What the Service Owns

This service owns reusable action and workflow templates, calendars, declarations and automation configuration. Runtime execution belongs to each host; shared views make host-owned runs and timers available for inspection.

## Operations

The operation rows define the callable boundary, its access class, exact permission declarations and planning coverage. Configuration and operational administration are not published as intake captures. Public health and provider callbacks retain their declared access boundaries.

## Consistency and Failure

Registry replacement commits the complete manifest or retains the previous registry. A refused replacement changes no registry entries.

Publication locks the rule and draft, freezes the version and changes the current pointer atomically. A failed publish leaves the prior rule and draft intact.

Choosing a default calendar clears competing defaults within the same transaction. A failed edit retains the prior default selection.

Hosts load current configuration on their next read; already-computed timers retain their scheduled instants. Configuration edits do not reschedule existing timers.

## Events and Jobs

The declarations distinguish application events, incoming requests, queue work and direct host reads. These are different transport boundaries; registering a declaration does not by itself publish an application event.

## Open Questions

There is no connected workflow configuration screen in this scope. Cross-host view rebuilding omits hosts whose declared views are absent; inspection does not dynamically recover those rows. No scoped operation calls a language model.
