canonical_id: "set"
display_name: "設定變數"
category: "logic"
version: "v1"
wasi_target: "preview1"
stability: "floating"
runtime_compat:
  - "cf-workers"
  - "workerd"
  - "wazero"
constraints:
  max_size_kb: 2048
  max_cold_start_ms: 50
  no_network_syscall: true
  no_filesystem_syscall: true
  io_model: "stdin_stdout_json"
input_schema:
  type: object
  properties:
    assignments:
      type: array
      description: 賦值清單，每筆含 key 與 value（與 values 擇一必填）
      items:
        type: object
        required: [key, value]
        properties:
          key:
            type: string
          value: {}
    values:
      type: object
      description: 鍵值對物件，與 assignments 擇一必填
    context:
      type: object
      description: 上游傳入的上下文，設定結果會合併覆寫
output_schema:
  type: object
  properties:
    success:
      type: boolean
    data:
      type: object
      description: context 加上所有設定後的變數
gherkin_tests:
  - scenario: "用 assignments 設定變數"
    given: '{"assignments":[{"key":"name","value":"Alice"}]}'
    then_contains: '"name":"Alice"'
  - scenario: "用 values 設定變數"
    given: '{"values":{"name":"Bob","age":30}}'
    then_contains: '"name":"Bob"'
  - scenario: "未提供 assignments 或 values 時失敗"
    given: '{"context":{"x":1}}'
    then_contains: '{"success":false'
tags: [builtin, set, assign, variable, context]
description: "設定或覆寫變數，支援 assignments 陣列或 values 物件兩種格式，結果合併自 context。"
config_example: |
  my_set:                                 # 節點名稱（可自訂）
    assignments:                          # 賦值清單（與 values 擇一必填）
      - key: status
        value: active
      - key: count
        value: 0
    context:                              # 上游上下文，設定結果會合併覆寫（選填）
      payload: "{{upstream.data}}"
