Editor

The canvas and the YAML are two faces of one FlowSpec. Editing the canvas emits canonical YAML; importing YAML renders the canvas. (Canvas editing is a placeholder; the YAML is real canonical output.)

Canvas

fetchstd.http.get@1
entry node
comparestd.expr@1
needs: fetch
notifystd.http.post@1
needs: compare
when ${{ steps.compare.output.value }}

Canonical YAML

flow: daily-price-watch
description: "Fetch a price, compare to a threshold, and notify on breach."
inputs:
  - name: symbol
    type: string
  - name: threshold
    type: number
  - name: webhook_url
    type: string
    secret: true
steps:
  - id: fetch
    use: "std.http.get@1"
    with:
      url: "${{ inputs.symbol }}"
  - id: compare
    use: "std.expr@1"
    with:
      value: "${{ steps.fetch.output.price > inputs.threshold }}"
    needs:
      - fetch
  - id: notify
    use: "std.http.post@1"
    with:
      body: "${{ steps.fetch.output }}"
      url: "${{ secret.webhook_url }}"
    needs:
      - compare
    when: "${{ steps.compare.output.value }}"
output: "${{ steps.compare.output.value }}"