Inline external call without durable fallback

warningexternal-call-inline-without-durable-path

A service that calls a third party synchronously, with no queue or workflow engine attached, has nowhere to park the request when the third party is slow or down. The failure becomes the user's problem instead of a retried job.

Severity
warning
Selects
every node of kind app-server
Components in scope
99
What it checks

It looks at every node of kind app-server, and fires when:

  • — all of these hold:
  • — the node has at least one synchronous outgoing edge to a third-party-api
  • — this does not hold:
  • — the node has at least one connected edge joining a workflow-engine or queue
Message
Service '{{node.id}}' calls a third party inline with no queue or workflow engine to fall back to when that call fails.

{{node.id}} style paths are filled in from the node, the edge or the design the finding is about.

Applies to · 99 components
Tripped by · 12

Reference designs whose broken twin names this rule in its header. The gate reads the same header, and fails when a rule no design trips.

Source
# yaml-language-server: $schema=../schema/rule.schema.json
# A service that calls a third party synchronously and has no queue or workflow engine
# attached has nowhere to park the request when the third party is slow or down. The
# failure becomes the user's problem instead of a retried job.
# Tripped by: designs/doordash-delivery.broken.yaml
schemaVersion: "1"
type: "rule"
id: "external-call-inline-without-durable-path"
severity: "warning"
select:
  node:
    kind: "app-server"
when:
  all:
    - hasEdge:
        direction: "out"
        mode: "sync"
        peerKind: "third-party-api"
    - not:
        hasEdge:
          direction: "any"
          peerKind: ["workflow-engine", "queue"]
message: "Service '{{node.id}}' calls a third party inline with no queue or workflow engine to fall back to when that call fails."

The same page as markdown, for an agent: /catalogue/rules/external-call-inline-without-durable-path.md